diff --git a/.ci/actool.sh b/.ci/actool.sh deleted file mode 100755 index 5be658d2bb..0000000000 --- a/.ci/actool.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -e - -# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project -# SPDX-License-Identifier: GPL-3.0-or-later - -# SPDX-FileCopyrightText: Copyright 2026 crueter -# SPDX-License-Identifier: GPL-3.0-or-later - -_svg=dev.eden_emu.eden.svg -_icon=dist/eden.icon -_composed="$_icon/Assets/$_svg" -_svg="dist/$_svg" - -rm "$_composed" -cp "$_svg" "$_composed" - -xcrun actool "$_icon" \ - --compile dist \ - --platform macosx \ - --minimum-deployment-target 11.0 \ - --app-icon eden \ - --output-partial-info-plist /dev/null diff --git a/.ci/ios/build.sh b/.ci/ios/build.sh index 5537214cf9..f199b66582 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: support iphonesimulator sdk +# TODO(crueter): FFmpeg for iOS -cmake -G Xcode -B build/ios \ +cmake -G Xcode -B build \ -DCMAKE_TOOLCHAIN_FILE="$WORK_DIR/.ci/ios/ios-toolchain.cmake" \ -DPLATFORM=OS64 \ -DARCHS="arm64" \ @@ -19,7 +19,8 @@ cmake -G Xcode -B build/ios \ -DENABLE_QT=OFF \ -DENABLE_WEB_SERVICE=OFF \ -DENABLE_CUBEB=OFF \ - -DCMAKE_BUILD_TYPE=Release \ - "$@" + -DYUZU_USE_EXTERNAL_FFMPEG=ON \ + -DYUZU_USE_EXTERNAL_SDL2=ON \ + -DCMAKE_BUILD_TYPE=Release -cmake --build build/ios -t eden-ios --config Release +cmake --build build -t eden-ios diff --git a/.ci/ios/ios-toolchain.cmake b/.ci/ios/ios-toolchain.cmake index 5eed07b32f..b0defa25aa 100644 --- a/.ci/ios/ios-toolchain.cmake +++ b/.ci/ios/ios-toolchain.cmake @@ -157,7 +157,7 @@ # command. # -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.8.0) # 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 25da075e09..271ab34baf 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 OR IOS) +if ((MSVC AND NOT (CMAKE_BUILD_TYPE MATCHES "Deb")) OR ANDROID) set(BUNDLED_SIRIT_DEFAULT ON) endif() @@ -488,17 +488,15 @@ endfunction() # Put these BEFORE EXTERNALS or Boost WILL die # ============================================= if (APPLE) - set(_libs Metal IOKit CoreVideo CoreMedia) + find_library(IOKIT_LIBRARY IOKit REQUIRED) if (IOS) - list(APPEND _libs objc) + find_library(OBJC_LIBRARY objc REQUIRED) + set(PLATFORM_LIBRARIES ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY} ${OBJC_LIBRARY}) else() - list(APPEND _libs Carbon Cocoa) + # Umbrella framework for everything GUI-related + find_library(COCOA_LIBRARY Cocoa REQUIRED) + set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY}) endif() - - foreach(fw ${_libs}) - find_library(${fw}_LIBRARY ${fw} REQUIRED) - list(APPEND PLATFORM_LIBRARIES ${${fw}_LIBRARY}) - endforeach() elseif (WIN32) # Target Windows 10 add_compile_definitions(_WIN32_WINNT=0x0A00 WINVER=0x0A00) diff --git a/dist/Assets.car b/dist/Assets.car index 9ae9bca8a4..eb54881fac 100644 Binary files a/dist/Assets.car and b/dist/Assets.car differ diff --git a/dist/eden.icns b/dist/eden.icns index 82529ba224..680800951d 100644 Binary files a/dist/eden.icns and b/dist/eden.icns differ diff --git a/dist/eden.icon/Assets/dev.eden_emu.eden.svg b/dist/eden.icon/Assets/dev.eden_emu.eden.svg deleted file mode 100644 index f88b52f625..0000000000 --- a/dist/eden.icon/Assets/dev.eden_emu.eden.svg +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dist/eden.icon/icon.json b/dist/eden.icon/icon.json deleted file mode 100644 index 1f1e7da516..0000000000 --- a/dist/eden.icon/icon.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "fill" : { - "automatic-gradient" : "srgb:0.00000,0.00000,0.00000,1.00000" - }, - "groups" : [ - { - "layers" : [ - { - "fill" : "none", - "image-name" : "dev.eden_emu.eden.svg", - "name" : "dev.eden_emu.eden", - "position" : { - "scale" : 1.8, - "translation-in-points" : [ - 0, - 0 - ] - } - } - ], - "shadow" : { - "kind" : "neutral", - "opacity" : 0.5 - }, - "translucency" : { - "enabled" : true, - "value" : 0.5 - } - } - ], - "supported-platforms" : { - "circles" : [ - "watchOS" - ], - "squares" : "shared" - } -} \ No newline at end of file diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 7f80bb5d43..1ab537f44d 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -231,10 +231,6 @@ 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 c4fd9e1ec3..a2f78b86de 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) + set(ARCHITECTURE_arm64 1 PARENT_SCOPE) add_definitions(-DARCHITECTURE_arm64=1) else () # hope and pray the architecture names match - foreach(ARCH ${CMAKE_OSX_ARCHITECTURES}) - set(ARCHITECTURE_${ARCH} 1) + foreach(ARCH IN ${CMAKE_OSX_ARCHITECTURES}) + set(ARCHITECTURE_${ARCH} 1 PARENT_SCOPE) 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}") +message(STATUS "[DetectArchitecture] Target architecture: ${ARCHITECTURE}") \ No newline at end of file diff --git a/externals/cpmfile.json b/externals/cpmfile.json index 99aee2a396..b98c726132 100644 --- a/externals/cpmfile.json +++ b/externals/cpmfile.json @@ -23,7 +23,10 @@ "package": "sirit", "name": "sirit", "repo": "eden-emulator/sirit", - "version": "1.0.5" + "version": "1.0.4", + "disabled_platforms": [ + "ios-aarch64" + ] }, "httplib": { "repo": "yhirose/cpp-httplib", @@ -36,8 +39,7 @@ "0002-fix-zstd.patch" ], "options": [ - "HTTPLIB_REQUIRE_OPENSSL ON", - "HTTPLIB_DISABLE_MACOSX_AUTOMATIC_ROOT_CERTIFICATES ON" + "HTTPLIB_REQUIRE_OPENSSL ON" ] }, "cpp-jwt": { diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 00a25a5744..1ee4794272 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -144,8 +144,7 @@ add_library( zstd_compression.cpp zstd_compression.h fs/ryujinx_compat.h fs/ryujinx_compat.cpp - fs/symlink.h fs/symlink.cpp - httplib.h) + fs/symlink.h fs/symlink.cpp) if(WIN32) target_sources(common PRIVATE windows/timer_resolution.cpp @@ -243,7 +242,7 @@ else() target_link_libraries(common PUBLIC Boost::headers) endif() -target_link_libraries(common PUBLIC Boost::filesystem Boost::context httplib::httplib) +target_link_libraries(common PUBLIC Boost::filesystem Boost::context) if (lz4_ADDED) target_include_directories(common PRIVATE ${lz4_SOURCE_DIR}/lib) diff --git a/src/common/httplib.h b/src/common/httplib.h deleted file mode 100644 index 2f971bd5f3..0000000000 --- a/src/common/httplib.h +++ /dev/null @@ -1,9 +0,0 @@ -// 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 aad42b883b..a2f595540d 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1273,6 +1273,9 @@ 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 ad7aafa4e3..f7cc6c5a23 100644 --- a/src/core/hle/service/bcat/news/builtin_news.cpp +++ b/src/core/hle/service/bcat/news/builtin_news.cpp @@ -15,7 +15,9 @@ #include #include -#include "common/httplib.h" +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +#include +#endif #include #include @@ -102,6 +104,7 @@ 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); @@ -125,6 +128,7 @@ std::vector DownloadImage(const std::string& url_path, const std::filesystem } catch (...) { LOG_WARNING(Service_BCAT, "Failed to download: {}", url_path); } +#endif return {}; } @@ -229,6 +233,7 @@ 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); @@ -250,7 +255,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 f9b3805939..b1554d7dba 100644 --- a/src/frontend_common/CMakeLists.txt +++ b/src/frontend_common/CMakeLists.txt @@ -23,6 +23,9 @@ 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 3e5a832ba0..75b1dc00cc 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 "common/httplib.h" +#include #ifdef YUZU_BUNDLED_OPENSSL #include diff --git a/src/ios/CMakeLists.txt b/src/ios/CMakeLists.txt index 6e6c13db2d..54ff956a36 100644 --- a/src/ios/CMakeLists.txt +++ b/src/ios/CMakeLists.txt @@ -15,7 +15,6 @@ 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 @@ -27,5 +26,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 stb::headers) +target_link_libraries(eden-ios PRIVATE SDL2::SDL2 glad) create_target_directory_groups(eden-ios) diff --git a/src/ios/VMA.cpp b/src/ios/VMA.cpp deleted file mode 100644 index 7e2ea49c28..0000000000 --- a/src/ios/VMA.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// 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 399fbe67a0..f7614c506a 100644 --- a/src/qt_common/CMakeLists.txt +++ b/src/qt_common/CMakeLists.txt @@ -50,6 +50,9 @@ 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 c1cb5319dc..37b24cdd57 100644 --- a/src/qt_common/discord/discord_impl.cpp +++ b/src/qt_common/discord/discord_impl.cpp @@ -9,7 +9,7 @@ #include #include -#include "common/httplib.h" +#include #include #include diff --git a/src/video_core/vulkan_common/vma.h b/src/video_core/vulkan_common/vma.h index 514ff4501c..e022b2bf7d 100644 --- a/src/video_core/vulkan_common/vma.h +++ b/src/video_core/vulkan_common/vma.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 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,14 +13,9 @@ #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 a3acdfcf0f..0b749bb216 100644 --- a/src/web_service/CMakeLists.txt +++ b/src/web_service/CMakeLists.txt @@ -20,6 +20,27 @@ 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) -find_package(OpenSSL REQUIRED) -target_link_libraries(web_service PRIVATE OpenSSL::SSL OpenSSL::Crypto) -target_compile_definitions(web_service PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) +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() diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp index 1e71406989..60b11fff5a 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 "common/httplib.h" +#include #ifdef __GNUC__ #pragma GCC diagnostic pop #endif diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 1ed1fdff2a..79642711ac 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -362,27 +362,16 @@ target_sources(yuzu ${LANGUAGES} ${THEMES}) -# TODO(crueter): Move Assets.car/icon/icns handling to its own Module. if (APPLE) - # Xcode will automatically generate the Assets.car and icns file for us. - set(_dist "${CMAKE_SOURCE_DIR}/dist") - if (CMAKE_GENERATOR MATCHES "Xcode") - set(_icons "${_dist}/eden.icon") + # Normal icns + set(MACOSX_ICON "${CMAKE_SOURCE_DIR}/dist/eden.icns") + set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + target_sources(yuzu PRIVATE ${MACOSX_ICON}) - set_target_properties(eden PROPERTIES - XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME eden - MACOSX_BUNDLE_ICON_FILE eden - # Also force xcode to manage signing for us. - XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED ON - XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED ON) - # Otherwise, we'll use our own. - else() - set(_icons "${_dist}/eden.icns" "${_dist}/Assets.car") - endif() - - set_source_files_properties(${_icons} PROPERTIES - MACOSX_PACKAGE_LOCATION Resources) - target_sources(yuzu PRIVATE ${_icons}) + # Liquid glass + set(MACOSX_LIQUID_GLASS_ICON "${CMAKE_SOURCE_DIR}/dist/Assets.car") + set_source_files_properties(${MACOSX_LIQUID_GLASS_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + target_sources(yuzu PRIVATE ${MACOSX_LIQUID_GLASS_ICON}) set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE TRUE) set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)