diff --git a/CMakeLists.txt b/CMakeLists.txt index 54eb90e90..d0296c091 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -507,6 +507,9 @@ add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_REGEX_NO_LIB ) if (USE_SYSTEM_BOOST) + if(POLICY CMP0167) + cmake_policy(SET CMP0167 NEW) #boost config policy + endif() find_package(Boost 1.70.0 COMPONENTS container locale serialization iostreams REQUIRED) endif() diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 2ee7018a3..def146c62 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -175,19 +175,38 @@ endif() # Open Source Archives add_subdirectory(open_source_archives) -# faad2 -add_subdirectory(faad2 EXCLUDE_FROM_ALL) +if (USE_SYSTEM_FAAD2) + pkg_check_modules(FAAD2 faad2) +endif() + +if (NOT FAAD2_FOUND) + message(STATUS "Using bundled FAAD2") + add_subdirectory(faad2 EXCLUDE_FROM_ALL) +else() + message(STATUS "Using system FAAD2") + add_library(faad2 INTERFACE) + target_include_directories(faad2 INTERFACE ${FAAD2_INCLUDE_DIRS}) + target_link_libraries(faad2 INTERFACE ${FAAD2_LIBRARIES}) +endif() + # Dynamic library headers add_library(library-headers INTERFACE) if (USE_SYSTEM_FFMPEG_HEADERS) - find_path(SYSTEM_FFMPEG_INCLUDES NAMES libavutil/avutil.h) - if (SYSTEM_FFMPEG_INCLUDES STREQUAL "SYSTEM_FFMPEG_INCLUDES-NOTFOUND") - message(WARNING "System FFmpeg headers not found. Falling back on bundled headers.") + pkg_check_modules(FFMPEG_LIBAVUTIL libavutil) + if (NOT FFMPEG_LIBAVUTIL_FOUND) + find_path(SYSTEM_FFMPEG_INCLUDES NAMES libavutil/avutil.h) + if (SYSTEM_FFMPEG_INCLUDES STREQUAL "SYSTEM_FFMPEG_INCLUDES-NOTFOUND") + message(WARNING "System FFmpeg headers not found. Falling back on bundled headers.") + else() + message(STATUS "Using system FFmpeg headers.") + target_include_directories(library-headers SYSTEM INTERFACE ${SYSTEM_FFMPEG_INCLUDES}) + set(FOUND_FFMPEG_HEADERS ON) + endif() else() - message(STATUS "Using system FFmpeg headers.") - target_include_directories(library-headers SYSTEM INTERFACE ${SYSTEM_FFMPEG_INCLUDES}) + target_include_directories(library-headers INTERFACE ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS}) + target_link_libraries(library-headers INTERFACE ${FFMPEG_LIBAVUTIL_LIBRARIES}) set(FOUND_FFMPEG_HEADERS ON) endif() endif() @@ -207,8 +226,12 @@ if(NOT USE_SYSTEM_SOUNDTOUCH) endif() # Teakra -set(BUILD_TESTING OFF CACHE BOOL "") -add_subdirectory(teakra EXCLUDE_FROM_ALL) +if (USE_SYSTEM_TEAKRA) + find_package(teakra CONFIG REQUIRED) +else() + set(BUILD_TESTING OFF CACHE BOOL "") + add_subdirectory(teakra EXCLUDE_FROM_ALL) +endif() # SDL2 if (ENABLE_SDL2 AND NOT USE_SYSTEM_SDL2) @@ -446,10 +469,17 @@ if (ENABLE_VULKAN) add_subdirectory(spirv-headers EXCLUDE_FROM_ALL) endif() - # spirv-tools - # TODO: Implement USE_SYSTEM_SPIRV_TOOLS -OS +if (USE_SYSTEM_SPIRV_TOOLS) + find_package(SPIRV-Tools QUIET) +endif() + +if (SPIRV-Tools_FOUND) + message(STATUS "Using system SPIRV-Tools") +else() + message(STATUS "Using bundled SPIRV-Tools") set(SPIRV_SKIP_EXECUTABLES ON) add_subdirectory(spirv-tools EXCLUDE_FROM_ALL) +endif() # glslang if(USE_SYSTEM_GLSLANG) @@ -507,16 +537,19 @@ if (ENABLE_VULKAN) endif() endif() -set(XXHASH_BUILD_XXHSUM OFF) -add_subdirectory(xxHash/cmake_unofficial EXCLUDE_FROM_ALL) -target_compile_definitions(xxhash PRIVATE XXH_FORCE_MEMORY_ACCESS=2) -if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64") - target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SSE2) - message(STATUS "Enabling SSE2 for xxHash") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|armv8") - target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_NEON) - message(STATUS "Enabling NEON for xxHash") -else() - target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SCALAR) - message(STATUS "Disabling SIMD for xxHash") -endif() \ No newline at end of file + +if(NOT USE_SYSTEM_XXHASH) + set(XXHASH_BUILD_XXHSUM OFF) + add_subdirectory(xxHash/cmake_unofficial EXCLUDE_FROM_ALL) + target_compile_definitions(xxhash PRIVATE XXH_FORCE_MEMORY_ACCESS=2) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64") + target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SSE2) + message(STATUS "Enabling SSE2 for xxHash") + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|armv8") + target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_NEON) + message(STATUS "Enabling NEON for xxHash") + else() + target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SCALAR) + message(STATUS "Disabling SIMD for xxHash") + endif() +endif() diff --git a/externals/cmake-modules/CitraHandleSystemLibs.cmake b/externals/cmake-modules/CitraHandleSystemLibs.cmake index 16fa06fdb..e0b4a6dc9 100644 --- a/externals/cmake-modules/CitraHandleSystemLibs.cmake +++ b/externals/cmake-modules/CitraHandleSystemLibs.cmake @@ -28,6 +28,11 @@ option(USE_SYSTEM_VMA "Use the system VulkanMemoryAllocator (instead of the bund option(USE_SYSTEM_VULKAN_HEADERS "Use the system Vulkan headers (instead of the bundled ones)" OFF) option(USE_SYSTEM_SPIRV_HEADERS "Use the system SPIRV headers (instead of the bundled ones)" OFF) option(USE_SYSTEM_CATCH2 "Use the system Catch2 (instead of the bundled one)" OFF) +option(USE_SYSTEM_XXHASH "Use the system xxHash (instead of the bundled one)" OFF) +option(USE_SYSTEM_SPIRV_TOOLS "Use system-installed SPIRV-Tools" OFF) +option(USE_SYSTEM_FAAD2 "Use system-installed SPIRV-Tools" OFF) +option(USE_SYSTEM_TEAKRA "Use system-installed SPIRV-Tools" OFF) + # Qt and MoltenVK are handled separately CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_SDL2 "Disable system SDL2" OFF "USE_SYSTEM_LIBS" OFF) diff --git a/src/citra_qt/dumping/option_set_dialog.cpp b/src/citra_qt/dumping/option_set_dialog.cpp index f6d6e4af7..7265294aa 100644 --- a/src/citra_qt/dumping/option_set_dialog.cpp +++ b/src/citra_qt/dumping/option_set_dialog.cpp @@ -10,6 +10,10 @@ #include "common/string_util.h" #include "ui_option_set_dialog.h" +#ifndef AV_OPT_TYPE_CHANNEL_LAYOUT +#define AV_OPT_TYPE_CHANNEL_LAYOUT AV_OPT_TYPE_CHLAYOUT +#endif + static const std::unordered_map TypeNameMap{{ {AV_OPT_TYPE_BOOL, QT_TR_NOOP("boolean")}, {AV_OPT_TYPE_FLAGS, QT_TR_NOOP("flags")}, diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 4b6e74c49..c25f843f3 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -176,4 +176,11 @@ if (SSE42_COMPILE_OPTION) target_compile_options(citra_common PRIVATE ${SSE42_COMPILE_OPTION}) endif() -target_link_libraries(citra_common PUBLIC xxHash::xxhash) \ No newline at end of file +if(USE_SYSTEM_XXHASH) + pkg_check_modules(XXHASH REQUIRED libxxhash) + target_include_directories(citra_common PRIVATE ${XXHASH_INCLUDE_DIRS}) + target_link_libraries(citra_common PRIVATE ${XXHASH_LIBRARIES}) + target_compile_options(citra_common PRIVATE ${XXHASH_CFLAGS_OTHER}) +else() + target_link_libraries(citra_common PUBLIC xxHash::xxhash) +endif() diff --git a/src/core/dumping/ffmpeg_backend.cpp b/src/core/dumping/ffmpeg_backend.cpp index b38116ed3..5044f1d45 100644 --- a/src/core/dumping/ffmpeg_backend.cpp +++ b/src/core/dumping/ffmpeg_backend.cpp @@ -16,6 +16,11 @@ #include "video_core/gpu.h" #include "video_core/renderer_base.h" + +#ifndef AV_OPT_TYPE_CHANNEL_LAYOUT +#define AV_OPT_TYPE_CHANNEL_LAYOUT AV_OPT_TYPE_CHLAYOUT +#endif + using namespace DynamicLibrary; namespace VideoDumper {