aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcrueter <crueter@eden-emu.dev>2025-08-29 00:18:02 +0200
committercrueter <crueter@eden-emu.dev>2025-08-29 00:18:02 +0200
commit702a2beb7c3b30f84b90e88fc06ece2cd64d36f4 (patch)
treeea6ea569fe9c5769225daa240d0e070ec18ff0d1 /src
parentd709771d67d9405edaa215d25af2d521cdb1983b (diff)
[cmake] refactor: cpmfile, deps prefetch, force system and more (#322)
CPM Dependencies are now managed in a singular json file, where each can be properly prefetched at-will via `tools/cpm-fetch.sh <packages...>`, or all at once via `tools/cpm-fetch-all.sh`. Adds docs for CPMUtil as well. Also adds `<package>_FORCE_{BUNDLED,SYSTEM}` overrides Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/322 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/android/app/build.gradle.kts5
-rw-r--r--src/common/CMakeLists.txt8
-rw-r--r--src/dynarmic/externals/CMakeLists.txt86
-rw-r--r--src/dynarmic/externals/cpmfile.json47
-rw-r--r--src/shader_recompiler/CMakeLists.txt2
-rw-r--r--src/yuzu/externals/CMakeLists.txt13
-rw-r--r--src/yuzu/externals/cpmfile.json12
7 files changed, 94 insertions, 79 deletions
diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts
index 0cbb29b01b..d907284bb7 100644
--- a/src/android/app/build.gradle.kts
+++ b/src/android/app/build.gradle.kts
@@ -175,7 +175,10 @@ android {
"-DYUZU_USE_CPM=ON",
"-DYUZU_USE_BUNDLED_FFMPEG=ON",
"-DYUZU_ENABLE_LTO=ON",
- "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
+ "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON",
+ "-DBUILD_TESTING=OFF",
+ "-DYUZU_TESTS=OFF",
+ "-DDYNARMIC_TESTS=OFF"
)
abiFilters("arm64-v8a")
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index cbe1d35fc5..6173e29f45 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -272,13 +272,7 @@ if (lz4_ADDED)
endif()
target_link_libraries(common PUBLIC fmt::fmt stb::headers Threads::Threads)
-target_link_libraries(common PRIVATE lz4::lz4 LLVM::Demangle)
-
-if (TARGET libzstd_static)
- target_link_libraries(common PRIVATE libzstd_static)
-else()
- target_link_libraries(common PRIVATE zstd)
-endif()
+target_link_libraries(common PRIVATE lz4::lz4 LLVM::Demangle zstd::zstd)
if (TARGET unordered_dense::unordered_dense)
# weird quirk of system installs
diff --git a/src/dynarmic/externals/CMakeLists.txt b/src/dynarmic/externals/CMakeLists.txt
index 072558a618..23cfd42236 100644
--- a/src/dynarmic/externals/CMakeLists.txt
+++ b/src/dynarmic/externals/CMakeLists.txt
@@ -1,11 +1,11 @@
+# Explicitly include CPMUtil here since we have a separate cpmfile for dynarmic
+set(CPMUTIL_JSON_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cpmfile.json)
include(CPMUtil)
# Always build externals as static libraries, even when dynarmic is built as shared
-if (BUILD_SHARED_LIBS)
- set(BUILD_SHARED_LIBS OFF)
- set(CMAKE_POSITION_INDEPENDENT_CODE ON)
- set_property(DIRECTORY PROPERTY EXCLUDE_FROM_ALL ON)
-endif()
+set(BUILD_SHARED_LIBS OFF)
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+set_property(DIRECTORY PROPERTY EXCLUDE_FROM_ALL ON)
# Allow options shadowing with normal variables when subproject use old cmake policy
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
@@ -22,42 +22,32 @@ set(BUILD_TESTING OFF)
if ("riscv" IN_LIST ARCHITECTURE)
add_subdirectory(biscuit)
- AddPackage(
+ AddJsonPackage(
NAME biscuit
- VERSION 0.9.1
- REPO "lioncash/biscuit"
- SHA 76b0be8dae
- HASH 47d55ed02d032d6cf3dc107c6c0a9aea686d5f25aefb81d1af91db027b6815bd5add1755505e19d76625feeb17aa2db6cd1668fe0dad2e6a411519bde6ca4489
BUNDLED_PACKAGE ${DYNARMIC_USE_BUNDLED_EXTERNALS}
)
endif()
# catch
-# TODO(crueter): dedup
-if (NOT TARGET Catch2::Catch2WithMain)
- if (DYNARMIC_TESTS)
- find_package(Catch2 3.0.1 REQUIRED)
- endif()
-endif()
+# if (NOT TARGET Catch2::Catch2WithMain)
+# if (DYNARMIC_TESTS)
+# find_package(Catch2 3.0.1 REQUIRED)
+# endif()
+# endif()
# fmt
-if (NOT TARGET fmt::fmt)
- # fmtlib formatting library
- set(FMT_INSTALL ON)
- add_subdirectory(fmt)
-endif()
+# if (NOT TARGET fmt::fmt)
+# # fmtlib formatting library
+# set(FMT_INSTALL ON)
+# add_subdirectory(fmt)
+# endif()
# mcl
-AddPackage(
+AddJsonPackage(
NAME mcl
- VERSION 0.1.12
- REPO "azahar-emu/mcl"
- SHA 7b08d83418
- HASH f943bac39c1879986decad7a442ff4288eaeca4a2907684c7914e115a55ecc43c2782ded85c0835763fe04e40d5c82220ce864423e489e648e408a84f54dc4f3
- OPTIONS
- "MCL_INSTALL OFF"
+ BUNDLED_PACKAGE ${DYNARMIC_USE_BUNDLED_EXTERNALS}
)
# oaknut
@@ -72,14 +62,9 @@ AddPackage(
# unordered_dense
-AddPackage(
- NAME unordered_dense
- REPO "Lizzie841/unordered_dense"
- SHA e59d30b7b1
- HASH 71eff7bd9ba4b9226967bacd56a8ff000946f8813167cb5664bb01e96fb79e4e220684d824fe9c59c4d1cc98c606f13aff05b7940a1ed8ab3c95d6974ee34fa0
- FIND_PACKAGE_ARGUMENTS "CONFIG"
- OPTIONS
- "UNORDERED_DENSE_INSTALL OFF"
+AddJsonPackage(
+ NAME unordered-dense
+ BUNDLED_PACKAGE ${DYNARMIC_USE_BUNDLED_EXTERNALS}
)
# xbyak
@@ -95,31 +80,12 @@ AddPackage(
# TODO(crueter): maybe it's just Gentoo but zydis system package really sucks
if ("x86_64" IN_LIST ARCHITECTURE)
+ set(CMAKE_DISABLE_FIND_PACKAGE_Doxygen ON)
# TODO(crueter): system zycore doesn't work with zydis
- AddPackage(
- NAME Zycore
- REPO "zyantific/zycore-c"
- SHA 75a36c45ae
- HASH 15aa399f39713e042c4345bc3175c82f14dca849fde2a21d4f591f62c43e227b70d868d8bb86beb5f4eb68b1d6bd3792cdd638acf89009e787e3d10ee7401924
- OPTIONS
- "CMAKE_DISABLE_FIND_PACKAGE_Doxygen ON"
- EXCLUDE_FROM_ALL ON
- SYSTEM_PACKAGE OFF
- )
+ AddJsonPackage(zycore)
- AddPackage(
- NAME Zydis
- VERSION 4
- REPO "zyantific/zydis"
- SHA c2d2bab025
- HASH 7b48f213ff7aab2926f8c9c65195959143bebbfb2b9a25051ffd8b8b0f1baf1670d9739781de674577d955925f91ac89376e16b476a03828c84e2fd765d45020
- FIND_PACKAGE_ARGUMENTS "CONFIG"
- OPTIONS
- "ZYDIS_BUILD_TOOLS OFF"
- "ZYDIS_BUILD_EXAMPLES OFF"
- "ZYDIS_BUILD_DOXYGEN OFF"
- "ZYAN_SYSTEM_ZYCORE ON"
- "CMAKE_DISABLE_FIND_PACKAGE_Doxygen ON"
- EXCLUDE_FROM_ALL ON
+ AddJsonPackage(
+ NAME zydis
+ BUNDLED_PACKAGE ${DYNARMIC_USE_BUNDLED_EXTERNALS}
)
endif()
diff --git a/src/dynarmic/externals/cpmfile.json b/src/dynarmic/externals/cpmfile.json
new file mode 100644
index 0000000000..b934856af2
--- /dev/null
+++ b/src/dynarmic/externals/cpmfile.json
@@ -0,0 +1,47 @@
+{
+ "biscuit": {
+ "version": "0.9.1",
+ "repo": "lioncash/biscuit",
+ "sha": "76b0be8dae",
+ "hash": "47d55ed02d032d6cf3dc107c6c0a9aea686d5f25aefb81d1af91db027b6815bd5add1755505e19d76625feeb17aa2db6cd1668fe0dad2e6a411519bde6ca4489"
+ },
+ "mcl": {
+ "version": "0.1.12",
+ "repo": "azahar-emu/mcl",
+ "sha": "7b08d83418",
+ "hash": "f943bac39c1879986decad7a442ff4288eaeca4a2907684c7914e115a55ecc43c2782ded85c0835763fe04e40d5c82220ce864423e489e648e408a84f54dc4f3",
+ "options": [
+ "MCL_INSTALL OFF"
+ ]
+ },
+ "unordered-dense": {
+ "package": "unordered_dense",
+ "repo": "Lizzie841/unordered_dense",
+ "sha": "e59d30b7b1",
+ "hash": "71eff7bd9ba4b9226967bacd56a8ff000946f8813167cb5664bb01e96fb79e4e220684d824fe9c59c4d1cc98c606f13aff05b7940a1ed8ab3c95d6974ee34fa0",
+ "find_args": "CONFIG",
+ "options": [
+ "UNORDERED_DENSE_INSTALL OFF"
+ ]
+ },
+ "zycore": {
+ "package": "Zycore",
+ "repo": "zyantific/zycore-c",
+ "sha": "75a36c45ae",
+ "hash": "15aa399f39713e042c4345bc3175c82f14dca849fde2a21d4f591f62c43e227b70d868d8bb86beb5f4eb68b1d6bd3792cdd638acf89009e787e3d10ee7401924",
+ "bundled": true
+ },
+ "zydis": {
+ "package": "Zydis",
+ "version": "4",
+ "repo": "zyantific/zydis",
+ "sha": "c2d2bab025",
+ "hash": "7b48f213ff7aab2926f8c9c65195959143bebbfb2b9a25051ffd8b8b0f1baf1670d9739781de674577d955925f91ac89376e16b476a03828c84e2fd765d45020",
+ "options": [
+ "ZYDIS_BUILD_TOOLS OFF",
+ "ZYDIS_BUILD_EXAMPLES OFF",
+ "ZYDIS_BUILD_DOXYGEN OFF",
+ "ZYAN_SYSTEM_ZYCORE ON"
+ ]
+ }
+}
diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt
index 5d896db93d..55cdc17c1f 100644
--- a/src/shader_recompiler/CMakeLists.txt
+++ b/src/shader_recompiler/CMakeLists.txt
@@ -246,7 +246,7 @@ add_library(shader_recompiler STATIC
)
-target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit SPIRV-Tools-opt SPIRV-Tools SPIRV-Tools-link)
+target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit SPIRV-Tools::SPIRV-Tools)
if (MSVC)
target_compile_options(shader_recompiler PRIVATE
diff --git a/src/yuzu/externals/CMakeLists.txt b/src/yuzu/externals/CMakeLists.txt
index d7f3f1457a..7de41f6dfd 100644
--- a/src/yuzu/externals/CMakeLists.txt
+++ b/src/yuzu/externals/CMakeLists.txt
@@ -1,7 +1,8 @@
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
-# cpm
+# Explicitly include CPMUtil here since we have a separate cpmfile for Qt externals
+set(CPMUTIL_JSON_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cpmfile.json)
include(CPMUtil)
# Disable tests/tools in all externals supporting the standard option name
@@ -14,12 +15,4 @@ set(BUILD_SHARED_LIBS OFF)
set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL ON)
# QuaZip
-AddPackage(
- NAME QuaZip-Qt6
- VERSION 1.3
- REPO "crueter/quazip-qt6"
- SHA f838774d63
- HASH 9f629a438699801244a106c8df6d5f8f8d19e80df54f530a89403a10c8c4e37a6e95606bbdd307f23636961e8ce34eb37a2186d589a1f227ac9c8e2c678e326e
- OPTIONS
- "QUAZIP_INSTALL OFF"
-)
+AddJsonPackage(quazip)
diff --git a/src/yuzu/externals/cpmfile.json b/src/yuzu/externals/cpmfile.json
new file mode 100644
index 0000000000..e3590d0f7f
--- /dev/null
+++ b/src/yuzu/externals/cpmfile.json
@@ -0,0 +1,12 @@
+{
+ "quazip": {
+ "package": "QuaZip-Qt6",
+ "repo": "crueter/quazip-qt6",
+ "sha": "f838774d63",
+ "hash": "9f629a438699801244a106c8df6d5f8f8d19e80df54f530a89403a10c8c4e37a6e95606bbdd307f23636961e8ce34eb37a2186d589a1f227ac9c8e2c678e326e",
+ "version": "1.3",
+ "options": [
+ "QUAZIP_INSTALL OFF"
+ ]
+ }
+}