History

Add CMake/Bazel build systems (#135)

Eugene Kliuchnikov committed 3 years ago

Commit 4e6b8cb1 parent 0c6c2b110 files · +408 −24Browse files

Unified · Split

10 files
  1. .bazelrc +8 −0
  2. .github/workflows/build.yaml +34 −0
  3. .gitignore +1 −0
  4. BUILD.bazel +50 −0
  5. CMakeLists.txt +193 −0
  6. WORKSPACE.bazel +16 −0
  7. bootstrap +1 −1
  8. libfaad/Makefile.am +4 −22
  9. libfaad/sources.lst +100 −0
  10. libfaad/version.h +1 −1
.bazelrc+8−0
@@ -0,0 +1,8 @@
1# Force the use of Clang for C++ builds.
2build --action_env=CC=clang
3build --action_env=CXX=clang++
4
5# Define the --config=asan-libfuzzer configuration.
6build:asan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine=@rules_fuzzing//fuzzing/engines:libfuzzer
7build:asan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine_instrumentation=libfuzzer
8build:asan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine_sanitizer=asan
.github/workflows/build.yaml+34−0
@@ -69,3 +69,37 @@ jobs: · 68 unmodified lines
69 make clean -j `nproc`69 make clean -j `nproc`
70 make -j `nproc`70 make -j `nproc`
71 make install-strip -j `nproc`71 make install-strip -j `nproc`
72
73 BuildWithBazel:
74 runs-on: ubuntu-latest
75
76 strategy:
77 fail-fast: false
78
79 steps:
80 - name: Checkout the source
81 uses: actions/checkout@v2
82 with:
83 submodules: false
84 fetch-depth: 1
85 - name: Configure and build
86 run: |
87 bazel build :all
88
89 BuildWithCMake:
90 runs-on: ubuntu-latest
91
92 strategy:
93 fail-fast: false
94
95 steps:
96 - name: Checkout the source
97 uses: actions/checkout@v2
98 with:
99 submodules: false
100 fetch-depth: 1
101 - name: Configure and build
102 run: |
103 cmake -B build . -DCMAKE_INSTALL_PREFIX=$RUNNER_TEMP/usrlocal
104 cmake --build build -j `nproc`
105 cmake --install build
.gitignore+1−0
@@ -21,6 +21,7 @@ project/msvc/intermediate/ · 20 unmodified lines
21*~21*~
22*.bak22*.bak
23/libfaad/faad2.pc23/libfaad/faad2.pc
24bazel-*
24 25
25# Automake garbage created by bootstrap26# Automake garbage created by bootstrap
26aclocal.m427aclocal.m4
BUILD.bazel+50−0
@@ -0,0 +1,50 @@
1load("@rules_fuzzing//fuzzing:cc_defs.bzl", "cc_fuzz_test")
2
3# Unless building for embedded systems all headers / functions should exist.
4FAAD_DEFINES = [
5 "HAVE_INTTYPES_H=1",
6 "HAVE_STRINGS_H=1",
7 "HAVE_SYS_STAT_H=1",
8 "HAVE_SYS_TYPES_H=1",
9 "HAVE_MEMCPY=1",
10 "STDC_HEADERS=1",
11]
12
13FAAD_SOURCES = glob([
14 "libfaad/**/*.c",
15 "libfaad/**/*.h",
16])
17
18FAAD_FLAGS = [
19 "-Wall",
20 "-pedantic",
21]
22
23DRM_AFFIX = ["", "_drm"]
24DRM_DEFINES = [[], ["DRM_SUPPORT"]]
25FIXED_AFFIX = ["", "_fixed"]
26FIXED_DEFINES = [[], ["FIXED_POINT"]]
27
28[cc_library(
29 name = "faad" + DRM_AFFIX[drm] + FIXED_AFFIX[fixed],
30 srcs = FAAD_SOURCES,
31 hdrs = ["include/neaacdec.h"],
32 copts = FAAD_FLAGS,
33 includes = ["libfaad"],
34 local_defines = FAAD_DEFINES + DRM_DEFINES[drm] + FIXED_DEFINES[fixed],
35 strip_include_prefix = "include",
36) for drm in range(2) for fixed in range(2)]
37
38# To start fuzzing run: bazel run --config=asan-libfuzzer //:fuzz_config_run
39cc_fuzz_test(
40 name = "fuzz_config",
41 srcs = ["fuzz/fuzz_config.c"],
42 deps = [":faad"],
43)
44
45# To start fuzzing run: bazel run --config=asan-libfuzzer //:fuzz_decode_run
46cc_fuzz_test(
47 name = "fuzz_decode",
48 srcs = ["fuzz/fuzz_decode.c"],
49 deps = [":faad"],
50)
CMakeLists.txt+193−0
@@ -0,0 +1,193 @@
1# Available CMake versions:
2# - Ubuntu 20.04 LTS : 3.16.3
3# - Solaris 11.4 SRU 15 : 3.15
4cmake_minimum_required(VERSION 3.15)
5
6project(LIBFAAD2 LANGUAGES C)
7
8# If FAAD is being bundled in another project, we don't want to
9# install anything. However, we want to let people override this, so
10# we'll use the FAAD_BUNDLED_MODE variable to let them do that; just
11# set it to OFF in your project before you add_subdirectory(faad2).
12get_directory_property(FAAD_PARENT_DIRECTORY PARENT_DIRECTORY)
13if(NOT DEFINED FAAD_BUNDLED_MODE)
14 # Bundled mode hasn't been set one way or the other, set the default
15 # depending on whether or not we are the top-level project.
16 if(FAAD_PARENT_DIRECTORY)
17 set(FAAD_BUNDLED_MODE ON)
18 else()
19 set(FAAD_BUNDLED_MODE OFF)
20 endif()
21endif()
22mark_as_advanced(FAAD_BUNDLED_MODE)
23
24include(GNUInstallDirs)
25
26if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
27 set(CMAKE_MACOS_RPATH TRUE)
28 set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
29endif()
30
31# Extract version information
32
33file(STRINGS "libfaad/version.h" _faad_version_line REGEX "^#define PACKAGE_VERSION .+$")
34string(REGEX REPLACE "^#define PACKAGE_VERSION \"(.+)\"" "\\1" FAAD_VERSION "${_faad_version_line}")
35message(STATUS "FAAD PACKAGE_VERSION: ${FAAD_VERSION}")
36mark_as_advanced(FAAD_VERSION)
37
38file(READ include/faad.h.in FAAD_H_SRC)
39string(REGEX REPLACE "@VERSION@" "${FAAD_VERSION}" FAAD_H_SRC ${FAAD_H_SRC})
40file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/include/faad.h ${FAAD_H_SRC})
41
42# Read sources list
43
44function(transform_sources_list INPUT_FILE OUTPUT_FILE)
45 file(READ ${INPUT_FILE} TEXT)
46 string(REGEX REPLACE "\\\\\n" "~continuation~" TEXT ${TEXT})
47 string(REGEX REPLACE "([a-zA-Z_][a-zA-Z0-9_]*)[\t ]*=[\t ]*([^\n]*)" "SET(\\1 \\2)" TEXT ${TEXT})
48 string(REPLACE "~continuation~" "\n" TEXT ${TEXT})
49 file(WRITE ${OUTPUT_FILE} ${TEXT})
50endfunction()
51
52transform_sources_list("libfaad/sources.lst" "${CMAKE_CURRENT_BINARY_DIR}/sources.lst.cmake")
53include("${CMAKE_CURRENT_BINARY_DIR}/sources.lst.cmake")
54list(TRANSFORM LIBFAAD_SOURCES PREPEND "libfaad/")
55mark_as_advanced(LIBFAAD_SOURCES)
56
57# Build
58
59# Lets stick to predefined config, until more flexibility is actually requested.
60set(FAAD_DEFINES
61 HAVE_INTTYPES_H=1
62 HAVE_STRINGS_H=1
63 HAVE_SYS_STAT_H=1
64 HAVE_SYS_TYPES_H=1
65 HAVE_MEMCPY=1
66 STDC_HEADERS=1
67)
68
69set(FAAD_FLAGS
70 -Wall
71 -pedantic
72)
73
74if(CMAKE_C_COMPILER_ID MATCHES "GNU")
75 list(APPEND FAAD_FLAGS -ffloat-store)
76endif() # GCC
77
78file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/include/neaacdec.h
79 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include)
80
81foreach(LIB in faad faad_drm faad_fixed faad_drm_fixed)
82 add_library(${LIB} ${LIBFAAD_SOURCES})
83 target_include_directories(${LIB} PUBLIC
84 ${CMAKE_CURRENT_BINARY_DIR}/include
85 )
86 target_include_directories(${LIB} PRIVATE
87 libfaad
88 )
89 target_compile_definitions(${LIB} PRIVATE
90 ${FAAD_DEFINES}
91 )
92 target_compile_options(${LIB} PRIVATE
93 ${FAAD_FLAGS}
94 )
95endforeach()
96
97foreach(LIB in faad_drm faad_drm_fixed)
98target_compile_definitions(faad_drm PRIVATE
99 DRM_SUPPORT
100)
101endforeach()
102
103foreach(LIB in faad_fixed faad_drm_fixed)
104target_compile_definitions(faad_drm PRIVATE
105 FIXED_POINT
106)
107endforeach()
108
109# Generate a pkg-config files
110
111function(generate_pkg_config_path outvar path)
112 string(LENGTH "${path}" path_length)
113
114 set(path_args ${ARGV})
115 list(REMOVE_AT path_args 0 1)
116 list(LENGTH path_args path_args_remaining)
117
118 set("${outvar}" "${path}")
119
120 while(path_args_remaining GREATER 1)
121 list(GET path_args 0 name)
122 list(GET path_args 1 value)
123
124 get_filename_component(value_full "${value}" ABSOLUTE)
125 string(LENGTH "${value}" value_length)
126
127 if(path_length EQUAL value_length AND path STREQUAL value)
128 set("${outvar}" "\${${name}}")
129 break()
130 elseif(path_length GREATER value_length)
131 # We might be in a subdirectory of the value, but we have to be
132 # careful about a prefix matching but not being a subdirectory
133 # (for example, /usr/lib64 is not a subdirectory of /usr/lib).
134 # We'll do this by making sure the next character is a directory
135 # separator.
136 string(SUBSTRING "${path}" ${value_length} 1 sep)
137 if(sep STREQUAL "/")
138 string(SUBSTRING "${path}" 0 ${value_length} s)
139 if(s STREQUAL value)
140 string(SUBSTRING "${path}" "${value_length}" -1 suffix)
141 set("${outvar}" "\${${name}}${suffix}")
142 break()
143 endif()
144 endif()
145 endif()
146
147 list(REMOVE_AT path_args 0 1)
148 list(LENGTH path_args path_args_remaining)
149 endwhile()
150
151 set("${outvar}" "${${outvar}}" PARENT_SCOPE)
152endfunction(generate_pkg_config_path)
153
154function(transform_pc_file INPUT_FILE OUTPUT_FILE VERSION)
155 file(READ ${INPUT_FILE} TEXT)
156
157 set(PREFIX "${CMAKE_INSTALL_PREFIX}")
158 string(REGEX REPLACE "@prefix@" "${PREFIX}" TEXT ${TEXT})
159 string(REGEX REPLACE "@exec_prefix@" "\${prefix}" TEXT ${TEXT})
160
161 generate_pkg_config_path(LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}" exec_prefix "${PREFIX}")
162 string(REGEX REPLACE "@libdir@" "${LIBDIR}" TEXT ${TEXT})
163
164 generate_pkg_config_path(INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}" prefix "${PREFIX}")
165 string(REGEX REPLACE "@includedir@" "${INCLUDEDIR}" TEXT ${TEXT})
166
167 string(REGEX REPLACE "@VERSION@" "${VERSION}" TEXT ${TEXT})
168
169 file(WRITE ${OUTPUT_FILE} ${TEXT})
170endfunction()
171
172transform_pc_file("libfaad/faad2.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/faad2.pc" "${FAAD_VERSION}")
173
174# Installation
175
176if(NOT FAAD_BUNDLED_MODE)
177 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/faad2.pc"
178 DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
179
180 install(
181 TARGETS faad faad_drm
182 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
183 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
184 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
185 )
186
187 # exclude faad.h.in
188 install(
189 FILES ${CMAKE_CURRENT_BINARY_DIR}/include/faad.h
190 FILES ${CMAKE_CURRENT_BINARY_DIR}/include/neaacdec.h
191 DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
192 )
193endif() # FAAD_BUNDLED_MODE
WORKSPACE.bazel+16−0
@@ -0,0 +1,16 @@
1load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
2
3http_archive(
4 name = "rules_fuzzing",
5 sha256 = "d9002dd3cd6437017f08593124fdd1b13b3473c7b929ceb0e60d317cb9346118",
6 strip_prefix = "rules_fuzzing-0.3.2",
7 urls = ["https://github.com/bazelbuild/rules_fuzzing/archive/v0.3.2.zip"],
8)
9
10load("@rules_fuzzing//fuzzing:repositories.bzl", "rules_fuzzing_dependencies")
11
12rules_fuzzing_dependencies()
13
14load("@rules_fuzzing//fuzzing:init.bzl", "rules_fuzzing_init")
15
16rules_fuzzing_init()
bootstrap+1−1
@@ -14,7 +14,7 @@ case $OSTYPE in · 13 unmodified lines
14 ;;14 ;;
15esac15esac
16 16
17PACKAGE_VERSION=`sed -n 's/#define PACKAGE_VERSION //p' libfaad/version.h`17PACKAGE_VERSION=`sed "$SED_ERE" 's/#define PACKAGE_VERSION "(.+)"/\1/' libfaad/version.h`
18sed -i.bak "$SED_ERE" "s/^(AC_INIT.+)[0-9]+\.[0-9]+\.[0-9]+(.+)$/\1$PACKAGE_VERSION\2/" configure.ac18sed -i.bak "$SED_ERE" "s/^(AC_INIT.+)[0-9]+\.[0-9]+\.[0-9]+(.+)$/\1$PACKAGE_VERSION\2/" configure.ac
19 19
20aclocal -I . && \20aclocal -I . && \
libfaad/Makefile.am+4−22
@@ -8,32 +8,14 @@ libfaad_la_LDFLAGS = -version-info 2:0:0 -no-undefined · 7 unmodified lines
8libfaad_la_LIBADD = -lm8libfaad_la_LIBADD = -lm
9libfaad_la_CFLAGS = -fvisibility=hidden9libfaad_la_CFLAGS = -fvisibility=hidden
10 10
11libfaad_la_SOURCES = bits.c cfft.c decoder.c drc.c \11include sources.lst
12 drm_dec.c error.c filtbank.c \12
13 ic_predict.c is.c lt_predict.c mdct.c mp4.c ms.c output.c pns.c \13libfaad_la_SOURCES = ${LIBFAAD_SOURCES}
14 ps_dec.c ps_syntax.c \
15 pulse.c specrec.c syntax.c tns.c hcr.c huffman.c \
16 rvlc.c ssr.c ssr_fb.c ssr_ipqf.c common.c \
17 sbr_dct.c sbr_e_nf.c sbr_fbt.c sbr_hfadj.c sbr_hfgen.c \
18 sbr_huff.c sbr_qmf.c sbr_syntax.c sbr_tf_grid.c sbr_dec.c \
19 analysis.h bits.h cfft.h cfft_tab.h common.h \
20 drc.h drm_dec.h error.h fixed.h filtbank.h \
21 huffman.h ic_predict.h iq_table.h is.h kbd_win.h lt_predict.h \
22 mdct.h mdct_tab.h mp4.h ms.h output.h pns.h ps_dec.h ps_tables.h \
23 pulse.h rvlc.h \
24 sbr_dct.h sbr_dec.h sbr_e_nf.h sbr_fbt.h sbr_hfadj.h sbr_hfgen.h \
25 sbr_huff.h sbr_noise.h sbr_qmf.h sbr_syntax.h sbr_tf_grid.h \
26 sine_win.h specrec.h ssr.h ssr_fb.h ssr_ipqf.h \
27 ssr_win.h syntax.h structs.h tns.h \
28 sbr_qmf_c.h codebook/hcb.h \
29 codebook/hcb_1.h codebook/hcb_2.h codebook/hcb_3.h codebook/hcb_4.h \
30 codebook/hcb_5.h codebook/hcb_6.h codebook/hcb_7.h codebook/hcb_8.h \
31 codebook/hcb_9.h codebook/hcb_10.h codebook/hcb_11.h codebook/hcb_sf.h
32 14
33libfaad_drm_la_LDFLAGS = ${libfaad_la_LDFLAGS}15libfaad_drm_la_LDFLAGS = ${libfaad_la_LDFLAGS}
34libfaad_drm_la_LIBADD = ${libfaad_la_LIBADD}16libfaad_drm_la_LIBADD = ${libfaad_la_LIBADD}
35libfaad_drm_la_CFLAGS = ${libfaad_la_CFLAGS} -DDRM_SUPPORT17libfaad_drm_la_CFLAGS = ${libfaad_la_CFLAGS} -DDRM_SUPPORT
36libfaad_drm_la_SOURCES = ${libfaad_la_SOURCES}18libfaad_drm_la_SOURCES = ${LIBFAAD_SOURCES}
37 19
38pkgconfigdir = $(libdir)/pkgconfig20pkgconfigdir = $(libdir)/pkgconfig
39pkgconfig_DATA = faad2.pc21pkgconfig_DATA = faad2.pc
libfaad/sources.lst+100−0
@@ -0,0 +1,100 @@
1# DRY: autotools and CMake should use the same sources list.
2LIBFAAD_SOURCES = \
3 analysis.h \
4 bits.c \
5 bits.h \
6 cfft_tab.h \
7 cfft.c \
8 cfft.h \
9 codebook/hcb_1.h \
10 codebook/hcb_10.h \
11 codebook/hcb_11.h \
12 codebook/hcb_2.h \
13 codebook/hcb_3.h \
14 codebook/hcb_4.h \
15 codebook/hcb_5.h \
16 codebook/hcb_6.h \
17 codebook/hcb_7.h \
18 codebook/hcb_8.h \
19 codebook/hcb_9.h \
20 codebook/hcb_sf.h \
21 codebook/hcb.h \
22 common.c \
23 common.h \
24 decoder.c \
25 drc.c \
26 drc.h \
27 drm_dec.c \
28 drm_dec.h \
29 error.c \
30 error.h \
31 filtbank.c \
32 filtbank.h \
33 fixed.h \
34 hcr.c \
35 huffman.c \
36 huffman.h \
37 ic_predict.c \
38 ic_predict.h \
39 iq_table.h \
40 is.c \
41 is.h \
42 kbd_win.h \
43 lt_predict.c \
44 lt_predict.h \
45 mdct_tab.h \
46 mdct.c \
47 mdct.h \
48 mp4.c \
49 mp4.h \
50 ms.c \
51 ms.h \
52 output.c \
53 output.h \
54 pns.c \
55 pns.h \
56 ps_dec.c \
57 ps_dec.h \
58 ps_syntax.c \
59 ps_tables.h \
60 pulse.c \
61 pulse.h \
62 rvlc.c \
63 rvlc.h \
64 sbr_dct.c \
65 sbr_dct.h \
66 sbr_dec.c \
67 sbr_dec.h \
68 sbr_e_nf.c \
69 sbr_e_nf.h \
70 sbr_fbt.c \
71 sbr_fbt.h \
72 sbr_hfadj.c \
73 sbr_hfadj.h \
74 sbr_hfgen.c \
75 sbr_hfgen.h \
76 sbr_huff.c \
77 sbr_huff.h \
78 sbr_noise.h \
79 sbr_qmf_c.h \
80 sbr_qmf.c \
81 sbr_qmf.h \
82 sbr_syntax.c \
83 sbr_syntax.h \
84 sbr_tf_grid.c \
85 sbr_tf_grid.h \
86 sine_win.h \
87 specrec.c \
88 specrec.h \
89 ssr_fb.c \
90 ssr_fb.h \
91 ssr_ipqf.c \
92 ssr_ipqf.h \
93 ssr_win.h \
94 ssr.c \
95 ssr.h \
96 structs.h \
97 syntax.c \
98 syntax.h \
99 tns.c \
100 tns.h
libfaad/version.h+1−1
@@ -1 +1 @@
1#define PACKAGE_VERSION 2.10.11#define PACKAGE_VERSION "2.10.1"

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t