From ccd05a0c988f3d99de14ee6304b70fca1cb1c577 Mon Sep 17 00:00:00 2001 From: crueter Date: Wed, 13 Aug 2025 15:19:08 -0400 Subject: [PATCH] [cmake] Solve OpenSSL once and for all Finally... Signed-off-by: crueter --- CMakeLists.txt | 72 ++++++++++++++++------------ CMakeModules/DownloadExternals.cmake | 1 + src/core/CMakeLists.txt | 2 +- src/web_service/CMakeLists.txt | 8 +++- 4 files changed, 50 insertions(+), 33 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bc897fb6bd..fcd9efad5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -174,27 +174,6 @@ endif() if (ANDROID) set(CMAKE_SKIP_INSTALL_RULES ON) set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # Workaround for Oboe - - include(CPMUtil) - - # download openssl - # TODO(crueter): windows - if (ENABLE_OPENSSL) - set(BUILD_SHARED_LIBS ON) - AddPackage( - NAME OpenSSL - REPO crueter/OpenSSL-CI - TAG v3.5.2 - VERSION 3.5.2 - ARTIFACT openssl-android-3.5.2.tar.zst - - KEY android - HASH_SUFFIX sha512sum - BUNDLED_PACKAGE ON - ) - - include(${OpenSSL_SOURCE_DIR}/openssl.cmake) - endif() endif() if (YUZU_USE_PRECOMPILED_HEADERS) @@ -391,16 +370,6 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) # System imported libraries # ======================================================================= -if(ENABLE_OPENSSL) - if (MSVC) - # default for slproweb - set(OPENSSL_ROOT_DIR "C:/Program Files/OpenSSL-Win64" CACHE STRING "OpenSSL install path") - message(STATUS "OpenSSL root dir set to ${OPENSSL_ROOT_DIR}") - endif() - - find_package(OpenSSL 1.1.1 REQUIRED) -endif() - if (YUZU_USE_CPM) include(CPMUtil) message(STATUS "Fetching needed dependencies with CPM") @@ -410,6 +379,43 @@ if (YUZU_USE_CPM) # TODO(crueter): renderdoc? + # 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 + + KEY windows + HASH_SUFFIX sha512sum + BUNDLED_PACKAGE ON + ) + + include(${OpenSSL_SOURCE_DIR}/openssl.cmake) + endif() + + if (ANDROID) + set(BUILD_SHARED_LIBS OFF) + AddPackage( + NAME OpenSSL + REPO crueter/OpenSSL-CI + TAG v3.5.2 + VERSION 3.5.2 + ARTIFACT openssl-android-3.5.2.tar.zst + + KEY android + HASH_SUFFIX sha512sum + BUNDLED_PACKAGE ON + ) + + include(${OpenSSL_SOURCE_DIR}/openssl.cmake) + endif() + endif() + AddPackage( NAME Boost REPO boostorg/boost @@ -531,6 +537,10 @@ else() if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR ANDROID) find_package(gamemode 1.7 MODULE) endif() + + if (ENABLE_OPENSSL) + find_package(OpenSSL 1.1.1 REQUIRED) + endif() endif() if (ENABLE_LIBUSB) diff --git a/CMakeModules/DownloadExternals.cmake b/CMakeModules/DownloadExternals.cmake index 62cf2689ab..3651781f93 100644 --- a/CMakeModules/DownloadExternals.cmake +++ b/CMakeModules/DownloadExternals.cmake @@ -35,6 +35,7 @@ function(download_bundled_external remote_path lib_name cpm_key prefix_var versi URL ${full_url} DOWNLOAD_ONLY YES KEY ${CACHE_KEY} + BUNDLED_PACKAGE ON # TODO(crueter): hash ) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index c57fb9e829..8159bea87e 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1249,7 +1249,7 @@ if(ENABLE_OPENSSL) find_package(OpenSSL REQUIRED) target_sources(core PRIVATE hle/service/ssl/ssl_backend_openssl.cpp) - if (ANDROID) + if (ANDROID OR MSVC) link_openssl(core) else() target_link_libraries(core PRIVATE OpenSSL::SSL) diff --git a/src/web_service/CMakeLists.txt b/src/web_service/CMakeLists.txt index 70848a9ed5..510d8bf668 100644 --- a/src/web_service/CMakeLists.txt +++ b/src/web_service/CMakeLists.txt @@ -18,7 +18,13 @@ 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 OpenSSL::SSL cpp-jwt::cpp-jwt) +target_link_libraries(web_service PRIVATE common network nlohmann_json::nlohmann_json httplib::httplib cpp-jwt::cpp-jwt) + +if (ANDROID OR MSVC) + link_openssl(web_service) +else() + target_link_libraries(web_service PRIVATE OpenSSL::SSL) +endif() if (YUZU_USE_PRECOMPILED_HEADERS) target_precompile_headers(web_service PRIVATE precompiled_headers.h)