diff options
| author | crueter <crueter@eden-emu.dev> | 2025-08-14 20:30:30 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-08-14 20:30:30 +0200 |
| commit | 3e55dc6352b786532230ceb21754179917541adf (patch) | |
| tree | 2d47b76e1fdeb1061f338daedb38865080a8c9fc /src | |
| parent | c36cc0d3ee14bc35cf1aa5d38b3f4fe23da8ff9f (diff) | |
[cmake] refactor: CPM over vcpkg (#250)
Completely replaces vcpkg with CPM for all "system" dependencies. Primarily needed for Android and Windows. Also uses my OpenSSL CI for those two platforms.
In theory, improves configure and build time by a LOT and makes things much easier to manage
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/250
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src')
| -rw-r--r-- | src/android/app/build.gradle.kts | 3 | ||||
| -rw-r--r-- | src/android/app/src/main/jni/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | src/android/gradle.properties | 1 | ||||
| -rw-r--r-- | src/common/CMakeLists.txt | 21 | ||||
| -rw-r--r-- | src/common/fs/file.h | 24 | ||||
| -rw-r--r-- | src/core/CMakeLists.txt | 16 | ||||
| -rw-r--r-- | src/core/debugger/debugger.cpp | 10 | ||||
| -rw-r--r-- | src/dynarmic/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/dynarmic/externals/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | src/dynarmic/src/dynarmic/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | src/dynarmic/tests/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | src/network/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/shader_recompiler/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | src/video_core/CMakeLists.txt | 14 | ||||
| -rw-r--r-- | src/web_service/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | src/yuzu/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/yuzu/externals/CMakeLists.txt | 3 |
17 files changed, 90 insertions, 54 deletions
diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts index 05d9fb039c..ea0ff5427d 100644 --- a/src/android/app/build.gradle.kts +++ b/src/android/app/build.gradle.kts @@ -170,8 +170,9 @@ android { "-DENABLE_QT=0", // Don't use QT "-DENABLE_SDL2=0", // Don't use SDL "-DENABLE_WEB_SERVICE=1", // Enable web service + "-DENABLE_OPENSSL=ON", "-DANDROID_ARM_NEON=true", // cryptopp requires Neon to work - "-DYUZU_USE_BUNDLED_VCPKG=ON", + "-DYUZU_USE_CPM=ON", "-DYUZU_USE_BUNDLED_FFMPEG=ON", "-DYUZU_ENABLE_LTO=ON", "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON" diff --git a/src/android/app/src/main/jni/CMakeLists.txt b/src/android/app/src/main/jni/CMakeLists.txt index ec8ae5c57d..1e30b16d96 100644 --- a/src/android/app/src/main/jni/CMakeLists.txt +++ b/src/android/app/src/main/jni/CMakeLists.txt @@ -23,4 +23,8 @@ if (ARCHITECTURE_arm64) target_link_libraries(yuzu-android PRIVATE adrenotools) endif() -set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} yuzu-android) +if (ENABLE_OPENSSL OR ENABLE_WEB_SERVICE) + target_link_libraries(yuzu-android PRIVATE OpenSSL::SSL cpp-jwt::cpp-jwt) +endif() + + set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} yuzu-android) diff --git a/src/android/gradle.properties b/src/android/gradle.properties index ef5fafba03..1da29b6797 100644 --- a/src/android/gradle.properties +++ b/src/android/gradle.properties @@ -16,3 +16,4 @@ kotlin.code.style=official kotlin.parallel.tasks.in.project=true # Android Gradle plugin 8.0.2 android.suppressUnsupportedCompileSdk=34 +android.native.buildOutput=verbose
\ No newline at end of file diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 580f984ad8..e9aed1d7af 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -261,9 +261,24 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") ) endif() -target_link_libraries(common PUBLIC Boost::headers fmt::fmt - stb::headers Threads::Threads) -target_link_libraries(common PRIVATE lz4::lz4 zstd::zstd LLVM::Demangle) +if (BOOST_NO_HEADERS) + target_link_libraries(common PUBLIC Boost::algorithm Boost::icl Boost::pool) +else() + target_link_libraries(common PUBLIC Boost::headers) +endif() + +if (lz4_ADDED) + target_include_directories(common PRIVATE ${lz4_SOURCE_DIR}/lib) +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() if(ANDROID) # For ASharedMemory_create diff --git a/src/common/fs/file.h b/src/common/fs/file.h index 2e2396075d..246c3db5d6 100644 --- a/src/common/fs/file.h +++ b/src/common/fs/file.h @@ -183,18 +183,18 @@ public: FileType type = FileType::BinaryFile, FileShareFlag flag = FileShareFlag::ShareReadOnly); -#ifdef _WIN32 - template <typename Path> - void Open(const Path& path, FileAccessMode mode, FileType type = FileType::BinaryFile, - FileShareFlag flag = FileShareFlag::ShareReadOnly) { - using ValueType = typename Path::value_type; - if constexpr (IsChar<ValueType>) { - Open(ToU8String(path), mode, type, flag); - } else { - Open(std::filesystem::path{path}, mode, type, flag); - } - } -#endif +// #ifdef _WIN32 +// template <typename Path> +// void Open(const Path& path, FileAccessMode mode, FileType type = FileType::BinaryFile, +// FileShareFlag flag = FileShareFlag::ShareReadOnly) { +// using ValueType = typename Path::value_type; +// if constexpr (IsChar<ValueType>) { +// Open(ToU8String(path), mode, type, flag); +// } else { +// Open(std::filesystem::path{path}, mode, type, flag); +// } +// } +// #endif /// Closes the file if it is opened. void Close(); diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index f0090a36b9..8159bea87e 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1186,7 +1186,14 @@ endif() target_include_directories(core PRIVATE ${OPUS_INCLUDE_DIRS}) target_link_libraries(core PUBLIC common PRIVATE audio_core hid_core network video_core nx_tzdb tz) -target_link_libraries(core PUBLIC Boost::headers PRIVATE fmt::fmt nlohmann_json::nlohmann_json mbedtls RenderDoc::API) + +if (BOOST_NO_HEADERS) + target_link_libraries(core PUBLIC Boost::container Boost::heap Boost::asio Boost::process Boost::crc) +else() + target_link_libraries(core PUBLIC Boost::headers) +endif() + +target_link_libraries(core PRIVATE fmt::fmt nlohmann_json::nlohmann_json mbedtls RenderDoc::API) if (MINGW) target_link_libraries(core PRIVATE ${MSWSOCK_LIBRARY}) endif() @@ -1239,9 +1246,14 @@ if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) endif() if(ENABLE_OPENSSL) + find_package(OpenSSL REQUIRED) target_sources(core PRIVATE hle/service/ssl/ssl_backend_openssl.cpp) - target_link_libraries(core PRIVATE OpenSSL::SSL) + if (ANDROID OR MSVC) + link_openssl(core) + else() + target_link_libraries(core PRIVATE OpenSSL::SSL) + endif() elseif (APPLE) target_sources(core PRIVATE hle/service/ssl/ssl_backend_securetransport.cpp) diff --git a/src/core/debugger/debugger.cpp b/src/core/debugger/debugger.cpp index 84c846bab2..26c811ad06 100644 --- a/src/core/debugger/debugger.cpp +++ b/src/core/debugger/debugger.cpp @@ -3,9 +3,15 @@ #include <mutex> + #include <boost/asio.hpp> #include <boost/version.hpp> -#if BOOST_VERSION > 108300 && !defined(_WINDOWS) && !defined(ANDROID) + +#if BOOST_VERSION > 108300 && (!defined(_WINDOWS) || defined(YUZU_BOOST_v1)) && (!defined(ANDROID) || defined(YUZU_BOOST_v1)) +#define USE_BOOST_v1 +#endif + +#ifdef USE_BOOST_v1 #include <boost/process/v1/async_pipe.hpp> #else #include <boost/process/async_pipe.hpp> @@ -329,7 +335,7 @@ private: struct ConnectionState { boost::asio::ip::tcp::socket client_socket; -#if BOOST_VERSION > 108300 && !defined(_WINDOWS) && !defined(ANDROID) +#ifdef USE_BOOST_v1 boost::process::v1::async_pipe signal_pipe; #else boost::process::async_pipe signal_pipe; diff --git a/src/dynarmic/CMakeLists.txt b/src/dynarmic/CMakeLists.txt index 3d73951065..5c28435f72 100644 --- a/src/dynarmic/CMakeLists.txt +++ b/src/dynarmic/CMakeLists.txt @@ -147,8 +147,6 @@ if (DYNARMIC_USE_BUNDLED_EXTERNALS) set(CMAKE_DISABLE_FIND_PACKAGE_Zycore ON) endif() -set(CPM_USE_LOCAL_PACKAGES ON) - find_package(Boost 1.57 REQUIRED) find_package(fmt 9 CONFIG) diff --git a/src/dynarmic/externals/CMakeLists.txt b/src/dynarmic/externals/CMakeLists.txt index ec25e415e1..072558a618 100644 --- a/src/dynarmic/externals/CMakeLists.txt +++ b/src/dynarmic/externals/CMakeLists.txt @@ -95,6 +95,7 @@ AddPackage( # TODO(crueter): maybe it's just Gentoo but zydis system package really sucks if ("x86_64" IN_LIST ARCHITECTURE) + # TODO(crueter): system zycore doesn't work with zydis AddPackage( NAME Zycore REPO "zyantific/zycore-c" @@ -102,8 +103,8 @@ if ("x86_64" IN_LIST ARCHITECTURE) HASH 15aa399f39713e042c4345bc3175c82f14dca849fde2a21d4f591f62c43e227b70d868d8bb86beb5f4eb68b1d6bd3792cdd638acf89009e787e3d10ee7401924 OPTIONS "CMAKE_DISABLE_FIND_PACKAGE_Doxygen ON" - # BUNDLED_PACKAGE ${DYNARMIC_USE_BUNDLED_EXTERNALS} EXCLUDE_FROM_ALL ON + SYSTEM_PACKAGE OFF ) AddPackage( @@ -112,13 +113,13 @@ if ("x86_64" IN_LIST ARCHITECTURE) 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_ZYCORE_PATH ${Zycore_SOURCE_DIR}" + "ZYAN_SYSTEM_ZYCORE ON" "CMAKE_DISABLE_FIND_PACKAGE_Doxygen ON" - # BUNDLED_PACKAGE ${DYNARMIC_USE_BUNDLED_EXTERNALS} EXCLUDE_FROM_ALL ON ) endif() diff --git a/src/dynarmic/src/dynarmic/CMakeLists.txt b/src/dynarmic/src/dynarmic/CMakeLists.txt index 3c123ac388..e060989f82 100644 --- a/src/dynarmic/src/dynarmic/CMakeLists.txt +++ b/src/dynarmic/src/dynarmic/CMakeLists.txt @@ -411,10 +411,16 @@ endif() target_compile_options(dynarmic PRIVATE ${DYNARMIC_CXX_FLAGS}) target_link_libraries(dynarmic PRIVATE - Boost::boost fmt::fmt merry::mcl ) + +if (BOOST_NO_HEADERS) +target_link_libraries(dynarmic PRIVATE Boost::variant Boost::icl Boost::pool) +else() + target_link_libraries(dynarmic PRIVATE Boost::headers) +endif() + if (DYNARMIC_USE_LLVM) target_include_directories(dynarmic PRIVATE ${LLVM_INCLUDE_DIRS}) target_compile_definitions(dynarmic PRIVATE DYNARMIC_USE_LLVM=1 ${LLVM_DEFINITIONS}) diff --git a/src/dynarmic/tests/CMakeLists.txt b/src/dynarmic/tests/CMakeLists.txt index fba74138c5..b56f884c38 100644 --- a/src/dynarmic/tests/CMakeLists.txt +++ b/src/dynarmic/tests/CMakeLists.txt @@ -88,7 +88,7 @@ if (("A32" IN_LIST DYNARMIC_FRONTENDS) AND ("A64" IN_LIST DYNARMIC_FRONTENDS)) create_target_directory_groups(dynarmic_print_info) - target_link_libraries(dynarmic_print_info PRIVATE dynarmic Boost::boost fmt::fmt merry::mcl) + target_link_libraries(dynarmic_print_info PRIVATE dynarmic Boost::headers fmt::fmt merry::mcl) target_include_directories(dynarmic_print_info PRIVATE . ../src) target_compile_options(dynarmic_print_info PRIVATE ${DYNARMIC_CXX_FLAGS}) target_compile_definitions(dynarmic_print_info PRIVATE FMT_USE_USER_DEFINED_LITERALS=1) @@ -103,7 +103,7 @@ if (("A32" IN_LIST DYNARMIC_FRONTENDS) AND ("A64" IN_LIST DYNARMIC_FRONTENDS)) create_target_directory_groups(dynarmic_test_generator) - target_link_libraries(dynarmic_test_generator PRIVATE dynarmic Boost::boost fmt::fmt merry::mcl) + target_link_libraries(dynarmic_test_generator PRIVATE dynarmic Boost::headers fmt::fmt merry::mcl) target_include_directories(dynarmic_test_generator PRIVATE . ../src) target_compile_options(dynarmic_test_generator PRIVATE ${DYNARMIC_CXX_FLAGS}) target_compile_definitions(dynarmic_test_generator PRIVATE FMT_USE_USER_DEFINED_LITERALS=1) @@ -116,7 +116,7 @@ if (("A32" IN_LIST DYNARMIC_FRONTENDS) AND ("A64" IN_LIST DYNARMIC_FRONTENDS)) create_target_directory_groups(dynarmic_test_reader) - target_link_libraries(dynarmic_test_reader PRIVATE dynarmic Boost::boost fmt::fmt merry::mcl) + target_link_libraries(dynarmic_test_reader PRIVATE dynarmic Boost::headers fmt::fmt merry::mcl) target_include_directories(dynarmic_test_reader PRIVATE . ../src) target_compile_options(dynarmic_test_reader PRIVATE ${DYNARMIC_CXX_FLAGS}) target_compile_definitions(dynarmic_test_reader PRIVATE FMT_USE_USER_DEFINED_LITERALS=1) @@ -124,7 +124,7 @@ endif() create_target_directory_groups(dynarmic_tests) -target_link_libraries(dynarmic_tests PRIVATE dynarmic Boost::boost Catch2::Catch2WithMain fmt::fmt merry::mcl) +target_link_libraries(dynarmic_tests PRIVATE dynarmic Boost::headers Catch2::Catch2WithMain fmt::fmt merry::mcl) target_include_directories(dynarmic_tests PRIVATE . ../src) target_compile_options(dynarmic_tests PRIVATE ${DYNARMIC_CXX_FLAGS}) target_compile_definitions(dynarmic_tests PRIVATE FMT_USE_USER_DEFINED_LITERALS=1) diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index 1657feaa5f..d85e8bf1bc 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -19,7 +19,7 @@ add_library(network STATIC create_target_directory_groups(network) -target_link_libraries(network PRIVATE common enet::enet Boost::headers) +target_link_libraries(network PRIVATE common enet Boost::headers) if (ENABLE_WEB_SERVICE) target_compile_definitions(network PRIVATE -DENABLE_WEB_SERVICE) target_link_libraries(network PRIVATE web_service) diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt index eb412d08e3..4954beda8c 100644 --- a/src/shader_recompiler/CMakeLists.txt +++ b/src/shader_recompiler/CMakeLists.txt @@ -242,13 +242,7 @@ add_library(shader_recompiler STATIC varying_state.h ) -if (YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS) - set(SPIRV_TOOLS_LIBRARY SPIRV-Tools-opt) -else() - set(SPIRV_TOOLS_LIBRARY SPIRV-Tools-opt SPIRV-Tools SPIRV-Tools-link) -endif() - -target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit ${SPIRV_TOOLS_LIBRARY}) +target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit SPIRV-Tools-opt SPIRV-Tools SPIRV-Tools-link) if (MSVC) target_compile_options(shader_recompiler PRIVATE diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index eed1a73bff..83111c31b0 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt @@ -329,19 +329,7 @@ target_link_options(video_core PRIVATE ${FFmpeg_LDFLAGS}) add_dependencies(video_core host_shaders) target_include_directories(video_core PRIVATE ${HOST_SHADERS_INCLUDE}) -if (VulkanMemoryAllocator_ADDED) - target_include_directories(video_core PUBLIC ${VulkanMemoryAllocator_SOURCE_DIR}/include) -endif() - -if (VulkanUtilityLibraries_ADDED) - target_include_directories(video_core PUBLIC ${VulkanUtilityLibraries_SOURCE_DIR}/include) -endif() - -if (VulkanHeaders_ADDED) - target_include_directories(video_core PUBLIC ${VulkanHeaders_SOURCE_DIR}/include) -endif() - -target_link_libraries(video_core PRIVATE sirit Vulkan::Headers) +target_link_libraries(video_core PRIVATE sirit Vulkan::Headers Vulkan::UtilityHeaders GPUOpen::VulkanMemoryAllocator) if (ENABLE_NSIGHT_AFTERMATH) if (NOT DEFINED ENV{NSIGHT_AFTERMATH_SDK}) diff --git a/src/web_service/CMakeLists.txt b/src/web_service/CMakeLists.txt index 95d3bd87ff..510d8bf668 100644 --- a/src/web_service/CMakeLists.txt +++ b/src/web_service/CMakeLists.txt @@ -14,9 +14,17 @@ add_library(web_service STATIC web_result.h ) +find_package(OpenSSL REQUIRED) + create_target_directory_groups(web_service) target_include_directories(web_service PUBLIC ${cpp-jwt_SOURCE_DIR}/include) -target_link_libraries(web_service PRIVATE common network nlohmann_json::nlohmann_json httplib::httplib) +target_link_libraries(web_service PRIVATE common network nlohmann_json::nlohmann_json httplib::httplib cpp-jwt::cpp-jwt) + +if (ANDROID OR MSVC) + link_openssl(web_service) +else() + target_link_libraries(web_service PRIVATE OpenSSL::SSL) +endif() if (YUZU_USE_PRECOMPILED_HEADERS) target_precompile_headers(web_service PRIVATE precompiled_headers.h) diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index fb42962840..473355e805 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -397,6 +397,7 @@ elseif(WIN32) endif() target_link_libraries(yuzu PRIVATE common core input_common frontend_common network video_core) +target_link_libraries(yuzu PRIVATE nlohmann_json::nlohmann_json) target_link_libraries(yuzu PRIVATE Boost::headers glad Qt6::Widgets) target_link_libraries(yuzu PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads) diff --git a/src/yuzu/externals/CMakeLists.txt b/src/yuzu/externals/CMakeLists.txt index 1ded70813b..d7f3f1457a 100644 --- a/src/yuzu/externals/CMakeLists.txt +++ b/src/yuzu/externals/CMakeLists.txt @@ -20,5 +20,6 @@ AddPackage( REPO "crueter/quazip-qt6" SHA f838774d63 HASH 9f629a438699801244a106c8df6d5f8f8d19e80df54f530a89403a10c8c4e37a6e95606bbdd307f23636961e8ce34eb37a2186d589a1f227ac9c8e2c678e326e - SYSTEM_PACKAGE ON + OPTIONS + "QUAZIP_INSTALL OFF" ) |
