1+ cmake_minimum_required (VERSION 3.10 )
2+ project (LagrangeCodec)
3+
4+ set (CMAKE_CXX_STANDARD 20)
5+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS } -Wall -O3" )
6+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } " )
7+ set (CMAKE_C_COMPILE gcc)
8+ set (CMAKE_CXX_COMPILER g++)
9+
10+ include (ProcessorCount )
11+ include (FetchContent )
12+
13+ set (ENV{http_proxy} "http://127.0.0.1:7890" )
14+ set (ENV{https_proxy} "http://127.0.0.1:7890" )
15+
16+ # Download ffmpeg source code
17+
18+ FetchContent_Declare (
19+ ffmpeg_fetch
20+ GIT_REPOSITORY "https://github.com/FFmpeg/FFmpeg.git"
21+ GIT_TAG "n4.1"
22+ GIT_SHALLOW TRUE
23+ GIT_PROGRESS TRUE
24+ )
25+
26+ FetchContent_MakeAvailable (ffmpeg_fetch)
27+ message (STATUS "FFmpeg source code will be downloaded to: ${ffmpeg_fetch_SOURCE_DIR } " )
28+
29+ # Download silk source code
30+
31+ FetchContent_Declare (
32+ silk_fetch
33+ GIT_REPOSITORY "https://github.com/ploverlake/silk.git"
34+ GIT_SHALLOW TRUE
35+ GIT_PROGRESS TRUE
36+ )
37+
38+ FetchContent_MakeAvailable (silk_fetch)
39+ message (STATUS "SILK source code will be downloaded to: ${silk_fetch_SOURCE_DIR } " )
40+
41+ # Prepare FFmpeg build
42+
43+ find_program (MAKE_EXECUTABLE
44+ NAMES gmake make nmake
45+ DOC "make executable"
46+ REQUIRED
47+ )
48+
49+ find_package (PkgConfig )
50+
51+ if (PKG_CONFIG_FOUND)
52+ list (JOIN PKG_CONFIG_ARGN " " pkg_config_flags)
53+ set (pkgconfig_opts
54+ "--pkg-config=${PKG_CONFIG_EXECUTABLE} "
55+ "--pkg-config-flags=${pkg_config_flags} " )
56+ else ()
57+ unset (pkgconfig_opts)
58+ endif ()
59+
60+ set (shared_opts
61+ --disable-shared
62+ --enable-static
63+ )
64+
65+ set (size_opts --enable-small)
66+ set (postfix_opts
67+ "--progs-suffix=${CMAKE_${BT} _POSTFIX}"
68+ "--build-suffix=${CMAKE_${BT} _POSTFIX}" )
69+ set (pic_opts --enable-pic)
70+
71+ # Configure FFmpeg build
72+
73+ ProcessorCount (numCores )
74+
75+ set (ffmpeg_build_dir ${CMAKE_BINARY_DIR } /ffmpeg_build)
76+ set (ffmpeg_install_dir ${CMAKE_BINARY_DIR } /ffmpeg_install)
77+ file (MAKE_DIRECTORY ${ffmpeg_build_dir} )
78+ file (MAKE_DIRECTORY ${ffmpeg_install_dir} )
79+
80+ set (ffmpeg_configure_cmd
81+ ${ffmpeg_fetch_SOURCE_DIR } /configure
82+
83+ --disable-programs
84+
85+ ${shared_opts}
86+ ${pkgconfig_opts}
87+ ${size_opts}
88+ ${pic_opts}
89+ ${lto_opts}
90+ ${postfix_opts}
91+
92+ "--strip=${CMAKE_STRIP} "
93+ "--extra-cflags=${CMAKE_C_FLAGS_${BT} }"
94+ "--optflags=${CMAKE_C_FLAGS_RELEASE } "
95+ "--cxx=${CMAKE_CXX_COMPILER } "
96+ "--extra-cxxflags=${CMAKE_CXX_FLAGS_${BT} }"
97+ "--objcc=${CMAKE_OBJC_COMPILER} "
98+ "--extra-objcflags=${CMAKE_OBJC_FLAGS_${BT} }"
99+ )
100+
101+ set (ffmpeg_make_cmd
102+ ${MAKE_EXECUTABLE}
103+ -j${numCores}
104+ )
105+
106+ # Build FFmpeg
107+
108+ execute_process (
109+ COMMAND ${ffmpeg_configure_cmd}
110+ WORKING_DIRECTORY ${ffmpeg_build_dir}
111+ )
112+
113+ execute_process (
114+ COMMAND ${ffmpeg_make_cmd}
115+ WORKING_DIRECTORY ${ffmpeg_build_dir}
116+ )
117+
118+ include_directories (
119+ ${ffmpeg_fetch_SOURCE_DIR }
120+ ${ffmpeg_build_dir}
121+ )
122+
123+ # Including SILK
124+
125+ include_directories (
126+ ${silk_fetch_SOURCE_DIR } /src/SILK_SDK_SRC_ARM_v1.0.9/interface/
127+ ${silk_fetch_SOURCE_DIR } /src/SILK_SDK_SRC_ARM_v1.0.9/src/
128+ )
129+
130+ file (GLOB SILK_SRC
131+ ${silk_fetch_SOURCE_DIR } /src/SILK_SDK_SRC_ARM_v1.0.9/src/*.c
132+ )
133+
134+ # Shared Library Definition
135+
136+ include_directories (
137+ ${CMAKE_CURRENT_SOURCE_DIR }
138+ )
139+
140+ file (GLOB SOURCE_FILES "./src/*.cpp" )
141+
142+ add_library (${PROJECT_NAME } SHARED
143+ ${SOURCE_FILES}
144+ ${SILK_SRC}
145+ )
146+
147+ target_link_libraries (${PROJECT_NAME }
148+ ${ffmpeg_build_dir} /libavcodec/libavcodec.a
149+ ${ffmpeg_build_dir} /libavformat/libavformat.a
150+ ${ffmpeg_build_dir} /libavutil/libavutil.a
151+ ${ffmpeg_build_dir} /libswresample/libswresample.a
152+ ${ffmpeg_build_dir} /libswscale/libswscale.a
153+ )
154+
155+ if (APPLE )
156+ find_library (VIDEO_TOOLBOX VideoToolbox )
157+ find_library (CORE_FOUNDATION CoreFoundation )
158+ find_library (CORE_MEDIA CoreMedia )
159+ find_library (BZ2 bz2 )
160+ find_library (CORE_VIDEO CoreVideo )
161+ find_library (ZLIB z )
162+ find_library (AUDIO_TOOLBOX AudioToolbox )
163+ find_library (ICONV iconv )
164+
165+ target_link_libraries (${PROJECT_NAME }
166+ ${VIDEO_TOOLBOX}
167+ ${CORE_FOUNDATION}
168+ ${CORE_MEDIA}
169+ ${BZ2}
170+ ${CORE_VIDEO}
171+ ${SECURITY}
172+ ${ZLIB}
173+ ${AUDIO_TOOLBOX}
174+ ${ICONV}
175+ )
176+ elseif (WIN32 )
177+ elseif (LINUX )
178+ endif ()
0 commit comments