From 2ccf9addc9a309cde61509908a3211a7efed347f Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 28 Sep 2026 14:38:09 +0000 Subject: [PATCH] 2026-09-28 14:38:09 Signed-off-by: lizzie --- externals/ffmpeg/CMakeLists.txt | 371 ++++++++++++++++---------------- 1 file changed, 184 insertions(+), 187 deletions(-) diff --git a/externals/ffmpeg/CMakeLists.txt b/externals/ffmpeg/CMakeLists.txt index 30582265b8..406caa43b5 100644 --- a/externals/ffmpeg/CMakeLists.txt +++ b/externals/ffmpeg/CMakeLists.txt @@ -11,125 +11,149 @@ set(FFmpeg_HWACCEL_LDFLAGS) if (NOT YUZU_USE_BUNDLED_FFMPEG) set(FFmpeg_CROSS_COMPILE_FLAGS "") - if (ANDROID) + if (CMAKE_CROSSCOMPILING) + message(STATUS "ffmpeg: Enabling cross compilation ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") # TODO: Maybe use CMAKE_SYSROOT? and probably provide a toolchain file for android # I mean isn't that the "proper" way anyways? - string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" FFmpeg_HOST_SYSTEM_NAME) - set(TOOLCHAIN "${ANDROID_NDK}/toolchains/llvm/prebuilt/${FFmpeg_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}") - set(SYSROOT "${TOOLCHAIN}/sysroot") - set(FFmpeg_CPU "armv8-a") - list(APPEND FFmpeg_CROSS_COMPILE_FLAGS - --enable-cross-compile - --arch=arm64 - #--cpu=${FFmpeg_CPU} - --cross-prefix="${TOOLCHAIN}/bin/aarch64-linux-android-" - --sysroot="${SYSROOT}" - --target-os=android - --extra-ldflags="--ld-path=${TOOLCHAIN}/bin/ld.lld" - --extra-ldflags="-nostdlib" - ) - set(FFmpeg_IS_CROSS_COMPILING TRUE) - # User attempts to do a FFmpeg cross compilation because... - # Here we just quickly test against host/system processors not matching - # TODO: Test for versions not matching as well? - elseif (NOT (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES CMAKE_SYSTEM_PROCESSOR - AND CMAKE_HOST_SYSTEM_NAME MATCHES CMAKE_SYSTEM_NAME)) - string(TOLOWER "${CMAKE_SYSTEM_NAME}" FFmpeg_SYSTEM_NAME) - # systems FFmpeg natively supports - if (NOT (NETBSD OR SOLARIS OR FREEBSD - OR OPENBSD OR DRAGONFLYBSD OR HAIKU - OR LINUX OR MSYS OR WIN32 OR ANDROID OR APPLE)) - set(FFmpeg_SYSTEM_NAME "none") - endif() - # TODO: Can we really do better? Auto-detection? Something clever? - list(APPEND FFmpeg_CROSS_COMPILE_FLAGS - --enable-cross-compile - --arch="${CMAKE_SYSTEM_PROCESSOR}" - --target-os="${FFmpeg_SYSTEM_NAME}" - --sysroot="${CMAKE_SYSROOT}" - ) - if (DEFINED FFmpeg_CROSS_PREFIX) - list(APPEND FFmpeg_CROSS_COMPILE_FLAGS --cross-prefix="${FFmpeg_CROSS_PREFIX}") + if (ANDROID) + string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" FFmpeg_HOST_SYSTEM_NAME) + set(TOOLCHAIN "${ANDROID_NDK}/toolchains/llvm/prebuilt/${FFmpeg_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}") + set(SYSROOT "${TOOLCHAIN}/sysroot") + set(FFmpeg_CPU "armv8-a") + list(APPEND FFmpeg_CROSS_COMPILE_FLAGS + --enable-cross-compile + --arch=arm64 + #--cpu=${FFmpeg_CPU} + --cross-prefix="${TOOLCHAIN}/bin/aarch64-linux-android-" + --sysroot="${SYSROOT}" + --target-os=android + --extra-ldflags="--ld-path=${TOOLCHAIN}/bin/ld.lld" + --extra-ldflags="-nostdlib") + set(FFmpeg_IS_CROSS_COMPILING TRUE) else() - message(WARNING "Please set FFmpeg_CROSS_PREFIX to your cross toolchain prefix, for example: \${CMAKE_STAGING_PREFIX}/bin/${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM_NAME}-") + string(TOLOWER "${CMAKE_SYSTEM_NAME}" FFmpeg_SYSTEM_NAME) + # systems FFmpeg natively supports + if (NOT (NETBSD OR SOLARIS OR FREEBSD + OR OPENBSD OR DRAGONFLYBSD OR HAIKU + OR LINUX OR MSYS OR WIN32 OR ANDROID OR APPLE)) + set(FFmpeg_SYSTEM_NAME "none") + endif() + # TODO: Can we really do better? Auto-detection? Something clever? + list(APPEND FFmpeg_CROSS_COMPILE_FLAGS + --enable-cross-compile + --arch="${CMAKE_SYSTEM_PROCESSOR}" + --target-os="${FFmpeg_SYSTEM_NAME}" + --sysroot="${CMAKE_SYSROOT}") + if (DEFINED FFmpeg_CROSS_PREFIX) + list(APPEND FFmpeg_CROSS_COMPILE_FLAGS --cross-prefix="${FFmpeg_CROSS_PREFIX}") + else() + message(FATAL_ERROR "Please set FFmpeg_CROSS_PREFIX to your cross toolchain prefix, for example: \${CMAKE_STAGING_PREFIX}/bin/${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM_NAME}-") + endif() + set(FFmpeg_IS_CROSS_COMPILING TRUE) endif() - set(FFmpeg_IS_CROSS_COMPILING TRUE) endif() endif() -if (OPENORBIS OR MANAGARM OR EMSCRIPTEN) - # Doesn't support VA-API, don't go thru the embarrassment of trying to enable it +if (WIN32) list(APPEND FFmpeg_HWACCEL_FLAGS - --disable-vaapi - --disnable-cuvid - --disnable-ffnvcodec - --disnable-nvdec - --disable-vulkan - --disable-libdrm) -elseif (UNIX) - find_package(PkgConfig REQUIRED) - find_package(X11) - if(X11_FOUND) - # Include X11 if possible, some APIs such as VDPAU heavily depend - # upon it's existence! - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${X11_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${X11_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${X11_LDFLAGS}) - if (NOT APPLE) - # In Solaris needs explicit linking for ffmpeg which links to /lib/amd64/libX11.so - if(SOLARIS) - list(APPEND FFmpeg_HWACCEL_LIBRARIES - X11 - "${CMAKE_SYSROOT}/usr/lib/xorg/amd64/libdrm.so") - else() - pkg_check_modules(LIBDRM libdrm REQUIRED) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBDRM_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBDRM_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBDRM_LDFLAGS}) - endif() - list(APPEND FFmpeg_HWACCEL_FLAGS --enable-libdrm) - endif() + --enable-d3d11va + --enable-d3d12va + --enable-dxva2 + --enable-hwaccel=d3d11va_h264 + --enable-hwaccel=d3d11va2_h264 + --enable-hwaccel=d3d12va_h264 + --enable-hwaccel=dxva2_h264 + --enable-hwaccel=d3d11va_vp9 + --enable-hwaccel=d3d11va2_vp9 + --enable-hwaccel=d3d12va_vp9 + --enable-hwaccel=dxva2_vp9) +elseif (ANDROID) + list(APPEND FFmpeg_HWACCEL_FLAGS + --enable-mediacodec + --enable-jni + --enable-decoder=h264_mediacodec + --enable-decoder=vp8_mediacodec + --enable-decoder=vp9_mediacodec) +elseif (APPLE) + list(APPEND FFmpeg_HWACCEL_FLAGS + --enable-videotoolbox + --enable-hwaccel=videotoolbox_h264 + --enable-hwaccel=videotoolbox_vp9) +endif() - pkg_check_modules(LIBVA libva) - if(LIBVA_FOUND) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBVA_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBVA_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBVA_LDFLAGS}) +find_package(X11) +if(X11_FOUND) + # Include X11 if possible, VDPAU lists it as complementary + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${X11_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${X11_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${X11_LDFLAGS}) +else() + list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vaapi) +endif() +message(STATUS "ffmpeg: X11 ${X11_FOUND} ${X11_VERSION}") - # Logically, they can only exist if libva itself exists - pkg_check_modules(LIBVA-DRM libva-drm REQUIRED) - pkg_check_modules(LIBVA-X11 libva-x11 REQUIRED) - if (LIBVA-DRM_FOUND) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBVA-DRM_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBVA-DRM_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBVA-DRM_LDFLAGS}) - endif() - if (LIBVA-X11_FOUND) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBVA-X11_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBVA-X11_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBVA-X11_LDFLAGS}) - endif() - - list(APPEND FFmpeg_HWACCEL_FLAGS - --enable-hwaccel=h264_vaapi - --enable-hwaccel=vp8_vaapi - --enable-hwaccel=vp9_vaapi) - message(STATUS "ffmpeg: va-api libraries version ${LIBVA_VERSION} found") +find_package(PkgConfig) +if (PkgConfig_FOUND) + pkg_check_modules(LIBDRM libdrm) + if (LIBDRM_FOUND) + # Solaris needs explicit linking for ffmpeg which links to /lib/amd64/libX11.so + if(SOLARIS) + list(APPEND FFmpeg_HWACCEL_LIBRARIES + X11 + "${CMAKE_SYSROOT}/usr/lib/xorg/amd64/libdrm.so") else() - list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vaapi) - message(WARNING "ffmpeg: libva-dev not found, disabling Video Acceleration API (VA-API)...") + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBDRM_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBDRM_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBDRM_LDFLAGS}) endif() - else() - list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vaapi) - message(WARNING "ffmpeg: X11 libraries not found, disabling VA-API...") + list(APPEND FFmpeg_HWACCEL_FLAGS --enable-libdrm) endif() - pkg_check_modules(CUDA cuda) - pkg_check_modules(FFNVCODEC ffnvcodec) - pkg_check_modules(VDPAU vdpau) - pkg_check_modules(VULKAN vulkan) - find_package(spirv-headers) + pkg_check_modules(LIBVA libva) + if(LIBVA_FOUND) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBVA_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBVA_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBVA_LDFLAGS}) + list(APPEND FFmpeg_HWACCEL_FLAGS + --enable-vaapi + --enable-hwaccel=h264_vaapi + --enable-hwaccel=vp8_vaapi + --enable-hwaccel=vp9_vaapi) + # Logically, they can only exist if libva itself exists + pkg_check_modules(LIBVA-DRM libva-drm) + if (LIBVA-DRM_FOUND) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBVA-DRM_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBVA-DRM_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBVA-DRM_LDFLAGS}) + endif() + message(STATUS "ffmpeg: LIBVA-DRM ${LIBVA-DRM_FOUND} ${LIBVA-DRM_VERSION}") + pkg_check_modules(LIBVA-X11 libva-x11) + if (LIBVA-X11_FOUND) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${LIBVA-X11_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${LIBVA-X11_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${LIBVA-X11_LDFLAGS}) + endif() + message(STATUS "ffmpeg: LIBVA-X11 ${LIBVA-X11_FOUND} ${LIBVA-X11_VERSION}") + else() + list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vaapi) + endif() + message(STATUS "ffmpeg: LIBVA ${LIBVA_FOUND} ${LIBVA_VERSION}") + pkg_check_modules(VDPAU vdpau) + if (VDPAU_FOUND) + list(APPEND FFmpeg_HWACCEL_FLAGS + --enable-vdpau + --enable-hwaccel=h264_vdpau + --enable-hwaccel=vp9_vdpau) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${VDPAU_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${VDPAU_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${VDPAU_LDFLAGS}) + else() + list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau) + endif() + message(STATUS "ffmpeg: VDPAU ${VDPAU_FOUND} ${VDPAU_VERSION}") + + pkg_check_modules(FFNVCODEC ffnvcodec) if (FFNVCODEC_FOUND) list(APPEND FFmpeg_HWACCEL_FLAGS --enable-cuvid @@ -141,51 +165,38 @@ elseif (UNIX) list(APPEND FFmpeg_HWACCEL_LIBRARIES ${FFNVCODEC_LIBRARIES}) list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${FFNVCODEC_INCLUDE_DIRS}) list(APPEND FFmpeg_HWACCEL_LDFLAGS ${FFNVCODEC_LDFLAGS}) - message(STATUS "ffmpeg: ffnvcodec libraries version ${FFNVCODEC_VERSION} found") # ffnvenc could load CUDA libraries at the runtime using dlopen/dlsym or LoadLibrary/GetProcAddress # here we handle the hard-linking scenario where CUDA is linked during compilation - if (CUDA_FOUND) - # This line causes build error if CUDA_INCLUDE_DIRS is anything but a single non-empty value - #list(APPEND FFmpeg_HWACCEL_FLAGS --extra-cflags=-I${CUDA_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${CUDA_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${CUDA_LDFLAGS}) - message(STATUS "ffmpeg: CUDA libraries version ${CUDA_VERSION} found, hard-linking will be performed") - endif(CUDA_FOUND) - endif() - - if (VDPAU_FOUND AND NOT APPLE) - list(APPEND FFmpeg_HWACCEL_FLAGS - --enable-vdpau - --enable-hwaccel=h264_vdpau - --enable-hwaccel=vp9_vdpau) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${VDPAU_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${VDPAU_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${VDPAU_LDFLAGS}) - message(STATUS "ffmpeg: vdpau libraries version ${VDPAU_VERSION} found") - else() - list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vdpau) - message(WARNING "ffmpeg: libvdpau-dev not found, disabling Video Decode and Presentation API for Unix (VDPAU)...") - endif() - - if (VULKAN_FOUND AND NOT APPLE) - list(APPEND FFmpeg_HWACCEL_FLAGS - --enable-vulkan - --enable-hwaccel=h264_vulkan - --enable-hwaccel=vp9_vulkan) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${VULKAN_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${VULKAN_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${VULKAN_LDFLAGS}) - message(STATUS "ffmpeg: vulkan libraries version ${VULKAN_VERSION} found") - endif() - - if (SPIRV_HEADERS_FOUND) - list(APPEND FFmpeg_HWACCEL_LIBRARIES ${SPIRV_HEADERS_LIBRARIES}) - list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${SPIRV_HEADERS_INCLUDE_DIRS}) - list(APPEND FFmpeg_HWACCEL_LDFLAGS ${SPIRV_HEADERS_LDFLAGS}) - message(STATUS "ffmpeg: spirv-headers libraries version ${SPIRV_HEADERS_VERSION} found") + find_package(CUDAToolkit) + if (CUDAToolkit_FOUND) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${CUDAToolkit_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${CUDAToolkit_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${CUDAToolkit_LDFLAGS}) + endif() + message(STATUS "ffmpeg: CUDAToolkit ${CUDAToolkit_FOUND} ${CUDAToolkit_VERSION}") endif() + message(STATUS "ffmpeg: FFNVCODEC ${FFNVCODEC_FOUND} ${FFNVCODEC_VERSION}") endif() +message(STATUS "ffmpeg: PkgConfig ${PkgConfig_FOUND} ${PkgConfig_VERSION}") + +find_package(Vulkan) +if (Vulkan_FOUND) + list(APPEND FFmpeg_HWACCEL_FLAGS + --enable-vulkan + --enable-hwaccel=h264_vulkan + --enable-hwaccel=vp9_vulkan) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${Vulkan_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${Vulkan_INCLUDE_DIRS}) +endif() +message(STATUS "ffmpeg: Vulkan ${Vulkan_FOUND} ${Vulkan_VERSION}") + +find_package(spirv-headers) +if (spirv-headers_FOUND) + list(APPEND FFmpeg_HWACCEL_LIBRARIES ${spirv-headers_LIBRARIES}) + list(APPEND FFmpeg_HWACCEL_INCLUDE_DIRS ${spirv-headers_INCLUDE_DIRS}) + list(APPEND FFmpeg_HWACCEL_LDFLAGS ${spirv-headers_LDFLAGS}) +endif() +message(STATUS "ffmpeg: spirv-headers ${spirv-headers_FOUND} ${spirv-headers_VERSION}") if (OPENORBIS) list(APPEND FFmpeg_CROSS_COMPILE_LIBS @@ -222,44 +233,33 @@ if (YUZU_USE_BUNDLED_FFMPEG) set(FFmpeg_INCLUDE_DIR "${FFmpeg_SOURCE_DIR}/include;${FFmpeg_HWACCEL_INCLUDE_DIRS}" - PARENT_SCOPE - ) + PARENT_SCOPE) set(FFmpeg_PATH "${FFmpeg_SOURCE_DIR}" - PARENT_SCOPE - ) + PARENT_SCOPE) set(FFmpeg_LIBRARY_DIR "${FFmpeg_SOURCE_DIR}/bin" - PARENT_SCOPE - ) + PARENT_SCOPE) set(FFmpeg_LIBRARIES FFmpeg::FFmpeg ${FFmpeg_HWACCEL_LIBRARIES} - PARENT_SCOPE - ) + PARENT_SCOPE) + + set(FFmpeg_FOUND YES) else() # Build FFmpeg from externals message(STATUS "Using FFmpeg from externals") - - if (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|amd64)") - # FFmpeg has source that requires one of nasm or yasm to assemble it. - # REQUIRED throws an error if not found here during configuration rather than during compilation. - find_program(ASSEMBLER NAMES nasm yasm) - if ("${ASSEMBLER}" STREQUAL "ASSEMBLER-NOTFOUND") - message(FATAL_ERROR "One of either `nasm` or `yasm` not found but is required.") - endif() - endif() - - find_program(AUTOCONF autoconf) - if ("${AUTOCONF}" STREQUAL "AUTOCONF-NOTFOUND") - message(FATAL_ERROR "Required program `autoconf` not found.") - endif() - AddJsonPackage(ffmpeg) + # FFmpeg has source that requires one of nasm or yasm to assemble it. + if (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|amd64)") + find_program(ASSEMBLER NAMES nasm yasm REQUIRED) + endif() + find_program(AUTOCONF autoconf REQUIRED) + set(FFmpeg_PREFIX ${ffmpeg_SOURCE_DIR}) set(FFmpeg_BUILD_DIR ${ffmpeg_BINARY_DIR}) set(FFmpeg_MAKEFILE ${FFmpeg_BUILD_DIR}/Makefile) @@ -291,6 +291,7 @@ else() # `--disable-vdpau` is needed to avoid linking issues set(FFmpeg_CC ${CMAKE_C_COMPILER_LAUNCHER} ${CMAKE_C_COMPILER}) set(FFmpeg_CXX ${CMAKE_CXX_COMPILER_LAUNCHER} ${CMAKE_CXX_COMPILER}) + set(FFmpeg_HOST_CC ${CMAKE_C_HOST_COMPILER}) if (FFmpeg_IS_CROSS_COMPILING) list(APPEND FFmpeg_CROSS_COMPILE_FLAGS --ld=${CMAKE_LINKER}) endif () @@ -306,6 +307,7 @@ else() --disable-avformat --disable-doc --disable-everything + --disable-autodetect --disable-ffmpeg --disable-ffprobe --disable-network @@ -321,13 +323,14 @@ else() --extra-cflags=${CMAKE_C_FLAGS} --extra-cxxflags=${CMAKE_CXX_FLAGS} --extra-ldflags="${FFmpeg_HWACCEL_LDFLAGS}" + --host-cc=${FFmpeg_HOST_CC} ${FFmpeg_HWACCEL_FLAGS} ${FFmpeg_CROSS_COMPILE_FLAGS} WORKING_DIRECTORY - ${FFmpeg_BUILD_DIR} - ) + ${FFmpeg_BUILD_DIR}) unset(FFmpeg_CC) unset(FFmpeg_CXX) + unset(FFmpeg_HOST_CC) unset(FFmpeg_LD) unset(FFmpeg_HWACCEL_FLAGS) unset(FFmpeg_CROSS_COMPILE_FLAGS) @@ -335,26 +338,22 @@ else() # Workaround for Ubuntu 18.04's older version of make not being able to call make as a child # with context of the jobserver. Also helps ninja users. cmake_host_system_information(RESULT SYSTEM_THREADS QUERY NUMBER_OF_LOGICAL_CORES) + set(FFmpeg_MAKE_ARGS "") + if (DEFINED SYSTEM_THREADS) + set(FFmpeg_MAKE_ARGS -j ${SYSTEM_THREADS}) + endif() set(FFmpeg_BUILD_LIBRARIES ${FFmpeg_LIBRARIES}) - # BSD make or Solaris make don't support ffmpeg make-j8 - if (DEFINED SYSTEM_THREADS AND (LINUX OR ANDROID OR APPLE OR WIN32)) - set(FFmpeg_MAKE_ARGS -j${SYSTEM_THREADS}) - else() - set(FFmpeg_MAKE_ARGS "") - endif() # Most distros use 'gmake', Arch uses 'make' - find_program(MAKE gmake NAMES gmake make REQUIRED) - + find_program(MAKE NAMES gmake make REQUIRED) add_custom_command( OUTPUT ${FFmpeg_BUILD_LIBRARIES} COMMAND ${MAKE} ${FFmpeg_MAKE_ARGS} WORKING_DIRECTORY - ${FFmpeg_BUILD_DIR} - ) + ${FFmpeg_BUILD_DIR}) set(FFmpeg_INCLUDE_DIR "${FFmpeg_PREFIX};${FFmpeg_BUILD_DIR};${FFmpeg_HWACCEL_INCLUDE_DIRS}" @@ -376,12 +375,10 @@ else() unset(FFmpeg_HWACCEL_INCLUDE_DIRS) unset(FFmpeg_HWACCEL_LDFLAGS) unset(FFmpeg_HWACCEL_LIBRARIES) - - if (FFmpeg_FOUND) - message(STATUS "Found FFmpeg version ${FFmpeg_VERSION}") - else() - message(FATAL_ERROR "FFmpeg not found") - endif() endif() - unset(FFmpeg_COMPONENTS) + +if (NOT FFmpeg_FOUND) + message(FATAL_ERROR "FFmpeg not found") +endif() +message(STATUS "Found FFmpeg version ${FFmpeg_VERSION}")