diff --git a/Builds/CMake/deps/OpenSSL.cmake b/Builds/CMake/deps/OpenSSL.cmake index ad5117aac..6a2dfc13b 100644 --- a/Builds/CMake/deps/OpenSSL.cmake +++ b/Builds/CMake/deps/OpenSSL.cmake @@ -2,34 +2,93 @@ NIH dep: openssl #]===================================================================] -#[===============================================[ - OPENSSL_ROOT_DIR is the only variable that - FindOpenSSL honors for locating, so convert any - OPENSSL_ROOT vars to this -#]===============================================] -if (NOT DEFINED OPENSSL_ROOT_DIR) - if (DEFINED ENV{OPENSSL_ROOT}) - set (OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT}) - elseif (HOMEBREW) - execute_process (COMMAND ${HOMEBREW} --prefix openssl - OUTPUT_VARIABLE OPENSSL_ROOT_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE) - endif () - file (TO_CMAKE_PATH "${OPENSSL_ROOT_DIR}" OPENSSL_ROOT_DIR) -endif () +# Include modules +include(ExternalProject) +include(CheckCCompilerFlag) + +check_c_compiler_flag("-mavx512f" COMPILER_SUPPORTS_AVX512) +option(ENABLE_AVX512 "Enable AVX512 instructions" ${COMPILER_SUPPORTS_AVX512}) + +set(OPENSSL_NISTP "") +set(OPENSSL_AVX512 "") + +if(APPLE) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64") + set(OPENSSL_PLATFORM "darwin64-arm64-cc") + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + set(OPENSSL_PLATFORM "darwin64-x86_64-cc") + else() + message(FATAL_ERROR "Unsupported macOS architecture: ${CMAKE_SYSTEM_PROCESSOR}") + endif() +elseif(UNIX AND NOT APPLE) + message(STATUS "ARCH: ${CMAKE_SYSTEM_PROCESSOR}") + set(OPENSSL_PLATFORM "linux-x86_64") + set(OPENSSL_NISTP "enable-ec_nistp_64_gcc_128") + set(OPENSSL_AVX512 "-march=skylake-avx512") +else() + message(FATAL_ERROR "Unsupported platform") +endif() + +ExternalProject_Add(openssl_src + PREFIX ${nih_cache_path} + GIT_REPOSITORY https://github.com/openssl/openssl.git + GIT_TAG OpenSSL_1_1_1u + CONFIGURE_COMMAND + ${nih_cache_path}/src/openssl_src/Configure + -DBUILD_SHARED_LIBS=OFF + -DBUILD_STATIC_LIBS=ON + ${OPENSSL_PLATFORM} + ${OPENSSL_NISTP} + ${OPENSSL_AVX512} + enable-rmd160 + no-ssl2 + LOG_BUILD ON + LOG_CONFIGURE ON + LOG_DOWNLOAD ON + BUILD_IN_SOURCE 1 + BUILD_COMMAND $(MAKE) CFLAGS=${OPENSSL_CFLAGS} + TEST_COMMAND "" + INSTALL_COMMAND "" + BUILD_BYPRODUCTS + /libssl.a + /libcrypto.a +) + +ExternalProject_Get_Property (openssl_src BINARY_DIR) +set (openssl_src_BINARY_DIR "${BINARY_DIR}") + +add_library (OpenSSL::SSL STATIC IMPORTED GLOBAL) +add_library (OpenSSL::Crypto STATIC IMPORTED GLOBAL) + +add_dependencies(OpenSSL::SSL openssl_src) +add_dependencies(OpenSSL::Crypto openssl_src) +execute_process( + COMMAND + mkdir -p "${openssl_src_BINARY_DIR}/include" +) + +set_target_properties(OpenSSL::SSL PROPERTIES + IMPORTED_LOCATION_DEBUG + "${openssl_src_BINARY_DIR}/libssl.a" + IMPORTED_LOCATION_RELEASE + "${openssl_src_BINARY_DIR}/libssl.a" + INTERFACE_INCLUDE_DIRECTORIES + "${openssl_src_BINARY_DIR}/include" +) + +set_target_properties(OpenSSL::Crypto PROPERTIES + IMPORTED_LOCATION_DEBUG + "${openssl_src_BINARY_DIR}/libcrypto.a" + IMPORTED_LOCATION_RELEASE + "${openssl_src_BINARY_DIR}/libcrypto.a" + INTERFACE_INCLUDE_DIRECTORIES + "${openssl_src_BINARY_DIR}/include" +) -if (static) - set (OPENSSL_USE_STATIC_LIBS ON) -endif () -set (OPENSSL_MSVC_STATIC_RT ON) -find_package (OpenSSL 1.1.1 REQUIRED) target_link_libraries (ripple_libs INTERFACE OpenSSL::SSL OpenSSL::Crypto) -# disable SSLv2...this can also be done when building/configuring OpenSSL -set_target_properties(OpenSSL::SSL PROPERTIES - INTERFACE_COMPILE_DEFINITIONS OPENSSL_NO_SSL2) #[=========================================================[ https://gitlab.kitware.com/cmake/cmake/issues/16885 depending on how openssl is built, it might depend @@ -46,3 +105,11 @@ if (TARGET ZLIB::ZLIB) INTERFACE_LINK_LIBRARIES ZLIB::ZLIB) set (has_zlib TRUE) endif () + +# Compiler flags for your application +if(ENABLE_AVX512 AND COMPILER_SUPPORTS_AVX512) + # Allow the compiler to use AVX512 instructions where appropriate + add_compile_options(-mavx512f) + add_compile_options(-march=skylake-avx512) +endif() +add_link_options(-lssl -lcrypto) \ No newline at end of file