From ed2c418e8fc7bc5e4729966bbd4b262632e76c89 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 25 Aug 2025 07:47:11 +0000 Subject: [PATCH 01/17] [docs] update macOS docs Signed-off-by: lizzie --- docs/build/macOS.md | 40 ++++++++++++---------------------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/docs/build/macOS.md b/docs/build/macOS.md index 6cb62273cb..a04fd6f360 100644 --- a/docs/build/macOS.md +++ b/docs/build/macOS.md @@ -1,6 +1,6 @@ -Please note this article is intended for development, and eden on macOS is not currently ready for regular use. +Please note this article is intended for development, and Eden on macOS is not currently ready for regular use. -This article was written for developers. eden support for macOS is not ready for casual use. +This article was written for developers. Eden support for macOS is not ready for casual use. ## Method I: ninja --- @@ -14,30 +14,21 @@ brew install autoconf automake boost ccache ffmpeg fmt glslang hidapi libtool li Clone the repo ```sh git clone --recursive https://git.eden-emu.dev/eden-emu/eden - cd eden ``` Build for release ```sh -mkdir build && cd build - export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake" - export LIBVULKAN_PATH=/opt/homebrew/lib/libvulkan.dylib - -cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=ON -DENABLE_LIBUSB=OFF -DCLANG_FORMAT=ON -DSDL2_DISABLE_INSTALL=ON -DSDL_ALTIVEC=ON - +cmake -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=ON -DENABLE_LIBUSB=OFF -DCLANG_FORMAT=ON -DSDL2_DISABLE_INSTALL=ON -DSDL_ALTIVEC=ON ninja ``` -You may also want to include support for Discord Rich Presence by adding `-DUSE_DISCORD_PRESENCE=ON` after `cmake ..` - -Build with debug symbols (vcpkg is not currently used due to broken boost-context library): +You may also want to include support for Discord Rich Presence by adding `-DUSE_DISCORD_PRESENCE=ON` ```sh -mkdir build && cd build export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake" -cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF +cmake -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF ninja ``` @@ -59,30 +50,23 @@ brew install autoconf automake boost ccache ffmpeg fmt glslang hidapi libtool li Clone the repo ```sh git clone --recursive https://git.eden-emu.dev/eden-emu/eden - cd eden ``` Build for release ```sh -mkdir build && cd build - export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake" - export LIBVULKAN_PATH=/opt/homebrew/lib/libvulkan.dylib - -cmake .. -GXcode -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=ON -DENABLE_LIBUSB=OFF -DCLANG_FORMAT=ON -DSDL2_DISABLE_INSTALL=ON -DSDL_ALTIVEC=ON - -xcodebuild build -project eden.xcodeproj -scheme "eden" -configuration "RelWithDebInfo" +# Only if having errors about Xcode 15.0 +sudo /usr/bin/xcode-select --switch /Users/admin/Downloads/Xcode.ap +cmake -B build -GXcode -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=ON -DENABLE_LIBUSB=OFF -DCLANG_FORMAT=ON -DSDL2_DISABLE_INSTALL=ON -DSDL_ALTIVEC=ON +xcodebuild build -project yuzu.xcodeproj -scheme "yuzu" -configuration "RelWithDebInfo" ``` -You may also want to include support for Discord Rich Presence by adding `-DUSE_DISCORD_PRESENCE=ON` after `cmake ..` - -Build with debug symbols (vcpkg is not currently used due to broken boost-context library): +Build with debug symbols: ```sh -mkdir build && cd build export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake" -cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF +cmake -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF ninja ``` @@ -102,4 +86,4 @@ Run with Vulkan loader path: ```sh export LIBVULKAN_PATH=/opt/homebrew/lib/libvulkan.dylib bin/eden.app/Contents/MacOS/eden -``` \ No newline at end of file +``` From 4cd8ed04dafabfde1bea6abf2fd5f9c28fb1a999 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 25 Aug 2025 07:48:37 +0000 Subject: [PATCH 02/17] [macOS] fix mbedtls Signed-off-by: lizzie --- src/core/file_sys/xts_archive.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/file_sys/xts_archive.cpp b/src/core/file_sys/xts_archive.cpp index fd5342021c..8b201cf3da 100644 --- a/src/core/file_sys/xts_archive.cpp +++ b/src/core/file_sys/xts_archive.cpp @@ -68,7 +68,12 @@ NAX::NAX(VirtualFile file_, std::array nca_id) : header(std::make_unique()), file(std::move(file_)), keys{Core::Crypto::KeyManager::Instance()} { Core::Crypto::SHA256Hash hash{}; +#ifdef MBEDTLS_DEPRECATED_REMOVED mbedtls_sha256_ret(nca_id.data(), nca_id.size(), hash.data(), 0); +#else + // Compatibility with macOS Xcode-15 + mbedtls_sha256(nca_id.data(), nca_id.size(), hash.data(), 0); +#endif status = Parse(fmt::format("/registered/000000{:02X}/{}.nca", hash[0], Common::HexToString(nca_id, false))); } From f6097673ee6f682f275c7d4e3f45525cbee378ca Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 25 Aug 2025 08:15:01 +0000 Subject: [PATCH 03/17] [cmake] force bundled mbedtls (for apple?) Signed-off-by: lizzie --- externals/CMakeLists.txt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index b209b48db9..40fa53043c 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -54,7 +54,15 @@ endif() add_subdirectory(glad) # mbedtls -AddJsonPackage(mbedtls) +AddPackage( + NAME mbedtls + REPO "Mbed-TLS/mbedtls" + SHA "8c88150ca1" + HASH 769ad1e94c570671071e1f2a5c0f1027e0bf6bcdd1a80ea8ac970f2c86bc45ce4e31aa88d6d8110fc1bed1de81c48bc624df1b38a26f8b340a44e109d784a966 + PATCHES + ${CMAKE_SOURCE_DIR}/.patch/mbedtls/0001-cmake-version.patch + BUNDLED_PACKAGE ON +) if (mbedtls_ADDED) target_include_directories(mbedtls PUBLIC ${mbedtls_SOURCE_DIR}/include) From af0df5c511dcdac6780e87ce28960b8b5356a326 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 25 Aug 2025 11:30:47 -0400 Subject: [PATCH 04/17] [cmake] fix zstd link Signed-off-by: crueter --- CMakeLists.txt | 28 +++++++++++++++++++++++++--- src/common/CMakeLists.txt | 5 ----- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d11b58bf1f..b85572f73e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -437,10 +437,32 @@ if (YUZU_USE_CPM) endif() # zstd - AddJsonPackage(zstd) + AddPackage( + NAME zstd + REPO facebook/zstd + SHA f8745da6ff + HASH 3037007f990040fe32573b46f9bef8762fd5dbeeb07ffffcbfeba51ec98167edae39bb9c87f9299efcd61c4e467c5e84f7c19f0df7799bc1fc04864a278792ee + VERSION 1.5 + SOURCE_SUBDIR build/cmake + FIND_PACKAGE_ARGUMENTS "MODULE" + OPTIONS + "ZSTD_BUILD_SHARED OFF" + "ZSTD_BUILD_STATIC ON" + EXCLUDE_FROM_ALL ON + ) - if (zstd_ADDED) - add_library(zstd::zstd ALIAS libzstd_static) + if (zstd_ADDED AND NOT TARGET zstd::zstd) + if (TARGET zstd::libzstd_shared) + add_library(zstd::zstd ALIAS zstd::libzstd_shared) + elseif (TARGET zstd::libzstd_static) + add_library(zstd::zstd ALIAS zstd::libzstd_static) + elseif (TARGET libzstd_shared) + add_library(zstd::zstd ALIAS libzstd_shared) + elseif (TARGET libzstd_static) + add_library(zstd::zstd ALIAS libzstd_static) + else() + message(FATAL_ERROR "Could not determine zstd target") + endif() endif() # Catch2 diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 6173e29f45..8b8629e6c4 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -274,11 +274,6 @@ endif() target_link_libraries(common PUBLIC fmt::fmt stb::headers Threads::Threads) target_link_libraries(common PRIVATE lz4::lz4 LLVM::Demangle zstd::zstd) -if (TARGET unordered_dense::unordered_dense) - # weird quirk of system installs - target_link_libraries(common PUBLIC unordered_dense::unordered_dense) -endif() - if(ANDROID) # For ASharedMemory_create target_link_libraries(common PRIVATE android) From 5da9d275ad86e888e386b68c9b9821c8fdbe8b44 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 25 Aug 2025 11:40:42 -0400 Subject: [PATCH 05/17] [cmake] use MODULE for non-CPM zstd Signed-off-by: crueter --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b85572f73e..29755bd8e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -492,6 +492,10 @@ else() find_package(ZLIB 1.2 REQUIRED) find_package(zstd 1.5 REQUIRED MODULE) + if (ENABLE_CUBEB) + find_package(cubeb CONFIG) + endif() + if (YUZU_TESTS) find_package(Catch2 3.0.1 REQUIRED) endif() From b27c4ba431f063b77bcde0847873a517026d8f04 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 25 Aug 2025 11:48:51 -0400 Subject: [PATCH 06/17] [cmake] fix opus link Signed-off-by: crueter --- CMakeLists.txt | 57 ++++++++++++++++++++++++++++++++++- src/audio_core/CMakeLists.txt | 2 +- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 29755bd8e9..3f50114ff0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -478,7 +478,62 @@ if (YUZU_USE_CPM) endif() # Opus - AddJsonPackage(opus) + AddPackage( + NAME Opus + VERSION 1.3 + REPO "xiph/opus" + SHA 5ded705cf4 + HASH 0dc89e58ddda1f3bc6a7037963994770c5806c10e66f5cc55c59286fc76d0544fe4eca7626772b888fd719f434bc8a92f792bdb350c807968b2ac14cfc04b203 + FIND_PACKAGE_ARGUMENTS "MODULE" + OPTIONS + "OPUS_BUILD_TESTING OFF" + "OPUS_BUILD_PROGRAMS OFF" + "OPUS_INSTALL_PKG_CONFIG_MODULE OFF" + "OPUS_INSTALL_CMAKE_CONFIG_MODULE OFF" + EXCLUDE_FROM_ALL ON + ) + + if (Opus_ADDED AND NOT TARGET Opus::opus) + add_library(Opus::opus ALIAS opus) + endif() + + if(ENABLE_CUBEB) + AddPackage( + NAME cubeb + REPO "mozilla/cubeb" + SHA fa02160712 + HASH 82d808356752e4064de48c8fecbe7856715ade1e76b53937116bf07129fc1cc5b3de5e4b408de3cd000187ba8dc32ca4109661cb7e0355a52e54bd81b9be1c61 + FIND_PACKAGE_ARGUMENTS "CONFIG" # not sure this works outside of gentoo + OPTIONS + "USE_SANITIZERS OFF" + "BUILD_TESTS OFF" + "BUILD_TOOLS OFF" + "BUNDLE_SPEEX ON" + EXCLUDE_FROM_ALL ON + ) + + if (cubeb_ADDED) + if (NOT MSVC) + if (TARGET speex) + target_compile_options(speex PRIVATE -Wno-sign-compare) + endif() + + set_target_properties(cubeb PROPERTIES COMPILE_OPTIONS "") + target_compile_options(cubeb INTERFACE + -Wno-implicit-const-int-float-conversion + -Wno-shadow + -Wno-missing-declarations + -Wno-return-type + -Wno-uninitialized + ) + else() + target_compile_options(cubeb PRIVATE + /wd4456 + /wd4458 + ) + endif() + endif() + endif() else() # Enforce the search mode of non-required packages for better and shorter failure messages find_package(fmt 8 REQUIRED) diff --git a/src/audio_core/CMakeLists.txt b/src/audio_core/CMakeLists.txt index e040ec756d..f72448bc87 100644 --- a/src/audio_core/CMakeLists.txt +++ b/src/audio_core/CMakeLists.txt @@ -227,7 +227,7 @@ else() endif() target_include_directories(audio_core PRIVATE ${OPUS_INCLUDE_DIRS}) -target_link_libraries(audio_core PUBLIC common core opus) +target_link_libraries(audio_core PUBLIC common core Opus::opus) if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) target_link_libraries(audio_core PRIVATE dynarmic::dynarmic) From 6ae406332c62d78d4abedb070aa69779ffb954bd Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 25 Aug 2025 12:51:27 -0400 Subject: [PATCH 07/17] [cmake] force external spirv-tools on apple, fix findpkg logic Signed-off-by: crueter --- CMakeLists.txt | 33 +++++----------------------- externals/CMakeLists.txt | 29 +++++++++++++++--------- src/core/CMakeLists.txt | 1 - src/shader_recompiler/CMakeLists.txt | 4 +++- 4 files changed, 27 insertions(+), 40 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f50114ff0..a70e10e825 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,7 +75,9 @@ option(ENABLE_WIFI_SCAN "Enable WiFi scanning" OFF) option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ${EXT_DEFAULT}) option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ${EXT_DEFAULT}) option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ${EXT_DEFAULT}) -option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" ${EXT_DEFAULT}) + +# I hate Apple with a burning passion +CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" ${EXT_DEFAULT} "NOT APPLE" ON) option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF) @@ -587,33 +589,6 @@ endif() # SimpleIni AddJsonPackage(simpleini) -# Most linux distros don't package cubeb, so enable regardless of cpm settings -if(ENABLE_CUBEB) - AddJsonPackage(cubeb) - - if (cubeb_ADDED) - if (NOT MSVC) - if (TARGET speex) - target_compile_options(speex PRIVATE -Wno-sign-compare) - endif() - - set_target_properties(cubeb PROPERTIES COMPILE_OPTIONS "") - target_compile_options(cubeb INTERFACE - -Wno-implicit-const-int-float-conversion - -Wno-shadow - -Wno-missing-declarations - -Wno-return-type - -Wno-uninitialized - ) - else() - target_compile_options(cubeb PRIVATE - /wd4456 - /wd4458 - ) - endif() - endif() -endif() - # find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package if (ENABLE_SDL2) if (YUZU_USE_EXTERNAL_SDL2) @@ -697,6 +672,8 @@ if (ENABLE_SDL2) find_package(SDL2) endif() +find_package(SPIRV-Tools) + if (ENABLE_QT) if (YUZU_USE_BUNDLED_QT) download_qt(6.8.3) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 40fa53043c..61b28dff0b 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -80,9 +80,15 @@ if (ENABLE_LIBUSB AND NOT TARGET libusb::usb) endif() # Sirit -# TODO(crueter): spirv-tools doesn't work w/ system set(SPIRV_WERROR OFF) -AddJsonPackage(spirv-headers) +AddPackage( + NAME SPIRV-Headers + REPO "KhronosGroup/SPIRV-Headers" + SHA 4e209d3d7e + HASH f48bbe18341ed55ea0fe280dbbbc0a44bf222278de6e716e143ca1e95ca320b06d4d23d6583fbf8d03e1428f3dac8fa00e5b82ddcd6b425e6236d85af09550a4 + # spirv-tools is stupid and doesn't know how to utilize system spirv headers + BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS} +) AddJsonPackage(sirit) @@ -138,16 +144,19 @@ AddJsonPackage( BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES} ) -# SPIRV Tools -AddJsonPackage( - NAME spirv-tools - BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS} +# SPIRV-Tools +AddPackage( + NAME SPIRV-Tools + REPO "KhronosGroup/SPIRV-Tools" + SHA 40eb301f32 + HASH 58d0fb1047d69373cf24c73e6f78c73a72a6cca3b4df1d9f083b9dcc0962745ef154abf3dbe9b3623b835be20c6ec769431cf11733349f45e7568b3525f707aa + OPTIONS + "SPIRV_SKIP_EXECUTABLES ON" + "SPIRV_TOOLS_BUILD_STATIC ON" + BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_SPIRV_TOOLS} ) -if (SPIRV-Tools_ADDED) - add_library(SPIRV-Tools::SPIRV-Tools ALIAS SPIRV-Tools-static) - target_link_libraries(SPIRV-Tools-static PRIVATE SPIRV-Tools-opt SPIRV-Tools-link) -endif() +set(SPIRV-Tools_ADDED "${SPIRV-Tools_ADDED}" PARENT_SCOPE) # TZDB (Time Zone Database) add_subdirectory(nx_tzdb) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index eab506f194..a1c722a77c 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1184,7 +1184,6 @@ else() ) 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) if (BOOST_NO_HEADERS) diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt index 55cdc17c1f..fc4b0effa9 100644 --- a/src/shader_recompiler/CMakeLists.txt +++ b/src/shader_recompiler/CMakeLists.txt @@ -246,7 +246,9 @@ add_library(shader_recompiler STATIC ) -target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit SPIRV-Tools::SPIRV-Tools) +# This can actually cause issues e.g. with Apple +# but forcing external spirv-tools works there +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 From 43f040ff407d118ffcb2d002f96013eb8d1c36a0 Mon Sep 17 00:00:00 2001 From: crueter Date: Tue, 26 Aug 2025 13:46:13 -0400 Subject: [PATCH 08/17] [cmake] force bundled zstd on Apple Signed-off-by: crueter --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a70e10e825..c7f995adeb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -451,6 +451,7 @@ if (YUZU_USE_CPM) "ZSTD_BUILD_SHARED OFF" "ZSTD_BUILD_STATIC ON" EXCLUDE_FROM_ALL ON + BUNDLED_PACKAGE ${APPLE} ) if (zstd_ADDED AND NOT TARGET zstd::zstd) From 03b4f57364005ba1a213ba204206c9443de40e4a Mon Sep 17 00:00:00 2001 From: crueter Date: Sat, 30 Aug 2025 06:27:30 +0200 Subject: [PATCH 09/17] [cmake] fix nx_tzdb msvc link error (tmp) (#356) This is an incredibly stupid and nonsensical bug that I have no way of possibly explaining. This is a temporary workaround until I can reproduce it and figure it out. Otherwise MSVC linker crashes during final link phase. thanks microsoft Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/356 Reviewed-by: Shinmegumi Reviewed-by: CamilleLaVey Co-authored-by: crueter Co-committed-by: crueter --- externals/nx_tzdb/CMakeLists.txt | 108 +++++++++++++++++++------------ src/common/ring_buffer.h | 1 + 2 files changed, 68 insertions(+), 41 deletions(-) diff --git a/externals/nx_tzdb/CMakeLists.txt b/externals/nx_tzdb/CMakeLists.txt index 2d6b2fcc66..35d3e6d2a8 100644 --- a/externals/nx_tzdb/CMakeLists.txt +++ b/externals/nx_tzdb/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2025 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + # SPDX-FileCopyrightText: 2023 yuzu Emulator Project # SPDX-License-Identifier: GPL-2.0-or-later @@ -15,35 +18,58 @@ find_program(DATE_PROG date) set(CAN_BUILD_NX_TZDB true) -if (NOT GIT) - set(CAN_BUILD_NX_TZDB false) -endif() -if (NOT GNU_MAKE) - set(CAN_BUILD_NX_TZDB false) -endif() -if (NOT DATE_PROG) - set(CAN_BUILD_NX_TZDB false) -endif() -if (CMAKE_SYSTEM_NAME STREQUAL "Windows" OR ANDROID) +if (NOT (GIT AND GNU_MAKE AND DATE_PROG) OR CMAKE_SYSTEM_NAME STREQUAL "Windows" OR ANDROID) # tzdb_to_nx currently requires a posix-compliant host # MinGW and Android are handled here due to the executable format being different from the host system # TODO (lat9nq): cross-compiling support + set(CAN_BUILD_NX_TZDB false) endif() -set(NX_TZDB_VERSION "250725") -set(NX_TZDB_ROMFS_DIR "${CPM_SOURCE_CACHE}/nx_tzdb") - -if ((NOT CAN_BUILD_NX_TZDB OR YUZU_DOWNLOAD_TIME_ZONE_DATA) AND NOT EXISTS ${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}) - message(STATUS "Downloading time zone data...") - AddJsonPackage(tzdb) -elseif (CAN_BUILD_NX_TZDB AND NOT YUZU_DOWNLOAD_TIME_ZONE_DATA) - # TODO(crueter): this sucked to do with cpm, see if i can get it to work again +if (CAN_BUILD_NX_TZDB AND NOT YUZU_DOWNLOAD_TIME_ZONE_DATA) message(FATAL_ERROR "Building tzdb is currently unsupported. Check back later.") add_subdirectory(tzdb_to_nx) add_dependencies(nx_tzdb x80e) - set(NX_TZDB_ROMFS_DIR "${NX_TZDB_DIR}") + set(NX_TZDB_BASE_DIR "${NX_TZDB_DIR}") + set(NX_TZDB_TZ_DIR "${NX_TZDB_BASE_DIR}/zoneinfo") +endif() + +# TODO(crueter): This is a terrible solution, but MSVC fails to link without it +# Need to investigate further but I still can't reproduce... +if (MSVC) + set(NX_TZDB_VERSION "250725") + set(NX_TZDB_ARCHIVE "${CPM_SOURCE_CACHE}/nx_tzdb/${NX_TZDB_VERSION}.zip") + + set(NX_TZDB_BASE_DIR "${CPM_SOURCE_CACHE}/nx_tzdb/tz") + set(NX_TZDB_TZ_DIR "${NX_TZDB_BASE_DIR}/zoneinfo") + + set(NX_TZDB_DOWNLOAD_URL "https://github.com/crueter/tzdb_to_nx/releases/download/${NX_TZDB_VERSION}/${NX_TZDB_VERSION}.zip") + + message(STATUS "Downloading time zone data from ${NX_TZDB_DOWNLOAD_URL}...") + file(DOWNLOAD ${NX_TZDB_DOWNLOAD_URL} ${NX_TZDB_ARCHIVE} + STATUS NX_TZDB_DOWNLOAD_STATUS) + + list(GET NX_TZDB_DOWNLOAD_STATUS 0 NX_TZDB_DOWNLOAD_STATUS_CODE) + if (NOT NX_TZDB_DOWNLOAD_STATUS_CODE EQUAL 0) + message(FATAL_ERROR "Time zone data download failed (status code ${NX_TZDB_DOWNLOAD_STATUS_CODE})") + endif() + + file(ARCHIVE_EXTRACT + INPUT + ${NX_TZDB_ARCHIVE} + DESTINATION + ${NX_TZDB_BASE_DIR}) +else() + message(STATUS "Downloading time zone data...") + AddJsonPackage(tzdb) + + target_include_directories(nx_tzdb + INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include + INTERFACE ${NX_TZDB_INCLUDE_DIR}) + + set(NX_TZDB_BASE_DIR "${CPM_SOURCE_CACHE}/nx_tzdb") + set(NX_TZDB_TZ_DIR "${nx_tzdb_SOURCE_DIR}") endif() target_include_directories(nx_tzdb @@ -68,25 +94,25 @@ function(CreateHeader ZONE_PATH HEADER_NAME) target_sources(nx_tzdb PRIVATE ${HEADER_PATH}) endfunction() -CreateHeader(${NX_TZDB_ROMFS_DIR} base) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION} zoneinfo) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Africa africa) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/America america) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/America/Argentina america_argentina) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/America/Indiana america_indiana) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/America/Kentucky america_kentucky) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/America/North_Dakota america_north_dakota) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Antarctica antarctica) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Arctic arctic) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Asia asia) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Atlantic atlantic) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Australia australia) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Brazil brazil) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Canada canada) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Chile chile) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Etc etc) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Europe europe) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Indian indian) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Mexico mexico) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/Pacific pacific) -CreateHeader(${NX_TZDB_ROMFS_DIR}/${NX_TZDB_VERSION}/US us) +CreateHeader(${NX_TZDB_BASE_DIR} base) +CreateHeader(${NX_TZDB_TZ_DIR} zoneinfo) +CreateHeader(${NX_TZDB_TZ_DIR}/Africa africa) +CreateHeader(${NX_TZDB_TZ_DIR}/America america) +CreateHeader(${NX_TZDB_TZ_DIR}/America/Argentina america_argentina) +CreateHeader(${NX_TZDB_TZ_DIR}/America/Indiana america_indiana) +CreateHeader(${NX_TZDB_TZ_DIR}/America/Kentucky america_kentucky) +CreateHeader(${NX_TZDB_TZ_DIR}/America/North_Dakota america_north_dakota) +CreateHeader(${NX_TZDB_TZ_DIR}/Antarctica antarctica) +CreateHeader(${NX_TZDB_TZ_DIR}/Arctic arctic) +CreateHeader(${NX_TZDB_TZ_DIR}/Asia asia) +CreateHeader(${NX_TZDB_TZ_DIR}/Atlantic atlantic) +CreateHeader(${NX_TZDB_TZ_DIR}/Australia australia) +CreateHeader(${NX_TZDB_TZ_DIR}/Brazil brazil) +CreateHeader(${NX_TZDB_TZ_DIR}/Canada canada) +CreateHeader(${NX_TZDB_TZ_DIR}/Chile chile) +CreateHeader(${NX_TZDB_TZ_DIR}/Etc etc) +CreateHeader(${NX_TZDB_TZ_DIR}/Europe europe) +CreateHeader(${NX_TZDB_TZ_DIR}/Indian indian) +CreateHeader(${NX_TZDB_TZ_DIR}/Mexico mexico) +CreateHeader(${NX_TZDB_TZ_DIR}/Pacific pacific) +CreateHeader(${NX_TZDB_TZ_DIR}/US us) diff --git a/src/common/ring_buffer.h b/src/common/ring_buffer.h index 14f6eceeb8..86de96b43e 100644 --- a/src/common/ring_buffer.h +++ b/src/common/ring_buffer.h @@ -15,6 +15,7 @@ #include #include #include +#include namespace Common { From 21d25cd2e5b78628c6809ac14d348be2f3d13d6d Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 25 Aug 2025 07:47:11 +0000 Subject: [PATCH 10/17] [docs] update macOS docs Signed-off-by: lizzie --- docs/build/macOS.md | 40 ++++++++++++---------------------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/docs/build/macOS.md b/docs/build/macOS.md index 6cb62273cb..a04fd6f360 100644 --- a/docs/build/macOS.md +++ b/docs/build/macOS.md @@ -1,6 +1,6 @@ -Please note this article is intended for development, and eden on macOS is not currently ready for regular use. +Please note this article is intended for development, and Eden on macOS is not currently ready for regular use. -This article was written for developers. eden support for macOS is not ready for casual use. +This article was written for developers. Eden support for macOS is not ready for casual use. ## Method I: ninja --- @@ -14,30 +14,21 @@ brew install autoconf automake boost ccache ffmpeg fmt glslang hidapi libtool li Clone the repo ```sh git clone --recursive https://git.eden-emu.dev/eden-emu/eden - cd eden ``` Build for release ```sh -mkdir build && cd build - export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake" - export LIBVULKAN_PATH=/opt/homebrew/lib/libvulkan.dylib - -cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=ON -DENABLE_LIBUSB=OFF -DCLANG_FORMAT=ON -DSDL2_DISABLE_INSTALL=ON -DSDL_ALTIVEC=ON - +cmake -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=ON -DENABLE_LIBUSB=OFF -DCLANG_FORMAT=ON -DSDL2_DISABLE_INSTALL=ON -DSDL_ALTIVEC=ON ninja ``` -You may also want to include support for Discord Rich Presence by adding `-DUSE_DISCORD_PRESENCE=ON` after `cmake ..` - -Build with debug symbols (vcpkg is not currently used due to broken boost-context library): +You may also want to include support for Discord Rich Presence by adding `-DUSE_DISCORD_PRESENCE=ON` ```sh -mkdir build && cd build export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake" -cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF +cmake -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF ninja ``` @@ -59,30 +50,23 @@ brew install autoconf automake boost ccache ffmpeg fmt glslang hidapi libtool li Clone the repo ```sh git clone --recursive https://git.eden-emu.dev/eden-emu/eden - cd eden ``` Build for release ```sh -mkdir build && cd build - export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake" - export LIBVULKAN_PATH=/opt/homebrew/lib/libvulkan.dylib - -cmake .. -GXcode -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=ON -DENABLE_LIBUSB=OFF -DCLANG_FORMAT=ON -DSDL2_DISABLE_INSTALL=ON -DSDL_ALTIVEC=ON - -xcodebuild build -project eden.xcodeproj -scheme "eden" -configuration "RelWithDebInfo" +# Only if having errors about Xcode 15.0 +sudo /usr/bin/xcode-select --switch /Users/admin/Downloads/Xcode.ap +cmake -B build -GXcode -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=ON -DENABLE_LIBUSB=OFF -DCLANG_FORMAT=ON -DSDL2_DISABLE_INSTALL=ON -DSDL_ALTIVEC=ON +xcodebuild build -project yuzu.xcodeproj -scheme "yuzu" -configuration "RelWithDebInfo" ``` -You may also want to include support for Discord Rich Presence by adding `-DUSE_DISCORD_PRESENCE=ON` after `cmake ..` - -Build with debug symbols (vcpkg is not currently used due to broken boost-context library): +Build with debug symbols: ```sh -mkdir build && cd build export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake" -cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF +cmake -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF ninja ``` @@ -102,4 +86,4 @@ Run with Vulkan loader path: ```sh export LIBVULKAN_PATH=/opt/homebrew/lib/libvulkan.dylib bin/eden.app/Contents/MacOS/eden -``` \ No newline at end of file +``` From 39e9beafed0bebb21d230959f0f5501e13a4b2d9 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 25 Aug 2025 07:48:37 +0000 Subject: [PATCH 11/17] [macOS] fix mbedtls Signed-off-by: lizzie --- src/core/file_sys/xts_archive.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/file_sys/xts_archive.cpp b/src/core/file_sys/xts_archive.cpp index fd5342021c..8b201cf3da 100644 --- a/src/core/file_sys/xts_archive.cpp +++ b/src/core/file_sys/xts_archive.cpp @@ -68,7 +68,12 @@ NAX::NAX(VirtualFile file_, std::array nca_id) : header(std::make_unique()), file(std::move(file_)), keys{Core::Crypto::KeyManager::Instance()} { Core::Crypto::SHA256Hash hash{}; +#ifdef MBEDTLS_DEPRECATED_REMOVED mbedtls_sha256_ret(nca_id.data(), nca_id.size(), hash.data(), 0); +#else + // Compatibility with macOS Xcode-15 + mbedtls_sha256(nca_id.data(), nca_id.size(), hash.data(), 0); +#endif status = Parse(fmt::format("/registered/000000{:02X}/{}.nca", hash[0], Common::HexToString(nca_id, false))); } From 9fc0a6561900fc4c20859e980669287c9e87eba8 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 25 Aug 2025 08:15:01 +0000 Subject: [PATCH 12/17] [cmake] force bundled mbedtls (for apple?) Signed-off-by: lizzie --- externals/CMakeLists.txt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index b209b48db9..40fa53043c 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -54,7 +54,15 @@ endif() add_subdirectory(glad) # mbedtls -AddJsonPackage(mbedtls) +AddPackage( + NAME mbedtls + REPO "Mbed-TLS/mbedtls" + SHA "8c88150ca1" + HASH 769ad1e94c570671071e1f2a5c0f1027e0bf6bcdd1a80ea8ac970f2c86bc45ce4e31aa88d6d8110fc1bed1de81c48bc624df1b38a26f8b340a44e109d784a966 + PATCHES + ${CMAKE_SOURCE_DIR}/.patch/mbedtls/0001-cmake-version.patch + BUNDLED_PACKAGE ON +) if (mbedtls_ADDED) target_include_directories(mbedtls PUBLIC ${mbedtls_SOURCE_DIR}/include) From 4d3202b8bd6becba7d06044766f84ad99361d9ef Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 25 Aug 2025 11:30:47 -0400 Subject: [PATCH 13/17] [cmake] fix zstd link Signed-off-by: crueter --- CMakeLists.txt | 28 +++++++++++++++++++++++++--- src/common/CMakeLists.txt | 5 ----- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d11b58bf1f..b85572f73e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -437,10 +437,32 @@ if (YUZU_USE_CPM) endif() # zstd - AddJsonPackage(zstd) + AddPackage( + NAME zstd + REPO facebook/zstd + SHA f8745da6ff + HASH 3037007f990040fe32573b46f9bef8762fd5dbeeb07ffffcbfeba51ec98167edae39bb9c87f9299efcd61c4e467c5e84f7c19f0df7799bc1fc04864a278792ee + VERSION 1.5 + SOURCE_SUBDIR build/cmake + FIND_PACKAGE_ARGUMENTS "MODULE" + OPTIONS + "ZSTD_BUILD_SHARED OFF" + "ZSTD_BUILD_STATIC ON" + EXCLUDE_FROM_ALL ON + ) - if (zstd_ADDED) - add_library(zstd::zstd ALIAS libzstd_static) + if (zstd_ADDED AND NOT TARGET zstd::zstd) + if (TARGET zstd::libzstd_shared) + add_library(zstd::zstd ALIAS zstd::libzstd_shared) + elseif (TARGET zstd::libzstd_static) + add_library(zstd::zstd ALIAS zstd::libzstd_static) + elseif (TARGET libzstd_shared) + add_library(zstd::zstd ALIAS libzstd_shared) + elseif (TARGET libzstd_static) + add_library(zstd::zstd ALIAS libzstd_static) + else() + message(FATAL_ERROR "Could not determine zstd target") + endif() endif() # Catch2 diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 6173e29f45..8b8629e6c4 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -274,11 +274,6 @@ endif() target_link_libraries(common PUBLIC fmt::fmt stb::headers Threads::Threads) target_link_libraries(common PRIVATE lz4::lz4 LLVM::Demangle zstd::zstd) -if (TARGET unordered_dense::unordered_dense) - # weird quirk of system installs - target_link_libraries(common PUBLIC unordered_dense::unordered_dense) -endif() - if(ANDROID) # For ASharedMemory_create target_link_libraries(common PRIVATE android) From 6ae9d72d78dd146e5fd2fb83604be373bf03def7 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 25 Aug 2025 11:40:42 -0400 Subject: [PATCH 14/17] [cmake] use MODULE for non-CPM zstd Signed-off-by: crueter --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b85572f73e..29755bd8e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -492,6 +492,10 @@ else() find_package(ZLIB 1.2 REQUIRED) find_package(zstd 1.5 REQUIRED MODULE) + if (ENABLE_CUBEB) + find_package(cubeb CONFIG) + endif() + if (YUZU_TESTS) find_package(Catch2 3.0.1 REQUIRED) endif() From 9647025881524700ca59826943cab604f13e802e Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 25 Aug 2025 11:48:51 -0400 Subject: [PATCH 15/17] [cmake] fix opus link Signed-off-by: crueter --- CMakeLists.txt | 57 ++++++++++++++++++++++++++++++++++- src/audio_core/CMakeLists.txt | 2 +- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 29755bd8e9..3f50114ff0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -478,7 +478,62 @@ if (YUZU_USE_CPM) endif() # Opus - AddJsonPackage(opus) + AddPackage( + NAME Opus + VERSION 1.3 + REPO "xiph/opus" + SHA 5ded705cf4 + HASH 0dc89e58ddda1f3bc6a7037963994770c5806c10e66f5cc55c59286fc76d0544fe4eca7626772b888fd719f434bc8a92f792bdb350c807968b2ac14cfc04b203 + FIND_PACKAGE_ARGUMENTS "MODULE" + OPTIONS + "OPUS_BUILD_TESTING OFF" + "OPUS_BUILD_PROGRAMS OFF" + "OPUS_INSTALL_PKG_CONFIG_MODULE OFF" + "OPUS_INSTALL_CMAKE_CONFIG_MODULE OFF" + EXCLUDE_FROM_ALL ON + ) + + if (Opus_ADDED AND NOT TARGET Opus::opus) + add_library(Opus::opus ALIAS opus) + endif() + + if(ENABLE_CUBEB) + AddPackage( + NAME cubeb + REPO "mozilla/cubeb" + SHA fa02160712 + HASH 82d808356752e4064de48c8fecbe7856715ade1e76b53937116bf07129fc1cc5b3de5e4b408de3cd000187ba8dc32ca4109661cb7e0355a52e54bd81b9be1c61 + FIND_PACKAGE_ARGUMENTS "CONFIG" # not sure this works outside of gentoo + OPTIONS + "USE_SANITIZERS OFF" + "BUILD_TESTS OFF" + "BUILD_TOOLS OFF" + "BUNDLE_SPEEX ON" + EXCLUDE_FROM_ALL ON + ) + + if (cubeb_ADDED) + if (NOT MSVC) + if (TARGET speex) + target_compile_options(speex PRIVATE -Wno-sign-compare) + endif() + + set_target_properties(cubeb PROPERTIES COMPILE_OPTIONS "") + target_compile_options(cubeb INTERFACE + -Wno-implicit-const-int-float-conversion + -Wno-shadow + -Wno-missing-declarations + -Wno-return-type + -Wno-uninitialized + ) + else() + target_compile_options(cubeb PRIVATE + /wd4456 + /wd4458 + ) + endif() + endif() + endif() else() # Enforce the search mode of non-required packages for better and shorter failure messages find_package(fmt 8 REQUIRED) diff --git a/src/audio_core/CMakeLists.txt b/src/audio_core/CMakeLists.txt index e040ec756d..f72448bc87 100644 --- a/src/audio_core/CMakeLists.txt +++ b/src/audio_core/CMakeLists.txt @@ -227,7 +227,7 @@ else() endif() target_include_directories(audio_core PRIVATE ${OPUS_INCLUDE_DIRS}) -target_link_libraries(audio_core PUBLIC common core opus) +target_link_libraries(audio_core PUBLIC common core Opus::opus) if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) target_link_libraries(audio_core PRIVATE dynarmic::dynarmic) From 76918a844f466c20e6801025e1605788033998be Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 25 Aug 2025 12:51:27 -0400 Subject: [PATCH 16/17] [cmake] force external spirv-tools on apple, fix findpkg logic Signed-off-by: crueter --- CMakeLists.txt | 33 +++++----------------------- externals/CMakeLists.txt | 29 +++++++++++++++--------- src/core/CMakeLists.txt | 1 - src/shader_recompiler/CMakeLists.txt | 4 +++- 4 files changed, 27 insertions(+), 40 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f50114ff0..a70e10e825 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,7 +75,9 @@ option(ENABLE_WIFI_SCAN "Enable WiFi scanning" OFF) option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ${EXT_DEFAULT}) option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ${EXT_DEFAULT}) option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ${EXT_DEFAULT}) -option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" ${EXT_DEFAULT}) + +# I hate Apple with a burning passion +CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" ${EXT_DEFAULT} "NOT APPLE" ON) option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF) @@ -587,33 +589,6 @@ endif() # SimpleIni AddJsonPackage(simpleini) -# Most linux distros don't package cubeb, so enable regardless of cpm settings -if(ENABLE_CUBEB) - AddJsonPackage(cubeb) - - if (cubeb_ADDED) - if (NOT MSVC) - if (TARGET speex) - target_compile_options(speex PRIVATE -Wno-sign-compare) - endif() - - set_target_properties(cubeb PROPERTIES COMPILE_OPTIONS "") - target_compile_options(cubeb INTERFACE - -Wno-implicit-const-int-float-conversion - -Wno-shadow - -Wno-missing-declarations - -Wno-return-type - -Wno-uninitialized - ) - else() - target_compile_options(cubeb PRIVATE - /wd4456 - /wd4458 - ) - endif() - endif() -endif() - # find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package if (ENABLE_SDL2) if (YUZU_USE_EXTERNAL_SDL2) @@ -697,6 +672,8 @@ if (ENABLE_SDL2) find_package(SDL2) endif() +find_package(SPIRV-Tools) + if (ENABLE_QT) if (YUZU_USE_BUNDLED_QT) download_qt(6.8.3) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 40fa53043c..61b28dff0b 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -80,9 +80,15 @@ if (ENABLE_LIBUSB AND NOT TARGET libusb::usb) endif() # Sirit -# TODO(crueter): spirv-tools doesn't work w/ system set(SPIRV_WERROR OFF) -AddJsonPackage(spirv-headers) +AddPackage( + NAME SPIRV-Headers + REPO "KhronosGroup/SPIRV-Headers" + SHA 4e209d3d7e + HASH f48bbe18341ed55ea0fe280dbbbc0a44bf222278de6e716e143ca1e95ca320b06d4d23d6583fbf8d03e1428f3dac8fa00e5b82ddcd6b425e6236d85af09550a4 + # spirv-tools is stupid and doesn't know how to utilize system spirv headers + BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS} +) AddJsonPackage(sirit) @@ -138,16 +144,19 @@ AddJsonPackage( BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES} ) -# SPIRV Tools -AddJsonPackage( - NAME spirv-tools - BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS} +# SPIRV-Tools +AddPackage( + NAME SPIRV-Tools + REPO "KhronosGroup/SPIRV-Tools" + SHA 40eb301f32 + HASH 58d0fb1047d69373cf24c73e6f78c73a72a6cca3b4df1d9f083b9dcc0962745ef154abf3dbe9b3623b835be20c6ec769431cf11733349f45e7568b3525f707aa + OPTIONS + "SPIRV_SKIP_EXECUTABLES ON" + "SPIRV_TOOLS_BUILD_STATIC ON" + BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_SPIRV_TOOLS} ) -if (SPIRV-Tools_ADDED) - add_library(SPIRV-Tools::SPIRV-Tools ALIAS SPIRV-Tools-static) - target_link_libraries(SPIRV-Tools-static PRIVATE SPIRV-Tools-opt SPIRV-Tools-link) -endif() +set(SPIRV-Tools_ADDED "${SPIRV-Tools_ADDED}" PARENT_SCOPE) # TZDB (Time Zone Database) add_subdirectory(nx_tzdb) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index eab506f194..a1c722a77c 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1184,7 +1184,6 @@ else() ) 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) if (BOOST_NO_HEADERS) diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt index 55cdc17c1f..fc4b0effa9 100644 --- a/src/shader_recompiler/CMakeLists.txt +++ b/src/shader_recompiler/CMakeLists.txt @@ -246,7 +246,9 @@ add_library(shader_recompiler STATIC ) -target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit SPIRV-Tools::SPIRV-Tools) +# This can actually cause issues e.g. with Apple +# but forcing external spirv-tools works there +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 From eba6855fd92e9b6e34863cfa843590ab19ceb558 Mon Sep 17 00:00:00 2001 From: crueter Date: Tue, 26 Aug 2025 13:46:13 -0400 Subject: [PATCH 17/17] [cmake] force bundled zstd on Apple Signed-off-by: crueter --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a70e10e825..c7f995adeb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -451,6 +451,7 @@ if (YUZU_USE_CPM) "ZSTD_BUILD_SHARED OFF" "ZSTD_BUILD_STATIC ON" EXCLUDE_FROM_ALL ON + BUNDLED_PACKAGE ${APPLE} ) if (zstd_ADDED AND NOT TARGET zstd::zstd)