Commit 027b6b8f authored by NzSN's avatar NzSN

Restruct project.

parent 85a4a2d1
......@@ -8,118 +8,17 @@ option(DEBUG "Only enable during development" OFF)
option(STATICLIB "Generate Static Library" OFF)
option(EMCC "Run in WASM environment" OFF)
set(SRCs ${CMAKE_SOURCE_DIR}/src)
set(LIB ${CMAKE_SOURCE_DIR}/lib)
# Basics
include_directories(PUBLIC ${CMAKE_SOURCE_DIR}/src)
if(NOT EMCC)
include_directories(SYSTEM BEFORE
PRIVATE ${LIB}/include)
set(LIBAV libav)
ExternalProject_Add(
libav
GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg.git
GIT_TAG n4.3.3
PREFIX ${PROJECT_SOURCE_DIR}/lib/.build/${LIBAV}
CONFIGURE_COMMAND ../${LIBAV}/configure --disable-x86asm --enable-libx264 --enable-debug --extra-cflags=-g
--extra-ldflags=-g --enable-gpl --shlibdir=${PROJECT_SOURCE_DIR}/lib/
--disable-ffmpeg --disable-ffprobe --disable-ffplay --prefix=${PROJECT_SOURCE_DIR}/lib/
--enable-shared
BUILD_COMMAND make -j
INSTALL_COMMAND make install
UPDATE_COMMAND ""
)
endif()
set(SRC_FILES
${SRCs}/streamContext.c
${SRCs}/proto.c
${SRCs}/basic/container/list.c
${SRCs}/MovMem/mm.c)
if (STATICLIB)
add_library(ffmpegprotos STATIC ${SRC_FILES})
else()
add_library(ffmpegprotos SHARED ${SRC_FILES})
target_link_libraries(ffmpegprotos
avformat avcodec avdevice avfilter avutil
swresample swscale postproc z x264 lzma)
endif()
install(TARGETS ffmpegprotos
DESTINATION ${CMAKE_INSTALL_LIBDIR})
add_subdirectory(src)
if(DEBUG)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
find_program( MEMORYCHECK_COMMAND valgrind )
include(CTest)
enable_testing()
find_program( MEMORYCHECK_COMMAND valgrind )
include(CTest)
set(VALGRIND_OPTS --leak-check=full --show-leak-kinds=all --track-origins=yes
--log-file=log.txt --error-exitcode=1)
enable_testing()
# Tests
function(link_to_ffmpeg target)
target_link_libraries(${target}
${CMAKE_SOURCE_DIR}/lib/lib/libavformat.a
${CMAKE_SOURCE_DIR}/lib/lib/libavcodec.a
${CMAKE_SOURCE_DIR}/lib/lib/libavdevice.a
${CMAKE_SOURCE_DIR}/lib/lib/libavfilter.a
${CMAKE_SOURCE_DIR}/lib/lib/libavutil.a
${CMAKE_SOURCE_DIR}/lib/lib/libswresample.a
${CMAKE_SOURCE_DIR}/lib/lib/libswscale.a
${CMAKE_SOURCE_DIR}/lib/lib/libpostproc.a)
target_link_libraries(${target} z)
target_link_libraries(${target} x264)
target_link_libraries(${target} lzma)
target_link_libraries(${target} pthread)
target_link_libraries(${target} m)
endfunction()
function(add_test_with_ffmpeg target)
add_executable(${target} ${CMAKE_SOURCE_DIR}/tests/main.c ${ARGN})
add_dependencies(${target} libav)
link_to_ffmpeg(${target})
add_test(NAME ${target}
COMMAND ${target})
endfunction()
function(add_test_raw target)
add_executable(${target} ${Tests}/main.c ${ARGN})
add_test(NAME ${target} COMMAND ${target})
endfunction()
set(Tests ${CMAKE_SOURCE_DIR}/tests)
# TestCases
add_test_raw(ListTestCases ${SRCs}/basic/container/list.c ${Tests}/listTestCases.c)
add_test_with_ffmpeg(FFmpegProtoTestCases
${SRCs}/basic/container/list.c
${SRCs}/proto.c
${Tests}/protoTestCases.c)
add_custom_command(TARGET FFmpegProtoTestCases PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/resources/ $<TARGET_FILE_DIR:FFmpegProtoTestCases>/resources)
add_test_with_ffmpeg(MovMemProtoTestCases
${SRCs}/basic/utils.c
${SRCs}/basic/container/list.c
${SRCs}/proto.c
${SRCs}/MovMem/mm.c
${Tests}/mmTestCases.c)
add_test_with_ffmpeg(StreamContextTestCases
${SRCs}/basic/utils.c
${SRCs}/basic/container/list.c
${SRCs}/proto.c
${SRCs}/MovMem/mm.c
${SRCs}/streamContext.c
${Tests}/streamContextTestCases.c)
add_subdirectory(tests)
endif()
set(SRCs
streamContext.c
proto.c
basic/container/list.c
MovMem/mm.c
basic/utils.c)
if(NOT EMCC)
include_directories(SYSTEM BEFORE
PRIVATE ${LIB}/include)
set(LIBAV libav)
ExternalProject_Add(
libav
GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg.git
GIT_TAG n4.3.3
PREFIX ${PROJECT_SOURCE_DIR}/lib/.build/${LIBAV}
CONFIGURE_COMMAND ../${LIBAV}/configure --disable-x86asm --enable-libx264 --enable-debug --extra-cflags=-g
--extra-ldflags=-g --enable-gpl --shlibdir=${PROJECT_SOURCE_DIR}/lib/
--disable-ffmpeg --disable-ffprobe --disable-ffplay --prefix=${PROJECT_SOURCE_DIR}/lib/
--enable-shared
BUILD_COMMAND make -j
INSTALL_COMMAND make install
UPDATE_COMMAND ""
)
add_library(protos SHARED ${SRCs})
target_link_libraries(protos
avformat avcodec avdevice avfilter avutil
swresample swscale postproc z x264 lzma)
target_include_directories(protos PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
else()
add_library(protos STATIC ${SRCs})
endif()
install(TARGETS protos
DESTINATION ${CMAKE_INSTALL_LIBDIR})
# Tests
function(link_to_ffmpeg target)
target_link_libraries(${target}
${CMAKE_SOURCE_DIR}/lib/lib/libavformat.a
${CMAKE_SOURCE_DIR}/lib/lib/libavcodec.a
${CMAKE_SOURCE_DIR}/lib/lib/libavdevice.a
${CMAKE_SOURCE_DIR}/lib/lib/libavfilter.a
${CMAKE_SOURCE_DIR}/lib/lib/libavutil.a
${CMAKE_SOURCE_DIR}/lib/lib/libswresample.a
${CMAKE_SOURCE_DIR}/lib/lib/libswscale.a
${CMAKE_SOURCE_DIR}/lib/lib/libpostproc.a)
target_link_libraries(${target} z)
target_link_libraries(${target} x264)
target_link_libraries(${target} lzma)
target_link_libraries(${target} pthread)
target_link_libraries(${target} m)
endfunction()
function(add_test_with_ffmpeg target)
add_executable(${target} ${CMAKE_CURRENT_SOURCE_DIR}/main.c ${ARGN})
add_dependencies(${target} libav)
link_to_ffmpeg(${target})
target_link_libraries(${target} protos)
add_test(NAME ${target}
COMMAND ${target})
endfunction()
function(add_test_raw target)
add_executable(${target} ${CMAKE_CURRENT_SOURCE_DIR}/main.c ${ARGN})
target_link_libraries(${target} protos)
add_test(NAME ${target} COMMAND ${target})
endfunction()
set(Tests ${CMAKE_SOURCE_DIR}/tests)
# TestCases
add_test_raw(ListTestCases ${Tests}/listTestCases.c)
add_test_with_ffmpeg(FFmpegProtoTestCases ${Tests}/protoTestCases.c)
add_custom_command(TARGET FFmpegProtoTestCases PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/resources/ $<TARGET_FILE_DIR:FFmpegProtoTestCases>/resources)
add_test_with_ffmpeg(MovMemProtoTestCases ${Tests}/mmTestCases.c)
add_test_with_ffmpeg(StreamContextTestCases ${Tests}/streamContextTestCases.c)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment