aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmake/modules/FindFFMPEG.cmake308
-rw-r--r--cmake/modules/FindGnuTLS.cmake (renamed from tools/depends/target/ffmpeg/FindGnuTls.cmake)2
-rw-r--r--cmake/modules/FindNASM.cmake30
-rw-r--r--tools/depends/target/ffmpeg/CMakeLists.txt77
4 files changed, 236 insertions, 181 deletions
diff --git a/cmake/modules/FindFFMPEG.cmake b/cmake/modules/FindFFMPEG.cmake
index b07adba153..341eb4a89c 100644
--- a/cmake/modules/FindFFMPEG.cmake
+++ b/cmake/modules/FindFFMPEG.cmake
@@ -32,15 +32,110 @@
# --------
#
-# required ffmpeg library versions
-set(REQUIRED_FFMPEG_VERSION 4.4.1)
-set(_avcodec_ver ">=58.134.100")
-set(_avfilter_ver ">=7.110.100")
-set(_avformat_ver ">=58.76.100")
-set(_avutil_ver ">=56.70.100")
-set(_swscale_ver ">=5.9.100")
-set(_swresample_ver ">=3.9.100")
-set(_postproc_ver ">=55.9.100")
+# Macro to build internal FFmpeg
+# Refactoring to a macro allows simple fallthrough callback if system ffmpeg failure
+macro(buildFFMPEG)
+ include(ExternalProject)
+ include(cmake/scripts/common/ModuleHelpers.cmake)
+
+ get_archive_name(ffmpeg)
+
+ # allow user to override the download URL with a local tarball
+ # needed for offline build envs
+ if(FFMPEG_URL)
+ get_filename_component(FFMPEG_URL "${FFMPEG_URL}" ABSOLUTE)
+ else()
+ # github tarball format is tagname.tar.gz (eg 4.4-N-Alpha1.tar.gz)
+ # tagname is our FFMPEG_VER from VERSION file.
+ set(FFMPEG_URL ${FFMPEG_BASE_URL}/archive/${FFMPEG_VER}.tar.gz)
+ endif()
+ if(VERBOSE)
+ message(STATUS "FFMPEG_URL: ${FFMPEG_URL}")
+ endif()
+
+ if (NOT DAV1D_FOUND)
+ message(STATUS "dav1d not found, internal ffmpeg build will be missing AV1 support!")
+ endif()
+
+ set(FFMPEG_OPTIONS -DENABLE_CCACHE=${ENABLE_CCACHE}
+ -DCCACHE_PROGRAM=${CCACHE_PROGRAM}
+ -DENABLE_VAAPI=${ENABLE_VAAPI}
+ -DENABLE_VDPAU=${ENABLE_VDPAU}
+ -DENABLE_DAV1D=${DAV1D_FOUND}
+ -DEXTRA_FLAGS=${FFMPEG_EXTRA_FLAGS})
+
+ if(KODI_DEPENDSBUILD)
+ set(CROSS_ARGS -DDEPENDS_PATH=${DEPENDS_PATH}
+ -DPKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}
+ -DCROSSCOMPILING=${CMAKE_CROSSCOMPILING}
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+ -DOS=${OS}
+ -DCMAKE_AR=${CMAKE_AR})
+ endif()
+ set(LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
+ list(APPEND LINKER_FLAGS ${SYSTEM_LDFLAGS})
+
+ externalproject_add(ffmpeg
+ URL ${FFMPEG_URL}
+ URL_HASH ${FFMPEG_HASH}
+ DOWNLOAD_NAME ${FFMPEG_ARCHIVE}
+ DOWNLOAD_DIR ${TARBALL_DIR}
+ PREFIX ${CORE_BUILD_DIR}/ffmpeg
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+ -DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}
+ -DFFMPEG_VER=${FFMPEG_VER}
+ -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME}
+ -DCORE_PLATFORM_NAME=${CORE_PLATFORM_NAME_LC}
+ -DCPU=${CPU}
+ -DENABLE_NEON=${ENABLE_NEON}
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ -DENABLE_CCACHE=${ENABLE_CCACHE}
+ -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
+ -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
+ -DCMAKE_EXE_LINKER_FLAGS=${LINKER_FLAGS}
+ ${CROSS_ARGS}
+ ${FFMPEG_OPTIONS}
+ -DPKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig
+ PATCH_COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_SOURCE_DIR}/tools/depends/target/ffmpeg/CMakeLists.txt
+ <SOURCE_DIR>)
+
+ if (ENABLE_INTERNAL_DAV1D)
+ add_dependencies(ffmpeg dav1d)
+ endif()
+
+ find_program(BASH_COMMAND bash)
+ if(NOT BASH_COMMAND)
+ message(FATAL_ERROR "Internal FFmpeg requires bash.")
+ endif()
+ file(WRITE ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg/ffmpeg-link-wrapper
+"#!${BASH_COMMAND}
+if [[ $@ == *${APP_NAME_LC}.bin* || $@ == *${APP_NAME_LC}${APP_BINARY_SUFFIX}* || $@ == *${APP_NAME_LC}.so* || $@ == *${APP_NAME_LC}-test* ]]
+then
+ avformat=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavcodec`
+ avcodec=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavformat`
+ avfilter=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavfilter`
+ avutil=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavutil`
+ swscale=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswscale`
+ swresample=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswresample`
+ gnutls=`PKG_CONFIG_PATH=${DEPENDS_PATH}/lib/pkgconfig/ ${PKG_CONFIG_EXECUTABLE} --libs-only-l --static --silence-errors gnutls`
+ $@ $avcodec $avformat $avcodec $avfilter $swscale $swresample -lpostproc $gnutls
+else
+ $@
+fi")
+ file(COPY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg/ffmpeg-link-wrapper
+ DESTINATION ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
+ FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE)
+ 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)
+ set(FFMPEG_CREATE_SHARED_LIBRARY "${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg-link-wrapper <CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>" PARENT_SCOPE)
+ set(FFMPEG_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include)
+ set(FFMPEG_DEFINITIONS -DUSE_STATIC_FFMPEG=1)
+ set(FFMPEG_FOUND 1)
+ set_target_properties(ffmpeg PROPERTIES FOLDER "External Projects")
+endmacro()
+
# Allows building with external ffmpeg not found in system paths,
# without library version checks
@@ -48,13 +143,16 @@ if(WITH_FFMPEG)
set(FFMPEG_PATH ${WITH_FFMPEG})
message(STATUS "Warning: FFmpeg version checking disabled")
set(REQUIRED_FFMPEG_VERSION undef)
- unset(_avcodec_ver)
- unset(_avfilter_ver)
- unset(_avformat_ver)
- unset(_avutil_ver)
- unset(_swscale_ver)
- unset(_swresample_ver)
- unset(_postproc_ver)
+else()
+ # required ffmpeg library versions
+ set(REQUIRED_FFMPEG_VERSION 4.4.1)
+ set(_avcodec_ver ">=58.134.100")
+ set(_avfilter_ver ">=7.110.100")
+ set(_avformat_ver ">=58.76.100")
+ set(_avutil_ver ">=56.70.100")
+ set(_postproc_ver ">=55.9.100")
+ set(_swresample_ver ">=3.9.100")
+ set(_swscale_ver ">=5.9.100")
endif()
# Allows building with external ffmpeg not found in system paths,
@@ -63,8 +161,10 @@ if(FFMPEG_PATH)
set(ENABLE_INTERNAL_FFMPEG OFF)
endif()
-# external FFMPEG
-if(NOT ENABLE_INTERNAL_FFMPEG OR KODI_DEPENDSBUILD)
+if(ENABLE_INTERNAL_FFMPEG)
+ buildFFMPEG()
+else()
+ # external FFMPEG
if(FFMPEG_PATH)
list(APPEND CMAKE_PREFIX_PATH ${FFMPEG_PATH})
endif()
@@ -165,153 +265,49 @@ if(NOT ENABLE_INTERNAL_FFMPEG OR KODI_DEPENDSBUILD)
FFMPEG_VERSION
FAIL_MESSAGE "FFmpeg ${REQUIRED_FFMPEG_VERSION} not found, please consider using -DENABLE_INTERNAL_FFMPEG=ON")
+ if(FFMPEG_FOUND)
+ set(FFMPEG_LDFLAGS ${PC_FFMPEG_LDFLAGS} CACHE STRING "ffmpeg linker flags")
+
+ set(FFMPEG_LIBRARIES ${FFMPEG_LIBAVCODEC} ${FFMPEG_LIBAVFILTER}
+ ${FFMPEG_LIBAVFORMAT} ${FFMPEG_LIBAVUTIL}
+ ${FFMPEG_LIBSWSCALE} ${FFMPEG_LIBSWRESAMPLE}
+ ${FFMPEG_LIBPOSTPROC} ${FFMPEG_LDFLAGS})
+
+ # check if ffmpeg libs are statically linked
+ set(FFMPEG_LIB_TYPE SHARED)
+ foreach(_fflib IN LISTS FFMPEG_LIBRARIES)
+ if(${_fflib} MATCHES ".+\.a$" AND PC_FFMPEG_STATIC_LDFLAGS)
+ set(FFMPEG_LDFLAGS ${PC_FFMPEG_STATIC_LDFLAGS} CACHE STRING "ffmpeg linker flags" FORCE)
+ set(FFMPEG_LIB_TYPE STATIC)
+ break()
+ endif()
+ endforeach()
+ endif()
else()
- message(STATUS "FFmpeg ${REQUIRED_FFMPEG_VERSION} not found, falling back to internal build")
- unset(FFMPEG_INCLUDE_DIRS)
- unset(FFMPEG_INCLUDE_DIRS CACHE)
- unset(FFMPEG_LIBRARIES)
- unset(FFMPEG_LIBRARIES CACHE)
- unset(FFMPEG_DEFINITIONS)
- unset(FFMPEG_DEFINITIONS CACHE)
- endif()
-
- if(FFMPEG_FOUND)
- set(FFMPEG_LDFLAGS ${PC_FFMPEG_LDFLAGS} CACHE STRING "ffmpeg linker flags")
-
- # check if ffmpeg libs are statically linked
- set(FFMPEG_LIB_TYPE SHARED)
- foreach(_fflib IN LISTS FFMPEG_LIBRARIES)
- if(${_fflib} MATCHES ".+\.a$" AND PC_FFMPEG_STATIC_LDFLAGS)
- set(FFMPEG_LDFLAGS ${PC_FFMPEG_STATIC_LDFLAGS} CACHE STRING "ffmpeg linker flags" FORCE)
- set(FFMPEG_LIB_TYPE STATIC)
- break()
- endif()
- endforeach()
-
- set(FFMPEG_LIBRARIES ${FFMPEG_LIBAVCODEC} ${FFMPEG_LIBAVFILTER}
- ${FFMPEG_LIBAVFORMAT} ${FFMPEG_LIBAVUTIL}
- ${FFMPEG_LIBSWSCALE} ${FFMPEG_LIBSWRESAMPLE}
- ${FFMPEG_LIBPOSTPROC} ${FFMPEG_LDFLAGS})
- list(APPEND FFMPEG_DEFINITIONS -DFFMPEG_VER_SHA=\"${FFMPEG_VERSION}\")
-
- if(NOT TARGET ffmpeg)
- add_library(ffmpeg ${FFMPEG_LIB_TYPE} IMPORTED)
- set_target_properties(ffmpeg PROPERTIES
- FOLDER "External Projects"
- IMPORTED_LOCATION "${FFMPEG_LIBRARIES}"
- INTERFACE_INCLUDE_DIRECTORIES "${FFMPEG_INCLUDE_DIRS}"
- INTERFACE_LINK_LIBRARIES "${FFMPEG_LDFLAGS}"
- INTERFACE_COMPILE_DEFINITIONS "${FFMPEG_DEFINITIONS}")
+ if(FFMPEG_PATH)
+ message(FATAL_ERROR "FFmpeg not found, please consider using -DENABLE_INTERNAL_FFMPEG=ON")
+ else()
+ message(STATUS "FFmpeg ${REQUIRED_FFMPEG_VERSION} not found, falling back to internal build")
+ buildFFMPEG()
endif()
endif()
endif()
-# Internal FFMPEG
-if(NOT FFMPEG_FOUND)
- include(ExternalProject)
- include(cmake/scripts/common/ModuleHelpers.cmake)
+if(FFMPEG_FOUND)
- get_archive_name(ffmpeg)
+ list(APPEND FFMPEG_DEFINITIONS -DFFMPEG_VER_SHA=\"${FFMPEG_VERSION}\")
- # allow user to override the download URL with a local tarball
- # needed for offline build envs
- if(FFMPEG_URL)
- get_filename_component(FFMPEG_URL "${FFMPEG_URL}" ABSOLUTE)
- else()
- # github tarball format is tagname.tar.gz (eg 4.4-N-Alpha1.tar.gz)
- # tagname is our FFMPEG_VER from VERSION file.
- set(FFMPEG_URL ${FFMPEG_BASE_URL}/archive/${FFMPEG_VER}.tar.gz)
- endif()
- if(VERBOSE)
- message(STATUS "FFMPEG_URL: ${FFMPEG_URL}")
- endif()
-
- if (NOT DAV1D_FOUND)
- message(STATUS "dav1d not found, internal ffmpeg build will be missing AV1 support!")
+ if(NOT TARGET ffmpeg)
+ add_library(ffmpeg ${FFMPEG_LIB_TYPE} IMPORTED)
+ set_target_properties(ffmpeg PROPERTIES
+ FOLDER "External Projects"
+ IMPORTED_LOCATION "${FFMPEG_LIBRARIES}"
+ INTERFACE_INCLUDE_DIRECTORIES "${FFMPEG_INCLUDE_DIRS}"
+ INTERFACE_LINK_LIBRARIES "${FFMPEG_LDFLAGS}"
+ INTERFACE_COMPILE_DEFINITIONS "${FFMPEG_DEFINITIONS}")
endif()
- set(FFMPEG_OPTIONS -DENABLE_CCACHE=${ENABLE_CCACHE}
- -DCCACHE_PROGRAM=${CCACHE_PROGRAM}
- -DENABLE_VAAPI=${ENABLE_VAAPI}
- -DENABLE_VDPAU=${ENABLE_VDPAU}
- -DENABLE_DAV1D=${DAV1D_FOUND}
- -DEXTRA_FLAGS=${FFMPEG_EXTRA_FLAGS})
-
- if(KODI_DEPENDSBUILD)
- set(CROSS_ARGS -DDEPENDS_PATH=${DEPENDS_PATH}
- -DPKG_CONFIG_EXECUTABLE=${PKG_CONFIG_EXECUTABLE}
- -DCROSSCOMPILING=${CMAKE_CROSSCOMPILING}
- -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
- -DOS=${OS}
- -DCMAKE_AR=${CMAKE_AR})
- endif()
- set(LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
- list(APPEND LINKER_FLAGS ${SYSTEM_LDFLAGS})
-
- externalproject_add(ffmpeg
- URL ${FFMPEG_URL}
- URL_HASH ${FFMPEG_HASH}
- DOWNLOAD_NAME ${FFMPEG_ARCHIVE}
- DOWNLOAD_DIR ${TARBALL_DIR}
- PREFIX ${CORE_BUILD_DIR}/ffmpeg
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
- -DFFMPEG_VER=${FFMPEG_VER}
- -DCORE_SYSTEM_NAME=${CORE_SYSTEM_NAME}
- -DCORE_PLATFORM_NAME=${CORE_PLATFORM_NAME_LC}
- -DCPU=${CPU}
- -DENABLE_NEON=${ENABLE_NEON}
- -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
- -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
- -DENABLE_CCACHE=${ENABLE_CCACHE}
- -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
- -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
- -DCMAKE_EXE_LINKER_FLAGS=${LINKER_FLAGS}
- ${CROSS_ARGS}
- ${FFMPEG_OPTIONS}
- -DPKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig
- PATCH_COMMAND ${CMAKE_COMMAND} -E copy
- ${CMAKE_SOURCE_DIR}/tools/depends/target/ffmpeg/CMakeLists.txt
- <SOURCE_DIR> &&
- ${CMAKE_COMMAND} -E copy
- ${CMAKE_SOURCE_DIR}/tools/depends/target/ffmpeg/FindGnuTls.cmake
- <SOURCE_DIR>)
-
- if (ENABLE_INTERNAL_DAV1D)
- add_dependencies(ffmpeg dav1d)
- endif()
-
- find_program(BASH_COMMAND bash)
- if(NOT BASH_COMMAND)
- message(FATAL_ERROR "Internal FFmpeg requires bash.")
- endif()
- file(WRITE ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg/ffmpeg-link-wrapper
-"#!${BASH_COMMAND}
-if [[ $@ == *${APP_NAME_LC}.bin* || $@ == *${APP_NAME_LC}${APP_BINARY_SUFFIX}* || $@ == *${APP_NAME_LC}.so* || $@ == *${APP_NAME_LC}-test* ]]
-then
- avformat=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavcodec`
- avcodec=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavformat`
- avfilter=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavfilter`
- avutil=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libavutil`
- swscale=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswscale`
- swresample=`PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/lib/pkgconfig ${PKG_CONFIG_EXECUTABLE} --libs --static libswresample`
- gnutls=`PKG_CONFIG_PATH=${DEPENDS_PATH}/lib/pkgconfig/ ${PKG_CONFIG_EXECUTABLE} --libs-only-l --static --silence-errors gnutls`
- $@ $avcodec $avformat $avcodec $avfilter $swscale $swresample -lpostproc $gnutls
-else
- $@
-fi")
- file(COPY ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg/ffmpeg-link-wrapper
- DESTINATION ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
- FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE)
- 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)
- set(FFMPEG_CREATE_SHARED_LIBRARY "${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/ffmpeg-link-wrapper <CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>" PARENT_SCOPE)
- set(FFMPEG_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include)
- list(APPEND FFMPEG_DEFINITIONS -DFFMPEG_VER_SHA=\"${FFMPEG_VER}\"
- -DUSE_STATIC_FFMPEG=1)
- set(FFMPEG_FOUND 1)
- set_target_properties(ffmpeg PROPERTIES FOLDER "External Projects")
+ set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP ffmpeg)
endif()
-set_property(GLOBAL APPEND PROPERTY INTERNAL_DEPS_PROP ffmpeg)
-
mark_as_advanced(FFMPEG_INCLUDE_DIRS FFMPEG_LIBRARIES FFMPEG_LDFLAGS FFMPEG_DEFINITIONS FFMPEG_FOUND)
diff --git a/tools/depends/target/ffmpeg/FindGnuTls.cmake b/cmake/modules/FindGnuTLS.cmake
index 68c35d6b7e..62e3ea7a88 100644
--- a/tools/depends/target/ffmpeg/FindGnuTls.cmake
+++ b/cmake/modules/FindGnuTLS.cmake
@@ -18,7 +18,7 @@ if(NOT GNUTLS_FOUND)
endif()
include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(GnuTls DEFAULT_MSG GNUTLS_INCLUDE_DIRS GNUTLS_LIBRARIES)
+find_package_handle_standard_args(GnuTLS DEFAULT_MSG GNUTLS_INCLUDE_DIRS GNUTLS_LIBRARIES)
if(GNUTLS_FOUND)
list(APPEND GNUTLS_DEFINITIONS -DHAVE_GNUTLS=1)
diff --git a/cmake/modules/FindNASM.cmake b/cmake/modules/FindNASM.cmake
new file mode 100644
index 0000000000..fc9daa0768
--- /dev/null
+++ b/cmake/modules/FindNASM.cmake
@@ -0,0 +1,30 @@
+#.rst:
+# FindNASM
+# ----------
+# Finds nasm executable
+#
+# This will define the following variables::
+#
+# NASM_EXECUTABLE - nasm executable
+
+include(FindPackageHandleStandardArgs)
+
+find_program(NASM_EXECUTABLE nasm)
+
+if(NASM_EXECUTABLE)
+ execute_process(COMMAND ${NASM_EXECUTABLE} -version
+ OUTPUT_VARIABLE nasm_version
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(nasm_version MATCHES "^NASM version ([0-9\\.]*)")
+ set(NASM_VERSION_STRING "${CMAKE_MATCH_1}")
+ endif()
+endif()
+
+# Provide standardized success/failure messages
+find_package_handle_standard_args(NASM
+ REQUIRED_VARS NASM_EXECUTABLE
+ VERSION_VAR NASM_VERSION_STRING)
+
+mark_as_advanced(NASM_EXECUTABLE)
diff --git a/tools/depends/target/ffmpeg/CMakeLists.txt b/tools/depends/target/ffmpeg/CMakeLists.txt
index f05c54a823..94689abb88 100644
--- a/tools/depends/target/ffmpeg/CMakeLists.txt
+++ b/tools/depends/target/ffmpeg/CMakeLists.txt
@@ -2,22 +2,41 @@ project(ffmpeg)
cmake_minimum_required(VERSION 2.8)
-list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
-
if(ENABLE_CCACHE AND CCACHE_PROGRAM)
- set(ffmpeg_conf "--cc=${CCACHE_PROGRAM} ${CMAKE_C_COMPILER}" "--cxx=${CCACHE_PROGRAM} ${CMAKE_CXX_COMPILER}")
+ set(ffmpeg_conf "--cc=${CCACHE_PROGRAM} ${CMAKE_C_COMPILER}"
+ "--cxx=${CCACHE_PROGRAM} ${CMAKE_CXX_COMPILER}"
+ )
else()
- set(ffmpeg_conf --cc=${CMAKE_C_COMPILER} --cxx=${CMAKE_CXX_COMPILER})
+ set(ffmpeg_conf --cc=${CMAKE_C_COMPILER}
+ --cxx=${CMAKE_CXX_COMPILER}
+ )
endif()
if(CROSSCOMPILING)
set(pkgconf "PKG_CONFIG_LIBDIR=${DEPENDS_PATH}/lib/pkgconfig")
- list(APPEND ffmpeg_conf --pkg-config=${PKG_CONFIG_EXECUTABLE} --pkg-config-flags=--static)
- list(APPEND ffmpeg_conf --enable-cross-compile --cpu=${CPU} --arch=${CPU} --target-os=${OS})
- list(APPEND ffmpeg_conf --ar=${CMAKE_AR} --strip=${CMAKE_STRIP})
+ list(APPEND ffmpeg_conf --pkg-config=${PKG_CONFIG_EXECUTABLE}
+ --pkg-config-flags=--static
+ --enable-cross-compile
+ --enable-pic
+ --ar=${CMAKE_AR}
+ --strip=${CMAKE_STRIP}
+ )
+
message(STATUS "CROSS: ${ffmpeg_conf}")
endif()
+set(CONFIGARCH --arch=${CPU})
+
+list(APPEND ffmpeg_conf --disable-doc
+ --disable-devices
+ --disable-programs
+ --disable-sdl2
+ --enable-gpl
+ --enable-postproc
+ --enable-runtime-cpudetect
+ --enable-pthreads
+ )
+
if(CMAKE_C_FLAGS)
list(APPEND ffmpeg_conf --extra-cflags=${CMAKE_C_FLAGS})
endif()
@@ -39,7 +58,9 @@ if(CMAKE_BUILD_TYPE STREQUAL Release)
endif()
if(CORE_SYSTEM_NAME STREQUAL linux OR CORE_SYSTEM_NAME STREQUAL freebsd)
- list(APPEND ffmpeg_conf --enable-pic)
+ list(APPEND ffmpeg_conf --enable-pic
+ --target-os=linux
+ )
if(ENABLE_VAAPI)
list(APPEND ffmpeg_conf --enable-vaapi)
else()
@@ -51,36 +72,49 @@ if(CORE_SYSTEM_NAME STREQUAL linux OR CORE_SYSTEM_NAME STREQUAL freebsd)
list(APPEND ffmpeg_conf --disable-vdpau)
endif()
elseif(CORE_SYSTEM_NAME STREQUAL android)
+ list(APPEND ffmpeg_conf --target-os=android
+ --extra-libs=-liconv
+ --disable-linux-perf
+ )
if(CPU MATCHES arm64)
- list(APPEND ffmpeg_conf --cpu=cortex-a53 --arch=aarch64)
+ set(CONFIGARCH --arch=aarch64)
+ list(APPEND ffmpeg_conf --cpu=cortex-a53)
elseif(CPU MATCHES arm)
list(APPEND ffmpeg_conf --cpu=cortex-a9)
elseif(CPU MATCHES x86_64)
- list(APPEND ffmpeg_conf --cpu=x86_64 --enable-pic)
+ list(APPEND ffmpeg_conf --cpu=x86_64)
else()
list(APPEND ffmpeg_conf --cpu=i686 --disable-mmx)
endif()
- list(APPEND ffmpeg_conf --target-os=linux --extra-libs=-liconv --disable-linux-perf)
elseif(CORE_SYSTEM_NAME STREQUAL darwin_embedded)
- list(APPEND ffmpeg_conf --disable-crystalhd --enable-videotoolbox
- --target-os=darwin)
+ list(APPEND ffmpeg_conf --disable-crystalhd
+ --enable-videotoolbox
+ --target-os=darwin
+ --disable-securetransport
+ )
elseif(CORE_SYSTEM_NAME STREQUAL osx)
- list(APPEND ffmpeg_conf --disable-crystalhd --enable-videotoolbox
+ list(APPEND ffmpeg_conf --disable-crystalhd
+ --enable-videotoolbox
--target-os=darwin
- --disable-securetransport)
+ )
endif()
if(CPU MATCHES arm)
- list(APPEND ffmpeg_conf --enable-pic --disable-armv5te --disable-armv6t2)
+ list(APPEND ffmpeg_conf --disable-armv5te --disable-armv6t2)
elseif(CPU MATCHES mips)
list(APPEND ffmpeg_conf --disable-mips32r2 --disable-mipsdsp --disable-mipsdspr2)
endif()
-find_package(GnuTls)
+find_package(GnuTLS)
if(GNUTLS_FOUND)
list(APPEND ffmpeg_conf --enable-gnutls)
endif()
+if(CPU MATCHES x86 OR CPU MATCHES x86_64)
+ find_package(NASM REQUIRED)
+ list(APPEND ffmpeg_conf --x86asmexe=${NASM_EXECUTABLE})
+endif()
+
if(ENABLE_DAV1D)
list(APPEND ffmpeg_conf --enable-libdav1d)
set(pkgconf_path "PKG_CONFIG_PATH=${PKG_CONFIG_PATH}")
@@ -92,6 +126,8 @@ if(EXTRA_FLAGS)
list(APPEND ffmpeg_conf ${EXTRA_FLAGS})
endif()
+list(APPEND ffmpeg_conf ${CONFIGARCH})
+
message(STATUS "FFMPEG_CONF: ${ffmpeg_conf}")
set(MAKE_COMMAND $(MAKE))
@@ -110,13 +146,6 @@ externalproject_add(ffmpeg
CONFIGURE_COMMAND ${pkgconf} ${pkgconf_path} <SOURCE_DIR>/configure
--prefix=${CMAKE_INSTALL_PREFIX}
--extra-version="kodi-${FFMPEG_VER}"
- --disable-devices
- --disable-doc
- --disable-programs
- --enable-gpl
- --enable-runtime-cpudetect
- --enable-postproc
- --enable-pthreads
${ffmpeg_conf}
BUILD_COMMAND ${MAKE_COMMAND})