From 3e31831cb0a966b99c5e86c64f0a6294d7079704 Mon Sep 17 00:00:00 2001 From: crueter Date: Tue, 9 Jun 2026 21:41:50 +0200 Subject: [PATCH] [externals] UCRT64 support (#4035) Testing which deps can't cross MSVCRT/UCRT barriers - openssl - Qt FFmpeg and Sirit are fine--likely don't use the C99 APIs that MSVCRT is missing? Closes #4022 Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4035 --- .patch/httplib/0002-fix-zstd.patch | 89 --------------------- CMakeLists.txt | 4 +- CMakeModules/CPMUtil.cmake | 26 ++++-- cpmfile.json | 2 +- docs/CPMUtil/AddCIPackage.md | 1 + docs/CPMUtil/AddJsonPackage.md | 3 +- externals/cpmfile.json | 7 +- externals/ffmpeg/CMakeLists.txt | 4 +- src/android/app/src/main/jni/CMakeLists.txt | 2 + tools/cpm/package/fetch.sh | 2 +- tools/cpm/package/util/interactive.sh | 2 +- 11 files changed, 34 insertions(+), 108 deletions(-) delete mode 100644 .patch/httplib/0002-fix-zstd.patch diff --git a/.patch/httplib/0002-fix-zstd.patch b/.patch/httplib/0002-fix-zstd.patch deleted file mode 100644 index f54485ea53..0000000000 --- a/.patch/httplib/0002-fix-zstd.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 509be32bbfa6eb95014860f7c9ea6d45c8ddaa56 Mon Sep 17 00:00:00 2001 -From: crueter -Date: Sun, 8 Mar 2026 15:11:12 -0400 -Subject: [PATCH] [cmake] Simplify zstd find logic, and support pre-existing - zstd target - -Some deduplication work on the zstd required/if-available logic. Also -adds support for pre-existing `zstd::libzstd` which is useful for -projects that bundle their own zstd in a way that doesn't get caught by -`CONFIG` - -Signed-off-by: crueter ---- - CMakeLists.txt | 46 ++++++++++++++++++++++++++-------------------- - 1 file changed, 26 insertions(+), 20 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 1874e36be0..8d31198006 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -241,28 +241,34 @@ endif() - # NOTE: - # zstd < 1.5.6 does not provide the CMake imported target `zstd::libzstd`. - # Older versions must be consumed via their pkg-config file. --if(HTTPLIB_REQUIRE_ZSTD) -- find_package(zstd 1.5.6 CONFIG) -- if(NOT zstd_FOUND) -- find_package(PkgConfig REQUIRED) -- pkg_check_modules(zstd REQUIRED IMPORTED_TARGET libzstd) -- add_library(zstd::libzstd ALIAS PkgConfig::zstd) -- endif() -- set(HTTPLIB_IS_USING_ZSTD TRUE) --elseif(HTTPLIB_USE_ZSTD_IF_AVAILABLE) -- find_package(zstd 1.5.6 CONFIG QUIET) -- if(NOT zstd_FOUND) -- find_package(PkgConfig QUIET) -- if(PKG_CONFIG_FOUND) -- pkg_check_modules(zstd QUIET IMPORTED_TARGET libzstd) -- -- if(TARGET PkgConfig::zstd) -+if (HTTPLIB_REQUIRE_ZSTD) -+ set(HTTPLIB_ZSTD_REQUESTED ON) -+ set(HTTPLIB_ZSTD_REQUIRED REQUIRED) -+elseif (HTTPLIB_USE_ZSTD_IF_AVAILABLE) -+ set(HTTPLIB_ZSTD_REQUESTED ON) -+ set(HTTPLIB_ZSTD_REQUIRED QUIET) -+endif() -+ -+if (HTTPLIB_ZSTD_REQUESTED) -+ if (TARGET zstd::libzstd) -+ set(HTTPLIB_IS_USING_ZSTD TRUE) -+ else() -+ find_package(zstd 1.5.6 CONFIG QUIET) -+ -+ if (NOT zstd_FOUND) -+ find_package(PkgConfig ${HTTPLIB_ZSTD_REQUIRED}) -+ pkg_check_modules(zstd ${HTTPLIB_ZSTD_REQUIRED} IMPORTED_TARGET libzstd) -+ -+ if (TARGET PkgConfig::zstd) - add_library(zstd::libzstd ALIAS PkgConfig::zstd) - endif() - endif() -+ -+ # This will always be true if zstd is required. -+ # If zstd *isn't* found when zstd is set to required, -+ # CMake will error out earlier in this block. -+ set(HTTPLIB_IS_USING_ZSTD ${zstd_FOUND}) - endif() -- # Both find_package and PkgConf set a XXX_FOUND var -- set(HTTPLIB_IS_USING_ZSTD ${zstd_FOUND}) - endif() - - # Used for default, common dirs that the end-user can change (if needed) -@@ -317,13 +323,13 @@ if(HTTPLIB_COMPILE) - $ - $ - ) -- -+ - # Add C++20 module support if requested - # Include from separate file to prevent parse errors on older CMake versions - if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.28") - include(cmake/modules.cmake) - endif() -- -+ - set_target_properties(${PROJECT_NAME} - PROPERTIES - VERSION ${${PROJECT_NAME}_VERSION} diff --git a/CMakeLists.txt b/CMakeLists.txt index c179ecd350..5592576e59 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -590,9 +590,9 @@ if (ENABLE_QT) if (YUZU_USE_BUNDLED_QT) # Qt 6.8+ is broken on macOS (??) if (APPLE) - AddQt(6.7.3) + AddQt(Eden-CI/Qt 6.7.3) else() - AddQt(6.9.3) + AddQt(Eden-CI/Qt 6.11.1) endif() else() message(STATUS "Using system Qt") diff --git a/CMakeModules/CPMUtil.cmake b/CMakeModules/CPMUtil.cmake index b98595ac2e..d077816721 100644 --- a/CMakeModules/CPMUtil.cmake +++ b/CMakeModules/CPMUtil.cmake @@ -3,7 +3,7 @@ set(CPM_SOURCE_CACHE "${PROJECT_SOURCE_DIR}/.cache/cpm" CACHE STRING "" FORCE) -if(MSVC OR ANDROID) +if(MSVC OR ANDROID OR IOS) set(BUNDLED_DEFAULT ON) else() set(BUNDLED_DEFAULT OFF) @@ -247,7 +247,9 @@ function(AddJsonPackage) set(multiValueArgs OPTIONS) - cmake_parse_arguments(JSON "" "${oneValueArgs}" "${multiValueArgs}" + set(options MODULE) + + cmake_parse_arguments(JSON "${options}" "${oneValueArgs}" "${multiValueArgs}" "${ARGN}") list(LENGTH ARGN argnLength) @@ -277,6 +279,10 @@ function(AddJsonPackage) parse_object(${object}) if(ci) + if (JSON_MODULE) + set(EXTRA_ARGS MODULE) + endif() + AddCIPackage( VERSION ${version} NAME ${name} @@ -284,8 +290,8 @@ function(AddJsonPackage) PACKAGE ${package} EXTENSION ${extension} MIN_VERSION ${min_version} - DISABLED_PLATFORMS ${disabled_platforms}) - + DISABLED_PLATFORMS ${disabled_platforms} + ${EXTRA_ARGS}) else() if (NOT DEFINED JSON_FORCE_BUNDLED_PACKAGE) set(JSON_FORCE_BUNDLED_PACKAGE OFF) @@ -690,8 +696,10 @@ function(AddCIPackage) set(pkgname linux-amd64) elseif(PLATFORM_LINUX AND ARCHITECTURE_arm64) set(pkgname linux-aarch64) - elseif(APPLE) + elseif(APPLE AND NOT IOS) set(pkgname macos-universal) + elseif(IOS AND ARCHITECTURE_arm64) + set(pkgname ios-aarch64) endif() if (DEFINED pkgname AND NOT "${pkgname}" IN_LIST DISABLED_PLATFORMS) @@ -724,7 +732,11 @@ function(AddCIPackage) endfunction() # Utility function for Qt -function(AddQt version) +function(AddQt repo version) + if (NOT DEFINED repo) + message(FATAL_ERROR "[CPMUtil] AddQt: repo is required") + endif() + if (NOT DEFINED version) message(FATAL_ERROR "[CPMUtil] AddQt: version is required") endif() @@ -734,7 +746,7 @@ function(AddQt version) PACKAGE Qt6 VERSION ${version} MIN_VERSION 6 - REPO crueter-ci/Qt + REPO ${repo} DISABLED_PLATFORMS android-x86_64 android-aarch64 freebsd-amd64 solaris-amd64 openbsd-amd64 diff --git a/cpmfile.json b/cpmfile.json index 48201e627d..792ec217f8 100644 --- a/cpmfile.json +++ b/cpmfile.json @@ -4,7 +4,7 @@ "package": "OpenSSL", "name": "openssl", "repo": "crueter-ci/OpenSSL", - "version": "3.6.0-1cb0d36b39", + "version": "4.0.0-11b7b6ea3b", "min_version": "3" }, "openssl-cmake": { diff --git a/docs/CPMUtil/AddCIPackage.md b/docs/CPMUtil/AddCIPackage.md index bc7c1ccfad..7319b514ff 100644 --- a/docs/CPMUtil/AddCIPackage.md +++ b/docs/CPMUtil/AddCIPackage.md @@ -18,3 +18,4 @@ - `linux-amd64` - `linux-aarch64` - `macos-universal` + - `ios-aarch64` diff --git a/docs/CPMUtil/AddJsonPackage.md b/docs/CPMUtil/AddJsonPackage.md index 464cd1731b..e655d794f5 100644 --- a/docs/CPMUtil/AddJsonPackage.md +++ b/docs/CPMUtil/AddJsonPackage.md @@ -61,7 +61,8 @@ In order: OpenSSL CI, Boost (tag + artifact), Opus (options + find_args), discor "version": "3.6.0", "min_version": "1.1.1", "disabled_platforms": [ - "macos-universal" + "macos-universal", + "ios-aarch64" ] }, "boost": { diff --git a/externals/cpmfile.json b/externals/cpmfile.json index 72adb8fece..e1dfa838cc 100644 --- a/externals/cpmfile.json +++ b/externals/cpmfile.json @@ -28,12 +28,11 @@ "httplib": { "repo": "yhirose/cpp-httplib", "tag": "v%VERSION%", - "hash": "5efa8140aadffe105dcf39935b732476e95755f6c7473ada3d0b64df2bc02c557633ae3948a25b45e1cf67e89a3ff6329fb30362e4ac033b9a1d1e453aa2eded", - "git_version": "0.37.0", + "hash": "159ed94965018f2a371d45a3bfc1961e5fb1549e501ded70a6b4532d7fe99d0579c18b5195aff6e35f96f399b426cea2650ec9fb75ef80d4c9edeccb51f2e6c9", + "git_version": "0.46.0", "find_args": "MODULE GLOBAL", "patches": [ - "0001-mingw.patch", - "0002-fix-zstd.patch" + "0001-mingw.patch" ], "options": [ "HTTPLIB_REQUIRE_OPENSSL ON", diff --git a/externals/ffmpeg/CMakeLists.txt b/externals/ffmpeg/CMakeLists.txt index 2d85876ad2..7908e0a619 100644 --- a/externals/ffmpeg/CMakeLists.txt +++ b/externals/ffmpeg/CMakeLists.txt @@ -59,7 +59,7 @@ endif() if (PLATFORM_PS4 OR PLATFORM_MANAGARM) # Doesn't support VA-API, don't go thru the embarrassment of trying to enable it list(APPEND FFmpeg_HWACCEL_FLAGS --disable-vaapi) -elseif (UNIX AND NOT DEFINED FFmpeg_IS_CROSS_COMPILING) +elseif (UNIX AND NOT DEFINED FFmpeg_IS_CROSS_COMPILING AND NOT ANDROID) find_package(PkgConfig REQUIRED) pkg_check_modules(LIBVA libva) pkg_check_modules(CUDA cuda) @@ -169,7 +169,7 @@ if (PLATFORM_PS4) ) elseif (PLATFORM_MANAGARM) # Required for proper stuff - list(APPEND FFmpeg_CROSS_COMPILE_FLAGS + list(APPEND FFmpeg_CROSS_COMPILE_FLAGS --disable-pthreads --extra-libs="${FFmpeg_CROSS_COMPILE_LIBS}" ) diff --git a/src/android/app/src/main/jni/CMakeLists.txt b/src/android/app/src/main/jni/CMakeLists.txt index c68e206d24..b6fe2d7722 100644 --- a/src/android/app/src/main/jni/CMakeLists.txt +++ b/src/android/app/src/main/jni/CMakeLists.txt @@ -33,3 +33,5 @@ if (ENABLE_UPDATE_CHECKER) endif() set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} yuzu-android) + +target_link_options(yuzu-android PRIVATE "-Wl,-Bsymbolic") diff --git a/tools/cpm/package/fetch.sh b/tools/cpm/package/fetch.sh index b03a824146..54ea8c64c4 100755 --- a/tools/cpm/package/fetch.sh +++ b/tools/cpm/package/fetch.sh @@ -83,7 +83,7 @@ ci_package() { android-aarch64 android-x86_64 \ solaris-amd64 freebsd-amd64 openbsd-amd64 \ linux-amd64 linux-aarch64 \ - macos-universal; do + macos-universal ios-aarch64; do echo "-- * platform $platform" case $DISABLED in diff --git a/tools/cpm/package/util/interactive.sh b/tools/cpm/package/util/interactive.sh index 99db77e20d..07087e5d10 100755 --- a/tools/cpm/package/util/interactive.sh +++ b/tools/cpm/package/util/interactive.sh @@ -151,7 +151,7 @@ mingw-amd64 mingw-arm64 android-aarch64 android-x86_64 solaris-amd64 freebsd-amd64 openbsd-amd64 linux-amd64 linux-aarch64 -macos-universal" +macos-universal ios-aarch64" DISABLED_PLATFORMS="$reply" fi