Improving OpenSSL cmake file
This commit is contained in:
@@ -9,72 +9,96 @@ endif()
|
||||
|
||||
# Diretórios para baixar e instalar o OpenSSL
|
||||
set(OPENSSL_SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/openssl-src)
|
||||
set(OPENSSL_DESIRED_BRANCH "OpenSSL_1_1_1w")
|
||||
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
set(OPENSSL_INSTALL_DIR ${CMAKE_SYSROOT})
|
||||
set(SYSROOT_FLAG --sysroot=${CMAKE_SYSROOT})
|
||||
else()
|
||||
set(OPENSSL_INSTALL_DIR ${FETCHCONTENT_BASE_DIR}/openssl)
|
||||
set(OPENSSL_INSTALL_DIR ${FETCHCONTENT_BASE_DIR}/openssl-build)
|
||||
set(SYSROOT_FLAG "")
|
||||
endif()
|
||||
|
||||
# Verifica se o OpenSSL já foi clonado e configura o repositório
|
||||
if(EXISTS ${OPENSSL_SOURCE_DIR}/.git)
|
||||
# Verifica a branch actual
|
||||
execute_process(COMMAND git -C ${OPENSSL_SOURCE_DIR} rev-parse --abbrev-ref HEAD OUTPUT_VARIABLE CURRENT_BRANCH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_QUIET ERROR_QUIET)
|
||||
|
||||
# Define a branch desejada
|
||||
set(DESIRED_BRANCH "OpenSSL_1_1_1w")
|
||||
execute_process(
|
||||
COMMAND git -C ${OPENSSL_SOURCE_DIR} rev-parse --abbrev-ref HEAD
|
||||
OUTPUT_VARIABLE CURRENT_BRANCH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_QUIET ERROR_QUIET)
|
||||
|
||||
if(NOT "${CURRENT_BRANCH}" STREQUAL "${DESIRED_BRANCH}")
|
||||
# Faz o checkout da branch desejada se necessário
|
||||
execute_process(COMMAND git -C ${OPENSSL_SOURCE_DIR} checkout ${DESIRED_BRANCH} OUTPUT_QUIET
|
||||
RESULT_VARIABLE CHECKOUT_STATUS)
|
||||
execute_process(
|
||||
COMMAND git -C ${OPENSSL_SOURCE_DIR} checkout ${DESIRED_BRANCH}
|
||||
OUTPUT_QUIET
|
||||
RESULT_VARIABLE CHECKOUT_STATUS)
|
||||
if(NOT CHECKOUT_STATUS EQUAL 0)
|
||||
message(FATAL_ERROR "Failed to checkout branch ${DESIRED_BRANCH} in OpenSSL")
|
||||
message(
|
||||
FATAL_ERROR "Failed to checkout branch ${DESIRED_BRANCH} in OpenSSL")
|
||||
endif()
|
||||
|
||||
# Atualiza o repositório para garantir que está na última versão
|
||||
execute_process(COMMAND git -C ${OPENSSL_SOURCE_DIR} pull origin ${DESIRED_BRANCH} OUTPUT_QUIET RESULT_VARIABLE PULL_STATUS)
|
||||
execute_process(
|
||||
COMMAND git -C ${OPENSSL_SOURCE_DIR} pull origin ${DESIRED_BRANCH}
|
||||
OUTPUT_QUIET
|
||||
RESULT_VARIABLE PULL_STATUS)
|
||||
if(NOT PULL_STATUS EQUAL 0)
|
||||
message(FATAL_ERROR "Failed to pull latest changes for branch ${DESIRED_BRANCH} in OpenSSL")
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"Failed to pull latest changes for branch ${DESIRED_BRANCH} in OpenSSL"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
# Clona o repositório do OpenSSL se ele não existir
|
||||
execute_process(COMMAND git clone -b OpenSSL_1_1_1w --depth 1 https://github.com/openssl/openssl.git ${OPENSSL_SOURCE_DIR}
|
||||
OUTPUT_QUIET RESULT_VARIABLE CLONE_STATUS)
|
||||
execute_process(
|
||||
COMMAND git clone -b ${OPENSSL_DESIRED_BRANCH} --depth 1
|
||||
https://github.com/openssl/openssl.git ${OPENSSL_SOURCE_DIR}
|
||||
OUTPUT_QUIET
|
||||
RESULT_VARIABLE CLONE_STATUS)
|
||||
if(NOT CLONE_STATUS EQUAL 0)
|
||||
message(FATAL_ERROR "Failed to clone OpenSSL")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Configura flags adicionais de compilação se necessário
|
||||
if(NOT DEFINED OPENSSL_EXTRA_CONFIGURE_FLAGS)
|
||||
set(OPENSSL_EXTRA_CONFIGURE_FLAGS "" CACHE STRING "" FORCE)
|
||||
|
||||
# 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()
|
||||
|
||||
# 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.")
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
||||
set(ENV{CFLAGS} -g3)
|
||||
endif()
|
||||
|
||||
set(ENV{CC} "${CMAKE_C_COMPILER}")
|
||||
set(ENV{CXX} "${CMAKE_CXX_COMPILER}")
|
||||
set(ENV{LD} "${CMAKE_LINKER}")
|
||||
|
||||
# Executa o script de configuração do OpenSSL durante a fase de configuração do CMake
|
||||
# Executa o script de configuração do OpenSSL durante a fase de configuração do
|
||||
# CMake
|
||||
execute_process(
|
||||
COMMAND ./Configure ${OPENSSL_TARGET_CONFIG} no-async no-dso no-hw no-engine no-unit-test ${OPENSSL_EXTRA_CONFIGURE_FLAGS}
|
||||
${SYSROOT_FLAG} --prefix=${OPENSSL_INSTALL_DIR} --openssldir=${OPENSSL_SOURCE_DIR}
|
||||
WORKING_DIRECTORY ${OPENSSL_SOURCE_DIR} RESULT_VARIABLE CONFIGURE_STATUS)
|
||||
COMMAND
|
||||
./Configure ${OPENSSL_CONFIGURE_FLAGS} --prefix=${OPENSSL_INSTALL_DIR} --openssldir=${OPENSSL_SOURCE_DIR}
|
||||
WORKING_DIRECTORY ${OPENSSL_SOURCE_DIR}
|
||||
RESULT_VARIABLE CONFIGURE_STATUS)
|
||||
|
||||
if(NOT CONFIGURE_STATUS EQUAL 0)
|
||||
message(FATAL_ERROR "Failed to configure OpenSSL")
|
||||
@@ -82,7 +106,8 @@ endif()
|
||||
|
||||
# Adiciona commandos personalizados de compilação para o OpenSSL
|
||||
add_custom_command(
|
||||
OUTPUT ${OPENSSL_INSTALL_DIR}/lib/libssl.a # Ou qualquer outro artefato importante (dinâmico ou estático)
|
||||
OUTPUT ${OPENSSL_INSTALL_DIR}/lib/libssl.a # Ou qualquer outro artefato
|
||||
# importante (dinâmico ou estático)
|
||||
COMMAND make clean depend
|
||||
COMMAND make -j4 V=sc
|
||||
COMMAND make install_sw
|
||||
@@ -92,36 +117,56 @@ add_custom_command(
|
||||
# Define um alvo personalizado que depende da conclusão do build
|
||||
add_custom_target(openssl ALL DEPENDS ${OPENSSL_INSTALL_DIR}/lib/libssl.a)
|
||||
|
||||
# Configura a vinculação de bibliotecas e a importação para OpenSSL (estático ou dinâmico)
|
||||
# Configura a vinculação de bibliotecas e a importação para OpenSSL (estático ou
|
||||
# dinâmico)
|
||||
if(OPENSSL_STATIC)
|
||||
# Se for estático
|
||||
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)
|
||||
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_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)
|
||||
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_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
|
||||
# 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
|
||||
# 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/)
|
||||
|
||||
Reference in New Issue
Block a user