mirror of
https://github.com/citron-neo/emulator.git
synced 2026-07-05 15:21:57 -07:00
28864c801e
drop orphaned ENABLE_OPENAL option Remove the last remnant of the OpenAL backend: the now-unused option(ENABLE_OPENAL ...) in the root CMakeLists.txt. The sink implementation, build wiring, CPMAddPackage fetch, vcpkg manifest entry, settings enum variant, and sink registration were removed in prior commits
563 lines
27 KiB
CMake
563 lines
27 KiB
CMake
# SPDX-FileCopyrightText: 2026 citron Emulator Project
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
#
|
|
# CMakeModules/dependencies.cmake
|
|
#
|
|
# CPM-managed dependencies. Included when CITRON_USE_CPM=ON, for any platform
|
|
# (Linux native, Windows native via MSYS2, Linux→Windows cross-compile).
|
|
#
|
|
# All packages are fetched from source and built statically. No system
|
|
# packages are assumed or required. CPM_USE_LOCAL_PACKAGES is intentionally
|
|
# left OFF so behaviour is identical regardless of what the host has installed.
|
|
#
|
|
# Packages NOT managed here:
|
|
# - vcpkg (submodule; only used by MSVC/Android paths with CITRON_USE_BUNDLED_VCPKG=ON)
|
|
# - Qt (pre-built binaries via aqt — see CMakeModules/qt_download.cmake)
|
|
#
|
|
# Static linking: BUILD_SHARED_LIBS is forced OFF in externals/CMakeLists.txt;
|
|
# all CPM packages inherit this setting.
|
|
|
|
|
|
# ── Submodule & vcpkg Policy ──────────────────────────────────────────────────
|
|
# Force-disable reliance on git submodules and vcpkg. All external dependencies
|
|
# must be fetched and managed via CPM to ensure portability and build-time
|
|
# environment isolation.
|
|
set(CITRON_CHECK_SUBMODULES OFF CACHE BOOL "Force disable submodule presence checks" FORCE)
|
|
set(CITRON_USE_BUNDLED_VCPKG OFF CACHE BOOL "Force disable vcpkg usage" FORCE)
|
|
|
|
if (NOT COMMAND CPMAddPackage)
|
|
message(FATAL_ERROR "CPM.cmake not loaded — include CMakeModules/CPM.cmake before this file")
|
|
endif()
|
|
|
|
# ── tzdb host capability check ────────────────────────────────────────────────
|
|
# tzdb_to_nx builds 'zic' from C source using the host compiler.
|
|
# On WIN32 hosts, Windows headers lack POSIX APIs (link, symlink, readlink,
|
|
# 2-arg mkdir) so the source build always fails. Force the pre-built
|
|
# release artifact download path instead.
|
|
# On POSIX hosts (Linux, macOS) zic builds correctly; use CPMAddPackage.
|
|
if (WIN32)
|
|
set(CITRON_DOWNLOAD_TIME_ZONE_DATA ON CACHE BOOL
|
|
"Use pre-built timezone data (forced ON: host lacks POSIX build tools)"
|
|
FORCE)
|
|
set(CITRON_TZDB_USE_CPM FALSE)
|
|
message(STATUS "[tzdb] WIN32 host: using pre-built timezone data")
|
|
else()
|
|
set(CITRON_TZDB_USE_CPM TRUE)
|
|
endif()
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# Core dependencies
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
# ── Boost ─────────────────────────────────────────────────────────────────────
|
|
if (NOT TARGET Boost::headers)
|
|
set(BOOST_INCLUDE_LIBRARIES "algorithm;asio;container;context;crc;heap;icl;intrusive;process;range;spirit;test;timer;variant" CACHE STRING "Boost components to build")
|
|
set(BOOST_ENABLE_CMAKE ON CACHE BOOL "Enable Boost CMake")
|
|
set(BUILD_TESTING OFF CACHE BOOL "Disable testing")
|
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Disable shared libs")
|
|
CPMAddPackage(
|
|
NAME Boost
|
|
URL "https://github.com/boostorg/boost/releases/download/boost-1.87.0/boost-1.87.0-cmake.tar.xz"
|
|
)
|
|
if (TARGET Boost::headers)
|
|
set(_boost_headers_target "Boost::headers")
|
|
get_target_property(_boost_headers_aliased "${_boost_headers_target}" ALIASED_TARGET)
|
|
if (_boost_headers_aliased)
|
|
set(_boost_headers_target "${_boost_headers_aliased}")
|
|
endif()
|
|
file(GLOB _boost_header_include_dirs LIST_DIRECTORIES true
|
|
"${Boost_SOURCE_DIR}/libs/*/include")
|
|
list(REMOVE_DUPLICATES _boost_header_include_dirs)
|
|
if (_boost_header_include_dirs)
|
|
target_include_directories("${_boost_headers_target}" SYSTEM INTERFACE ${_boost_header_include_dirs})
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# ── fmt ───────────────────────────────────────────────────────────────────────
|
|
if (NOT TARGET fmt::fmt)
|
|
CPMAddPackage(
|
|
NAME fmt
|
|
GITHUB_REPOSITORY fmtlib/fmt
|
|
GIT_TAG e8244777ee1c32df8233c215ac9ff626b2dd2c38
|
|
OPTIONS "FMT_INSTALL OFF"
|
|
)
|
|
endif()
|
|
|
|
# ── lz4 ───────────────────────────────────────────────────────────────────────
|
|
if (NOT TARGET lz4::lz4)
|
|
CPMAddPackage(
|
|
NAME lz4
|
|
GITHUB_REPOSITORY lz4/lz4
|
|
GIT_TAG v1.10.0
|
|
SOURCE_SUBDIR build/cmake
|
|
OPTIONS
|
|
"LZ4_BUILD_CLI OFF"
|
|
"LZ4_BUILD_LEGACY_LZ4C OFF"
|
|
"BUILD_SHARED_LIBS OFF"
|
|
"BUILD_STATIC_LIBS ON"
|
|
)
|
|
if (TARGET lz4_static AND NOT TARGET lz4::lz4)
|
|
add_library(lz4::lz4 ALIAS lz4_static)
|
|
endif()
|
|
endif()
|
|
|
|
# ── nlohmann-json (header-only) ───────────────────────────────────────────────
|
|
if (NOT TARGET nlohmann_json::nlohmann_json)
|
|
CPMAddPackage(
|
|
NAME nlohmann_json
|
|
GITHUB_REPOSITORY nlohmann/json
|
|
GIT_TAG v3.11.3
|
|
OPTIONS "JSON_BuildTests OFF"
|
|
)
|
|
endif()
|
|
|
|
# ── zlib ──────────────────────────────────────────────────────────────────────
|
|
if (NOT TARGET ZLIB::ZLIB)
|
|
CPMAddPackage(
|
|
NAME ZLIB
|
|
GITHUB_REPOSITORY madler/zlib
|
|
GIT_TAG v1.3.1
|
|
OPTIONS "ZLIB_BUILD_EXAMPLES OFF"
|
|
)
|
|
if (TARGET zlibstatic AND NOT TARGET ZLIB::ZLIB)
|
|
add_library(ZLIB::ZLIB ALIAS zlibstatic)
|
|
set(ZLIB_FOUND TRUE CACHE BOOL "" FORCE)
|
|
set(ZLIB_INCLUDE_DIRS "${ZLIB_SOURCE_DIR};${ZLIB_BINARY_DIR}" CACHE PATH "" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
# ── zstd ──────────────────────────────────────────────────────────────────────
|
|
if (NOT TARGET zstd::libzstd_static)
|
|
CPMAddPackage(
|
|
NAME zstd
|
|
GITHUB_REPOSITORY facebook/zstd
|
|
GIT_TAG v1.5.6
|
|
SOURCE_SUBDIR build/cmake
|
|
OPTIONS
|
|
"ZSTD_BUILD_PROGRAMS OFF"
|
|
"ZSTD_BUILD_SHARED OFF"
|
|
"ZSTD_BUILD_STATIC ON"
|
|
"ZSTD_BUILD_TESTS OFF"
|
|
)
|
|
if (TARGET libzstd_static AND NOT TARGET zstd::libzstd_static)
|
|
add_library(zstd::libzstd_static ALIAS libzstd_static)
|
|
add_library(zstd::zstd ALIAS libzstd_static)
|
|
set(zstd_FOUND TRUE CACHE BOOL "" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
# ── OpenSSL ───────────────────────────────────────────────────────────────────
|
|
if (ENABLE_OPENSSL OR ENABLE_WEB_SERVICE)
|
|
include(${CMAKE_SOURCE_DIR}/CMakeModules/openssl_build.cmake)
|
|
endif()
|
|
|
|
# ── Catch2 (test framework) ───────────────────────────────────────────────────
|
|
if (CITRON_TESTS AND NOT TARGET Catch2::Catch2)
|
|
CPMAddPackage(
|
|
NAME Catch2
|
|
GITHUB_REPOSITORY catchorg/Catch2
|
|
GIT_TAG 675f9eaeb191c51b9d2ffb2bb198009533895051
|
|
OPTIONS "CATCH_INSTALL_DOCS OFF"
|
|
)
|
|
endif()
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# Header-only / trivial packages
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
# ── unordered_dense ───────────────────────────────────────────────────────────
|
|
CPMAddPackage(
|
|
NAME unordered_dense
|
|
GITHUB_REPOSITORY martinus/unordered_dense
|
|
GIT_TAG 7b55cab8418da1603496462ce3ccdb4cb1dc3368
|
|
OPTIONS "BUILD_TESTING OFF"
|
|
)
|
|
|
|
# ── simpleini ─────────────────────────────────────────────────────────────────
|
|
if (NOT TARGET SimpleIni::SimpleIni)
|
|
CPMAddPackage(
|
|
NAME simpleini
|
|
GITHUB_REPOSITORY brofield/simpleini
|
|
GIT_TAG v4.22
|
|
)
|
|
endif()
|
|
|
|
# cpp-jwt removed: JWT RS256 verification is now done directly with OpenSSL EVP
|
|
# in web_service/verify_user_jwt.cpp. No external JWT library needed.
|
|
|
|
# ── cpp-httplib ───────────────────────────────────────────────────────────────
|
|
# OpenSSL TLS support via CPPHTTPLIB_OPENSSL_SUPPORT.
|
|
# web_backend.cpp instantiates httplib::Client with an https:// host which
|
|
# auto-upgrades to TLS through this path.
|
|
if (ENABLE_WEB_SERVICE AND NOT TARGET httplib::httplib)
|
|
CPMAddPackage(
|
|
NAME httplib
|
|
GITHUB_REPOSITORY yhirose/cpp-httplib
|
|
GIT_TAG v0.18.3
|
|
DOWNLOAD_ONLY TRUE
|
|
)
|
|
if (httplib_ADDED)
|
|
add_library(httplib::httplib INTERFACE IMPORTED GLOBAL)
|
|
target_compile_features(httplib::httplib INTERFACE cxx_std_11)
|
|
target_include_directories(httplib::httplib SYSTEM INTERFACE "${httplib_SOURCE_DIR}")
|
|
target_compile_definitions(httplib::httplib INTERFACE CPPHTTPLIB_OPENSSL_SUPPORT)
|
|
target_link_libraries(httplib::httplib INTERFACE
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
$<$<TARGET_EXISTS:Threads::Threads>:Threads::Threads>
|
|
$<$<PLATFORM_ID:Windows>:ws2_32>
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
# ── xbyak ─────────────────────────────────────────────────────────────────────
|
|
if ((ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) AND NOT TARGET xbyak::xbyak)
|
|
CPMAddPackage(
|
|
NAME xbyak
|
|
GITHUB_REPOSITORY herumi/xbyak
|
|
GIT_TAG c506ecd5134122115a981fdd45c2a756f9ce20ac
|
|
)
|
|
endif()
|
|
|
|
# ── Vulkan-Headers ────────────────────────────────────────────────────────────
|
|
option(CITRON_USE_VULKAN_STUB "Use pre-generated Vulkan stub instead of fetching Vulkan-Headers" ON)
|
|
|
|
if (CITRON_USE_EXTERNAL_VULKAN_HEADERS AND NOT TARGET Vulkan::Headers)
|
|
if (CITRON_USE_VULKAN_STUB AND
|
|
NOT CITRON_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES AND
|
|
EXISTS "${CMAKE_SOURCE_DIR}/externals/vulkan-stub/include")
|
|
add_library(Vulkan-Headers INTERFACE)
|
|
target_include_directories(Vulkan-Headers SYSTEM INTERFACE
|
|
"${CMAKE_SOURCE_DIR}/externals/vulkan-stub/include")
|
|
target_compile_definitions(Vulkan-Headers INTERFACE VK_ENABLE_BETA_EXTENSIONS)
|
|
add_library(Vulkan::Headers ALIAS Vulkan-Headers)
|
|
else()
|
|
CPMAddPackage(
|
|
NAME Vulkan-Headers
|
|
GITHUB_REPOSITORY KhronosGroup/Vulkan-Headers
|
|
GIT_TAG v1.4.337
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
# ── Vulkan-Utility-Libraries ──────────────────────────────────────────────────
|
|
if (CITRON_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES AND NOT TARGET Vulkan::LayerSettings)
|
|
CPMAddPackage(
|
|
NAME Vulkan-Utility-Libraries
|
|
GITHUB_REPOSITORY KhronosGroup/Vulkan-Utility-Libraries
|
|
GIT_TAG v1.4.337
|
|
OPTIONS "BUILD_TESTS OFF"
|
|
)
|
|
endif()
|
|
|
|
# ── VulkanMemoryAllocator ─────────────────────────────────────────────────────
|
|
if (NOT TARGET GPUOpen::VulkanMemoryAllocator)
|
|
CPMAddPackage(
|
|
NAME VulkanMemoryAllocator
|
|
GITHUB_REPOSITORY GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
|
|
GIT_TAG v3.1.0
|
|
SYSTEM YES
|
|
OPTIONS "VMA_BUILD_SAMPLES OFF"
|
|
)
|
|
endif()
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# Compiled libraries — upstream repos
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
# ── SPIRV-Headers ─────────────────────────────────────────────────────────────
|
|
# Must be declared before sirit.
|
|
if (NOT TARGET SPIRV-Headers)
|
|
CPMAddPackage(
|
|
NAME SPIRV-Headers
|
|
GITHUB_REPOSITORY KhronosGroup/SPIRV-Headers
|
|
GIT_TAG vulkan-sdk-1.4.304.1
|
|
OPTIONS
|
|
"SPIRV_HEADERS_SKIP_EXAMPLES ON"
|
|
"SPIRV_HEADERS_SKIP_INSTALL ON"
|
|
)
|
|
endif()
|
|
|
|
# ── enet ──────────────────────────────────────────────────────────────────────
|
|
if (NOT TARGET enet::enet)
|
|
CPMAddPackage(
|
|
NAME enet
|
|
GITHUB_REPOSITORY lsalzman/enet
|
|
GIT_TAG 39a72ab1990014eb399cee9d538fd529df99c6a0
|
|
)
|
|
if (TARGET enet AND NOT TARGET enet::enet)
|
|
target_include_directories(enet INTERFACE
|
|
$<BUILD_INTERFACE:${enet_SOURCE_DIR}/include>)
|
|
add_library(enet::enet ALIAS enet)
|
|
endif()
|
|
endif()
|
|
|
|
# ── opus ──────────────────────────────────────────────────────────────────────
|
|
if (NOT TARGET Opus::opus)
|
|
CPMAddPackage(
|
|
NAME opus
|
|
GITHUB_REPOSITORY xiph/opus
|
|
GIT_TAG v1.5.2
|
|
OPTIONS
|
|
"OPUS_BUILD_TESTING OFF"
|
|
"OPUS_BUILD_PROGRAMS OFF"
|
|
"OPUS_INSTALL_PKG_CONFIG_MODULE OFF"
|
|
"OPUS_INSTALL_CMAKE_CONFIG_MODULE OFF"
|
|
)
|
|
endif()
|
|
|
|
# ── cubeb ─────────────────────────────────────────────────────────────────────
|
|
if (ENABLE_CUBEB AND NOT TARGET cubeb::cubeb)
|
|
CPMAddPackage(
|
|
NAME cubeb
|
|
GITHUB_REPOSITORY mozilla/cubeb
|
|
GIT_TAG 48689ae7a73caeb747953f9ed664dc71d2f918d8
|
|
OPTIONS
|
|
"BUILD_TESTS OFF"
|
|
"BUILD_TOOLS OFF"
|
|
"BUILD_RUST_LIBS OFF"
|
|
)
|
|
if (TARGET cubeb AND NOT TARGET cubeb::cubeb)
|
|
add_library(cubeb::cubeb ALIAS cubeb)
|
|
endif()
|
|
if (NOT MSVC)
|
|
if (TARGET speex)
|
|
target_compile_options(speex PRIVATE -Wno-sign-compare)
|
|
endif()
|
|
if (TARGET cubeb)
|
|
target_compile_options(cubeb PRIVATE -Wno-implicit-const-int-float-conversion)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# ── SDL2 ──────────────────────────────────────────────────────────────────────
|
|
if (CITRON_USE_EXTERNAL_SDL2 AND NOT TARGET SDL2::SDL2)
|
|
CPMAddPackage(
|
|
NAME SDL2
|
|
GITHUB_REPOSITORY libsdl-org/SDL
|
|
GIT_TAG release-2.32.10
|
|
OPTIONS
|
|
"SDL_SHARED OFF"
|
|
"SDL_STATIC ON"
|
|
"SDL_TEST OFF"
|
|
)
|
|
endif()
|
|
|
|
# ── tzdb_to_nx ────────────────────────────────────────────────────────────────
|
|
# On POSIX hosts: fetch source via CPM; nx_tzdb/CMakeLists.txt builds zic and
|
|
# generates the timezone headers at build time.
|
|
# On WIN32 hosts: CITRON_TZDB_USE_CPM=FALSE (set above); nx_tzdb downloads the
|
|
# pre-built 221202.zip archive instead.
|
|
if (CITRON_TZDB_USE_CPM)
|
|
CPMAddPackage(
|
|
NAME tzdb_to_nx
|
|
GITHUB_REPOSITORY lat9nq/tzdb_to_nx
|
|
GIT_TAG 97929690234f2b4add36b33657fe3fe09bd57dfd
|
|
DOWNLOAD_ONLY YES
|
|
)
|
|
endif()
|
|
if (tzdb_to_nx_SOURCE_DIR)
|
|
set(TZDB_TO_NX_SOURCE_DIR "${tzdb_to_nx_SOURCE_DIR}")
|
|
endif()
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# Forked repos — pinned to exact SHAs
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
# mbedtls removed: all mbedtls usage replaced with OpenSSL EVP and AES-NI
|
|
# intrinsics. OpenSSL is built via openssl_build.cmake (CPM).
|
|
|
|
# ── oaknut (yuzu-mirror fork) — AArch64 only ──────────────────────────────────
|
|
if (ARCHITECTURE_arm64 AND NOT TARGET merry::oaknut)
|
|
CPMAddPackage(
|
|
NAME oaknut
|
|
GITHUB_REPOSITORY yuzu-mirror/oaknut
|
|
GIT_TAG 94c726ce0338b054eb8cb5ea91de8fe6c19f4392
|
|
)
|
|
endif()
|
|
|
|
# ── sirit (yuzu-mirror fork) ──────────────────────────────────────────────────
|
|
# sirit needs SPIRV-Headers. CPM already populated it above.
|
|
if (NOT TARGET sirit)
|
|
set(SIRIT_USE_SYSTEM_SPIRV_HEADERS ON)
|
|
CPMAddPackage(
|
|
NAME sirit
|
|
GITHUB_REPOSITORY yuzu-mirror/sirit
|
|
GIT_TAG ab75463999f4f3291976b079d42d52ee91eebf3f
|
|
)
|
|
endif()
|
|
|
|
# ── dynarmic (xinitrcn1 fork) ─────────────────────────────────────────────────
|
|
if ((ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) AND NOT (MSVC AND ARCHITECTURE_arm64))
|
|
if (NOT TARGET dynarmic::dynarmic)
|
|
CPMAddPackage(
|
|
NAME dynarmic
|
|
GITHUB_REPOSITORY xinitrcn1/dynarmic
|
|
GIT_TAG c08207ddec63447d625a382b56b04f68c17526c4
|
|
OPTIONS
|
|
"DYNARMIC_USE_PRECOMPILED_HEADERS ${CITRON_USE_PRECOMPILED_HEADERS}"
|
|
"DYNARMIC_IGNORE_ASSERTS ON"
|
|
"DYNARMIC_TESTS OFF"
|
|
)
|
|
if (TARGET dynarmic AND NOT TARGET dynarmic::dynarmic)
|
|
add_library(dynarmic::dynarmic ALIAS dynarmic)
|
|
endif()
|
|
|
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND dynarmic_ADDED)
|
|
execute_process(
|
|
COMMAND git apply --ignore-whitespace
|
|
"${CMAKE_SOURCE_DIR}/patches/mcl_clang_template_fix.patch"
|
|
WORKING_DIRECTORY "${dynarmic_SOURCE_DIR}/externals/mcl"
|
|
RESULT_VARIABLE _mcl_patch
|
|
OUTPUT_QUIET ERROR_QUIET
|
|
)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# ── discord-rpc (yuzu-mirror fork) ───────────────────────────────────────────
|
|
if (USE_DISCORD_PRESENCE AND NOT TARGET DiscordRPC::discord-rpc)
|
|
CPMAddPackage(
|
|
NAME discord-rpc
|
|
GITHUB_REPOSITORY yuzu-mirror/discord-rpc
|
|
GIT_TAG 20cc99aeffa08a4834f156b6ab49ed68618cf94a
|
|
OPTIONS "BUILD_EXAMPLES OFF"
|
|
)
|
|
if (discord-rpc_ADDED)
|
|
execute_process(
|
|
COMMAND git apply --ignore-whitespace
|
|
"${CMAKE_SOURCE_DIR}/patches/rapidjson-compiler-fix.patch"
|
|
WORKING_DIRECTORY "${discord-rpc_SOURCE_DIR}/thirdparty/rapidjson-1.1.0"
|
|
RESULT_VARIABLE _rj_patch OUTPUT_QUIET ERROR_QUIET
|
|
)
|
|
execute_process(
|
|
COMMAND git apply -p0 --ignore-whitespace
|
|
"${CMAKE_SOURCE_DIR}/patches/discord-rpc-wclass-memaccess-fix.patch"
|
|
WORKING_DIRECTORY "${discord-rpc_SOURCE_DIR}"
|
|
RESULT_VARIABLE _dr_patch OUTPUT_QUIET ERROR_QUIET
|
|
)
|
|
endif()
|
|
if (TARGET discord-rpc AND NOT TARGET DiscordRPC::discord-rpc)
|
|
target_include_directories(discord-rpc INTERFACE
|
|
$<BUILD_INTERFACE:${discord-rpc_SOURCE_DIR}/include>)
|
|
add_library(DiscordRPC::discord-rpc ALIAS discord-rpc)
|
|
endif()
|
|
endif()
|
|
|
|
# ── breakpad (yuzu-mirror fork) ───────────────────────────────────────────────
|
|
# Has no usable CMakeLists of its own. Fetched with DOWNLOAD_ONLY so the
|
|
# source is available; externals/CMakeLists.txt contains the build rules and
|
|
# uses ${breakpad_SOURCE_DIR} when CPM is active.
|
|
if (CITRON_CRASH_DUMPS AND NOT TARGET libbreakpad_client)
|
|
CPMAddPackage(
|
|
NAME breakpad
|
|
GITHUB_REPOSITORY yuzu-mirror/breakpad
|
|
GIT_TAG c89f9dddc793f19910ef06c13e4fd240da4e7a59
|
|
DOWNLOAD_ONLY YES
|
|
)
|
|
endif()
|
|
|
|
# ── libadrenotools — Android only ─────────────────────────────────────────────
|
|
if (ANDROID AND ARCHITECTURE_arm64)
|
|
CPMAddPackage(
|
|
NAME libadrenotools
|
|
GITHUB_REPOSITORY bylaws/libadrenotools
|
|
GIT_TAG 5cd3f5c5ceea6d9e9d435ccdd922d9b99e55d10b
|
|
)
|
|
endif()
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# libusb wrapper
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# libusb lives at externals/libusb/libusb (nested). The wrapper CMakeLists at
|
|
# externals/libusb/ builds it manually using LIBUSB_CPM_SOURCE_DIR as the root.
|
|
if (ENABLE_LIBUSB AND NOT TARGET libusb::usb)
|
|
CPMAddPackage(
|
|
NAME libusb_src
|
|
GITHUB_REPOSITORY libusb/libusb
|
|
GIT_TAG v1.0.27
|
|
DOWNLOAD_ONLY YES
|
|
)
|
|
if (libusb_src_ADDED)
|
|
set(LIBUSB_CPM_SOURCE_DIR ${libusb_src_SOURCE_DIR} CACHE INTERNAL "")
|
|
endif()
|
|
endif()
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# FFmpeg
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# FFmpeg uses autotools, not CMake, so CPM can only download the source.
|
|
# The actual build is handled by externals/ffmpeg/CMakeLists.txt at build time
|
|
# using autoconf+make. FFMPEG_CPM_SOURCE_DIR tells it where the source landed.
|
|
#
|
|
# On Windows: the build script pre-builds static FFmpeg before cmake runs and
|
|
# passes CITRON_FFMPEG_STATIC_DIR. The CPM download is then informational only.
|
|
|
|
if (DEFINED CITRON_FFMPEG_STATIC_DIR)
|
|
# Pre-built static libs supplied externally (Windows build script path).
|
|
set(FFmpeg_PATH "${CITRON_FFMPEG_STATIC_DIR}")
|
|
set(FFmpeg_INCLUDE_DIR "${FFmpeg_PATH}/include")
|
|
set(FFmpeg_LIBRARIES
|
|
"${FFmpeg_PATH}/lib/libavfilter.a"
|
|
"${FFmpeg_PATH}/lib/libswscale.a"
|
|
"${FFmpeg_PATH}/lib/libswresample.a"
|
|
"${FFmpeg_PATH}/lib/libavcodec.a"
|
|
"${FFmpeg_PATH}/lib/libavutil.a"
|
|
)
|
|
if (WIN32)
|
|
find_library(FFmpeg_ICONV_LIBRARY NAMES iconv libiconv)
|
|
if (FFmpeg_ICONV_LIBRARY)
|
|
list(APPEND FFmpeg_LIBRARIES "${FFmpeg_ICONV_LIBRARY}")
|
|
endif()
|
|
list(APPEND FFmpeg_LIBRARIES bcrypt m)
|
|
endif()
|
|
set(FFmpeg_FOUND TRUE)
|
|
elseif (CITRON_USE_BUNDLED_FFMPEG)
|
|
# Download source for the autotools build in externals/ffmpeg/CMakeLists.txt.
|
|
CPMAddPackage(
|
|
NAME ffmpeg_src
|
|
GITHUB_REPOSITORY FFmpeg/FFmpeg
|
|
GIT_TAG n8.0
|
|
DOWNLOAD_ONLY YES
|
|
)
|
|
if (ffmpeg_src_ADDED)
|
|
set(FFMPEG_CPM_SOURCE_DIR "${ffmpeg_src_SOURCE_DIR}" CACHE INTERNAL
|
|
"FFmpeg source location for the autotools bundled build")
|
|
endif()
|
|
endif()
|
|
|
|
# ── Dependency Versions (Qt, ICU, XCB) ─────────────────────────────────────────
|
|
set(CITRON_QT_VERSION "6.9.3" CACHE STRING "Qt version to download via aqt")
|
|
|
|
set(CITRON_ICU_REPO "unicode-org/icu" CACHE STRING "ICU GitHub repository")
|
|
set(CITRON_ICU_TAG "release-73-2" CACHE STRING "ICU git tag/version")
|
|
|
|
set(CITRON_XCB_MACROS_VER "1.20.2" CACHE STRING "XCB util-macros version")
|
|
set(CITRON_XCB_PROTO_VER "1.17.0" CACHE STRING "XCB proto version")
|
|
set(CITRON_XCB_XAU_VER "1.0.11" CACHE STRING "XCB libXau version")
|
|
set(CITRON_XCB_XDMCP_VER "1.1.5" CACHE STRING "XCB libXdmcp version")
|
|
set(CITRON_XCB_LIBXCB_VER "1.16" CACHE STRING "XCB libxcb version")
|
|
set(CITRON_XCB_UTIL_VER "0.4.1" CACHE STRING "XCB util version")
|
|
set(CITRON_XCB_CURSOR_VER "0.1.6" CACHE STRING "XCB cursor version")
|
|
set(CITRON_XCB_IMAGE_VER "0.4.1" CACHE STRING "XCB image version")
|
|
set(CITRON_XCB_KEYSYMS_VER "0.4.1" CACHE STRING "XCB keysyms version")
|
|
set(CITRON_XCB_RENDERUTIL_VER "0.3.10" CACHE STRING "XCB renderutil version")
|
|
set(CITRON_XCB_WM_VER "0.4.2" CACHE STRING "XCB wm version")
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# Qt
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# Qt uses a proprietary distribution model incompatible with CPM source fetches.
|
|
# Pre-built binaries are downloaded via aqt (pip install aqtinstall).
|
|
# See CMakeModules/qt_download.cmake for details.
|
|
if (ENABLE_QT AND NOT USE_SYSTEM_QT)
|
|
include(${CMAKE_SOURCE_DIR}/CMakeModules/qt_download.cmake)
|
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
include(${CMAKE_SOURCE_DIR}/CMakeModules/icu_build.cmake)
|
|
include(${CMAKE_SOURCE_DIR}/CMakeModules/xcb_build.cmake)
|
|
endif()
|
|
endif()
|
|
|
|
message(STATUS "[CPM] All dependency packages configured")
|