Browse Source
[cmake] Allow building OpenSSL from source (#4032)
[cmake] Allow building OpenSSL from source (#4032)
If YUZU_USE_BUNDLED_OPENSSL is off and OpenSSL is *not* installed to the system, pulls in OpenSSL and Jimmy Park's CMake wrapper, then configures + builds from source. Some patches were made on top of OpenSSL and openssl-cmake: - USE_CCACHE is respected from UseCcache.cmake - CXX/CFLAGS are passed from CMake to the configure script, which sends those to the compiler - Uses a bundled cert.h akin to the bundled OpenSSL build Closes #3614 ~~Before merge: remove verbose stuff~~ actually useful so nvm Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4032 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: Lizzie <lizzie@eden-emu.dev>pull/4046/head
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
6 changed files with 3998 additions and 3 deletions
-
214.patch/openssl-cmake/0001-cpmutil-compat.patch
-
54.patch/openssl-cmake/0002-use-ccache.patch
-
28.patch/openssl-cmake/0003-use-cmake-compiler-flags.patch
-
3665.patch/openssl/0001-add-bundled-cert.patch
-
11CMakeLists.txt
-
29cpmfile.json
@ -0,0 +1,214 @@ |
|||||
|
From ec4c1fdf526cb9ad045abf59b29ee495bbf5023a Mon Sep 17 00:00:00 2001 |
||||
|
From: crueter <crueter@eden-emu.dev> |
||||
|
Date: Sat, 30 May 2026 20:56:35 -0400 |
||||
|
Subject: [PATCH] cpmutil compat |
||||
|
|
||||
|
---
|
||||
|
CMakeLists.txt | 31 ++++++++----------- |
||||
|
cmake/FetchOpenSSL.cmake | 64 ---------------------------------------- |
||||
|
cmake/GetCPM.cmake | 5 ---- |
||||
|
3 files changed, 13 insertions(+), 87 deletions(-) |
||||
|
delete mode 100644 cmake/FetchOpenSSL.cmake |
||||
|
delete mode 100644 cmake/GetCPM.cmake |
||||
|
|
||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
|
index 5420ecc..9ffd5a0 100644
|
||||
|
--- a/CMakeLists.txt
|
||||
|
+++ b/CMakeLists.txt
|
||||
|
@@ -19,9 +19,7 @@ include(FetchContent)
|
||||
|
include(ProcessorCount) |
||||
|
include(cmake/ConfigureOpenSSL.cmake) |
||||
|
include(cmake/DetectTargetPlatform.cmake) |
||||
|
-include(cmake/FetchOpenSSL.cmake)
|
||||
|
include(cmake/FindVcvarsall.cmake) |
||||
|
-include(cmake/GetCPM.cmake)
|
||||
|
|
||||
|
# Custom options |
||||
|
option(OPENSSL_BUILD_VERBOSE "Enable verbose output from build" OFF) |
||||
|
@@ -47,9 +45,6 @@ if("${OPENSSL_TARGET_PLATFORM}" STREQUAL "")
|
||||
|
detect_target_platform(OPENSSL_TARGET_PLATFORM) |
||||
|
endif() |
||||
|
|
||||
|
-# Fetch OpenSSL source
|
||||
|
-fetch_openssl()
|
||||
|
-
|
||||
|
# Apply patches |
||||
|
foreach(patch IN LISTS OPENSSL_PATCH) |
||||
|
if(EXISTS "${patch}" AND NOT IS_DIRECTORY "${patch}") |
||||
|
@@ -59,13 +54,13 @@ foreach(patch IN LISTS OPENSSL_PATCH)
|
||||
|
|
||||
|
execute_process( |
||||
|
COMMAND git init |
||||
|
- WORKING_DIRECTORY ${openssl_SOURCE_DIR}
|
||||
|
+ WORKING_DIRECTORY ${OpenSSL_SOURCE_DIR}
|
||||
|
OUTPUT_QUIET |
||||
|
ERROR_QUIET |
||||
|
) |
||||
|
execute_process( |
||||
|
COMMAND git apply ${patch} |
||||
|
- WORKING_DIRECTORY ${openssl_SOURCE_DIR}
|
||||
|
+ WORKING_DIRECTORY ${OpenSSL_SOURCE_DIR}
|
||||
|
OUTPUT_QUIET |
||||
|
ERROR_QUIET |
||||
|
) |
||||
|
@@ -161,8 +156,8 @@ list(PREPEND OPENSSL_CONFIGURE_OPTIONS ${OPENSSL_TARGET_PLATFORM})
|
||||
|
# Configure OpenSSL |
||||
|
configure_openssl( |
||||
|
COMMAND ${VCVARSALL_COMMAND} |
||||
|
- FILE ${openssl_SOURCE_DIR}/Configure
|
||||
|
- BUILD_DIR ${openssl_BINARY_DIR}
|
||||
|
+ FILE ${OpenSSL_SOURCE_DIR}/Configure
|
||||
|
+ BUILD_DIR ${OpenSSL_BINARY_DIR}
|
||||
|
OPTIONS ${OPENSSL_CONFIGURE_OPTIONS} |
||||
|
) |
||||
|
|
||||
|
@@ -203,8 +198,8 @@ endif()
|
||||
|
# Parse Makefile |
||||
|
parse_makefile(${OPENSSL_MAKEFILE} "INSTALL_LIBS" OPENSSL_STATIC_LIBS) |
||||
|
parse_makefile(${OPENSSL_MAKEFILE} "INSTALL_SHLIBS" OPENSSL_SHARED_LIBS) |
||||
|
-list(TRANSFORM OPENSSL_STATIC_LIBS PREPEND "${openssl_BINARY_DIR}/")
|
||||
|
-list(TRANSFORM OPENSSL_SHARED_LIBS PREPEND "${openssl_BINARY_DIR}/")
|
||||
|
+list(TRANSFORM OPENSSL_STATIC_LIBS PREPEND "${OpenSSL_BINARY_DIR}/")
|
||||
|
+list(TRANSFORM OPENSSL_SHARED_LIBS PREPEND "${OpenSSL_BINARY_DIR}/")
|
||||
|
|
||||
|
foreach(LIBRARY IN LISTS OPENSSL_STATIC_LIBS) |
||||
|
if(LIBRARY MATCHES "crypto") |
||||
|
@@ -239,14 +234,14 @@ endif()
|
||||
|
|
||||
|
# Provide same targets and variables as FindOpenSSL module |
||||
|
set(OPENSSL_FOUND ON CACHE BOOL "Override FindOpenSSL variables" FORCE) |
||||
|
-set(OPENSSL_INCLUDE_DIR ${openssl_SOURCE_DIR}/include ${openssl_BINARY_DIR}/include CACHE STRING "Override FindOpenSSL variables" FORCE)
|
||||
|
+set(OPENSSL_INCLUDE_DIR ${OpenSSL_SOURCE_DIR}/include ${OpenSSL_BINARY_DIR}/include CACHE STRING "Override FindOpenSSL variables" FORCE)
|
||||
|
set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_${OPENSSL_LIBRARY_TYPE}_CRYPTO_LIBRARY} CACHE STRING "Override FindOpenSSL variables" FORCE) |
||||
|
set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_DEPENDENCIES} CACHE STRING "Override FindOpenSSL variables" FORCE) |
||||
|
set(OPENSSL_SSL_LIBRARY ${OPENSSL_${OPENSSL_LIBRARY_TYPE}_SSL_LIBRARY} CACHE STRING "Override FindOpenSSL variables" FORCE) |
||||
|
set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_DEPENDENCIES} CACHE STRING "Override FindOpenSSL variables" FORCE) |
||||
|
set(OPENSSL_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_SSL_LIBRARY} ${OPENSSL_DEPENDENCIES} CACHE STRING "Override FindOpenSSL variables" FORCE) |
||||
|
set(OPENSSL_VERSION ${OPENSSL_CONFIGURED_VERSION} CACHE STRING "Override FindOpenSSL variables" FORCE) |
||||
|
-set(OPENSSL_APPLINK_SOURCE ${openssl_SOURCE_DIR}/ms/applink.c CACHE STRING "Override FindOpenSSL variables" FORCE)
|
||||
|
+set(OPENSSL_APPLINK_SOURCE ${OpenSSL_SOURCE_DIR}/ms/applink.c CACHE STRING "Override FindOpenSSL variables" FORCE)
|
||||
|
|
||||
|
add_library(OpenSSL::Crypto ${OPENSSL_LIBRARY_TYPE} IMPORTED GLOBAL) |
||||
|
add_library(OpenSSL::SSL ${OPENSSL_LIBRARY_TYPE} IMPORTED GLOBAL) |
||||
|
@@ -308,8 +303,8 @@ if(ANDROID)
|
||||
|
endif() |
||||
|
|
||||
|
file(GLOB_RECURSE OPENSSL_SOURCES |
||||
|
- ${openssl_SOURCE_DIR}/*.[ch]
|
||||
|
- ${openssl_SOURCE_DIR}/*.[ch].in
|
||||
|
+ ${OpenSSL_SOURCE_DIR}/*.[ch]
|
||||
|
+ ${OpenSSL_SOURCE_DIR}/*.[ch].in
|
||||
|
) |
||||
|
|
||||
|
set(OPENSSL_BUILD_OUTPUT |
||||
|
@@ -322,7 +317,7 @@ add_custom_command(
|
||||
|
OUTPUT ${OPENSSL_BUILD_OUTPUT} |
||||
|
COMMAND ${OPENSSL_BUILD_COMMAND} |
||||
|
DEPENDS ${OPENSSL_SOURCES} |
||||
|
- WORKING_DIRECTORY ${openssl_BINARY_DIR}
|
||||
|
+ WORKING_DIRECTORY ${OpenSSL_BINARY_DIR}
|
||||
|
VERBATIM |
||||
|
) |
||||
|
|
||||
|
@@ -341,7 +336,7 @@ if(OPENSSL_TEST AND NOT CMAKE_CROSSCOMPILING)
|
||||
|
add_test( |
||||
|
NAME openssl-test |
||||
|
COMMAND ${OPENSSL_BUILD_TOOL} test VERBOSE_FAILURE=yes HARNESS_JOBS=${NUMBER_OF_THREADS} |
||||
|
- WORKING_DIRECTORY ${openssl_BINARY_DIR}
|
||||
|
+ WORKING_DIRECTORY ${OpenSSL_BINARY_DIR}
|
||||
|
) |
||||
|
endif() |
||||
|
|
||||
|
@@ -356,7 +351,7 @@ if(OPENSSL_INSTALL)
|
||||
|
install(CODE |
||||
|
"execute_process( |
||||
|
COMMAND ${OPENSSL_INSTALL_COMMAND} |
||||
|
- WORKING_DIRECTORY \"${openssl_BINARY_DIR}\"
|
||||
|
+ WORKING_DIRECTORY \"${OpenSSL_BINARY_DIR}\"
|
||||
|
)" |
||||
|
) |
||||
|
endif() |
||||
|
diff --git a/cmake/FetchOpenSSL.cmake b/cmake/FetchOpenSSL.cmake
|
||||
|
deleted file mode 100644 |
||||
|
index a43505d..0000000
|
||||
|
--- a/cmake/FetchOpenSSL.cmake
|
||||
|
+++ /dev/null
|
||||
|
@@ -1,64 +0,0 @@
|
||||
|
-function(fetch_openssl)
|
||||
|
- if(EXISTS "${OPENSSL_SOURCE}" AND IS_DIRECTORY "${OPENSSL_SOURCE}")
|
||||
|
- # Fetch the local OpenSSL source
|
||||
|
- if(NOT IS_ABSOLUTE "${OPENSSL_SOURCE}")
|
||||
|
- string(PREPEND OPENSSL_SOURCE ${CMAKE_SOURCE_DIR}/)
|
||||
|
- endif()
|
||||
|
-
|
||||
|
- string(REPLACE "\\" "/" openssl-source_SOURCE_DIR "${OPENSSL_SOURCE}")
|
||||
|
- set(openssl-source_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/openssl-source-build)
|
||||
|
- else()
|
||||
|
- set(CPM_OPTIONS
|
||||
|
- NAME openssl-source
|
||||
|
- DOWNLOAD_ONLY ON
|
||||
|
- )
|
||||
|
-
|
||||
|
- if(NOT OPENSSL_CONFIGURE_VERBOSE)
|
||||
|
- list(APPEND CPM_OPTIONS QUIET)
|
||||
|
- endif()
|
||||
|
-
|
||||
|
- if("${OPENSSL_SOURCE}" MATCHES "^http")
|
||||
|
- # Download OpenSSL source from the internet
|
||||
|
- list(APPEND CPM_OPTIONS URL ${OPENSSL_SOURCE})
|
||||
|
- else()
|
||||
|
- # Download OpenSSL source from the official website
|
||||
|
- if("${OPENSSL_TARGET_VERSION}" STREQUAL "")
|
||||
|
- set(OPENSSL_TARGET_VERSION ${PROJECT_VERSION})
|
||||
|
- endif()
|
||||
|
-
|
||||
|
- if(OPENSSL_TARGET_VERSION VERSION_EQUAL PROJECT_VERSION)
|
||||
|
- list(APPEND CPM_OPTIONS URL_HASH SHA256=aaf51a1fe064384f811daeaeb4ec4dce7340ec8bd893027eee676af31e83a04f)
|
||||
|
- endif()
|
||||
|
-
|
||||
|
- if(OPENSSL_TARGET_VERSION MATCHES "^1\.1\.1[a-w]$")
|
||||
|
- string(REPLACE "." "_" OPENSSL_TAGGED_VERSION ${OPENSSL_TARGET_VERSION})
|
||||
|
- list(APPEND CPM_OPTIONS URL https://github.com/openssl/openssl/releases/download/OpenSSL_${OPENSSL_TAGGED_VERSION}/openssl-${OPENSSL_TARGET_VERSION}.tar.gz)
|
||||
|
- else()
|
||||
|
- list(APPEND CPM_OPTIONS URL https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_TARGET_VERSION}/openssl-${OPENSSL_TARGET_VERSION}.tar.gz)
|
||||
|
- endif()
|
||||
|
- endif()
|
||||
|
-
|
||||
|
- CPMAddPackage(${CPM_OPTIONS})
|
||||
|
- endif()
|
||||
|
-
|
||||
|
- # Clean build directory if source directory has changed
|
||||
|
- if(DEFINED CACHE{openssl-source_SOURCE_DIR_OLD} AND NOT openssl-source_SOURCE_DIR STREQUAL openssl-source_SOURCE_DIR_OLD)
|
||||
|
- set(openssl-source_SOURCE_DIR_OLD ${openssl-source_SOURCE_DIR} CACHE INTERNAL "Previously fetched OpenSSL source")
|
||||
|
-
|
||||
|
- if(IS_DIRECTORY ${openssl-source_BINARY_DIR})
|
||||
|
- file(REMOVE_RECURSE ${openssl-source_BINARY_DIR})
|
||||
|
- file(MAKE_DIRECTORY ${openssl-source_BINARY_DIR})
|
||||
|
- endif()
|
||||
|
- endif()
|
||||
|
-
|
||||
|
- # Override the FindOpenSSL module
|
||||
|
- FetchContent_Declare(
|
||||
|
- OpenSSL
|
||||
|
- SOURCE_DIR ${openssl-source_SOURCE_DIR}
|
||||
|
- BINARY_DIR ${openssl-source_BINARY_DIR}
|
||||
|
- OVERRIDE_FIND_PACKAGE
|
||||
|
- )
|
||||
|
- FetchContent_MakeAvailable(OpenSSL)
|
||||
|
-
|
||||
|
- return(PROPAGATE openssl_SOURCE_DIR openssl_BINARY_DIR)
|
||||
|
-endfunction()
|
||||
|
diff --git a/cmake/GetCPM.cmake b/cmake/GetCPM.cmake
|
||||
|
deleted file mode 100644 |
||||
|
index bfc50f5..0000000
|
||||
|
--- a/cmake/GetCPM.cmake
|
||||
|
+++ /dev/null
|
||||
|
@@ -1,5 +0,0 @@
|
||||
|
-file(
|
||||
|
- DOWNLOAD https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake
|
||||
|
- ${CMAKE_CURRENT_BINARY_DIR}/get_cpm.cmake
|
||||
|
-)
|
||||
|
-include(${CMAKE_CURRENT_BINARY_DIR}/get_cpm.cmake)
|
||||
|
--
|
||||
|
2.54.0 |
||||
|
|
||||
@ -0,0 +1,54 @@ |
|||||
|
From d46675fbb61eb6d51e478023ce4075e545ad4cfd Mon Sep 17 00:00:00 2001 |
||||
|
From: crueter <crueter@eden-emu.dev> |
||||
|
Date: Sat, 30 May 2026 21:11:55 -0400 |
||||
|
Subject: [PATCH] use ccache |
||||
|
|
||||
|
---
|
||||
|
CMakeLists.txt | 1 - |
||||
|
cmake/ConfigureOpenSSL.cmake | 12 +++--------- |
||||
|
2 files changed, 3 insertions(+), 10 deletions(-) |
||||
|
|
||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
|
index 9ffd5a0..9ff14c8 100644
|
||||
|
--- a/CMakeLists.txt
|
||||
|
+++ b/CMakeLists.txt
|
||||
|
@@ -28,7 +28,6 @@ option(OPENSSL_ENABLE_PARALLEL "Build and test in parallel if possible" ON)
|
||||
|
option(OPENSSL_INSTALL "Install OpenSSL components to the <prefix> directory" OFF) |
||||
|
option(OPENSSL_INSTALL_CERT "Install cert.pem to the <openssldir> directory" OFF) |
||||
|
option(OPENSSL_TEST "Enable testing and build OpenSSL self tests" OFF) |
||||
|
-option(OPENSSL_USE_CCACHE "Use ccache if available" ON)
|
||||
|
|
||||
|
if("${OPENSSL_BUILD_TARGET}" STREQUAL "") |
||||
|
# Makefile target for build |
||||
|
diff --git a/cmake/ConfigureOpenSSL.cmake b/cmake/ConfigureOpenSSL.cmake
|
||||
|
index 211c18b..3d8cbed 100644
|
||||
|
--- a/cmake/ConfigureOpenSSL.cmake
|
||||
|
+++ b/cmake/ConfigureOpenSSL.cmake
|
||||
|
@@ -69,15 +69,9 @@ function(apply_ccache FILE)
|
||||
|
message(FATAL_ERROR "Couldn't find Makefile") |
||||
|
endif() |
||||
|
|
||||
|
- if(OPENSSL_USE_CCACHE)
|
||||
|
- find_program(CCACHE ccache)
|
||||
|
-
|
||||
|
- if(NOT CCACHE)
|
||||
|
- return()
|
||||
|
- endif()
|
||||
|
-
|
||||
|
+ if(USE_CCACHE)
|
||||
|
file(READ ${FILE} MAKEFILE) |
||||
|
- string(REPLACE "\nCC=" "\nCC=ccache " MAKEFILE "${MAKEFILE}")
|
||||
|
+ string(REPLACE "\nCC=" "\nCC=${CCACHE_BINARY} " MAKEFILE "${MAKEFILE}")
|
||||
|
|
||||
|
if(MSVC) |
||||
|
string(REPLACE "/Zi /Fdossl_static.pdb " "" MAKEFILE "${MAKEFILE}") |
||||
|
@@ -171,4 +165,4 @@ function(configure_openssl)
|
||||
|
string(REPLACE "/W3" "/W0" MAKEFILE "${MAKEFILE}") |
||||
|
file(WRITE ${OPENSSL_MAKEFILE} "${MAKEFILE}") |
||||
|
endif() |
||||
|
-endfunction()
|
||||
|
\ No newline at end of file |
||||
|
+endfunction()
|
||||
|
--
|
||||
|
2.54.0 |
||||
|
|
||||
@ -0,0 +1,28 @@ |
|||||
|
From 4a3cc92a7abad403529ed1cb4255ca63d9252de4 Mon Sep 17 00:00:00 2001 |
||||
|
From: crueter <crueter@eden-emu.dev> |
||||
|
Date: Sat, 30 May 2026 21:48:42 -0400 |
||||
|
Subject: [PATCH 2/2] use cmake compiler flags |
||||
|
|
||||
|
---
|
||||
|
cmake/ConfigureOpenSSL.cmake | 5 ++++- |
||||
|
1 file changed, 4 insertions(+), 1 deletion(-) |
||||
|
|
||||
|
diff --git a/cmake/ConfigureOpenSSL.cmake b/cmake/ConfigureOpenSSL.cmake
|
||||
|
index 3d8cbed..3012e05 100644
|
||||
|
--- a/cmake/ConfigureOpenSSL.cmake
|
||||
|
+++ b/cmake/ConfigureOpenSSL.cmake
|
||||
|
@@ -135,7 +135,10 @@ function(configure_openssl)
|
||||
|
endif() |
||||
|
|
||||
|
execute_process( |
||||
|
- COMMAND ${CONFIGURE_COMMAND}
|
||||
|
+ COMMAND ${CMAKE_COMMAND} -E env
|
||||
|
+ "CFLAGS=${CMAKE_C_FLAGS}"
|
||||
|
+ "CXXFLAGS=${CMAKE_CXX_FLAGS}"
|
||||
|
+ ${CONFIGURE_COMMAND}
|
||||
|
WORKING_DIRECTORY ${CONFIGURE_BUILD_DIR} |
||||
|
${VERBOSE_OPTION} |
||||
|
COMMAND_ERROR_IS_FATAL ANY |
||||
|
--
|
||||
|
2.54.0 |
||||
|
|
||||
3665
.patch/openssl/0001-add-bundled-cert.patch
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue