Automatically link to OpenSSL when calling add_android_openssl_libraries() (#67)

Automatically link to OpenSSL::SSL OpenSSL::Crypto under add_android_openssl_libraries().

Also, start using add_library() to add OpenSSL libraries to the project. If the OpenSSL targets are not defined, add them with add_library() and set OPENSSL_LIB_DIR and OPENSSL_INCLUDE_DIR and store the paths to the shared libraries in the cache so that add_android_openssl_libraries() can re-use them later if OpenSSL targets are already defined.
This commit is contained in:
Alessandro Ambrosano
2025-07-02 17:23:40 +03:00
committed by GitHub
parent 6b9ba2b962
commit 0025bbe48f
+49 -24
View File
@@ -1,26 +1,51 @@
if(NOT TARGET OpenSSL::Crypto OR NOT TARGET OpenSSL::SSL)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(ssl_root_path ${CMAKE_CURRENT_LIST_DIR}/no-asm)
else()
set(ssl_root_path ${CMAKE_CURRENT_LIST_DIR})
endif()
if(Qt6_VERSION VERSION_GREATER_EQUAL 6.5.0)
set(ssl_version_dir ssl_3)
set(libcrypto libcrypto_3.so)
set(libssl libssl_3.so)
else()
set(ssl_version_dir ssl_1.1)
set(libcrypto libcrypto_1_1.so)
set(libssl libssl_1_1.so)
endif()
set(OPENSSL_LIB_DIR ${ssl_root_path}/${ssl_version_dir}/${CMAKE_ANDROID_ARCH_ABI})
set(OPENSSL_INCLUDE_DIR ${ssl_root_path}/${ssl_version_dir}/include)
add_library(OpenSSL::Crypto SHARED IMPORTED)
set_target_properties(OpenSSL::Crypto PROPERTIES
IMPORTED_LOCATION "${OPENSSL_LIB_DIR}/${libcrypto}"
INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}"
)
add_library(OpenSSL::SSL SHARED IMPORTED)
set_target_properties(OpenSSL::SSL PROPERTIES
IMPORTED_LOCATION "${OPENSSL_LIB_DIR}/${libssl}"
INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}"
)
set(_OPENSSL_EXTRA_LIBS_PATHS
"${OPENSSL_LIB_DIR}/${libcrypto}"
"${OPENSSL_LIB_DIR}/${libssl}"
CACHE INTERNAL "Android OpenSSL libraries for QT_ANDROID_EXTRA_LIBS"
)
endif()
function(add_android_openssl_libraries)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(ssl_root_path ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/no-asm)
else()
set(ssl_root_path ${CMAKE_CURRENT_FUNCTION_LIST_DIR})
endif()
if(Qt6_VERSION VERSION_GREATER_EQUAL 6.5.0)
if(NOT OPENSSL_ROOT_DIR)
set(OPENSSL_ROOT_DIR ${SSL_ROOT_PATH}/ssl_3/${CMAKE_ANDROID_ARCH_ABI})
endif()
list(APPEND android_extra_libs
${ssl_root_path}/ssl_3/${CMAKE_ANDROID_ARCH_ABI}/libcrypto_3.so
${ssl_root_path}/ssl_3/${CMAKE_ANDROID_ARCH_ABI}/libssl_3.so)
else()
if(NOT OPENSSL_ROOT_DIR)
set(OPENSSL_ROOT_DIR ${SSL_ROOT_PATH}/ssl_1.1/${CMAKE_ANDROID_ARCH_ABI})
endif()
list(APPEND android_extra_libs
${ssl_root_path}/ssl_1.1/${CMAKE_ANDROID_ARCH_ABI}/libcrypto_1_1.so
${ssl_root_path}/ssl_1.1/${CMAKE_ANDROID_ARCH_ABI}/libssl_1_1.so)
endif()
set_target_properties(${ARGN} PROPERTIES QT_ANDROID_EXTRA_LIBS
"${android_extra_libs}")
foreach(TARGET_NAME ${ARGN})
if(TARGET ${TARGET_NAME})
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY
QT_ANDROID_EXTRA_LIBS ${_OPENSSL_EXTRA_LIBS_PATHS}
)
target_link_libraries(${TARGET_NAME} PUBLIC OpenSSL::SSL OpenSSL::Crypto)
else()
message(WARNING "add_android_openssl_libraries(): target '${TARGET_NAME}' does not exist.")
endif()
endforeach()
endfunction()