111 lines
4.5 KiB
CMake
111 lines
4.5 KiB
CMake
include(ExternalProject)
|
|
include(FetchContent)
|
|
|
|
set(OPENSSL_DESIRED_BRANCH "openssl-3.4")
|
|
set(OPENSSL_BUILD_DIR ${FETCHCONTENT_BASE_DIR}/openssl-build)
|
|
|
|
find_program(MAKE NAMES make gmake nmake REQUIRED)
|
|
find_program(AUTORECONF NAMES autoreconf REQUIRED)
|
|
|
|
if(CMAKE_CROSSCOMPILING)
|
|
set(OPENSSL_INSTALL_DIR ${CMAKE_SYSROOT})
|
|
set(SYSROOT_FLAG --sysroot=${CMAKE_SYSROOT})
|
|
else()
|
|
set(OPENSSL_INSTALL_DIR ${OPENSSL_BUILD_DIR})
|
|
set(SYSROOT_FLAG "")
|
|
endif()
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
|
set(ENV{CFLAGS} -g3 -O0)
|
|
endif()
|
|
|
|
set(ENV{CC} "${CMAKE_C_COMPILER}")
|
|
set(ENV{CXX} "${CMAKE_CXX_COMPILER}")
|
|
set(ENV{LD} "${CMAKE_LINKER}")
|
|
|
|
# Configura flags de compilação se não passado
|
|
if(NOT DEFINED OPENSSL_CONFIGURE_FLAGS)
|
|
# Configura o target de acordo com o sistema (32-bit ou 64-bit)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
message(STATUS "Detected 64-bit target system based on toolchain.")
|
|
set(OPENSSL_TARGET_CONFIG "linux-generic64" CACHE STRING "" FORCE)
|
|
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
message(STATUS "Detected 32-bit target system based on toolchain.")
|
|
set(OPENSSL_TARGET_CONFIG "linux-generic32" CACHE STRING "" FORCE)
|
|
else()
|
|
message(FATAL_ERROR "Unknown target architecture: pointer size is neither 4 nor 8.")
|
|
endif()
|
|
|
|
set(OPENSSL_CONFIGURE_FLAGS
|
|
${OPENSSL_TARGET_CONFIG}
|
|
no-async
|
|
no-dso
|
|
no-hw
|
|
no-engine
|
|
no-unit-test
|
|
${SYSROOT_FLAG})
|
|
endif()
|
|
|
|
ExternalProject_Add(
|
|
openssl
|
|
GIT_REPOSITORY https://github.com/openssl/openssl.git
|
|
GIT_TAG ${OPENSSL_DESIRED_BRANCH}
|
|
GIT_SHALLOW TRUE
|
|
PREFIX ${FETCHCONTENT_BASE_DIR}
|
|
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/openssl-src
|
|
BINARY_DIR ${OPENSSL_BUILD_DIR}
|
|
STAMP_DIR ${FETCHCONTENT_BASE_DIR}/openssl-subbuild/stamps
|
|
LOG_DIR ${FETCHCONTENT_BASE_DIR}/openssl-subbuild/logs
|
|
TMP_DIR ${FETCHCONTENT_BASE_DIR}/openssl-subbuild/tmp
|
|
CONFIGURE_COMMAND
|
|
cd ${FETCHCONTENT_BASE_DIR}/openssl-src && ./Configure ${OPENSSL_CONFIGURE_FLAGS} --prefix=${OPENSSL_INSTALL_DIR}
|
|
--openssldir=${OPENSSL_SOURCE_DIR}
|
|
BUILD_COMMAND ${MAKE} -C ${FETCHCONTENT_BASE_DIR}/openssl-src
|
|
INSTALL_COMMAND ${MAKE} -C ${FETCHCONTENT_BASE_DIR}/openssl-src install_sw
|
|
UPDATE_COMMAND "")
|
|
|
|
file(MAKE_DIRECTORY ${OPENSSL_INSTALL_DIR}/include/ ${OPENSSL_INSTALL_DIR}/lib/)
|
|
|
|
if(OPENSSL_USE_STATIC_LIBS)
|
|
add_library(OpenSSL::SSL STATIC IMPORTED)
|
|
set_target_properties(OpenSSL::SSL PROPERTIES IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libssl.a
|
|
INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INSTALL_DIR}/include)
|
|
|
|
add_library(OpenSSL::Crypto STATIC IMPORTED)
|
|
set_target_properties(OpenSSL::Crypto PROPERTIES IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a
|
|
INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INSTALL_DIR}/include)
|
|
set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a)
|
|
set(OPENSSL_SSL_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libssl.a)
|
|
else()
|
|
# Se for dinâmico (compartilhado)
|
|
add_library(OpenSSL::SSL SHARED IMPORTED)
|
|
set_target_properties(OpenSSL::SSL PROPERTIES IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libssl.so
|
|
INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INSTALL_DIR}/include)
|
|
|
|
add_library(OpenSSL::Crypto SHARED IMPORTED)
|
|
set_target_properties(OpenSSL::Crypto PROPERTIES IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/lib/libcrypto.so
|
|
INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INSTALL_DIR}/include)
|
|
set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libcrypto.so)
|
|
set(OPENSSL_SSL_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libssl.so)
|
|
endif()
|
|
|
|
# Adiciona dependências para garantir que as bibliotecas sejam compiladas antes
|
|
# do uso
|
|
add_dependencies(OpenSSL::SSL openssl)
|
|
add_dependencies(OpenSSL::Crypto openssl)
|
|
|
|
# Configura variáveis para que outros targets possam usar as bibliotecas do
|
|
# OpenSSL
|
|
set(OPENSSL_ROOT_DIR ${OPENSSL_INSTALL_DIR})
|
|
set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include)
|
|
set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
|
|
|
|
# Strip out the "OpenSSL_" part and replace underscores with periods
|
|
string(REGEX REPLACE "^OpenSSL_" "" OPENSSL_FETCHED_VERSION "${OPENSSL_DESIRED_BRANCH}")
|
|
string(REPLACE "_" "." OPENSSL_FETCHED_VERSION "${OPENSSL_FETCHED_VERSION}")
|
|
string(REGEX REPLACE "[^0-9.]$" "" OPENSSL_FETCHED_VERSION "${OPENSSL_FETCHED_VERSION}")
|
|
|
|
set(OPENSSL_VERSION "${OPENSSL_FETCHED_VERSION}")
|
|
|
|
file(MAKE_DIRECTORY ${OPENSSL_INSTALL_DIR}/lib/ ${OPENSSL_INSTALL_DIR}/include/)
|