yuzu-emu
/
yuzu
Archived
1
0
Fork 0

CMakeLists: Use bundled FFmpeg as a fallback

Sets YUZU_USE_BUNDLED_FFMPEG as a CMake dependent option that is OFF on
Linux and ON for WIN32 targets. If FFmpeg is not found when
YUZU_USE_BUNDLED_FFMPEG is OFF, the bundled module/binaries are used
instead.

Reverts earlier changes to FindFFmpeg a bit, mostly to keep parity with
it's Citra version a bit. Now _FFmpeg_ALL_COMPONENTS lists all
components. We overwrite FFmpeg_LIBRARIES and FFmpeg_INCLUDE_DIR after
using the module.
This commit is contained in:
lat9nq 2021-02-06 03:14:11 -05:00
parent 8b54e219c9
commit 527188391c
2 changed files with 42 additions and 21 deletions

View File

@ -18,7 +18,7 @@ CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" ON "EN
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled yuzu" ON) CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled yuzu" ON "WIN32" OFF)
option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF) option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF)
@ -386,6 +386,32 @@ if (NOT LIBUSB_FOUND)
set(LIBUSB_LIBRARIES usb) set(LIBUSB_LIBRARIES usb)
endif() endif()
# List of all FFmpeg components required
set(FFmpeg_COMPONENTS
avcodec
avutil
swscale)
if (NOT YUZU_USE_BUNDLED_FFMPEG)
# Use system installed FFmpeg
find_package(FFmpeg REQUIRED COMPONENTS ${FFmpeg_COMPONENTS})
if (FFmpeg_FOUND)
# Overwrite aggregate defines from FFmpeg module to avoid over-linking libraries.
# Prevents shipping too many libraries with the AppImage.
set(FFmpeg_LIBRARIES "")
set(FFmpeg_INCLUDE_DIR "")
foreach(COMPONENT ${FFmpeg_COMPONENTS})
set(FFmpeg_LIBRARIES ${FFmpeg_LIBRARIES} ${FFmpeg_LIBRARY_${COMPONENT}} CACHE PATH "Paths to FFmpeg libraries" FORCE)
set(FFmpeg_INCLUDE_DIR ${FFmpeg_INCLUDE_DIR} ${FFmpeg_INCLUDE_${COMPONENT}} CACHE PATH "Path to FFmpeg headers" FORCE)
endforeach()
else()
message(WARNING "FFmpeg not found, falling back to externals")
set(YUZU_USE_BUNDLED_FFMPEG ON)
endif()
endif()
if (YUZU_USE_BUNDLED_FFMPEG) if (YUZU_USE_BUNDLED_FFMPEG)
if (NOT WIN32) if (NOT WIN32)
# Build FFmpeg from externals # Build FFmpeg from externals
@ -407,11 +433,6 @@ if (YUZU_USE_BUNDLED_FFMPEG)
set(FFmpeg_FOUND YES) set(FFmpeg_FOUND YES)
endif() endif()
set(FFmpeg_COMPONENTS
avcodec
avutil
swscale)
foreach(COMPONENT ${FFmpeg_COMPONENTS}) foreach(COMPONENT ${FFmpeg_COMPONENTS})
set(FFmpeg_${COMPONENT}_PREFIX "${FFmpeg_BUILD_DIR}/lib${COMPONENT}") set(FFmpeg_${COMPONENT}_PREFIX "${FFmpeg_BUILD_DIR}/lib${COMPONENT}")
set(FFmpeg_${COMPONENT}_LIB_NAME "lib${COMPONENT}.a") set(FFmpeg_${COMPONENT}_LIB_NAME "lib${COMPONENT}.a")
@ -496,14 +517,9 @@ if (YUZU_USE_BUNDLED_FFMPEG)
${FFmpeg_LIBRARY_DIR}/avutil.lib ${FFmpeg_LIBRARY_DIR}/avutil.lib
CACHE PATH "Paths to FFmpeg libraries" FORCE) CACHE PATH "Paths to FFmpeg libraries" FORCE)
endif() endif()
else() endif()
# Use system installed FFmpeg
find_package(FFmpeg REQUIRED)
if (NOT FFmpeg_FOUND) unset(FFmpeg_COMPONENTS)
message(FATAL_ERROR "FFmpeg not found")
endif()
endif()
# Prefer the -pthread flag on Linux. # Prefer the -pthread flag on Linux.
set(THREADS_PREFER_PTHREAD_FLAG ON) set(THREADS_PREFER_PTHREAD_FLAG ON)

View File

@ -22,18 +22,23 @@
# #
# <component> can be one of: # <component> can be one of:
# avcodec # avcodec
# avdevice # Disabled # avdevice
# avfilter # Disabled # avfilter
# avformat # Disabled # avformat
# avutil # avutil
# postproc # Disabled # postproc
# swresample # Disabled # swresample
# swscale # swscale
# #
set(_FFmpeg_ALL_COMPONENTS set(_FFmpeg_ALL_COMPONENTS
avcodec avcodec
avdevice
avfilter
avformat
avutil avutil
postproc
swresample
swscale swscale
) )