[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"]
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

View file

@ -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)

View file

@ -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

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

View file

@ -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)

View file

@ -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()

@ -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
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})

1
externals/vcpkg vendored

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

View file

@ -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()

View file

@ -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