2025-08-06 07:48:11 +02:00
|
|
|
# SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
2025-08-02 17:22:38 +02:00
|
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
chore: make yuzu REUSE compliant
[REUSE] is a specification that aims at making file copyright
information consistent, so that it can be both human and machine
readable. It basically requires that all files have a header containing
copyright and licensing information. When this isn't possible, like
when dealing with binary assets, generated files or embedded third-party
dependencies, it is permitted to insert copyright information in the
`.reuse/dep5` file.
Oh, and it also requires that all the licenses used in the project are
present in the `LICENSES` folder, that's why the diff is so huge.
This can be done automatically with `reuse download --all`.
The `reuse` tool also contains a handy subcommand that analyzes the
project and tells whether or not the project is (still) compliant,
`reuse lint`.
Following REUSE has a few advantages over the current approach:
- Copyright information is easy to access for users / downstream
- Files like `dist/license.md` do not need to exist anymore, as
`.reuse/dep5` is used instead
- `reuse lint` makes it easy to ensure that copyright information of
files like binary assets / images is always accurate and up to date
To add copyright information of files that didn't have it I looked up
who committed what and when, for each file. As yuzu contributors do not
have to sign a CLA or similar I couldn't assume that copyright ownership
was of the "yuzu Emulator Project", so I used the name and/or email of
the commit author instead.
[REUSE]: https://reuse.software
Follow-up to b2eb10382941bef0914f4a0a4685b9033440aa9f
2022-05-15 02:06:02 +02:00
|
|
|
# SPDX-FileCopyrightText: 2016 Citra Emulator Project
|
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
2017-05-27 23:33:14 -07:00
|
|
|
|
2025-08-14 20:30:30 +02:00
|
|
|
# TODO(crueter): A lot of this should be moved to the root.
|
|
|
|
# otherwise we have to do weird shenanigans with library linking and stuff
|
|
|
|
|
2025-08-04 04:50:14 +02:00
|
|
|
# cpm
|
2025-08-11 22:27:29 +02:00
|
|
|
include(CPMUtil)
|
2025-08-04 04:50:14 +02:00
|
|
|
|
|
|
|
# Explicitly declare this option here to propagate to the oaknut CPM call
|
|
|
|
option(DYNARMIC_TESTS "Build tests" ${BUILD_TESTING})
|
|
|
|
|
2022-12-31 14:31:17 +01:00
|
|
|
# Dynarmic has cmake_minimum_required(3.12) and we may want to override
|
|
|
|
# some of its variables, which is only possible in 3.13+
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
|
|
|
|
2025-08-04 04:50:14 +02:00
|
|
|
# Disable tests/tools in all externals supporting the standard option name
|
2023-01-05 05:00:44 +01:00
|
|
|
set(BUILD_TESTING OFF)
|
|
|
|
|
2023-03-01 21:31:27 +01:00
|
|
|
# Build only static externals
|
|
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
|
|
|
|
|
|
# Skip install rules for all externals
|
|
|
|
set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL ON)
|
|
|
|
|
2025-08-04 04:50:14 +02:00
|
|
|
if (FORCE_DOWNLOAD_WIN_BUNDLES)
|
|
|
|
download_win_archives()
|
2020-06-15 20:10:39 +01:00
|
|
|
endif()
|
|
|
|
|
2025-08-04 04:50:14 +02:00
|
|
|
# Xbyak (also used by Dynarmic, so needs to be added first)
|
|
|
|
if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
|
|
|
|
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "SunOS")
|
|
|
|
# Fix regset.h collisions
|
|
|
|
set(XBYAK_HASH 51f507b0b3)
|
|
|
|
set(XBYAK_SHA512SUM 4a29a3c2f97f7d5adf667a21a008be03c951fb6696b0d7ba27e7e4afa037bc76eb5e059bb84860e01baf741d4d3ac851b840cd54c99d038812fbe0f1fa6d38a4)
|
|
|
|
else()
|
|
|
|
set(XBYAK_HASH 4e44f4614d)
|
|
|
|
set(XBYAK_SHA512SUM 5824e92159e07fa36a774aedd3b3ef3541d0241371d522cffa4ab3e1f215fa5097b1b77865b47b2481376c704fa079875557ea463ca63d0a7fd6a8a20a589e70)
|
|
|
|
endif()
|
|
|
|
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME xbyak
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "Lizzie841/xbyak"
|
|
|
|
SHA ${XBYAK_HASH}
|
|
|
|
HASH ${XBYAK_SHA512SUM}
|
2025-08-14 22:02:59 -04:00
|
|
|
BUNDLED_PACKAGE ON
|
2025-08-04 04:50:14 +02:00
|
|
|
)
|
2018-01-09 21:33:46 +00:00
|
|
|
endif()
|
|
|
|
|
2025-08-04 04:50:14 +02:00
|
|
|
# Oaknut (also used by Dynarmic, so needs to be added first)
|
|
|
|
if (ARCHITECTURE_arm64 OR DYNARMIC_TESTS)
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME oaknut
|
|
|
|
VERSION 2.0.1
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "merryhime/oaknut"
|
|
|
|
SHA 94c726ce03
|
|
|
|
HASH d8d082242fa1881abce3c82f8dafa002c4e561e66a69e7fc038af67faa5eff2630f082d3d19579c88c4c9f9488e54552accc8cb90e7ce743efe043b6230c08ac
|
2025-08-04 04:50:14 +02:00
|
|
|
)
|
2025-08-16 03:19:02 +02:00
|
|
|
endif()
|
2025-08-04 04:50:14 +02:00
|
|
|
|
2017-05-27 23:33:14 -07:00
|
|
|
# getopt
|
|
|
|
if (MSVC)
|
|
|
|
add_subdirectory(getopt)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Glad
|
|
|
|
add_subdirectory(glad)
|
|
|
|
|
2018-07-27 23:55:23 -04:00
|
|
|
# mbedtls
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME mbedtls
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "Mbed-TLS/mbedtls"
|
|
|
|
SHA "8c88150ca1"
|
|
|
|
HASH 769ad1e94c570671071e1f2a5c0f1027e0bf6bcdd1a80ea8ac970f2c86bc45ce4e31aa88d6d8110fc1bed1de81c48bc624df1b38a26f8b340a44e109d784a966
|
2025-08-04 04:50:14 +02:00
|
|
|
PATCHES
|
|
|
|
${CMAKE_SOURCE_DIR}/.patch/mbedtls/0001-cmake-version.patch
|
|
|
|
)
|
|
|
|
|
|
|
|
if (mbedtls_ADDED)
|
|
|
|
target_include_directories(mbedtls PUBLIC ${mbedtls_SOURCE_DIR}/include)
|
|
|
|
|
|
|
|
if (NOT MSVC)
|
|
|
|
target_compile_options(mbedcrypto PRIVATE
|
|
|
|
-Wno-unused-but-set-variable
|
|
|
|
-Wno-string-concatenation)
|
|
|
|
endif()
|
2023-08-25 19:23:34 -04:00
|
|
|
endif()
|
2018-07-27 23:55:23 -04:00
|
|
|
|
2021-06-03 03:49:35 -04:00
|
|
|
# libusb
|
2022-12-28 17:26:46 -05:00
|
|
|
if (ENABLE_LIBUSB AND NOT TARGET libusb::usb)
|
2023-03-01 21:31:27 +01:00
|
|
|
add_subdirectory(libusb)
|
2021-06-03 03:49:35 -04:00
|
|
|
endif()
|
|
|
|
|
2021-04-16 19:12:47 -04:00
|
|
|
# SDL2
|
2025-08-14 20:30:30 +02:00
|
|
|
if (NOT YUZU_USE_BUNDLED_SDL2)
|
2021-05-31 15:24:17 -04:00
|
|
|
if (NOT WIN32)
|
2021-12-16 21:49:26 -05:00
|
|
|
# Yuzu itself needs: Atomic Audio Events Joystick Haptic Sensor Threads Timers
|
|
|
|
# Since 2.0.18 Atomic+Threads required for HIDAPI/libusb (see https://github.com/libsdl-org/SDL/issues/5095)
|
2021-05-31 15:24:17 -04:00
|
|
|
# Yuzu-cmd also needs: Video (depends on Loadso/Dlopen)
|
2023-06-12 21:06:49 +07:00
|
|
|
# CPUinfo also required for SDL Audio, at least until 2.28.0 (see https://github.com/libsdl-org/SDL/issues/7809)
|
2021-05-31 15:24:17 -04:00
|
|
|
set(SDL_UNUSED_SUBSYSTEMS
|
2023-06-12 21:06:49 +07:00
|
|
|
File Filesystem
|
2021-12-16 21:49:26 -05:00
|
|
|
Locale Power Render)
|
2021-05-31 15:24:17 -04:00
|
|
|
foreach(_SUB ${SDL_UNUSED_SUBSYSTEMS})
|
|
|
|
string(TOUPPER ${_SUB} _OPT)
|
2022-12-31 14:31:17 +01:00
|
|
|
set(SDL_${_OPT} OFF)
|
2021-05-31 15:24:17 -04:00
|
|
|
endforeach()
|
|
|
|
|
2022-12-31 14:31:17 +01:00
|
|
|
set(HIDAPI ON)
|
2021-05-31 15:24:17 -04:00
|
|
|
endif()
|
2022-11-21 11:31:18 -05:00
|
|
|
if (APPLE)
|
|
|
|
set(SDL_FILE ON)
|
|
|
|
endif()
|
2021-05-09 18:58:16 +03:00
|
|
|
|
2025-07-27 06:36:33 +02:00
|
|
|
if ("${YUZU_SYSTEM_PROFILE}" STREQUAL "steamdeck")
|
|
|
|
set(SDL_HASH cc016b0046)
|
|
|
|
set(SDL_PIPEWIRE OFF) # build errors out with this on
|
2025-07-30 06:43:01 +02:00
|
|
|
set(SDL_SHA512SUM 34d5ef58da6a4f9efa6689c82f67badcbd741f5a4f562a9c2c30828fa839830fb07681c5dc6a7851520e261c8405a416ac0a2c2513b51984fb3b4fa4dcb3e20b)
|
2025-08-04 04:50:14 +02:00
|
|
|
elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "SunOS")
|
|
|
|
set(SDL_HASH d310b5679f)
|
|
|
|
set(SDL_SHA512SUM cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e)
|
2025-07-27 06:36:33 +02:00
|
|
|
else()
|
|
|
|
set(SDL_HASH 2e4c12cd2c)
|
2025-07-30 06:43:01 +02:00
|
|
|
set(SDL_SHA512SUM d95af47f469a312876f8ab361074a1e7b8083db19935a102d9c6e5887ace6008e64475a8c54b00164b40cad86492bb1b2366084efdd0b2555e5fea6d9c5da80e)
|
2025-07-27 06:36:33 +02:00
|
|
|
endif()
|
|
|
|
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME SDL2
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "libsdl-org/SDL"
|
|
|
|
SHA ${SDL_HASH}
|
|
|
|
HASH ${SDL_SHA512SUM}
|
|
|
|
KEY ${YUZU_SYSTEM_PROFILE}
|
2025-08-14 20:30:30 +02:00
|
|
|
BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_SDL2}
|
2025-08-04 04:50:14 +02:00
|
|
|
)
|
2021-04-16 19:12:47 -04:00
|
|
|
endif()
|
|
|
|
|
2019-03-14 02:17:19 -03:00
|
|
|
# Sirit
|
2025-08-04 04:50:14 +02:00
|
|
|
# TODO(crueter): spirv-tools doesn't work w/ system
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME SPIRV-Headers
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "KhronosGroup/SPIRV-Headers"
|
|
|
|
SHA 4e209d3d7e
|
|
|
|
HASH f48bbe18341ed55ea0fe280dbbbc0a44bf222278de6e716e143ca1e95ca320b06d4d23d6583fbf8d03e1428f3dac8fa00e5b82ddcd6b425e6236d85af09550a4
|
2025-08-04 04:50:14 +02:00
|
|
|
)
|
|
|
|
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME sirit
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "eden-emulator/sirit"
|
|
|
|
SHA db1f1e8ab5
|
|
|
|
HASH 73eb3a042848c63a10656545797e85f40d142009dfb7827384548a385e1e28e1ac72f42b25924ce530d58275f8638554281e884d72f9c7aaf4ed08690a414b05
|
2025-08-04 04:50:14 +02:00
|
|
|
OPTIONS
|
|
|
|
"SIRIT_USE_SYSTEM_SPIRV_HEADERS ON"
|
|
|
|
)
|
2019-03-14 02:17:19 -03:00
|
|
|
|
2023-02-21 21:55:04 +01:00
|
|
|
# httplib
|
2025-08-16 03:19:02 +02:00
|
|
|
if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER)
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME httplib
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "yhirose/cpp-httplib"
|
|
|
|
SHA a609330e4c
|
|
|
|
HASH dd3fd0572f8367d8549e1319fd98368b3e75801a293b0c3ac9b4adb806473a4506a484b3d389dc5bee5acc460cb90af7a20e5df705a1696b56496b30b9ce7ed2
|
2025-08-04 04:50:14 +02:00
|
|
|
OPTIONS
|
2025-08-14 20:30:30 +02:00
|
|
|
"HTTPLIB_REQUIRE_OPENSSL ${ENABLE_OPENSSL}"
|
2025-08-04 04:50:14 +02:00
|
|
|
)
|
2022-11-25 19:35:46 +01:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# cpp-jwt
|
2025-08-04 04:50:14 +02:00
|
|
|
if (ENABLE_WEB_SERVICE)
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME cpp-jwt
|
|
|
|
VERSION 1.4
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "arun11299/cpp-jwt"
|
2025-08-14 20:30:30 +02:00
|
|
|
SHA a54fa08a3b
|
|
|
|
HASH a90f7e594ada0c7e49d5ff9211c71097534e7742a8e44bf0851b0362642a7271d53f5d83d04eeaae2bad17ef3f35e09e6818434d8eaefa038f3d1f7359d0969a
|
2025-08-04 04:50:14 +02:00
|
|
|
FIND_PACKAGE_ARGUMENTS "CONFIG"
|
|
|
|
OPTIONS
|
|
|
|
"CPP_JWT_BUILD_EXAMPLES OFF"
|
|
|
|
"CPP_JWT_BUILD_TESTS OFF"
|
|
|
|
"CPP_JWT_USE_VENDORED_NLOHMANN_JSON OFF"
|
2025-08-14 20:30:30 +02:00
|
|
|
PATCHES
|
|
|
|
${CMAKE_SOURCE_DIR}/.patch/cpp-jwt/0001-no-install.patch
|
|
|
|
${CMAKE_SOURCE_DIR}/.patch/cpp-jwt/0002-missing-decl.patch
|
2025-08-04 04:50:14 +02:00
|
|
|
)
|
2018-09-17 20:58:24 +02:00
|
|
|
endif()
|
2020-07-01 15:09:33 +10:00
|
|
|
|
2021-12-15 01:10:07 -07:00
|
|
|
# FFMpeg
|
|
|
|
if (YUZU_USE_BUNDLED_FFMPEG)
|
|
|
|
add_subdirectory(ffmpeg)
|
2021-12-15 00:27:12 -07:00
|
|
|
set(FFmpeg_PATH "${FFmpeg_PATH}" PARENT_SCOPE)
|
2021-12-15 00:53:22 -07:00
|
|
|
set(FFmpeg_LDFLAGS "${FFmpeg_LDFLAGS}" PARENT_SCOPE)
|
|
|
|
set(FFmpeg_LIBRARIES "${FFmpeg_LIBRARIES}" PARENT_SCOPE)
|
|
|
|
set(FFmpeg_INCLUDE_DIR "${FFmpeg_INCLUDE_DIR}" PARENT_SCOPE)
|
2021-12-15 01:10:07 -07:00
|
|
|
endif()
|
2022-11-25 19:35:46 +01:00
|
|
|
|
|
|
|
# Vulkan-Headers
|
2023-01-13 21:06:13 +00:00
|
|
|
|
2025-08-11 22:27:29 +02:00
|
|
|
# TODO(crueter): Vk1.4 impl
|
2025-08-04 04:50:14 +02:00
|
|
|
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME VulkanHeaders
|
|
|
|
VERSION 1.3.274
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "KhronosGroup/Vulkan-Headers"
|
|
|
|
SHA 89268a6d17
|
|
|
|
HASH 3ab349f74298ba72cafb8561015690c0674d428a09fb91ccd3cd3daca83650d190d46d33fd97b0a8fd4223fe6df2bcabae89136fbbf7c0bfeb8776f9448304c8
|
|
|
|
BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_HEADERS}
|
2025-08-04 04:50:14 +02:00
|
|
|
)
|
|
|
|
|
2025-08-11 22:27:29 +02:00
|
|
|
# Vulkan-Utility-Libraries
|
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME VulkanUtilityLibraries
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "KhronosGroup/Vulkan-Utility-Libraries"
|
|
|
|
SHA df2e358152
|
|
|
|
HASH 3e468c3d9ff93f6d418d71e5527abe0a12c8c7ab5b0b52278bbbee4d02bb87e99073906729b727e0147242b7e3fd5dedf68b803f1878cb4c0e4f730bc2238d79
|
|
|
|
BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES}
|
2025-08-04 04:50:14 +02:00
|
|
|
)
|
|
|
|
|
2025-07-03 01:13:33 +00:00
|
|
|
# SPIRV-Tools
|
|
|
|
if (YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS)
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME SPIRV-Tools
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "KhronosGroup/SPIRV-Tools"
|
|
|
|
SHA 40eb301f32
|
|
|
|
HASH 58d0fb1047d69373cf24c73e6f78c73a72a6cca3b4df1d9f083b9dcc0962745ef154abf3dbe9b3623b835be20c6ec769431cf11733349f45e7568b3525f707aa
|
2025-08-04 04:50:14 +02:00
|
|
|
OPTIONS
|
|
|
|
"SPIRV_SKIP_EXECUTABLES ON"
|
|
|
|
)
|
2025-07-03 01:13:33 +00:00
|
|
|
endif()
|
|
|
|
|
2023-06-03 13:18:51 -04:00
|
|
|
# TZDB (Time Zone Database)
|
|
|
|
add_subdirectory(nx_tzdb)
|
|
|
|
|
2023-06-18 04:59:12 -04:00
|
|
|
# VMA
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME VulkanMemoryAllocator
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator"
|
|
|
|
SHA 1076b348ab
|
|
|
|
HASH a46b44e4286d08cffda058e856c47f44c7fed3da55fe9555976eb3907fdcc20ead0b1860b0c38319cda01dbf9b1aa5d4b4038c7f1f8fbd97283d837fa9af9772
|
2025-08-04 04:50:14 +02:00
|
|
|
FIND_PACKAGE_ARGUMENTS "CONFIG"
|
|
|
|
)
|
|
|
|
|
2023-01-23 01:51:12 +01:00
|
|
|
if (NOT TARGET LLVM::Demangle)
|
2023-03-01 21:31:27 +01:00
|
|
|
add_library(demangle demangle/ItaniumDemangle.cpp)
|
2023-01-23 01:51:12 +01:00
|
|
|
target_include_directories(demangle PUBLIC ./demangle)
|
Warnings cleanup for GCC 13 and Clang 16
Note: For GCC there are still a huge number of `-Warray-bounds` warnings
coming from `externals/dynarmic`. I could have added a workaround in
`externals/CMakeLists.txt` similar to what this PR does for other
externals, but given Dynarmic's close affiliation with Yuzu, it would be
better to fix it upstream.
Besides that, on my machine, this makes the build warning-free except
for some warnings from glslangValidator and AutoMoc.
Details:
- Disable some warnings in externals.
- Disable `-Wnullability-completeness`, which is a Clang warning triggered
by the Vulkan SDK where if any pointers in the header are marked
_Nullable, it wants all pointers to be marked _Nullable or _Nonnull.
Most of them are, but some aren't. Who knows why.
- `src/web_service/verify_user_jwt.cpp`: Disable another warning when
including `jwt.hpp`.
- `src/input_common/input_poller.cpp`: Add missing `override` specifiers.
- src/common/swap.h: Remove redundant `operator&`. In general, this
file declares three overloads of each operator. Using `+` as an
example, the overloads are:
- a member function for `swapped_t + integer`
- a member function for `swapped_t + swapped_t`
- a free function for `integer + swapped_t`
But for `operator&`, there was an additional free function for
`swapped_t + integer`, which was redundant with the member function.
This caused a GCC warning saying "ISO C++ says that these are
ambiguous".
2023-08-20 13:05:49 -07:00
|
|
|
if (NOT MSVC)
|
|
|
|
target_compile_options(demangle PRIVATE -Wno-deprecated-declarations) # std::is_pod
|
|
|
|
endif()
|
2023-01-23 01:51:12 +01:00
|
|
|
add_library(LLVM::Demangle ALIAS demangle)
|
|
|
|
endif()
|
2023-05-20 17:15:36 -04:00
|
|
|
|
2023-10-12 16:36:26 +02:00
|
|
|
add_library(stb stb/stb_dxt.cpp)
|
2023-05-20 17:15:36 -04:00
|
|
|
target_include_directories(stb PUBLIC ./stb)
|
2023-01-01 18:34:38 -05:00
|
|
|
|
2023-10-12 16:36:26 +02:00
|
|
|
if (NOT TARGET stb::headers)
|
|
|
|
add_library(stb::headers ALIAS stb)
|
|
|
|
endif()
|
|
|
|
|
2023-10-29 13:50:55 +00:00
|
|
|
add_library(tz tz/tz/tz.cpp)
|
|
|
|
target_include_directories(tz PUBLIC ./tz)
|
|
|
|
|
2023-06-06 23:10:06 +03:00
|
|
|
add_library(bc_decoder bc_decoder/bc_decoder.cpp)
|
|
|
|
target_include_directories(bc_decoder PUBLIC ./bc_decoder)
|
|
|
|
|
2023-09-16 18:59:53 +02:00
|
|
|
if (NOT TARGET RenderDoc::API)
|
|
|
|
add_library(renderdoc INTERFACE)
|
|
|
|
target_include_directories(renderdoc SYSTEM INTERFACE ./renderdoc)
|
|
|
|
add_library(RenderDoc::API ALIAS renderdoc)
|
|
|
|
endif()
|
2023-09-10 23:26:09 +03:00
|
|
|
|
2023-01-01 18:34:38 -05:00
|
|
|
if (ANDROID)
|
2025-08-04 04:50:14 +02:00
|
|
|
if (ARCHITECTURE_arm64)
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME libadrenotools
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "bylaws/libadrenotools"
|
|
|
|
SHA 8fae8ce254
|
|
|
|
HASH c74fa855f0edebbf25c9bce40b00966daa2447bfc5e15f0cf1a95f86cbf70fc6b02590707edbde16328a0a2a4fb9a1fc419d2dfc22a4a4150971be91892d4edb
|
2025-08-04 04:50:14 +02:00
|
|
|
PATCHES
|
|
|
|
${CMAKE_SOURCE_DIR}/.patch/libadrenotools/0001-linkerns-cpm.patch
|
|
|
|
)
|
|
|
|
endif()
|
2023-01-01 18:34:38 -05:00
|
|
|
endif()
|
2023-10-04 13:11:05 -04:00
|
|
|
|
2025-08-06 07:48:11 +02:00
|
|
|
if (UNIX AND NOT APPLE AND NOT TARGET gamemode::headers)
|
2023-11-03 19:27:08 +01:00
|
|
|
add_library(gamemode INTERFACE)
|
|
|
|
target_include_directories(gamemode INTERFACE gamemode)
|
|
|
|
add_library(gamemode::headers ALIAS gamemode)
|
2023-07-16 18:45:33 -04:00
|
|
|
endif()
|
|
|
|
|
2023-10-04 13:11:05 -04:00
|
|
|
# Breakpad
|
2025-08-04 04:50:14 +02:00
|
|
|
# TODO(crueter): Breakpad needs additional fetches
|
|
|
|
# https://github.com/google/breakpad/blob/main/DEPS
|
2023-10-04 13:11:05 -04:00
|
|
|
# https://github.com/microsoft/vcpkg/blob/master/ports/breakpad/CMakeLists.txt
|
|
|
|
if (YUZU_CRASH_DUMPS AND NOT TARGET libbreakpad_client)
|
|
|
|
set(BREAKPAD_WIN32_DEFINES
|
|
|
|
NOMINMAX
|
|
|
|
UNICODE
|
|
|
|
WIN32_LEAN_AND_MEAN
|
|
|
|
_CRT_SECURE_NO_WARNINGS
|
|
|
|
_CRT_SECURE_NO_DEPRECATE
|
|
|
|
_CRT_NONSTDC_NO_DEPRECATE
|
|
|
|
)
|
|
|
|
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME breakpad
|
2025-08-11 22:27:29 +02:00
|
|
|
URL "google/breakpad"
|
|
|
|
SHA f80f288803
|
|
|
|
HASH 4a87ee88cea99bd633d52a5b00135a649f1475e3b65db325a6df9c804ab82b054ad7e62419b35f6e22cc5dfbbb569214041d7ad5d10fab10106e700bb5050e1d
|
2025-08-04 04:50:14 +02:00
|
|
|
DOWNLOAD_ONLY YES
|
|
|
|
)
|
|
|
|
|
2023-10-04 13:11:05 -04:00
|
|
|
# libbreakpad
|
|
|
|
add_library(libbreakpad STATIC)
|
2025-08-04 04:50:14 +02:00
|
|
|
file(GLOB_RECURSE LIBBREAKPAD_SOURCES ${breakpad_SOURCE_DIR}/src/processor/*.cc)
|
|
|
|
file(GLOB_RECURSE LIBDISASM_SOURCES ${breakpad_SOURCE_DIR}/src/third_party/libdisasm/*.c)
|
2023-10-04 13:11:05 -04:00
|
|
|
list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX "_unittest|_selftest|synth_minidump|/tests|/testdata|/solaris|microdump_stackwalk|minidump_dump|minidump_stackwalk")
|
|
|
|
if (WIN32)
|
|
|
|
list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX "/linux|/mac|/android")
|
|
|
|
target_compile_definitions(libbreakpad PRIVATE ${BREAKPAD_WIN32_DEFINES})
|
|
|
|
target_include_directories(libbreakpad PRIVATE "${CMAKE_GENERATOR_INSTANCE}/DIA SDK/include")
|
|
|
|
elseif (APPLE)
|
|
|
|
list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX "/linux|/windows|/android")
|
|
|
|
else()
|
|
|
|
list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX "/mac|/windows|/android")
|
|
|
|
endif()
|
|
|
|
target_sources(libbreakpad PRIVATE ${LIBBREAKPAD_SOURCES} ${LIBDISASM_SOURCES})
|
|
|
|
target_include_directories(libbreakpad
|
|
|
|
PUBLIC
|
2025-08-04 04:50:14 +02:00
|
|
|
${breakpad_SOURCE_DIR}/src
|
|
|
|
${breakpad_SOURCE_DIR}/src/third_party/libdisasm
|
2023-10-04 13:11:05 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
# libbreakpad_client
|
|
|
|
add_library(libbreakpad_client STATIC)
|
2025-08-04 04:50:14 +02:00
|
|
|
file(GLOB LIBBREAKPAD_COMMON_SOURCES ${breakpad_SOURCE_DIR}/src/common/*.cc ${breakpad_SOURCE_DIR}/src/common/*.c ${breakpad_SOURCE_DIR}/src/client/*.cc)
|
2023-10-04 13:11:05 -04:00
|
|
|
|
|
|
|
if (WIN32)
|
2025-08-04 04:50:14 +02:00
|
|
|
file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES ${breakpad_SOURCE_DIR}/src/client/windows/*.cc ${breakpad_SOURCE_DIR}/src/common/windows/*.cc)
|
2023-10-04 13:11:05 -04:00
|
|
|
list(FILTER LIBBREAKPAD_COMMON_SOURCES EXCLUDE REGEX "language.cc|path_helper.cc|stabs_to_module.cc|stabs_reader.cc|minidump_file_writer.cc")
|
|
|
|
target_include_directories(libbreakpad_client PRIVATE "${CMAKE_GENERATOR_INSTANCE}/DIA SDK/include")
|
|
|
|
target_compile_definitions(libbreakpad_client PRIVATE ${BREAKPAD_WIN32_DEFINES})
|
|
|
|
elseif (APPLE)
|
|
|
|
target_compile_definitions(libbreakpad_client PRIVATE HAVE_MACH_O_NLIST_H)
|
2025-08-04 04:50:14 +02:00
|
|
|
file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES ${breakpad_SOURCE_DIR}/src/client/mac/*.cc ${breakpad_SOURCE_DIR}/src/common/mac/*.cc)
|
|
|
|
list(APPEND LIBBREAKPAD_CLIENT_SOURCES ${breakpad_SOURCE_DIR}/src/common/mac/MachIPC.mm)
|
2023-10-04 13:11:05 -04:00
|
|
|
else()
|
|
|
|
target_compile_definitions(libbreakpad_client PUBLIC -DHAVE_A_OUT_H)
|
2025-08-04 04:50:14 +02:00
|
|
|
file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES ${breakpad_SOURCE_DIR}/src/client/linux/*.cc ${breakpad_SOURCE_DIR}/src/common/linux/*.cc)
|
2023-10-04 13:11:05 -04:00
|
|
|
endif()
|
|
|
|
list(APPEND LIBBREAKPAD_CLIENT_SOURCES ${LIBBREAKPAD_COMMON_SOURCES})
|
|
|
|
list(FILTER LIBBREAKPAD_CLIENT_SOURCES EXCLUDE REGEX "/sender|/tests|/unittests|/testcases|_unittest|_test")
|
|
|
|
target_sources(libbreakpad_client PRIVATE ${LIBBREAKPAD_CLIENT_SOURCES})
|
2025-08-04 04:50:14 +02:00
|
|
|
target_include_directories(libbreakpad_client PRIVATE ${breakpad_SOURCE_DIR}/src)
|
2023-10-04 13:11:05 -04:00
|
|
|
|
|
|
|
if (WIN32)
|
|
|
|
target_link_libraries(libbreakpad_client PRIVATE wininet.lib)
|
|
|
|
elseif (APPLE)
|
|
|
|
find_library(CoreFoundation_FRAMEWORK CoreFoundation)
|
|
|
|
target_link_libraries(libbreakpad_client PRIVATE ${CoreFoundation_FRAMEWORK})
|
|
|
|
else()
|
|
|
|
find_library(PTHREAD_LIBRARIES pthread)
|
|
|
|
target_compile_definitions(libbreakpad_client PRIVATE HAVE_GETCONTEXT=1)
|
|
|
|
if (PTHREAD_LIBRARIES)
|
|
|
|
target_link_libraries(libbreakpad_client PRIVATE ${PTHREAD_LIBRARIES})
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Host tools for symbol processing
|
|
|
|
if (LINUX)
|
|
|
|
find_package(ZLIB REQUIRED)
|
|
|
|
|
2025-08-04 04:50:14 +02:00
|
|
|
add_executable(minidump_stackwalk ${breakpad_SOURCE_DIR}/src/processor/minidump_stackwalk.cc)
|
2023-10-04 13:11:05 -04:00
|
|
|
target_link_libraries(minidump_stackwalk PRIVATE libbreakpad libbreakpad_client)
|
|
|
|
|
|
|
|
add_executable(dump_syms
|
2025-08-04 04:50:14 +02:00
|
|
|
${breakpad_SOURCE_DIR}/src/common/dwarf_cfi_to_module.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/dwarf_cu_to_module.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/dwarf_line_to_module.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/dwarf_range_list_handler.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/language.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/module.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/path_helper.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/stabs_reader.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/stabs_to_module.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/dwarf/bytereader.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/dwarf/dwarf2diehandler.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/dwarf/dwarf2reader.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/dwarf/elf_reader.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/linux/crc32.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/linux/dump_symbols.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/linux/elf_symbols_to_module.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/linux/elfutils.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/linux/file_id.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/linux/linux_libc_support.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/linux/memory_mapped_file.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/common/linux/safe_readlink.cc
|
|
|
|
${breakpad_SOURCE_DIR}/src/tools/linux/dump_syms/dump_syms.cc)
|
2025-08-14 20:30:30 +02:00
|
|
|
target_link_libraries(dump_syms PRIVATE libbreakpad_client)
|
2023-10-04 13:11:05 -04:00
|
|
|
endif()
|
|
|
|
endif()
|
2023-11-12 02:03:01 -05:00
|
|
|
|
2025-04-02 06:03:08 +02:00
|
|
|
# oboe
|
|
|
|
if (ANDROID)
|
2025-08-11 22:27:29 +02:00
|
|
|
AddPackage(
|
2025-08-04 04:50:14 +02:00
|
|
|
NAME oboe
|
2025-08-11 22:27:29 +02:00
|
|
|
REPO "google/oboe"
|
|
|
|
SHA 2bc873e53c
|
|
|
|
HASH 02329058a7f9cf7d5039afaae5ab170d9f42f60f4c01e21eaf4f46073886922b057a9ae30eeac040b3ac182f51b9c1bfe9fe1050a2c9f6ce567a1a9a0ec2c768
|
2025-08-16 03:19:02 +02:00
|
|
|
BUNDLED_PACKAGE ON
|
2025-08-04 04:50:14 +02:00
|
|
|
)
|
|
|
|
|
2025-04-02 06:03:08 +02:00
|
|
|
add_library(oboe::oboe ALIAS oboe)
|
|
|
|
endif()
|
2024-04-05 01:58:29 +02:00
|
|
|
|
|
|
|
# sse2neon
|
|
|
|
if (ARCHITECTURE_arm64 AND NOT TARGET sse2neon)
|
|
|
|
add_library(sse2neon INTERFACE)
|
|
|
|
target_include_directories(sse2neon INTERFACE sse2neon)
|
|
|
|
endif()
|