diff options
Diffstat (limited to 'project/cmake/modules/FindFFMPEG.cmake')
| -rw-r--r-- | project/cmake/modules/FindFFMPEG.cmake | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/project/cmake/modules/FindFFMPEG.cmake b/project/cmake/modules/FindFFMPEG.cmake new file mode 100644 index 0000000..711845a --- /dev/null +++ b/project/cmake/modules/FindFFMPEG.cmake | |||
| @@ -0,0 +1,99 @@ | |||
| 1 | include(ExternalProject) | ||
| 2 | file(STRINGS ${CORE_SOURCE_DIR}/tools/depends/target/ffmpeg/FFMPEG-VERSION VER) | ||
| 3 | string(REGEX MATCH "VERSION=[^ ]*$.*" FFMPEG_VER "${VER}") | ||
| 4 | list(GET FFMPEG_VER 0 FFMPEG_VER) | ||
| 5 | string(SUBSTRING "${FFMPEG_VER}" 8 -1 FFMPEG_VER) | ||
| 6 | string(REGEX MATCH "BASE_URL=([^ ]*)" FFMPEG_BASE_URL "${VER}") | ||
| 7 | list(GET FFMPEG_BASE_URL 0 FFMPEG_BASE_URL) | ||
| 8 | string(SUBSTRING "${FFMPEG_BASE_URL}" 9 -1 FFMPEG_BASE_URL) | ||
| 9 | |||
| 10 | |||
| 11 | if(ENABLE_INTERNAL_FFMPEG) | ||
| 12 | if(FFMPEG_PATH) | ||
| 13 | message(WARNING "Internal FFmpeg enabled, but FFMPEG_PATH given, ignoring") | ||
| 14 | endif() | ||
| 15 | if(CMAKE_CROSSCOMPILING) | ||
| 16 | set(CROSS_ARGS -DDEPENDS_PATH=${DEPENDS_PATH} | ||
| 17 | -DPKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE} | ||
| 18 | -DCROSSCOMPILING=${CMAKE_CROSSCOMPILING} | ||
| 19 | -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} | ||
| 20 | -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME} | ||
| 21 | -DCPU=${WITH_CPU} | ||
| 22 | -DOS=${OS} | ||
| 23 | -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} | ||
| 24 | -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} | ||
| 25 | -DCMAKE_AR=${CMAKE_AR} | ||
| 26 | -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} | ||
| 27 | -DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}) | ||
| 28 | endif() | ||
| 29 | |||
| 30 | externalproject_add(ffmpeg | ||
| 31 | URL ${FFMPEG_BASE_URL}/${FFMPEG_VER}.tar.gz | ||
| 32 | PREFIX ${CORE_BUILD_DIR}/ffmpeg | ||
| 33 | CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} | ||
| 34 | -DCMAKE_BUILD_TYPE=${DCMAKE_BUILD_TYPE} | ||
| 35 | -DFFMPEG_VER=${FFMPEG_VER} | ||
| 36 | -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME} | ||
| 37 | ${CROSS_ARGS} | ||
| 38 | PATCH_COMMAND ${CMAKE_COMMAND} -E copy | ||
| 39 | ${CORE_SOURCE_DIR}/tools/depends/target/ffmpeg/CMakeLists.txt | ||
| 40 | <SOURCE_DIR> && | ||
| 41 | ${CMAKE_COMMAND} -E copy | ||
| 42 | ${CORE_SOURCE_DIR}/tools/depends/target/ffmpeg/FindGnuTls.cmake | ||
| 43 | <SOURCE_DIR>) | ||
| 44 | |||
| 45 | file(WRITE ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg/ffmpeg-link-wrapper | ||
| 46 | "#!/bin/bash | ||
| 47 | if [[ $@ == *${APP_NAME_LC}.bin* || $@ == *${APP_NAME_LC}-test* ]] | ||
| 48 | then | ||
| 49 | avformat=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavcodec` | ||
| 50 | avcodec=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavformat` | ||
| 51 | avfilter=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavfilter` | ||
| 52 | avutil=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavutil` | ||
| 53 | swscale=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswscale` | ||
| 54 | swresample=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswresample` | ||
| 55 | gnutls=`PKG_CONFIG_PATH=${DEPENDS_PATH}/lib/pkgconfig/ ${PKG_CONFIG_EXECUTABLE} --libs-only-l --static --silence-errors gnutls` | ||
| 56 | vorbisenc=`PKG_CONFIG_PATH=${DEPENDS_PATH}/lib/pkgconfig/ ${PKG_CONFIG_EXECUTABLE} --libs-only-l --static --silence-errors vorbisenc` | ||
| 57 | dcadec=`PKG_CONFIG_PATH=${DEPENDS_PATH}/lib/pkgconfig/ ${PKG_CONFIG_EXECUTABLE} --libs-only-l --static --silence-errors dcadec` | ||
| 58 | $@ $avcodec $avformat $avcodec $avfilter $swscale $swresample -lpostproc $gnutls $vorbisenc $dcadec | ||
| 59 | else | ||
| 60 | $@ | ||
| 61 | fi") | ||
| 62 | file(COPY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg/ffmpeg-link-wrapper | ||
| 63 | DESTINATION ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} | ||
| 64 | FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE) | ||
| 65 | set(FFMPEG_LINK_EXECUTABLE "${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg-link-wrapper <CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>" PARENT_SCOPE) | ||
| 66 | set(FFMPEG_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include) | ||
| 67 | list(APPEND FFMPEG_DEFINITIONS -DFFMPEG_VER_SHA=\"${FFMPEG_VER}\" | ||
| 68 | -DUSE_STATIC_FFMPEG=1) | ||
| 69 | set(FFMPEG_FOUND 1) | ||
| 70 | else() | ||
| 71 | if(FFMPEG_PATH) | ||
| 72 | set(ENV{PKG_CONFIG_PATH} "${FFMPEG_PATH}/lib/pkgconfig") | ||
| 73 | endif() | ||
| 74 | set(FFMPEG_PKGS libavcodec>=56.26.100 libavfilter>=5.11.100 libavformat>=56.25.101 | ||
| 75 | libavutil>=54.20.100 libswscale>=3.1.101 libswresample>=1.1.100 libpostproc>=53.3.100) | ||
| 76 | if(PKG_CONFIG_FOUND) | ||
| 77 | pkg_check_modules (FFMPEG ${FFMPEG_PKGS}) | ||
| 78 | string(REGEX REPLACE "framework;" "framework " FFMPEG_LDFLAGS "${FFMPEG_LDFLAGS}") | ||
| 79 | set(FFMPEG_LIBRARIES ${FFMPEG_LDFLAGS}) | ||
| 80 | else() | ||
| 81 | find_path(FFMPEG_INCLUDE_DIRS libavcodec/avcodec.h PATH_SUFFIXES ffmpeg) | ||
| 82 | find_library(FFMPEG_LIBAVCODEC NAMES avcodec libavcodec PATH_SUFFIXES ffmpeg/libavcodec) | ||
| 83 | find_library(FFMPEG_LIBAVFILTER NAMES avfilter libavfilter PATH_SUFFIXES ffmpeg/libavfilter) | ||
| 84 | find_library(FFMPEG_LIBAVFORMAT NAMES avformat libavformat PATH_SUFFIXES ffmpeg/libavformat) | ||
| 85 | find_library(FFMPEG_LIBAVUTIL NAMES avutil libavutil PATH_SUFFIXES ffmpeg/libavutil) | ||
| 86 | find_library(FFMPEG_LIBSWSCALE NAMES swscale libswscale PATH_SUFFIXES ffmpeg/libswscale) | ||
| 87 | find_library(FFMPEG_LIBPOSTPROC NAMES postproc libpostproc PATH_SUFFIXES ffmpeg/libpostproc) | ||
| 88 | set(FFMPEG_LIBRARIES ${FFMPEG_LIBAVCODEC} ${FFMPEG_LIBAVFILTER} ${FFMPEG_LIBAVFORMAT} | ||
| 89 | ${FFMPEG_LIBAVUTIL} ${FFMPEG_LIBSWSCALE} ${FFMPEG_LIBPOSTPROC}) | ||
| 90 | add_custom_target(ffmpeg DEPENDS ${FFMPEG_LIBRARIES}) | ||
| 91 | endif() | ||
| 92 | |||
| 93 | include(FindPackageHandleStandardArgs) | ||
| 94 | find_package_handle_standard_args(FFMPEG DEFAULT_MSG FFMPEG_INCLUDE_DIRS FFMPEG_LIBRARIES) | ||
| 95 | set(FFMPEG_FOUND 1) | ||
| 96 | list(APPEND FFMPEG_DEFINITIONS -DFFMPEG_VER_SHA=\"${FFMPEG_VER}\") | ||
| 97 | endif() | ||
| 98 | |||
| 99 | mark_as_advanced(FFMPEG_INCLUDE_DIRS FFMPEG_LIBRARIES FFMPEG_DEFINITIONS FFMPEG_FOUND) | ||
