From b6908131969b3977e071d6737f2a102a0354224d Mon Sep 17 00:00:00 2001 From: crueter Date: Sun, 16 Nov 2025 04:59:30 +0100 Subject: [PATCH] [externals] FFmpeg -> v8.0-be99d2c0b2, OpenSSL -> v3.6.0-e3608d80df, SDL2 -> 2.32.10-38e0094637 (#3003) FFmpeg: - builds for FreeBSD, OpenBSD, Solaris - minsizerel - Proper system lib linking on MinGW - removed shared stuff entirely outside of android because their build system SUCKS OpenSSL: - macOS universal - Proper system lib linking on MinGW SDL2: - macOS universal Both are now based on branches/commits rather than tags (since their respective release branches have a ton of new stuff lol) Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3003 Reviewed-by: Lizzie Reviewed-by: CamilleLaVey --- CMakeLists.txt | 15 ++++++++++----- CMakeModules/StaticQtLibs.cmake | 31 ++++++++++++++++++++++++++++++ cpmfile.json | 9 ++------- externals/cpmfile.json | 7 ++----- externals/ffmpeg/cpmfile.json | 9 ++------- src/frontend_common/CMakeLists.txt | 2 +- src/qt_common/CMakeLists.txt | 4 +++- src/yuzu/CMakeLists.txt | 24 +---------------------- tools/cpm/check-updates.sh | 6 +++++- 9 files changed, 57 insertions(+), 50 deletions(-) create mode 100644 CMakeModules/StaticQtLibs.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f099834c3..0d385b9436 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -119,6 +119,8 @@ endif() option(YUZU_STATIC_BUILD "Use static libraries and executables if available" OFF) if (YUZU_STATIC_BUILD) + include(StaticQtLibs) + # lol set(Boost_USE_STATIC_LIBS ON) set(BUILD_SHARED_LIBS OFF) @@ -136,7 +138,8 @@ if (YUZU_STATIC_BUILD) # simple hook to reject dynamic libs function(find_library var) # also skip previously-found libraries cuz... yaknow - if (${var}) + # UNLESS they are dll.a :{ + if (${var} AND NOT ${var} MATCHES "dll\\.a$") return() endif() @@ -155,17 +158,19 @@ if (YUZU_STATIC_BUILD) set(YUZU_USE_BUNDLED_FFMPEG ON) set(YUZU_USE_BUNDLED_SDL2 ON) + set(YUZU_USE_BUNDLED_OPENSSL ON) set(HTTPLIB_USE_BROTLI_IF_AVAILABLE OFF) elseif(APPLE) # these libs do not properly provide static libs/let you do it with cmake set(YUZU_USE_CPM ON) - # IMPORTED_IMPLIB not set for imported target - # TODO(crueter): wtf set(YUZU_USE_BUNDLED_FFMPEG ON) - set(YUZU_USE_EXTERNAL_SDL2 ON) + set(YUZU_USE_BUNDLED_SDL2 ON) + set(YUZU_USE_BUNDLED_OPENSSL ON) + # IMPORTED_IMPLIB not set for imported target + # TODO(crueter): wtf set(fmt_FORCE_BUNDLED ON) set(SPIRV-Tools_FORCE_BUNDLED ON) set(SPIRV-Headers_FORCE_BUNDLED ON) @@ -419,7 +424,7 @@ if (ANDROID OR WIN32 OR APPLE OR PLATFORM_SUN) set(DEFAULT_ENABLE_OPENSSL OFF) endif() -if (ENABLE_WEB_SERVICE) +if (ENABLE_WEB_SERVICE OR USE_DISCORD_PRESENCE) set(DEFAULT_ENABLE_OPENSSL ON) endif() diff --git a/CMakeModules/StaticQtLibs.cmake b/CMakeModules/StaticQtLibs.cmake new file mode 100644 index 0000000000..be2f060a25 --- /dev/null +++ b/CMakeModules/StaticQtLibs.cmake @@ -0,0 +1,31 @@ +# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +## When linking to a static Qt build on MinGW, certain additional libraries +## must be statically linked to as well. + +function(static_qt_link target) + macro(extra_libs) + foreach(lib ${ARGN}) + find_library(${lib}_LIBRARY ${lib} REQUIRED) + target_link_libraries(${target} PRIVATE ${${lib}_LIBRARY}) + endforeach() + endmacro() + + # I am constantly impressed at how ridiculously stupid the linker is + # NB: yes, we have to put them here twice. I have no idea why + + # libtiff.a + extra_libs(tiff jbig bz2 lzma deflate jpeg tiff) + + # libfreetype.a + extra_libs(freetype bz2 Lerc brotlidec brotlicommon freetype) + + # libharfbuzz.a + extra_libs(harfbuzz graphite2) + + # sijfjkfnjkdfjsbjsbsdfhvbdf + if (ENABLE_OPENSSL) + target_link_libraries(${target} PRIVATE OpenSSL::SSL OpenSSL::Crypto) + endif() +endfunction() diff --git a/cpmfile.json b/cpmfile.json index cb0bfb4487..6cf7ed1a41 100644 --- a/cpmfile.json +++ b/cpmfile.json @@ -4,13 +4,8 @@ "package": "OpenSSL", "name": "openssl", "repo": "crueter-ci/OpenSSL", - "version": "3.6.0", - "min_version": "1.1.1", - "disabled_platforms": [ - "macos-universal", - "mingw-amd64", - "mingw-arm64" - ] + "version": "3.6.0-e3608d80df", + "min_version": "1.1.1" }, "boost": { "package": "Boost", diff --git a/externals/cpmfile.json b/externals/cpmfile.json index a8376db540..ee5ccb451e 100644 --- a/externals/cpmfile.json +++ b/externals/cpmfile.json @@ -167,11 +167,8 @@ "package": "SDL2", "name": "SDL2", "repo": "crueter-ci/SDL2", - "version": "2.32.10", - "min_version": "2.26.4", - "disabled_platforms": [ - "macos-universal" - ] + "version": "2.32.10-38e0094637", + "min_version": "2.26.4" }, "catch2": { "package": "Catch2", diff --git a/externals/ffmpeg/cpmfile.json b/externals/ffmpeg/cpmfile.json index 9f7f0bea68..0baeeb4713 100644 --- a/externals/ffmpeg/cpmfile.json +++ b/externals/ffmpeg/cpmfile.json @@ -10,12 +10,7 @@ "package": "FFmpeg", "name": "ffmpeg", "repo": "crueter-ci/FFmpeg", - "version": "8.0", - "min_version": "4.1", - "disabled_platforms": [ - "freebsd-amd64", - "solaris-amd64", - "openbsd-amd64" - ] + "version": "8.0-be99d2c0b2", + "min_version": "4.1" } } diff --git a/src/frontend_common/CMakeLists.txt b/src/frontend_common/CMakeLists.txt index 1d15443008..911f3ebdca 100644 --- a/src/frontend_common/CMakeLists.txt +++ b/src/frontend_common/CMakeLists.txt @@ -25,7 +25,7 @@ if (ENABLE_UPDATE_CHECKER) if (ENABLE_OPENSSL) target_compile_definitions(frontend_common PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) - target_link_libraries(frontend_common PRIVATE OpenSSL::SSL) + target_link_libraries(frontend_common PRIVATE OpenSSL::SSL OpenSSL::Crypto) endif() endif() diff --git a/src/qt_common/CMakeLists.txt b/src/qt_common/CMakeLists.txt index 895320703a..2100760d9c 100644 --- a/src/qt_common/CMakeLists.txt +++ b/src/qt_common/CMakeLists.txt @@ -42,10 +42,12 @@ if (USE_DISCORD_PRESENCE) discord/discord_impl.h ) target_link_libraries(qt_common PUBLIC DiscordRPC::discord-rpc httplib::httplib) + if (YUZU_USE_BUNDLED_OPENSSL) - target_link_libraries(qt_common PUBLIC OpenSSL::SSL) + target_link_libraries(qt_common PUBLIC OpenSSL::SSL OpenSSL::Crypto) target_compile_definitions(qt_common PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) endif() + target_compile_definitions(qt_common PUBLIC USE_DISCORD_PRESENCE) endif() diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index d0f2121a65..e69dfd52aa 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -459,30 +459,8 @@ if (NOT MSVC AND (APPLE OR NOT YUZU_STATIC_BUILD)) -Wno-missing-field-initializers) endif() -## certain libraries need extra static libs to be linked ## -# I have no fucking clue why it ONLY has to be on yuzu -# yuzu_cmd works totally fine but not this?????????? if (YUZU_STATIC_BUILD AND MINGW) - macro(extra_libs) - foreach(lib ${ARGN}) - find_library(${lib}_LIBRARY ${lib} REQUIRED) - target_link_libraries(yuzu PRIVATE ${${lib}_LIBRARY}) - endforeach() - endmacro() - - # I am constantly impressed at how ridiculously stupid the linker is - # NB: yes, we have to put them here twice. I have no idea why - - # libtiff.a - extra_libs(tiff jbig bz2 lzma deflate jpeg tiff) - - # libfreetype.a - extra_libs(freetype bz2 Lerc brotlidec brotlicommon freetype) - - # libharfbuzz.a - extra_libs(harfbuzz graphite2) - - extra_libs(wsock32 ws2_32 crypt32 mswsock wlanapi) + static_qt_link(yuzu) endif() create_target_directory_groups(yuzu) diff --git a/tools/cpm/check-updates.sh b/tools/cpm/check-updates.sh index ae38b7294d..5fc7836199 100755 --- a/tools/cpm/check-updates.sh +++ b/tools/cpm/check-updates.sh @@ -67,7 +67,11 @@ while true; do [ "$REPO" = null ] && continue [ "$GIT_HOST" != "github.com" ] && continue # TODO - # shellcheck disable=SC2153 + + if [ "$CI" = "true" ]; then + TAG="v$VERSION" + fi + [ "$TAG" = null ] && continue echo "-- Package $PACKAGE"