From 518003131363ae40377110eb53c96b16807437d5 Mon Sep 17 00:00:00 2001 From: crueter Date: Tue, 19 Aug 2025 21:29:36 +0200 Subject: [PATCH] [ci, cmake] openssl updates, fix drpc and ci scripts (#283) - Add bundled OpenSSL libs for Solaris, FreeBSD, Linux - Fix CPMUtil default on msvc - Update CI scripts (thanks dravee) - PLATFORM_ helpers for non-ANDROID UNIX Co-authored-by: Caio Oliveira Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/283 Reviewed-by: Lizzie Co-authored-by: crueter Co-committed-by: crueter --- .ci/windows/install-vulkan-sdk.ps1 | 4 +- .ci/windows/package.sh | 15 +- CMakeLists.txt | 219 +++++++++++++++--- CMakeModules/CPMUtil.cmake | 8 +- src/core/CMakeLists.txt | 6 +- .../src/dynarmic/frontend/A32/a32_types.h | 2 +- src/network/CMakeLists.txt | 2 +- src/web_service/CMakeLists.txt | 5 +- src/yuzu/CMakeLists.txt | 4 +- src/yuzu_cmd/CMakeLists.txt | 2 +- 10 files changed, 218 insertions(+), 49 deletions(-) diff --git a/.ci/windows/install-vulkan-sdk.ps1 b/.ci/windows/install-vulkan-sdk.ps1 index ca8c64b5cd..1d4e1b20bf 100755 --- a/.ci/windows/install-vulkan-sdk.ps1 +++ b/.ci/windows/install-vulkan-sdk.ps1 @@ -4,7 +4,7 @@ $ErrorActionPreference = "Stop" $VulkanSDKVer = "1.4.321.1" -$ExeFile = "VulkanSDK-$VulkanSDKVer-Installer.exe" +$ExeFile = "vulkansdk-windows-X64-$VulkanSDKVer.exe" $Uri = "https://sdk.lunarg.com/sdk/download/$VulkanSDKVer/windows/$ExeFile" $Destination = "./$ExeFile" @@ -30,4 +30,4 @@ echo "Finished installing Vulkan SDK $VulkanSDKVer" if ("$env:GITHUB_ACTIONS" -eq "true") { echo "VULKAN_SDK=$VULKAN_SDK" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append echo "$VULKAN_SDK/Bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append -} +} \ No newline at end of file diff --git a/.ci/windows/package.sh b/.ci/windows/package.sh index 090697882f..2d126dc5be 100644 --- a/.ci/windows/package.sh +++ b/.ci/windows/package.sh @@ -3,11 +3,16 @@ GITREV=$(git show -s --format='%h') ZIP_NAME="Eden-Windows-${ARCH}-${GITDATE}-${GITREV}.zip" -mkdir -p artifacts -mkdir -p pack +ARTIFACTS_DIR="artifacts" +PKG_DIR="build/pkg" -cp -r build/pkg/* pack +mkdir -p "$ARTIFACTS_DIR" -cp LICENSE* README* pack/ +TMP_DIR=$(mktemp -d) -7z a -tzip artifacts/$ZIP_NAME pack/* \ No newline at end of file +cp -r "$PKG_DIR"/* "$TMP_DIR"/ +cp LICENSE* README* "$TMP_DIR"/ + +7z a -tzip "$ARTIFACTS_DIR/$ZIP_NAME" "$TMP_DIR"/* + +rm -rf "$TMP_DIR" \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index abaa90575c..0ca88e3c65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,9 +5,19 @@ cmake_minimum_required(VERSION 3.22) project(yuzu) +if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") + set(PLATFORM_SUN ON) +elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + set(PLATFORM_FREEBSD ON) +elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD") + set(PLATFORM_OPENBSD ON) +elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + set(PLATFORM_LINUX ON) +endif() + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules") -if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") +if (PLATFORM_SUN) # Terrific Solaris pkg shenanigans list(APPEND CMAKE_PREFIX_PATH "/usr/lib/qt/6.6/lib/amd64/cmake") list(APPEND CMAKE_MODULE_PATH "/usr/lib/qt/6.6/lib/amd64/cmake") @@ -24,7 +34,7 @@ if (MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX-") endif() -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib") endif() @@ -40,7 +50,7 @@ endif() option(ENABLE_SDL2 "Enable the SDL2 frontend" ON) CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 binaries" ON "ENABLE_SDL2;MSVC" OFF) -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" OFF "ENABLE_SDL2;NOT MSVC" OFF) else() CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ON "ENABLE_SDL2;NOT MSVC" OFF) @@ -62,25 +72,25 @@ option(YUZU_USE_CPM "Use CPM to fetch Eden dependencies if needed" ON) option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) option(ENABLE_WIFI_SCAN "Enable WiFi scanning" OFF) -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" OFF) else() option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ON) endif() -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" OFF) else() option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON) endif() -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" OFF) else() option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ON) endif() -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" OFF) else() option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" ON) @@ -100,7 +110,7 @@ option(ENABLE_MICROPROFILE "Enables microprofile capabilities" OFF) option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}") -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF) else() option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON) @@ -110,6 +120,8 @@ option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" option(FORCE_DOWNLOAD_WIN_BUNDLES "Forcefully download bundled Windows dependencies (useful for CI)" OFF) +option(FORCE_DOWNLOAD_OPENSSL "Forcefully download all bundled OpenSSL builds (useful for CI)" OFF) + CMAKE_DEPENDENT_OPTION(YUZU_ROOM "Enable dedicated room functionality" ON "NOT ANDROID" OFF) CMAKE_DEPENDENT_OPTION(YUZU_ROOM_STANDALONE "Enable standalone room executable" ON "YUZU_ROOM" OFF) @@ -118,7 +130,7 @@ CMAKE_DEPENDENT_OPTION(YUZU_CMD "Compile the eden-cli executable" ON "NOT ANDROI CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR LINUX" OFF) -if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +if (PLATFORM_FREEBSD) option(YUZU_CHECK_SUBMODULES "Check if submodules are present" OFF) else() option(YUZU_CHECK_SUBMODULES "Check if submodules are present" ON) @@ -135,7 +147,7 @@ CMAKE_DEPENDENT_OPTION(YUZU_USE_FASTER_LD "Check if a faster linker is available CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" OFF) set(DEFAULT_ENABLE_OPENSSL ON) -if (ANDROID OR WIN32 OR APPLE OR ${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") +if (ANDROID OR WIN32 OR APPLE OR PLATFORM_SUN) # - Windows defaults to the Schannel backend. # - macOS defaults to the SecureTransport backend. # - Android currently has no SSL backend as the NDK doesn't include any SSL @@ -312,7 +324,7 @@ if (UNIX) add_definitions(-DYUZU_UNIX=1) endif() -if (ARCHITECTURE_arm64 AND (ANDROID OR APPLE OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")) +if (ARCHITECTURE_arm64 AND (ANDROID OR APPLE OR PLATFORM_LINUX)) set(HAS_NCE 1) add_definitions(-DHAS_NCE=1) endif() @@ -322,7 +334,7 @@ if (YUZU_ROOM) endif() # Build/optimization presets -if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") +if (PLATFORM_LINUX) if (ARCHITECTURE_x86_64) set(YUZU_BUILD_PRESET "custom" CACHE STRING "Build preset to use. One of: custom, generic, v3, zen2, zen4, native") if (${YUZU_BUILD_PRESET} STREQUAL "generic") @@ -380,38 +392,182 @@ if (YUZU_USE_CPM) # openssl funniness if (ENABLE_OPENSSL) - if (MSVC) - set(BUILD_SHARED_LIBS OFF) - AddPackage( - NAME OpenSSL - REPO crueter/OpenSSL-CI - TAG v3.5.2 - VERSION 3.5.2 - ARTIFACT openssl-windows-3.5.2.tar.zst + set(SSL_VERSION 3.5.2) - KEY windows + if ((MSVC AND ARCHITECTURE_x86_64) OR FORCE_DOWNLOAD_OPENSSL) + set(ARTIFACT openssl-windows-amd64-${SSL_VERSION}.tar.zst) + set(KEY windows-amd64) + + if (MSVC AND ARCHITECTURE_x86_64) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + + AddPackage( + NAME OpenSSL-windows-amd64 + REPO crueter/OpenSSL-CI + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT ${ARTIFACT} + + KEY ${KEY} HASH_SUFFIX sha512sum BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} ) - include(${OpenSSL_SOURCE_DIR}/openssl.cmake) + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-windows-amd64_SOURCE_DIR}) + endif() + message("OPENSSL ${DOWNLOAD_ONLY} ${OPENSSL_DIR}") + endif() - if (ANDROID) - set(BUILD_SHARED_LIBS OFF) + if ((MSVC AND ARCHITECTURE_arm64) OR FORCE_DOWNLOAD_OPENSSL) + set(ARTIFACT openssl-windows-arm64-${SSL_VERSION}.tar.zst) + set(KEY windows-arm64) + + if (MSVC AND ARCHITECTURE_arm64) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + AddPackage( - NAME OpenSSL + NAME OpenSSL-windows-arm64 REPO crueter/OpenSSL-CI - TAG v3.5.2 - VERSION 3.5.2 - ARTIFACT openssl-android-3.5.2.tar.zst + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT ${ARTIFACT} + + KEY ${KEY} + HASH_SUFFIX sha512sum + BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} + ) + + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-windows-arm64_SOURCE_DIR}) + endif() + endif() + + if (ANDROID OR FORCE_DOWNLOAD_OPENSSL) + if (ANDROID) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + + AddPackage( + NAME OpenSSL-android + REPO crueter/OpenSSL-CI + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT openssl-android-${SSL_VERSION}.tar.zst KEY android HASH_SUFFIX sha512sum BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} ) - include(${OpenSSL_SOURCE_DIR}/openssl.cmake) + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-android_SOURCE_DIR}) + endif() + endif() + + if(PLATFORM_SUN OR FORCE_DOWNLOAD_OPENSSL) + if (PLATFORM_SUN) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + + AddPackage( + NAME OpenSSL-solaris + REPO crueter/OpenSSL-CI + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT openssl-solaris-${SSL_VERSION}.tar.zst + + KEY solaris + HASH_SUFFIX sha512sum + BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} + ) + + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-solaris_SOURCE_DIR}) + endif() + endif() + + if(PLATFORM_FREEBSD OR FORCE_DOWNLOAD_OPENSSL) + if (PLATFORM_FREEBSD) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + + AddPackage( + NAME OpenSSL-freebsd + REPO crueter/OpenSSL-CI + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT openssl-freebsd-${SSL_VERSION}.tar.zst + + KEY freebsd + HASH_SUFFIX sha512sum + BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} + ) + + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-freebsd_SOURCE_DIR}) + endif() + endif() + + if(PLATFORM_LINUX OR FORCE_DOWNLOAD_OPENSSL) + if (PLATFORM_LINUX) + set(DOWNLOAD_ONLY OFF) + set(BUILD_SHARED_LIBS OFF) + else() + set(DOWNLOAD_ONLY ON) + endif() + + AddPackage( + NAME OpenSSL-linux + REPO crueter/OpenSSL-CI + TAG v${SSL_VERSION} + VERSION ${SSL_VERSION} + ARTIFACT openssl-linux-${SSL_VERSION}.tar.zst + + KEY linux + HASH_SUFFIX sha512sum + BUNDLED_PACKAGE ON + DOWNLOAD_ONLY ${DOWNLOAD_ONLY} + ) + + if (NOT DOWNLOAD_ONLY) + set(OPENSSL_DIR ${OpenSSL-linux_SOURCE_DIR}) + endif() + endif() + + if (DEFINED OPENSSL_DIR) + include(${OPENSSL_DIR}/openssl.cmake) + + # Overrides find package + CPMAddPackage( + NAME OpenSSL + SOURCE_DIR ${OPENSSL_DIR} + ) + else() + find_package(OpenSSL 1.1.1 REQUIRED) endif() endif() @@ -628,7 +784,7 @@ if(NOT TARGET Boost::headers) endif() if (ENABLE_LIBUSB) - if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") + if (PLATFORM_FREEBSD) find_package(libusb MODULE) else() find_package(libusb 1.0.24 MODULE) @@ -648,6 +804,7 @@ if (USE_DISCORD_PRESENCE) ${CMAKE_SOURCE_DIR}/.patch/discord-rpc/0001-cmake-version.patch ${CMAKE_SOURCE_DIR}/.patch/discord-rpc/0002-no-clang-format.patch ${CMAKE_SOURCE_DIR}/.patch/discord-rpc/0003-fix-cpp17.patch + EXCLUDE_FROM_ALL ON ) target_include_directories(discord-rpc INTERFACE ${discord-rpc_SOURCE_DIR}/include) @@ -793,7 +950,7 @@ endif() function(set_yuzu_qt_components) # Best practice is to ask for all components at once, so they are from the same version set(YUZU_QT_COMPONENTS2 Core Widgets Concurrent) - if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + if (PLATFORM_LINUX) list(APPEND YUZU_QT_COMPONENTS2 DBus) endif() if (YUZU_USE_QT_MULTIMEDIA) diff --git a/CMakeModules/CPMUtil.cmake b/CMakeModules/CPMUtil.cmake index bd0155f8fb..07393d6ccd 100644 --- a/CMakeModules/CPMUtil.cmake +++ b/CMakeModules/CPMUtil.cmake @@ -6,8 +6,14 @@ # and some cmake magic to allow for runtime viewing of dependency versions include(CMakeDependentOption) +if (MSVC OR ANDROID) + set(SYSTEM_DEFAULT OFF) +else() + set(SYSTEM_DEFAULT ON) +endif() + CMAKE_DEPENDENT_OPTION(CPMUTIL_DEFAULT_SYSTEM - "Allow usage of system packages for CPM dependencies" ON + "Allow usage of system packages for CPM dependencies" ${SYSTEM_DEFAULT} "NOT ANDROID" OFF) cmake_minimum_required(VERSION 3.22) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 03e86b0d99..5f9bfa2214 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1246,10 +1246,12 @@ if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) endif() if(ENABLE_OPENSSL) - find_package(OpenSSL REQUIRED) target_sources(core PRIVATE hle/service/ssl/ssl_backend_openssl.cpp) - if (ANDROID OR MSVC) + + find_package(OpenSSL REQUIRED) + + if (OpenSSL_ADDED) link_openssl(core) else() target_link_libraries(core PRIVATE OpenSSL::SSL) diff --git a/src/dynarmic/src/dynarmic/frontend/A32/a32_types.h b/src/dynarmic/src/dynarmic/frontend/A32/a32_types.h index 5afd82f77f..fdadef8257 100644 --- a/src/dynarmic/src/dynarmic/frontend/A32/a32_types.h +++ b/src/dynarmic/src/dynarmic/frontend/A32/a32_types.h @@ -105,7 +105,7 @@ inline size_t RegNumber(ExtReg reg) { return static_cast(reg) - static_cast(ExtReg::Q0); } - ASSERT_FALSE("Invalid extended register"); + ASSERT_MSG(false, "Invalid extended register"); } inline Reg operator+(Reg reg, size_t number) { diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index d85e8bf1bc..d0787b0936 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -26,7 +26,7 @@ if (ENABLE_WEB_SERVICE) endif() # Solaris uses /lib/amd64/libsocket.so and /lib/amd64/libnsl.so -if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") +if (PLATFORM_SUN) target_link_libraries(network PRIVATE socket nsl) endif() diff --git a/src/web_service/CMakeLists.txt b/src/web_service/CMakeLists.txt index 510d8bf668..c1d5a84225 100644 --- a/src/web_service/CMakeLists.txt +++ b/src/web_service/CMakeLists.txt @@ -14,15 +14,14 @@ add_library(web_service STATIC web_result.h ) -find_package(OpenSSL REQUIRED) - 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 (ANDROID OR MSVC) +if (OpenSSL_ADDED) link_openssl(web_service) else() + find_package(OpenSSL REQUIRED) target_link_libraries(web_service PRIVATE OpenSSL::SSL) endif() diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 2e31f47cd5..4dcce95bb6 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -8,7 +8,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # Set the RPATH for Qt Libraries # This must be done before the `yuzu` target is created -if (YUZU_USE_BUNDLED_QT AND (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")) +if (YUZU_USE_BUNDLED_QT AND (PLATFORM_LINUX)) set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}/bin/lib/") endif() @@ -498,7 +498,7 @@ if (YUZU_ROOM) endif() # Explicit linking required -if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") +if (PLATFORM_SUN) target_link_libraries(yuzu PRIVATE X11) endif() diff --git a/src/yuzu_cmd/CMakeLists.txt b/src/yuzu_cmd/CMakeLists.txt index 9d1e08c04c..11f8317f9c 100644 --- a/src/yuzu_cmd/CMakeLists.txt +++ b/src/yuzu_cmd/CMakeLists.txt @@ -41,7 +41,7 @@ target_include_directories(yuzu-cmd PRIVATE ${RESOURCES_DIR}) target_link_libraries(yuzu-cmd PRIVATE SDL2::SDL2 Vulkan::Headers) # In Solaris needs explicit linking for ffmpeg which links to /lib/amd64/libX11.so -if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") +if (PLATFORM_SUN) target_link_libraries(yuzu-cmd PRIVATE X11) endif()