[cmake] refactor: Use CPM over submodules #143

Merged
crueter merged 42 commits from refactor/cpm into master 2025-08-04 04:50:17 +02:00
12 changed files with 75 additions and 55 deletions
Showing only changes of commit 17f25b794b - Show all commits

12
.gitmodules vendored
View file

@ -13,9 +13,6 @@
[submodule "cpp-httplib"] [submodule "cpp-httplib"]
path = externals/cpp-httplib path = externals/cpp-httplib
url = https://github.com/yhirose/cpp-httplib.git url = https://github.com/yhirose/cpp-httplib.git
[submodule "vcpkg"]
path = externals/vcpkg
url = https://github.com/microsoft/vcpkg.git
[submodule "cpp-jwt"] [submodule "cpp-jwt"]
path = externals/cpp-jwt path = externals/cpp-jwt
url = https://github.com/arun11299/cpp-jwt.git url = https://github.com/arun11299/cpp-jwt.git
@ -31,21 +28,12 @@
[submodule "externals/dynarmic/externals/fmt"] [submodule "externals/dynarmic/externals/fmt"]
path = externals/dynarmic/externals/fmt path = externals/dynarmic/externals/fmt
url = https://github.com/fmtlib/fmt.git 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"] [submodule "externals/dynarmic/externals/zycore-c"]
path = externals/dynarmic/externals/zycore-c path = externals/dynarmic/externals/zycore-c
url = https://github.com/zyantific/zycore-c.git 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"] [submodule "externals/nx_tzdb/tzdb_to_nx/externals/tz/tz"]
path = 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 url = https://github.com/eggert/tz.git
[submodule "externals/sirit/externals/SPIRV-Headers"] [submodule "externals/sirit/externals/SPIRV-Headers"]
path = externals/sirit/externals/SPIRV-Headers path = externals/sirit/externals/SPIRV-Headers
url = https://github.com/KhronosGroup/SPIRV-Headers.git url = https://github.com/KhronosGroup/SPIRV-Headers.git
[submodule "externals/SPIRV-Tools"]
path = externals/SPIRV-Tools
url = https://github.com/KhronosGroup/SPIRV-Tools.git

View file

@ -58,14 +58,18 @@ else()
option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ON) option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ON)
endif() 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") if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" OFF) option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" OFF)
else() else()
option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ON) option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ON)
endif() 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") if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" OFF) option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" OFF)
else() 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) 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) 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}") 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 set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # Workaround for Oboe
endif() endif()
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
if (YUZU_USE_BUNDLED_VCPKG) if (YUZU_USE_BUNDLED_VCPKG)
if (ANDROID) if (ANDROID)
set(ENV{ANDROID_NDK_HOME} "${ANDROID_NDK}") set(ENV{ANDROID_NDK_HOME} "${ANDROID_NDK}")
@ -204,7 +211,16 @@ if (YUZU_USE_BUNDLED_VCPKG)
list(APPEND VCPKG_MANIFEST_FEATURES "android") list(APPEND VCPKG_MANIFEST_FEATURES "android")
endif() 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 "") elseif(NOT "$ENV{VCPKG_TOOLCHAIN_FILE}" STREQUAL "")
# Disable manifest mode (use vcpkg classic mode) when using a custom vcpkg installation # Disable manifest mode (use vcpkg classic mode) when using a custom vcpkg installation
option(VCPKG_MANIFEST_MODE "") option(VCPKG_MANIFEST_MODE "")
@ -324,7 +340,7 @@ if (UNIX)
add_definitions(-DYUZU_UNIX=1) add_definitions(-DYUZU_UNIX=1)
endif() 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) set(HAS_NCE 1)
add_definitions(-DHAS_NCE=1) add_definitions(-DHAS_NCE=1)
endif() endif()
@ -386,7 +402,6 @@ find_package(fmt 8 REQUIRED)
find_package(LLVM MODULE COMPONENTS Demangle) find_package(LLVM MODULE COMPONENTS Demangle)
find_package(lz4 REQUIRED) find_package(lz4 REQUIRED)
find_package(nlohmann_json 3.8 REQUIRED) find_package(nlohmann_json 3.8 REQUIRED)
find_package(Opus 1.3 MODULE)
find_package(RenderDoc MODULE) find_package(RenderDoc MODULE)
find_package(SimpleIni MODULE) find_package(SimpleIni MODULE)
find_package(stb MODULE) find_package(stb MODULE)
@ -395,13 +410,14 @@ find_package(ZLIB 1.2 REQUIRED)
find_package(zstd 1.5 REQUIRED) find_package(zstd 1.5 REQUIRED)
# if (NOT YUZU_USE_EXTERNAL_VULKAN_HEADERS) # if (NOT YUZU_USE_EXTERNAL_VULKAN_HEADERS)
# find_package(VulkanHeaders 1.3.274) # find_package(VulkanHeaders 1.3.274 REQUIRED)
# endif() # endif()
# if (NOT YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES) # if (NOT YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES)
# find_package(VulkanUtilityLibraries) # find_package(VulkanUtilityLibraries REQUIRED)
# endif() # endif()
# TODO(crueter): Work around this
if (NOT YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS) if (NOT YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS)
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(SPIRV-Tools REQUIRED SPIRV-Tools) 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) find_package(dynarmic 6.4.0 CONFIG)
endif() endif()
if (ENABLE_CUBEB)
find_package(cubeb CONFIG)
endif()
if (USE_DISCORD_PRESENCE) if (USE_DISCORD_PRESENCE)
find_package(DiscordRPC MODULE) find_package(DiscordRPC MODULE)
endif() endif()
@ -488,8 +508,6 @@ set(FFmpeg_COMPONENTS
avutil avutil
swscale) swscale)
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
add_subdirectory(externals) add_subdirectory(externals)
if (ENABLE_QT) if (ENABLE_QT)
@ -500,7 +518,7 @@ if (ENABLE_QT)
if (NOT Qt6_DIR) 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") set(Qt6_DIR "" CACHE PATH "Additional path to search for Qt6 libraries like C:/Qt/6.8.3/msvc2022_64/lib/cmake/Qt6")
endif() endif()
list(APPEND CMAKE_PREFIX_PATH "${Qt6_DIR}") list(APPEND CMAKE_PREFIX_PATH "${Qt6_DIR}")
endif() endif()
find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent) find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent)

View file

@ -11,8 +11,10 @@ include(CPM)
# some of its variables, which is only possible in 3.13+ # some of its variables, which is only possible in 3.13+
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) 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_TESTING OFF)
set(BUILD_TESTS OFF)
set(BUILD_TOOLS OFF)
# Build only static externals # Build only static externals
set(BUILD_SHARED_LIBS OFF) set(BUILD_SHARED_LIBS OFF)
@ -191,8 +193,12 @@ CPMAddPackage(
# SPIRV-Tools # SPIRV-Tools
if (YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS) if (YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS)
set(SPIRV_SKIP_EXECUTABLES ON) CPMAddPackage(
add_subdirectory(SPIRV-Tools) NAME SPIRV-Tools
URL "https://github.com/KhronosGroup/SPIRV-Tools/archive/40eb301f32.zip"
OPTIONS
"SPIRV_SKIP_EXECUTABLES ON"
)
endif() endif()
# Boost headers # Boost headers

@ -1 +0,0 @@
Subproject commit 40eb301f320e1d85ce3bc12798022149eae3eee3

View file

@ -39,8 +39,8 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_EXTENSIONS OFF)
# Disable in-source builds # Disable in-source builds
set(CMAKE_DISABLE_SOURCE_CHANGES ON) # set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) # set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
message(SEND_ERROR "In-source builds are not allowed.") message(SEND_ERROR "In-source builds are not allowed.")
endif() endif()
@ -144,13 +144,15 @@ if (DYNARMIC_USE_BUNDLED_EXTERNALS)
set(CMAKE_DISABLE_FIND_PACKAGE_oaknut ON) set(CMAKE_DISABLE_FIND_PACKAGE_oaknut ON)
set(CMAKE_DISABLE_FIND_PACKAGE_unordered_dense ON) set(CMAKE_DISABLE_FIND_PACKAGE_unordered_dense ON)
set(CMAKE_DISABLE_FIND_PACKAGE_xbyak 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() endif()
find_package(Boost 1.57 REQUIRED) find_package(Boost 1.57 REQUIRED)
find_package(fmt 9 CONFIG) find_package(fmt 9 CONFIG)
find_package(mcl 0.1.12 EXACT CONFIG) find_package(mcl 0.1.12 EXACT CONFIG)
find_package(unordered_dense CONFIG)
if ("arm64" IN_LIST ARCHITECTURE OR DYNARMIC_TESTS) if ("arm64" IN_LIST ARCHITECTURE OR DYNARMIC_TESTS)
find_package(oaknut 2.0.1 CONFIG) find_package(oaknut 2.0.1 CONFIG)
@ -162,7 +164,6 @@ endif()
if ("x86_64" IN_LIST ARCHITECTURE) if ("x86_64" IN_LIST ARCHITECTURE)
find_package(xbyak 7 CONFIG) find_package(xbyak 7 CONFIG)
find_package(Zydis 4 CONFIG)
endif() endif()
if (DYNARMIC_USE_LLVM) if (DYNARMIC_USE_LLVM)

View file

@ -1,3 +1,5 @@
include(CPM)
# Always build externals as static libraries, even when dynarmic is built as shared # Always build externals as static libraries, even when dynarmic is built as shared
if (BUILD_SHARED_LIBS) if (BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS OFF) set(BUILD_SHARED_LIBS OFF)
@ -25,6 +27,7 @@ endif()
# catch # catch
# TODO(crueter): dedup
if (NOT TARGET Catch2::Catch2WithMain) if (NOT TARGET Catch2::Catch2WithMain)
if (DYNARMIC_TESTS) if (DYNARMIC_TESTS)
add_subdirectory(catch EXCLUDE_FROM_ALL) add_subdirectory(catch EXCLUDE_FROM_ALL)
@ -58,13 +61,15 @@ endif()
# unordered_dense # unordered_dense
if (NOT TARGET ankerl::unordered_dense) CPMAddPackage(
set(UNORDERED_DENSE_INSTALL ON) NAME unordered_dense
add_subdirectory(unordered_dense) URL "https://github.com/Lizzie841/unordered_dense/archive/e59d30b7b1.zip"
endif() OPTIONS
"UNORDERED_DENSE_INSTALL ON"
)
# xbyak # xbyak
# uncomment if in an independent repo. # uncomment if in an independent repo
# if (NOT TARGET xbyak::xbyak) # if (NOT TARGET xbyak::xbyak)
# if ("x86_64" IN_LIST ARCHITECTURE) # if ("x86_64" IN_LIST ARCHITECTURE)
@ -74,15 +79,19 @@ endif()
# zydis # 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) 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(ZYAN_ZYCORE_PATH "${CMAKE_CURRENT_LIST_DIR}/zycore-c" CACHE PATH "")
set(CMAKE_DISABLE_FIND_PACKAGE_Doxygen ON) set(CMAKE_DISABLE_FIND_PACKAGE_Doxygen ON)
if (NOT TARGET Zydis)
add_subdirectory(zydis)
endif()
endif() endif()
endif() endif()

@ -1 +0,0 @@
Subproject commit e59d30b7b12e1d04cc2fc9c6219e35bda447c17e

@ -1 +0,0 @@
Subproject commit c2d2bab0255e53a7c3e9b615f4eb69449eb942df

View file

@ -164,7 +164,7 @@ if ("x86_64" IN_LIST ARCHITECTURE)
target_link_libraries(dynarmic target_link_libraries(dynarmic
PRIVATE PRIVATE
xbyak::xbyak xbyak::xbyak
Zydis::Zydis Zydis
) )
target_architecture_specific_sources(dynarmic "x86_64" target_architecture_specific_sources(dynarmic "x86_64"
@ -405,7 +405,7 @@ target_link_libraries(dynarmic
Boost::boost Boost::boost
fmt::fmt fmt::fmt
merry::mcl merry::mcl
unordered_dense::unordered_dense unordered_dense
) )
if (DYNARMIC_USE_LLVM) if (DYNARMIC_USE_LLVM)
target_include_directories(dynarmic PRIVATE ${LLVM_INCLUDE_DIRS}) target_include_directories(dynarmic PRIVATE ${LLVM_INCLUDE_DIRS})

1
externals/vcpkg vendored

@ -1 +0,0 @@
Subproject commit ea2a964f9303270322cf3f2d51c265ba146c422d

View file

@ -226,7 +226,8 @@ else()
) )
endif() 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) if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
target_link_libraries(audio_core PRIVATE dynarmic::dynarmic) target_link_libraries(audio_core PRIVATE dynarmic::dynarmic)
endif() endif()

View file

@ -3,7 +3,7 @@
# TODO(crueter): Create a common CPMUtil.cmake that does this for me # TODO(crueter): Create a common CPMUtil.cmake that does this for me
include(CPM) include(CPM)
set(CPM_USE_LOCAL_PACKAGES OFF) set(CPM_USE_LOCAL_PACKAGES ON)
CPMAddPackage( CPMAddPackage(
NAME cubeb NAME cubeb
URL "https://github.com/mozilla/cubeb/archive/fa02160712.zip" URL "https://github.com/mozilla/cubeb/archive/fa02160712.zip"
@ -13,17 +13,18 @@ CPMAddPackage(
) )
if (cubeb_ADDED) if (cubeb_ADDED)
set(BUILD_TESTS OFF)
set(BUILD_TOOLS OFF)
if (NOT MSVC) if (NOT MSVC)
if (TARGET speex) if (TARGET speex)
target_compile_options(speex PRIVATE -Wno-sign-compare) target_compile_options(speex PRIVATE -Wno-sign-compare)
endif() 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-implicit-const-int-float-conversion
-Wno-shadow -Wno-shadow
-Wno-missing-declarations -Wno-return-type -Wno-missing-declarations
-Wno-return-type
-Wno-maybe-uninitialized
) )
else() else()
target_compile_options(cubeb PRIVATE target_compile_options(cubeb PRIVATE