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.
2+build --action_env=CC=clang
3+build --action_env=CXX=clang++
4+
5+# Define the --config=asan-libfuzzer configuration.
6+build:asan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine=@rules_fuzzing//fuzzing/engines:libfuzzer
7+build:asan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine_instrumentation=libfuzzer
8+build:asan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine_sanitizer=asan
.github/workflows/build.yaml+34−0
@@ -69,3 +69,37 @@ jobs: · 68 unmodified lines
6969 make clean -j `nproc`
7070 make -j `nproc`
7171 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
2121 *~
2222 *.bak
2323 /libfaad/faad2.pc
24+bazel-*
2425
2526 # Automake garbage created by bootstrap
2627 aclocal.m4
BUILD.bazel+50−0
@@ -0,0 +1,50 @@
1+load("@rules_fuzzing//fuzzing:cc_defs.bzl", "cc_fuzz_test")
2+
3+# Unless building for embedded systems all headers / functions should exist.
4+FAAD_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+
13+FAAD_SOURCES = glob([
14+ "libfaad/**/*.c",
15+ "libfaad/**/*.h",
16+])
17+
18+FAAD_FLAGS = [
19+ "-Wall",
20+ "-pedantic",
21+]
22+
23+DRM_AFFIX = ["", "_drm"]
24+DRM_DEFINES = [[], ["DRM_SUPPORT"]]
25+FIXED_AFFIX = ["", "_fixed"]
26+FIXED_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
39+cc_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
46+cc_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
4+cmake_minimum_required(VERSION 3.15)
5+
6+project(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).
12+get_directory_property(FAAD_PARENT_DIRECTORY PARENT_DIRECTORY)
13+if(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()
21+endif()
22+mark_as_advanced(FAAD_BUNDLED_MODE)
23+
24+include(GNUInstallDirs)
25+
26+if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
27+ set(CMAKE_MACOS_RPATH TRUE)
28+ set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
29+endif()
30+
31+# Extract version information
32+
33+file(STRINGS "libfaad/version.h" _faad_version_line REGEX "^#define PACKAGE_VERSION .+$")
34+string(REGEX REPLACE "^#define PACKAGE_VERSION \"(.+)\"" "\\1" FAAD_VERSION "${_faad_version_line}")
35+message(STATUS "FAAD PACKAGE_VERSION: ${FAAD_VERSION}")
36+mark_as_advanced(FAAD_VERSION)
37+
38+file(READ include/faad.h.in FAAD_H_SRC)
39+string(REGEX REPLACE "@VERSION@" "${FAAD_VERSION}" FAAD_H_SRC ${FAAD_H_SRC})
40+file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/include/faad.h ${FAAD_H_SRC})
41+
42+# Read sources list
43+
44+function(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})
50+endfunction()
51+
52+transform_sources_list("libfaad/sources.lst" "${CMAKE_CURRENT_BINARY_DIR}/sources.lst.cmake")
53+include("${CMAKE_CURRENT_BINARY_DIR}/sources.lst.cmake")
54+list(TRANSFORM LIBFAAD_SOURCES PREPEND "libfaad/")
55+mark_as_advanced(LIBFAAD_SOURCES)
56+
57+# Build
58+
59+# Lets stick to predefined config, until more flexibility is actually requested.
60+set(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+
69+set(FAAD_FLAGS
70+ -Wall
71+ -pedantic
72+)
73+
74+if(CMAKE_C_COMPILER_ID MATCHES "GNU")
75+ list(APPEND FAAD_FLAGS -ffloat-store)
76+endif() # GCC
77+
78+file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/include/neaacdec.h
79+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include)
80+
81+foreach(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+ )
95+endforeach()
96+
97+foreach(LIB in faad_drm faad_drm_fixed)
98+target_compile_definitions(faad_drm PRIVATE
99+ DRM_SUPPORT
100+)
101+endforeach()
102+
103+foreach(LIB in faad_fixed faad_drm_fixed)
104+target_compile_definitions(faad_drm PRIVATE
105+ FIXED_POINT
106+)
107+endforeach()
108+
109+# Generate a pkg-config files
110+
111+function(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)
152+endfunction(generate_pkg_config_path)
153+
154+function(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})
170+endfunction()
171+
172+transform_pc_file("libfaad/faad2.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/faad2.pc" "${FAAD_VERSION}")
173+
174+# Installation
175+
176+if(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+ )
193+endif() # FAAD_BUNDLED_MODE
WORKSPACE.bazel+16−0
@@ -0,0 +1,16 @@
1+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
2+
3+http_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+
10+load("@rules_fuzzing//fuzzing:repositories.bzl", "rules_fuzzing_dependencies")
11+
12+rules_fuzzing_dependencies()
13+
14+load("@rules_fuzzing//fuzzing:init.bzl", "rules_fuzzing_init")
15+
16+rules_fuzzing_init()
bootstrap+1−1
@@ -14,7 +14,7 @@ case $OSTYPE in · 13 unmodified lines
1414 ;;
1515 esac
1616
17−PACKAGE_VERSION=`sed -n 's/#define PACKAGE_VERSION //p' libfaad/version.h`
17+PACKAGE_VERSION=`sed "$SED_ERE" 's/#define PACKAGE_VERSION "(.+)"/\1/' libfaad/version.h`
1818 sed -i.bak "$SED_ERE" "s/^(AC_INIT.+)[0-9]+\.[0-9]+\.[0-9]+(.+)$/\1$PACKAGE_VERSION\2/" configure.ac
1919
2020 aclocal -I . && \
libfaad/Makefile.am+4−22
@@ -8,32 +8,14 @@ libfaad_la_LDFLAGS = -version-info 2:0:0 -no-undefined · 7 unmodified lines
88 libfaad_la_LIBADD = -lm
99 libfaad_la_CFLAGS = -fvisibility=hidden
1010
11−libfaad_la_SOURCES = bits.c cfft.c decoder.c drc.c \
12− drm_dec.c error.c filtbank.c \
13− ic_predict.c is.c lt_predict.c mdct.c mp4.c ms.c output.c pns.c \
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
11+include sources.lst
12+
13+libfaad_la_SOURCES = ${LIBFAAD_SOURCES}
3214
3315 libfaad_drm_la_LDFLAGS = ${libfaad_la_LDFLAGS}
3416 libfaad_drm_la_LIBADD = ${libfaad_la_LIBADD}
3517 libfaad_drm_la_CFLAGS = ${libfaad_la_CFLAGS} -DDRM_SUPPORT
36−libfaad_drm_la_SOURCES = ${libfaad_la_SOURCES}
18+libfaad_drm_la_SOURCES = ${LIBFAAD_SOURCES}
3719
3820 pkgconfigdir = $(libdir)/pkgconfig
3921 pkgconfig_DATA = faad2.pc
libfaad/sources.lst+100−0
@@ -0,0 +1,100 @@
1+# DRY: autotools and CMake should use the same sources list.
2+LIBFAAD_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.1
1+#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