From 3dc0dcef839061c637a9417b786a5fe00b87f216 Mon Sep 17 00:00:00 2001 From: crueter Date: Thu, 26 Mar 2026 02:53:43 -0400 Subject: [PATCH] Fix most build errors Signed-off-by: crueter --- .ci/ios/build.sh | 11 ++++---- .ci/ios/ios-toolchain.cmake | 2 +- CMakeLists.txt | 14 +++++----- externals/CMakeLists.txt | 4 +++ .../cmake-modules/DetectArchitecture.cmake | 8 +++--- externals/cpmfile.json | 8 +++--- src/common/CMakeLists.txt | 5 ++-- src/common/httplib.h | 9 +++++++ src/core/CMakeLists.txt | 3 --- .../hle/service/bcat/news/builtin_news.cpp | 9 ++----- src/frontend_common/CMakeLists.txt | 3 --- src/frontend_common/update_checker.cpp | 2 +- src/ios/CMakeLists.txt | 3 ++- src/ios/VMA.cpp | 5 ++++ src/qt_common/CMakeLists.txt | 3 --- src/qt_common/discord/discord_impl.cpp | 2 +- src/video_core/vulkan_common/vma.h | 7 ++++- src/web_service/CMakeLists.txt | 27 +++---------------- src/web_service/web_backend.cpp | 2 +- 19 files changed, 57 insertions(+), 70 deletions(-) create mode 100644 src/common/httplib.h create mode 100644 src/ios/VMA.cpp diff --git a/.ci/ios/build.sh b/.ci/ios/build.sh index f199b66582..5537214cf9 100755 --- a/.ci/ios/build.sh +++ b/.ci/ios/build.sh @@ -6,9 +6,9 @@ WORK_DIR="$PWD" xcrun --sdk iphoneos --show-sdk-path -# TODO(crueter): FFmpeg for iOS +# TODO: support iphonesimulator sdk -cmake -G Xcode -B build \ +cmake -G Xcode -B build/ios \ -DCMAKE_TOOLCHAIN_FILE="$WORK_DIR/.ci/ios/ios-toolchain.cmake" \ -DPLATFORM=OS64 \ -DARCHS="arm64" \ @@ -19,8 +19,7 @@ cmake -G Xcode -B build \ -DENABLE_QT=OFF \ -DENABLE_WEB_SERVICE=OFF \ -DENABLE_CUBEB=OFF \ - -DYUZU_USE_EXTERNAL_FFMPEG=ON \ - -DYUZU_USE_EXTERNAL_SDL2=ON \ - -DCMAKE_BUILD_TYPE=Release + -DCMAKE_BUILD_TYPE=Release \ + "$@" -cmake --build build -t eden-ios +cmake --build build/ios -t eden-ios --config Release diff --git a/.ci/ios/ios-toolchain.cmake b/.ci/ios/ios-toolchain.cmake index b0defa25aa..5eed07b32f 100644 --- a/.ci/ios/ios-toolchain.cmake +++ b/.ci/ios/ios-toolchain.cmake @@ -157,7 +157,7 @@ # command. # -cmake_minimum_required(VERSION 3.8.0) +cmake_minimum_required(VERSION 3.10) # CMake invokes the toolchain file twice during the first build, but only once during subsequent rebuilds. # NOTE: To improve single-library build-times, provide the flag "OS_SINGLE_BUILD" as a build argument. diff --git a/CMakeLists.txt b/CMakeLists.txt index aad977ae60..82f8d8aec1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -170,24 +170,24 @@ if (MSVC AND NOT CXX_CLANG) set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} /W3 /WX-") endif() -# TODO(crueter): Cleanup, each dep that has a bundled option should allow to choose between bundled, external, system -cmake_dependent_option(YUZU_USE_EXTERNAL_SDL2 "Build SDL2 from external source" OFF "NOT MSVC;NOT ANDROID" OFF) -cmake_dependent_option(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 build" "${MSVC}" "NOT ANDROID" OFF) - -option(ENABLE_CUBEB "Enables the cubeb audio backend" ON) - set(EXT_DEFAULT OFF) if (MSVC OR ANDROID OR IOS) set(EXT_DEFAULT ON) endif() +# TODO(crueter): Cleanup, each dep that has a bundled option should allow to choose between bundled, external, system +cmake_dependent_option(YUZU_USE_EXTERNAL_SDL2 "Build SDL2 from external source" OFF "NOT MSVC;NOT ANDROID" OFF) +cmake_dependent_option(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 build" "${EXT_DEFAULT}" "NOT ANDROID" OFF) + +option(ENABLE_CUBEB "Enables the cubeb audio backend" ON) + # ffmpeg option(YUZU_USE_BUNDLED_FFMPEG "Download bundled FFmpeg" ${EXT_DEFAULT}) cmake_dependent_option(YUZU_USE_EXTERNAL_FFMPEG "Build FFmpeg from external source" "${PLATFORM_SUN}" "NOT WIN32 AND NOT ANDROID" OFF) # sirit set(BUNDLED_SIRIT_DEFAULT OFF) -if ((MSVC AND NOT (CMAKE_BUILD_TYPE MATCHES "Deb")) OR ANDROID) +if ((MSVC AND NOT (CMAKE_BUILD_TYPE MATCHES "Deb")) OR ANDROID OR IOS) set(BUNDLED_SIRIT_DEFAULT ON) endif() diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 00bdf10a4f..2ebc09113b 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -228,6 +228,10 @@ if (VulkanMemoryAllocator_ADDED) endif() # httplib +if (IOS) + set(HTTPLIB_USE_BROTLI_IF_AVAILABLE OFF) +endif() + AddJsonPackage(httplib) # cpp-jwt diff --git a/externals/cmake-modules/DetectArchitecture.cmake b/externals/cmake-modules/DetectArchitecture.cmake index a2f78b86de..c4fd9e1ec3 100644 --- a/externals/cmake-modules/DetectArchitecture.cmake +++ b/externals/cmake-modules/DetectArchitecture.cmake @@ -41,12 +41,12 @@ if (CMAKE_OSX_ARCHITECTURES) if (IOS) # TODO: Right... the toolchain file won't properly accomodate OSX_ARCHITECTURE # they aren't defining it as a list properly I assume? - set(ARCHITECTURE_arm64 1 PARENT_SCOPE) + set(ARCHITECTURE_arm64 1) add_definitions(-DARCHITECTURE_arm64=1) else () # hope and pray the architecture names match - foreach(ARCH IN ${CMAKE_OSX_ARCHITECTURES}) - set(ARCHITECTURE_${ARCH} 1 PARENT_SCOPE) + foreach(ARCH ${CMAKE_OSX_ARCHITECTURES}) + set(ARCHITECTURE_${ARCH} 1) add_definitions(-DARCHITECTURE_${ARCH}=1) endforeach() endif() @@ -223,4 +223,4 @@ if (NOT DEFINED ARCHITECTURE) add_definitions(-DARCHITECTURE_GENERIC=1) endif() -message(STATUS "[DetectArchitecture] Target architecture: ${ARCHITECTURE}") \ No newline at end of file +message(STATUS "[DetectArchitecture] Target architecture: ${ARCHITECTURE}") diff --git a/externals/cpmfile.json b/externals/cpmfile.json index f9f538e866..45400f0801 100644 --- a/externals/cpmfile.json +++ b/externals/cpmfile.json @@ -23,10 +23,7 @@ "package": "sirit", "name": "sirit", "repo": "eden-emulator/sirit", - "version": "1.0.4", - "disabled_platforms": [ - "ios-aarch64" - ] + "version": "1.0.5" }, "httplib": { "repo": "yhirose/cpp-httplib", @@ -39,7 +36,8 @@ "0002-fix-zstd.patch" ], "options": [ - "HTTPLIB_REQUIRE_OPENSSL ON" + "HTTPLIB_REQUIRE_OPENSSL ON", + "HTTPLIB_DISABLE_MACOSX_AUTOMATIC_ROOT_CERTIFICATES ON" ] }, "cpp-jwt": { diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 1ee4794272..00a25a5744 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -144,7 +144,8 @@ add_library( zstd_compression.cpp zstd_compression.h fs/ryujinx_compat.h fs/ryujinx_compat.cpp - fs/symlink.h fs/symlink.cpp) + fs/symlink.h fs/symlink.cpp + httplib.h) if(WIN32) target_sources(common PRIVATE windows/timer_resolution.cpp @@ -242,7 +243,7 @@ else() target_link_libraries(common PUBLIC Boost::headers) endif() -target_link_libraries(common PUBLIC Boost::filesystem Boost::context) +target_link_libraries(common PUBLIC Boost::filesystem Boost::context httplib::httplib) if (lz4_ADDED) target_include_directories(common PRIVATE ${lz4_SOURCE_DIR}/lib) diff --git a/src/common/httplib.h b/src/common/httplib.h new file mode 100644 index 0000000000..2f971bd5f3 --- /dev/null +++ b/src/common/httplib.h @@ -0,0 +1,9 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#define CPPHTTPLIB_DISABLE_MACOSX_AUTOMATIC_ROOT_CERTIFICATES +#define CPPHTTPLIB_OPENSSL_SUPPORT + +#include diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index a2f595540d..aad42b883b 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1273,9 +1273,6 @@ endif() target_sources(core PRIVATE hle/service/ssl/ssl_backend_openssl.cpp) target_link_libraries(core PRIVATE OpenSSL::SSL OpenSSL::Crypto) -if (NOT IOS) - target_compile_definitions(core PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) -endif() # TODO diff --git a/src/core/hle/service/bcat/news/builtin_news.cpp b/src/core/hle/service/bcat/news/builtin_news.cpp index f7cc6c5a23..ad7aafa4e3 100644 --- a/src/core/hle/service/bcat/news/builtin_news.cpp +++ b/src/core/hle/service/bcat/news/builtin_news.cpp @@ -15,9 +15,7 @@ #include #include -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -#include -#endif +#include "common/httplib.h" #include #include @@ -104,7 +102,6 @@ std::vector TryLoadFromDisk(const std::filesystem::path& path) { std::vector DownloadImage(const std::string& url_path, const std::filesystem::path& cache_path) { LOG_INFO(Service_BCAT, "Downloading image: https://eden-emu.dev{}", url_path); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT try { httplib::Client cli("https://eden-emu.dev"); cli.set_follow_location(true); @@ -128,7 +125,6 @@ std::vector DownloadImage(const std::string& url_path, const std::filesystem } catch (...) { LOG_WARNING(Service_BCAT, "Failed to download: {}", url_path); } -#endif return {}; } @@ -233,7 +229,6 @@ void WriteCachedJson(std::string_view json) { std::optional DownloadReleasesJson() { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT try { httplib::SSLClient cli{"api.github.com", 443}; cli.set_connection_timeout(10); @@ -255,7 +250,7 @@ std::optional DownloadReleasesJson() { } catch (...) { LOG_WARNING(Service_BCAT, " failed to download releases"); } -#endif + return std::nullopt; } diff --git a/src/frontend_common/CMakeLists.txt b/src/frontend_common/CMakeLists.txt index b1554d7dba..f9b3805939 100644 --- a/src/frontend_common/CMakeLists.txt +++ b/src/frontend_common/CMakeLists.txt @@ -23,9 +23,6 @@ if (ENABLE_UPDATE_CHECKER) update_checker.cpp update_checker.h) target_link_libraries(frontend_common PRIVATE OpenSSL::SSL OpenSSL::Crypto) - if (NOT IOS) - target_compile_definitions(frontend_common PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT) - endif() endif() create_target_directory_groups(frontend_common) diff --git a/src/frontend_common/update_checker.cpp b/src/frontend_common/update_checker.cpp index 75b1dc00cc..3e5a832ba0 100644 --- a/src/frontend_common/update_checker.cpp +++ b/src/frontend_common/update_checker.cpp @@ -13,7 +13,7 @@ #include "common/scm_rev.h" #include "update_checker.h" -#include +#include "common/httplib.h" #ifdef YUZU_BUNDLED_OPENSSL #include diff --git a/src/ios/CMakeLists.txt b/src/ios/CMakeLists.txt index 54ff956a36..6e6c13db2d 100644 --- a/src/ios/CMakeLists.txt +++ b/src/ios/CMakeLists.txt @@ -15,6 +15,7 @@ add_executable(eden-ios EmulationSession.mm EmulationWindow.h EmulationWindow.mm + VMA.cpp ) # Keep bundle identifier as-is, for compatibility sake set_target_properties(eden-ios PROPERTIES @@ -26,5 +27,5 @@ set_target_properties(eden-ios PROPERTIES ) target_link_libraries(eden-ios PRIVATE common core input_common frontend_common video_core sirit::sirit) target_link_libraries(eden-ios PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads) -target_link_libraries(eden-ios PRIVATE SDL2::SDL2 glad) +target_link_libraries(eden-ios PRIVATE SDL2::SDL2 glad stb::headers) create_target_directory_groups(eden-ios) diff --git a/src/ios/VMA.cpp b/src/ios/VMA.cpp new file mode 100644 index 0000000000..7e2ea49c28 --- /dev/null +++ b/src/ios/VMA.cpp @@ -0,0 +1,5 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#define VMA_IMPLEMENTATION +#include "video_core/vulkan_common/vma.h" diff --git a/src/qt_common/CMakeLists.txt b/src/qt_common/CMakeLists.txt index f7614c506a..399fbe67a0 100644 --- a/src/qt_common/CMakeLists.txt +++ b/src/qt_common/CMakeLists.txt @@ -50,9 +50,6 @@ if (USE_DISCORD_PRESENCE) if (YUZU_USE_BUNDLED_OPENSSL) target_link_libraries(qt_common PUBLIC OpenSSL::SSL OpenSSL::Crypto) - if (NOT IOS) - target_compile_definitions(qt_common PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) - endif() endif() target_compile_definitions(qt_common PUBLIC USE_DISCORD_PRESENCE) diff --git a/src/qt_common/discord/discord_impl.cpp b/src/qt_common/discord/discord_impl.cpp index 37b24cdd57..c1cb5319dc 100644 --- a/src/qt_common/discord/discord_impl.cpp +++ b/src/qt_common/discord/discord_impl.cpp @@ -9,7 +9,7 @@ #include #include -#include +#include "common/httplib.h" #include #include diff --git a/src/video_core/vulkan_common/vma.h b/src/video_core/vulkan_common/vma.h index e022b2bf7d..514ff4501c 100644 --- a/src/video_core/vulkan_common/vma.h +++ b/src/video_core/vulkan_common/vma.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -13,9 +13,14 @@ #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4189 ) +#elif defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-variable" #endif #include "vk_mem_alloc.h" #ifdef _MSC_VER #pragma warning( pop ) +#elif defined(__clang__) +#pragma clang diagnostic pop #endif diff --git a/src/web_service/CMakeLists.txt b/src/web_service/CMakeLists.txt index 0b749bb216..a3acdfcf0f 100644 --- a/src/web_service/CMakeLists.txt +++ b/src/web_service/CMakeLists.txt @@ -20,27 +20,6 @@ create_target_directory_groups(web_service) target_include_directories(web_service PUBLIC ${cpp-jwt_SOURCE_DIR}/include) target_link_libraries(web_service PRIVATE common network nlohmann_json::nlohmann_json httplib::httplib cpp-jwt::cpp-jwt) -if (IOS) - # TODO: this is horrific - find_package(OpenSSL 3 QUIET) - if (OpenSSL_FOUND) - target_link_libraries(web_service PRIVATE OpenSSL::SSL OpenSSL::Crypto) - if (NOT IOS) - target_compile_definitions(web_service PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) - endif() - else() - find_package(OpenSSL 3 QUIET PATHS /usr/local/opt/openssl /opt/homebrew/opt/openssl NO_DEFAULT_PATH) - if (OpenSSL_FOUND) - target_link_libraries(web_service PRIVATE OpenSSL::SSL OpenSSL::Crypto) - if (NOT IOS) - target_compile_definitions(web_service PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) - endif() - else() - message(WARNING "OpenSSL not found or version is less than 3. Some features in web_service may be disabled.") - endif() - endif() -else() - find_package(OpenSSL REQUIRED) - target_link_libraries(web_service PRIVATE OpenSSL::SSL OpenSSL::Crypto) - target_compile_definitions(web_service PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) -endif() +find_package(OpenSSL REQUIRED) +target_link_libraries(web_service PRIVATE OpenSSL::SSL OpenSSL::Crypto) +target_compile_definitions(web_service PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp index 60b11fff5a..1e71406989 100644 --- a/src/web_service/web_backend.cpp +++ b/src/web_service/web_backend.cpp @@ -16,7 +16,7 @@ #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #endif #endif -#include +#include "common/httplib.h" #ifdef __GNUC__ #pragma GCC diagnostic pop #endif