From 17f25b794bac76191110b46954884f5bfee70e88 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 28 Jul 2025 01:43:03 -0400 Subject: [PATCH] [cmake] vcpkg, spirv, dynarmic deps -> CPM Signed-off-by: crueter --- .gitmodules | 12 ------ CMakeLists.txt | 38 ++++++++++++++----- externals/CMakeLists.txt | 12 ++++-- externals/SPIRV-Tools | 1 - externals/dynarmic/CMakeLists.txt | 11 +++--- externals/dynarmic/externals/CMakeLists.txt | 33 ++++++++++------ externals/dynarmic/externals/unordered_dense | 1 - externals/dynarmic/externals/zydis | 1 - .../dynarmic/src/dynarmic/CMakeLists.txt | 4 +- externals/vcpkg | 1 - src/audio_core/CMakeLists.txt | 3 +- src/audio_core/externals/cubeb/CMakeLists.txt | 13 ++++--- 12 files changed, 75 insertions(+), 55 deletions(-) delete mode 160000 externals/SPIRV-Tools delete mode 160000 externals/dynarmic/externals/unordered_dense delete mode 160000 externals/dynarmic/externals/zydis delete mode 160000 externals/vcpkg diff --git a/.gitmodules b/.gitmodules index 7c89b4e1f7..8bf3723a91 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,9 +13,6 @@ [submodule "cpp-httplib"] path = externals/cpp-httplib url = https://github.com/yhirose/cpp-httplib.git -[submodule "vcpkg"] - path = externals/vcpkg - url = https://github.com/microsoft/vcpkg.git [submodule "cpp-jwt"] path = externals/cpp-jwt url = https://github.com/arun11299/cpp-jwt.git @@ -31,21 +28,12 @@ [submodule "externals/dynarmic/externals/fmt"] path = externals/dynarmic/externals/fmt url = https://github.com/fmtlib/fmt.git -[submodule "externals/dynarmic/externals/unordered_dense"] - path = externals/dynarmic/externals/unordered_dense - url = https://github.com/Lizzie841/unordered_dense.git [submodule "externals/dynarmic/externals/zycore-c"] path = externals/dynarmic/externals/zycore-c url = https://github.com/zyantific/zycore-c.git -[submodule "externals/dynarmic/externals/zydis"] - path = externals/dynarmic/externals/zydis - url = https://github.com/zyantific/zydis.git [submodule "externals/nx_tzdb/tzdb_to_nx/externals/tz/tz"] path = externals/nx_tzdb/tzdb_to_nx/externals/tz/tz url = https://github.com/eggert/tz.git [submodule "externals/sirit/externals/SPIRV-Headers"] path = externals/sirit/externals/SPIRV-Headers url = https://github.com/KhronosGroup/SPIRV-Headers.git -[submodule "externals/SPIRV-Tools"] - path = externals/SPIRV-Tools - url = https://github.com/KhronosGroup/SPIRV-Tools.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 50e97975bc..1118ce7103 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,14 +58,18 @@ else() option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ON) endif() +if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" OFF) +else() + option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON) +endif() + if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" OFF) else() option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ON) endif() -CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON "YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES" OFF) - if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" OFF) else() @@ -100,6 +104,7 @@ CMAKE_DEPENDENT_OPTION(YUZU_ROOM_STANDALONE "Enable standalone room executable" CMAKE_DEPENDENT_OPTION(YUZU_CMD "Compile the eden-cli executable" ON "NOT ANDROID" OFF) +# TODO(crueter): remove? cpm? CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR LINUX" OFF) option(YUZU_USE_BUNDLED_VCPKG "Use vcpkg for yuzu dependencies" "${MSVC}") @@ -160,6 +165,8 @@ if (ANDROID) set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # Workaround for Oboe endif() +set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm) + if (YUZU_USE_BUNDLED_VCPKG) if (ANDROID) set(ENV{ANDROID_NDK_HOME} "${ANDROID_NDK}") @@ -204,7 +211,16 @@ if (YUZU_USE_BUNDLED_VCPKG) list(APPEND VCPKG_MANIFEST_FEATURES "android") endif() - include(${CMAKE_SOURCE_DIR}/externals/vcpkg/scripts/buildsystems/vcpkg.cmake) + include(CPM) + set(CPM_USE_LOCAL_PACKAGES OFF) + + CPMAddPackage( + NAME vcpkg + DOWNLOAD_ONLY YES + URL "https://github.com/microsoft/vcpkg/archive/ea2a964f93.zip" + ) + + include(${vcpkg_SOURCE_DIR}/scripts/buildsystems/vcpkg.cmake) elseif(NOT "$ENV{VCPKG_TOOLCHAIN_FILE}" STREQUAL "") # Disable manifest mode (use vcpkg classic mode) when using a custom vcpkg installation option(VCPKG_MANIFEST_MODE "") @@ -324,7 +340,7 @@ if (UNIX) add_definitions(-DYUZU_UNIX=1) endif() -if (ARCHITECTURE_arm64 AND (ANDROID OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")) +if (ARCHITECTURE_arm64 AND (ANDROID OR APPLE OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")) set(HAS_NCE 1) add_definitions(-DHAS_NCE=1) endif() @@ -386,7 +402,6 @@ find_package(fmt 8 REQUIRED) find_package(LLVM MODULE COMPONENTS Demangle) find_package(lz4 REQUIRED) find_package(nlohmann_json 3.8 REQUIRED) -find_package(Opus 1.3 MODULE) find_package(RenderDoc MODULE) find_package(SimpleIni MODULE) find_package(stb MODULE) @@ -395,13 +410,14 @@ find_package(ZLIB 1.2 REQUIRED) find_package(zstd 1.5 REQUIRED) # if (NOT YUZU_USE_EXTERNAL_VULKAN_HEADERS) -# find_package(VulkanHeaders 1.3.274) +# find_package(VulkanHeaders 1.3.274 REQUIRED) # endif() # if (NOT YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES) -# find_package(VulkanUtilityLibraries) +# find_package(VulkanUtilityLibraries REQUIRED) # endif() +# TODO(crueter): Work around this if (NOT YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS) find_package(PkgConfig REQUIRED) pkg_check_modules(SPIRV-Tools REQUIRED SPIRV-Tools) @@ -427,6 +443,10 @@ if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) find_package(dynarmic 6.4.0 CONFIG) endif() +if (ENABLE_CUBEB) + find_package(cubeb CONFIG) +endif() + if (USE_DISCORD_PRESENCE) find_package(DiscordRPC MODULE) endif() @@ -488,8 +508,6 @@ set(FFmpeg_COMPONENTS avutil swscale) -set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm) - add_subdirectory(externals) if (ENABLE_QT) @@ -500,7 +518,7 @@ if (ENABLE_QT) if (NOT Qt6_DIR) set(Qt6_DIR "" CACHE PATH "Additional path to search for Qt6 libraries like C:/Qt/6.8.3/msvc2022_64/lib/cmake/Qt6") endif() - list(APPEND CMAKE_PREFIX_PATH "${Qt6_DIR}") + list(APPEND CMAKE_PREFIX_PATH "${Qt6_DIR}") endif() find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 830e30ca27..25adb63dc2 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -11,8 +11,10 @@ include(CPM) # some of its variables, which is only possible in 3.13+ set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) -# Disable tests in all externals supporting the standard option name +# Disable tests/tools in all externals supporting the standard option name set(BUILD_TESTING OFF) +set(BUILD_TESTS OFF) +set(BUILD_TOOLS OFF) # Build only static externals set(BUILD_SHARED_LIBS OFF) @@ -191,8 +193,12 @@ CPMAddPackage( # SPIRV-Tools if (YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS) - set(SPIRV_SKIP_EXECUTABLES ON) - add_subdirectory(SPIRV-Tools) + CPMAddPackage( + NAME SPIRV-Tools + URL "https://github.com/KhronosGroup/SPIRV-Tools/archive/40eb301f32.zip" + OPTIONS + "SPIRV_SKIP_EXECUTABLES ON" + ) endif() # Boost headers diff --git a/externals/SPIRV-Tools b/externals/SPIRV-Tools deleted file mode 160000 index 40eb301f32..0000000000 --- a/externals/SPIRV-Tools +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 40eb301f320e1d85ce3bc12798022149eae3eee3 diff --git a/externals/dynarmic/CMakeLists.txt b/externals/dynarmic/CMakeLists.txt index 3db8d8077b..69fa9b78c0 100644 --- a/externals/dynarmic/CMakeLists.txt +++ b/externals/dynarmic/CMakeLists.txt @@ -39,8 +39,8 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # Disable in-source builds -set(CMAKE_DISABLE_SOURCE_CHANGES ON) -set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) +# set(CMAKE_DISABLE_SOURCE_CHANGES ON) +# set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") message(SEND_ERROR "In-source builds are not allowed.") endif() @@ -144,13 +144,15 @@ if (DYNARMIC_USE_BUNDLED_EXTERNALS) set(CMAKE_DISABLE_FIND_PACKAGE_oaknut ON) set(CMAKE_DISABLE_FIND_PACKAGE_unordered_dense ON) set(CMAKE_DISABLE_FIND_PACKAGE_xbyak ON) - set(CMAKE_DISABLE_FIND_PACKAGE_Zydis ON) + + set(CPM_USE_LOCAL_PACKAGES OFF) +else() + set(CPM_USE_LOCAL_PACKAGES ON) endif() find_package(Boost 1.57 REQUIRED) find_package(fmt 9 CONFIG) find_package(mcl 0.1.12 EXACT CONFIG) -find_package(unordered_dense CONFIG) if ("arm64" IN_LIST ARCHITECTURE OR DYNARMIC_TESTS) find_package(oaknut 2.0.1 CONFIG) @@ -162,7 +164,6 @@ endif() if ("x86_64" IN_LIST ARCHITECTURE) find_package(xbyak 7 CONFIG) - find_package(Zydis 4 CONFIG) endif() if (DYNARMIC_USE_LLVM) diff --git a/externals/dynarmic/externals/CMakeLists.txt b/externals/dynarmic/externals/CMakeLists.txt index 67fb0f4190..653150309b 100644 --- a/externals/dynarmic/externals/CMakeLists.txt +++ b/externals/dynarmic/externals/CMakeLists.txt @@ -1,3 +1,5 @@ +include(CPM) + # Always build externals as static libraries, even when dynarmic is built as shared if (BUILD_SHARED_LIBS) set(BUILD_SHARED_LIBS OFF) @@ -25,6 +27,7 @@ endif() # catch +# TODO(crueter): dedup if (NOT TARGET Catch2::Catch2WithMain) if (DYNARMIC_TESTS) add_subdirectory(catch EXCLUDE_FROM_ALL) @@ -58,13 +61,15 @@ endif() # unordered_dense -if (NOT TARGET ankerl::unordered_dense) - set(UNORDERED_DENSE_INSTALL ON) - add_subdirectory(unordered_dense) -endif() +CPMAddPackage( + NAME unordered_dense + URL "https://github.com/Lizzie841/unordered_dense/archive/e59d30b7b1.zip" + OPTIONS + "UNORDERED_DENSE_INSTALL ON" +) # xbyak -# uncomment if in an independent repo. +# uncomment if in an independent repo # if (NOT TARGET xbyak::xbyak) # if ("x86_64" IN_LIST ARCHITECTURE) @@ -74,15 +79,19 @@ endif() # zydis -if (NOT TARGET Zydis::Zydis) +CPMAddPackage( + NAME Zydis + VERSION 4 + URL "https://github.com/zyantific/zydis/archive/c2d2bab025.zip" + OPTIONS + "ZYDIS_BUILD_TOOLS OFF" + "ZYDIS_BUILD_EXAMPLES OFF" + "ZYDIS_BUILD_DOXYGEN OFF" +) + +if (Zydis_ADDED) if ("x86_64" IN_LIST ARCHITECTURE) - set(ZYDIS_BUILD_TOOLS OFF) - set(ZYDIS_BUILD_EXAMPLES OFF) - set(ZYDIS_BUILD_DOXYGEN OFF) set(ZYAN_ZYCORE_PATH "${CMAKE_CURRENT_LIST_DIR}/zycore-c" CACHE PATH "") set(CMAKE_DISABLE_FIND_PACKAGE_Doxygen ON) - if (NOT TARGET Zydis) - add_subdirectory(zydis) - endif() endif() endif() diff --git a/externals/dynarmic/externals/unordered_dense b/externals/dynarmic/externals/unordered_dense deleted file mode 160000 index e59d30b7b1..0000000000 --- a/externals/dynarmic/externals/unordered_dense +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e59d30b7b12e1d04cc2fc9c6219e35bda447c17e diff --git a/externals/dynarmic/externals/zydis b/externals/dynarmic/externals/zydis deleted file mode 160000 index c2d2bab025..0000000000 --- a/externals/dynarmic/externals/zydis +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c2d2bab0255e53a7c3e9b615f4eb69449eb942df diff --git a/externals/dynarmic/src/dynarmic/CMakeLists.txt b/externals/dynarmic/src/dynarmic/CMakeLists.txt index ab2d653152..3acecfa06b 100644 --- a/externals/dynarmic/src/dynarmic/CMakeLists.txt +++ b/externals/dynarmic/src/dynarmic/CMakeLists.txt @@ -164,7 +164,7 @@ if ("x86_64" IN_LIST ARCHITECTURE) target_link_libraries(dynarmic PRIVATE xbyak::xbyak - Zydis::Zydis + Zydis ) target_architecture_specific_sources(dynarmic "x86_64" @@ -405,7 +405,7 @@ target_link_libraries(dynarmic Boost::boost fmt::fmt merry::mcl - unordered_dense::unordered_dense + unordered_dense ) if (DYNARMIC_USE_LLVM) target_include_directories(dynarmic PRIVATE ${LLVM_INCLUDE_DIRS}) diff --git a/externals/vcpkg b/externals/vcpkg deleted file mode 160000 index ea2a964f93..0000000000 --- a/externals/vcpkg +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ea2a964f9303270322cf3f2d51c265ba146c422d diff --git a/src/audio_core/CMakeLists.txt b/src/audio_core/CMakeLists.txt index a1e5bdbdcd..bb62608da8 100644 --- a/src/audio_core/CMakeLists.txt +++ b/src/audio_core/CMakeLists.txt @@ -226,7 +226,8 @@ else() ) endif() -target_link_libraries(audio_core PUBLIC common core Opus::opus) +target_link_libraries(audio_core PUBLIC common core Opus) +target_include_directories(audio_core PRIVATE ${Opus_INCLUDE_DIR}) if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) target_link_libraries(audio_core PRIVATE dynarmic::dynarmic) endif() diff --git a/src/audio_core/externals/cubeb/CMakeLists.txt b/src/audio_core/externals/cubeb/CMakeLists.txt index 80caa71c44..f7cc2907a5 100644 --- a/src/audio_core/externals/cubeb/CMakeLists.txt +++ b/src/audio_core/externals/cubeb/CMakeLists.txt @@ -3,7 +3,7 @@ # TODO(crueter): Create a common CPMUtil.cmake that does this for me include(CPM) -set(CPM_USE_LOCAL_PACKAGES OFF) +set(CPM_USE_LOCAL_PACKAGES ON) CPMAddPackage( NAME cubeb URL "https://github.com/mozilla/cubeb/archive/fa02160712.zip" @@ -13,17 +13,18 @@ CPMAddPackage( ) if (cubeb_ADDED) - set(BUILD_TESTS OFF) - set(BUILD_TOOLS OFF) - if (NOT MSVC) if (TARGET speex) target_compile_options(speex PRIVATE -Wno-sign-compare) endif() - target_compile_options(cubeb PRIVATE + + set_target_properties(cubeb PROPERTIES COMPILE_OPTIONS "") + target_compile_options(cubeb INTERFACE -Wno-implicit-const-int-float-conversion -Wno-shadow - -Wno-missing-declarations -Wno-return-type + -Wno-missing-declarations + -Wno-return-type + -Wno-maybe-uninitialized ) else() target_compile_options(cubeb PRIVATE