From f43bd7eb802f0de5a96ed09615130cd0e58a4dce Mon Sep 17 00:00:00 2001 From: Kevin Reinholz Date: Thu, 2 Apr 2026 17:21:21 -0700 Subject: [PATCH] Add options to build with additional system libraries in place of bundled modules --- CMakeLists.txt | 17 +++++++++++++++ externals/CMakeLists.txt | 41 ++++++++++++++++++++--------------- src/audio_core/CMakeLists.txt | 6 ++++- src/common/CMakeLists.txt | 6 ++++- 4 files changed, 51 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 54eb90e90..75ad6ea20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -105,7 +105,10 @@ foreach(_opt IN LISTS _LIBRETRO_INCOMPATIBLE_OPTIONS) endforeach() option(ENABLE_SDL2 "Enable using SDL2" ON) +option(USE_SYSTEM_FAAD "Use the system faad2 lib (instead of the bundled one)" OFF) option(USE_SYSTEM_SDL2 "Use the system SDL2 lib (instead of the bundled one)" OFF) +option(USE_SYSTEM_SPIRV_TOOLS "Use the system SPIRV-Tools lib (instead of the bundled one)" OFF) +option(USE_SYSTEM_XXHASH "Use the system xxHash lib (instead of the bundled one)" OFF) # Set bundled qt as dependent options. option(ENABLE_QT "Enable the Qt frontend" ON) @@ -541,6 +544,20 @@ if (USE_SYSTEM_SOUNDTOUCH) target_include_directories(SoundTouch INTERFACE "${SOUNDTOUCH_INCLUDE_DIRS}") endif() +if (USE_SYSTEM_XXHASH) + find_package(PkgConfig) + if(PkgConfig_FOUND) + pkg_check_modules(libxxhash_PKGCONFIG IMPORTED_TARGET xxhash) + endif() +endif() + +if (USE_SYSTEM_FAAD) + find_package(PkgConfig) + if(PkgConfig_FOUND) + pkg_check_modules(libfaad_PKGCONFIG IMPORTED_TARGET faad) + endif() +endif() + add_subdirectory(src) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT citra_meta) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 2ee7018a3..a7f238979 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -176,7 +176,9 @@ endif() add_subdirectory(open_source_archives) # faad2 -add_subdirectory(faad2 EXCLUDE_FROM_ALL) +if(NOT USE_SYSTEM_FAAD) + add_subdirectory(faad2 EXCLUDE_FROM_ALL) +endif() # Dynamic library headers add_library(library-headers INTERFACE) @@ -447,9 +449,12 @@ if (ENABLE_VULKAN) endif() # spirv-tools - # TODO: Implement USE_SYSTEM_SPIRV_TOOLS -OS - set(SPIRV_SKIP_EXECUTABLES ON) - add_subdirectory(spirv-tools EXCLUDE_FROM_ALL) + if(USE_SYSTEM_SPIRV_TOOLS) + find_package(SPIRV-Tools REQUIRED) + else() + set(SPIRV_SKIP_EXECUTABLES ON) + add_subdirectory(spirv-tools EXCLUDE_FROM_ALL) + endif() # glslang if(USE_SYSTEM_GLSLANG) @@ -507,16 +512,18 @@ 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/src/audio_core/CMakeLists.txt b/src/audio_core/CMakeLists.txt index 6ea16672e..47890b0dc 100644 --- a/src/audio_core/CMakeLists.txt +++ b/src/audio_core/CMakeLists.txt @@ -45,7 +45,11 @@ add_library(audio_core STATIC create_target_directory_groups(audio_core) target_link_libraries(audio_core PUBLIC citra_common citra_core) -target_link_libraries(audio_core PRIVATE faad2 SoundTouch teakra) +if(USE_SYSTEM_FAAD) + target_link_libraries(audio_core PRIVATE faad SoundTouch teakra) +else() + target_link_libraries(audio_core PRIVATE faad2 SoundTouch teakra) +endif() if(ENABLE_SDL2) target_link_libraries(audio_core PRIVATE SDL2::SDL2) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 4b6e74c49..d7de3dd19 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -176,4 +176,8 @@ 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) + target_link_libraries(citra_common PUBLIC xxhash) +else() + target_link_libraries(citra_common PUBLIC xxHash::xxhash) +endif()