You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.7 KiB
102 lines
3.7 KiB
# SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
if (YUZU_USE_BUNDLED_OPENSSL)
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
AddJsonPackage(openssl-ci)
|
|
if (OpenSSL_ADDED)
|
|
add_compile_definitions(YUZU_BUNDLED_OPENSSL)
|
|
endif()
|
|
# openssl funniness
|
|
find_package(OpenSSL 3 COMPONENTS SSL Crypto REQUIRED)
|
|
else()
|
|
message(STATUS "Using OpenSSL from externals")
|
|
AddJsonPackage(openssl)
|
|
set(OpenSSL_PREFIX ${OpenSSL_SOURCE_DIR})
|
|
set(OpenSSL_BUILD_DIR ${OpenSSL_BINARY_DIR})
|
|
set(OpenSSL_MAKEFILE ${OpenSSL_BUILD_DIR}/Makefile)
|
|
set(OpenSSL_BUILD_LIBRARIES "")
|
|
list(APPEND OpenSSL_BUILD_LIBRARIES
|
|
"${OpenSSL_BUILD_DIR}/libssl.a"
|
|
"${OpenSSL_BUILD_DIR}/libcrypto.a")
|
|
|
|
make_directory(${OpenSSL_BUILD_DIR})
|
|
|
|
# The ABSOLUTE best language, hands down, better than bash by a MILE
|
|
find_program(PERL_PROGRAM perl)
|
|
add_custom_command(
|
|
OUTPUT
|
|
${OpenSSL_MAKEFILE}
|
|
COMMAND
|
|
${PERL_PROGRAM} ${OpenSSL_PREFIX}/Configure
|
|
shared
|
|
no-makedepend
|
|
--release
|
|
threads
|
|
no-tests
|
|
no-docs
|
|
enable-camellia
|
|
enable-ec
|
|
enable-ec2m
|
|
enable-sm2
|
|
enable-srp
|
|
enable-idea
|
|
enable-mdc2
|
|
enable-rc5
|
|
enable-rfc3779
|
|
enable-asm
|
|
enable-quic
|
|
enable-fips
|
|
WORKING_DIRECTORY
|
|
${OpenSSL_BUILD_DIR}
|
|
)
|
|
|
|
# Workaround for Ubuntu 18.04's older version of make not being able to call make as a child
|
|
# with context of the jobserver. Also helps ninja users.
|
|
execute_process(COMMAND nproc OUTPUT_VARIABLE SYSTEM_THREADS)
|
|
# BSD make or Solaris make don't support ffmpeg make-j8
|
|
set(OpenSSL_MAKE_ARGS "")
|
|
if (PLATFORM_LINUX OR ANDROID OR APPLE OR WIN32 OR PLATFORM_FREEBSD)
|
|
set(OpenSSL_MAKE_ARGS -j${SYSTEM_THREADS})
|
|
endif()
|
|
|
|
add_custom_command(
|
|
OUTPUT
|
|
${OpenSSL_BUILD_LIBRARIES}
|
|
COMMAND
|
|
gmake ${OpenSSL_MAKE_ARGS}
|
|
WORKING_DIRECTORY
|
|
${OpenSSL_BUILD_DIR}
|
|
)
|
|
add_custom_target(openssl-configure ALL DEPENDS ${OpenSSL_MAKEFILE})
|
|
add_custom_target(openssl-build ALL DEPENDS ${OpenSSL_BUILD_LIBRARIES} openssl-configure)
|
|
|
|
add_library(SSL INTERFACE)
|
|
target_include_directories(SSL INTERFACE ${OpenSSL_SOURCE_DIR}/include)
|
|
target_link_libraries(SSL INTERFACE openssl-build)
|
|
|
|
add_library(Crypto INTERFACE)
|
|
target_include_directories(Crypto INTERFACE ${OpenSSL_SOURCE_DIR}/include)
|
|
target_link_libraries(Crypto INTERFACE openssl-build)
|
|
|
|
add_library(OpenSSL::SSL ALIAS SSL)
|
|
add_library(OpenSSL::Crypto ALIAS Crypto)
|
|
|
|
# evil haxx for httplib https://cmake.org/cmake/help/latest/module/FindOpenSSL.html
|
|
# fuck httplib
|
|
set(OpenSSL_FOUND TRUE PARENT_SCOPE)
|
|
set(OpenSSL_VERSION "4.0.0" PARENT_SCOPE)
|
|
# Deprecated but some people run older cmake
|
|
set(OPENSSL_FOUND TRUE PARENT_SCOPE)
|
|
set(OPENSSL_VERSION "4.0.0" PARENT_SCOPE)
|
|
|
|
set(OPENSSL_INCLUDE_DIR ${OpenSSL_SOURCE_DIR}/include PARENT_SCOPE)
|
|
set(OPENSSL_CRYPTO_LIBRARY ${OpenSSL_BUILD_DIR}/libcrypto.a PARENT_SCOPE)
|
|
set(OPENSSL_CRYPTO_LIBRARIES ${OpenSSL_BUILD_DIR}/libcrypto.a PARENT_SCOPE)
|
|
set(OPENSSL_SSL_LIBRARY ${OpenSSL_BUILD_DIR}/libssl.a PARENT_SCOPE)
|
|
set(OPENSSL_SSL_LIBRARIES ${OpenSSL_BUILD_DIR}/libssl.a PARENT_SCOPE)
|
|
set(OPENSSL_LIBRARIES "${OpenSSL_BUILD_DIR}/libssl.a;${OpenSSL_BUILD_DIR}/libcrypto.a" PARENT_SCOPE)
|
|
|
|
set(OPENSSL_ROOT_DIR ${OpenSSL_BUILD_DIR} PARENT_SCOPE)
|
|
set(OPENSSL_USE_STATIC_LIBS TRUE PARENT_SCOPE)
|
|
endif()
|