0
0
mirror of https://notabug.org/litucks/torzu.git synced 2025-04-24 09:05:13 +00:00

Implemented dependency collection via CPM.cmake

This commit is contained in:
spectranator 2025-04-12 04:09:50 +02:00
parent 7c17d72b1a
commit 977ed0063a
6 changed files with 1419 additions and 35 deletions

View File

@ -12,6 +12,13 @@ include(DownloadExternals)
include(CMakeDependentOption)
include(CTest)
option(YUZU_USE_BUNDLED_VCPKG "Use vcpkg for yuzu dependencies" "${MSVC}")
if (NOT YUZU_USE_BUNDLED_VCPKG)
option(YUZU_USE_CPM "Use CPM.cmake for yuzu dependencies" OFF)
else()
set(YUZU_USE_CPM OFF)
endif()
# Set bundled sdl2/qt as dependent options.
# OFF by default, but if ENABLE_SDL2 and MSVC are true then ON
option(ENABLE_SDL2 "Enable the SDL2 frontend" ON)
@ -34,11 +41,19 @@ option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" "${WIN32}")
option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON)
if (NOT YUZU_USE_CPM)
option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON)
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)
option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" ON)
option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" ON)
else()
set(YUZU_USE_EXTERNAL_VULKAN_HEADERS OFF)
set(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES OFF)
set(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS OFF)
endif()
option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF)
@ -60,8 +75,6 @@ option(YUZU_CMD "Compile the -cmd executable (can disable if -cmd is unused)" ON
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_CHECK_SUBMODULES "Check if submodules are present" ON)
option(YUZU_ENABLE_LTO "Enable link-time optimization" OFF)
@ -303,33 +316,84 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
# =======================================================================
# Enforce the search mode of non-required packages for better and shorter failure messages
find_package(Boost 1.79.0 REQUIRED context)
find_package(enet 1.3 MODULE)
find_package(fmt REQUIRED)
if (YUZU_USE_LLVM_DEMANGLE)
find_package(LLVM 17.0.2 MODULE COMPONENTS Demangle)
if (NOT YUZU_USE_CPM)
find_package(Boost 1.79.0 REQUIRED context)
find_package(enet 1.3 MODULE)
find_package(fmt REQUIRED)
if (YUZU_USE_LLVM_DEMANGLE)
find_package(LLVM 17.0.2 MODULE COMPONENTS Demangle)
endif()
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)
find_package(VulkanMemoryAllocator CONFIG)
find_package(ZLIB 1.2 REQUIRED)
find_package(zstd 1.5 REQUIRED)
else()
include(CMakeModules/CPM.cmake)
message(STATUS "Downloading and extracting boost library sources. This will take some time...")
CPMAddPackage(
NAME boost
URL "https://github.com/boostorg/boost/releases/download/boost-1.88.0/boost-1.88.0-cmake.7z"
VERSION 1.88.0
)
CPMAddPackage("gh:lsalzman/enet@1.3.18")
CPMAddPackage("gh:fmtlib/fmt#11.1.4")
CPMAddPackage(
NAME lz4
GIT_REPOSITORY https://github.com/lz4/lz4.git
VERSION 1.10.0
DOWNLOAD_ONLY YES
)
add_subdirectory(${lz4_SOURCE_DIR}/build/cmake lz4)
CPMAddPackage("gh:nlohmann/json@3.8.0")
CPMAddPackage("gh:xiph/opus@1.3.1")
CPMAddPackage("gh:brofield/simpleini@4.22")
CPMAddPackage("gh:GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator@3.2.1")
CPMAddPackage("gh:madler/zlib@1.2.13")
CPMAddPackage(
NAME zstd
GIT_REPOSITORY https://github.com/facebook/zstd.git
VERSION 1.5.7
DOWNLOAD_ONLY YES
)
add_subdirectory(${zstd_SOURCE_DIR}/build/cmake zstd)
CPMAddPackage("gh:KhronosGroup/SPIRV-Headers#vulkan-sdk-1.3.280.0")
# Set up required aliases
add_library(enet::enet ALIAS enet)
add_library(Opus::opus ALIAS opus)
add_library(lz4::lz4 ALIAS lz4)
add_library(zstd::zstd ALIAS libzstd)
endif()
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)
find_package(VulkanMemoryAllocator CONFIG)
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 REQUIRED)
if (NOT YUZU_USE_CPM)
find_package(VulkanHeaders 1.3.274 REQUIRED)
else()
CPMAddPackage("gh:KhronosGroup/Vulkan-Headers@1.3.274")
endif()
endif()
if (NOT YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES)
find_package(VulkanUtilityLibraries REQUIRED)
if (NOT YUZU_USE_CPM)
find_package(VulkanUtilityLibraries REQUIRED)
else()
CPMAddPackage("gh:KhronosGroup/Vulkan-Utility-Libraries#fce11d52fee0344bb10a098b0a398dff42cb5d51")
endif()
endif()
if (NOT YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS)
find_package(PkgConfig REQUIRED)
pkg_check_modules(SPIRV-Tools REQUIRED SPIRV-Tools)
if (NOT YUZU_USE_CPM)
find_package(PkgConfig REQUIRED)
pkg_check_modules(SPIRV-Tools REQUIRED SPIRV-Tools)
else()
CPMAddPackage("gh:KhronosGroup/SPIRV-Tools#dd4b663e13c07fea4fbb3f70c1c91c86731099f7") # This is tag v2024.2, but some weird but is preventing us from using it here
endif()
endif()
if (ENABLE_LIBUSB)
@ -698,7 +762,10 @@ function(create_target_directory_groups target_name)
endfunction()
# Prevent boost from linking against libs when building
target_link_libraries(Boost::headers INTERFACE Boost::disable_autolinking)
if (NOT TARGET Boost::headers)
target_link_libraries(Boost::headers INTERFACE Boost::disable_autolinking)
endif()
# Adjustments for MSVC + Ninja
if (MSVC AND CMAKE_GENERATOR STREQUAL "Ninja")
add_compile_options(

1291
CMakeModules/CPM.cmake Normal file

File diff suppressed because it is too large Load Diff

View File

@ -15,17 +15,21 @@ set(BUILD_SHARED_LIBS OFF)
set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL ON)
# SPIRV Headers
find_package(SPIRV-Headers)
if (NOT TARGET SPIRV-Headers::SPIRV-Headers)
add_subdirectory(SPIRV-Headers)
find_package(SPIRV-Headers)
if (NOT TARGET SPIRV-Headers::SPIRV-Headers)
add_subdirectory(SPIRV-Headers)
endif()
endif()
# fmt (also used by Dynarmic, so needs to be added first)
find_package(fmt)
if (NOT TARGET fmt::fmt)
# fmtlib formatting library
set(FMT_INSTALL ON)
add_subdirectory(fmt)
find_package(fmt)
if (NOT TARGET fmt::fmt)
# fmtlib formatting library
set(FMT_INSTALL ON)
add_subdirectory(fmt)
endif()
endif()
# Xbyak (also used by Dynarmic, so needs to be added first)
@ -197,8 +201,10 @@ if (NOT TARGET LLVM::Demangle)
add_library(LLVM::Demangle ALIAS demangle)
endif()
add_library(stb stb/stb_dxt.cpp)
target_include_directories(stb PUBLIC ./stb)
if (NOT TARGET stb)
add_library(stb stb/stb_dxt.cpp)
target_include_directories(stb PUBLIC ./stb)
endif()
if (NOT TARGET stb::headers)
add_library(stb::headers ALIAS stb)

View File

@ -185,7 +185,13 @@ endif()
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
install(TARGETS dynarmic EXPORT dynarmicTargets)
# Hack to get CPM.cmake working with this (should be fine though)
set(BOOST_TARGET )
if (TARGET boost_headers)
set(BOOST_TARGET boost_headers)
endif()
install(TARGETS dynarmic ${BOOST_TARGET} EXPORT dynarmicTargets)
install(EXPORT dynarmicTargets
NAMESPACE dynarmic::
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/dynarmic"

View File

@ -503,11 +503,22 @@ set_target_properties(dynarmic PROPERTIES
target_compile_options(dynarmic PRIVATE ${DYNARMIC_CXX_FLAGS})
target_link_libraries(dynarmic
PRIVATE
Boost::boost
fmt::fmt
merry::mcl
tsl::robin_map
)
if (TARGET boost_headers)
target_link_libraries(dynarmic
PRIVATE
boost_headers
)
else()
target_link_libraries(dynarmic
PRIVATE
Boost::boost
)
endif()
if (DYNARMIC_USE_LLVM)
target_include_directories(dynarmic PRIVATE ${LLVM_INCLUDE_DIRS})
target_compile_definitions(dynarmic PRIVATE DYNARMIC_USE_LLVM=1 ${LLVM_DEFINITIONS})

View File

@ -382,8 +382,11 @@ elseif(WIN32)
endif()
target_link_libraries(yuzu PRIVATE common core input_common frontend_common network video_core)
target_link_libraries(yuzu PRIVATE Boost::headers glad Qt${QT_MAJOR_VERSION}::Widgets httplib::httplib)
target_link_libraries(yuzu PRIVATE Boost::headers glad Qt${QT_MAJOR_VERSION}::Widgets)
target_link_libraries(yuzu PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
if (ENABLE_WEB_SERVICE)
target_link_libraries(yuzu PRIVATE httplib::httplib)
endif()
target_link_libraries(yuzu PRIVATE Vulkan::Headers)
if (NOT WIN32)