Skip to content

Commit c85259a

Browse files
segoonapolukhin
authored andcommitted
feat cmake: add OpenSSL to CPM
Tests: протестировано CI Pull Request resolved: #1012 commit_hash:9686c21e20ad02d00034f1a1acb7257e55b1d4cf
1 parent cac0fc7 commit c85259a

File tree

7 files changed

+95
-14
lines changed

7 files changed

+95
-14
lines changed

.mapping.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@
517517
"cmake/SetupLTO.cmake":"taxi/uservices/userver/cmake/SetupLTO.cmake",
518518
"cmake/SetupLinker.cmake":"taxi/uservices/userver/cmake/SetupLinker.cmake",
519519
"cmake/SetupMongoDeps.cmake":"taxi/uservices/userver/cmake/SetupMongoDeps.cmake",
520+
"cmake/SetupOpenssl.cmake":"taxi/uservices/userver/cmake/SetupOpenssl.cmake",
520521
"cmake/SetupOpentelemetryProto.cmake":"taxi/uservices/userver/cmake/SetupOpentelemetryProto.cmake",
521522
"cmake/SetupPGO.cmake":"taxi/uservices/userver/cmake/SetupPGO.cmake",
522523
"cmake/SetupPostgresqlDeps.cmake":"taxi/uservices/userver/cmake/SetupPostgresqlDeps.cmake",

CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,9 @@ include(UserverGenerateDynamicConfigsDocs)
194194
include(CheckCompileFlags)
195195
include(CMakePackageConfigHelpers)
196196

197+
_userver_macos_set_default_dir(OPENSSL_ROOT_DIR "brew;--prefix;openssl")
198+
include(SetupOpenssl)
199+
197200
set(USERVER_THIRD_PARTY_DIRS
198201
${USERVER_ROOT_DIR}/third_party
199202
CACHE INTERNAL ""

cmake/SetupCURL.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ cpmaddpackage(
6161
"BUILD_CURL_EXE OFF"
6262
"BUILD_SHARED_LIBS OFF"
6363
"CURL_DISABLE_TESTS ON"
64+
"CURL_DISABLE_LDAP ON"
65+
"HAVE_DLOPEN TRUE"
6466
${CURL_LTO_OPTION}
6567
)
6668

cmake/SetupOpenssl.cmake

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
include_guard(GLOBAL)
2+
3+
option(USERVER_DOWNLOAD_PACKAGE_OPENSSL "Download and setup OpenSSL if no library of matching version was found"
4+
${USERVER_DOWNLOAD_PACKAGES}
5+
)
6+
option(USERVER_FORCE_DOWNLOAD_OPENSSL "Download OpenSSL even if there is an installed system package"
7+
${USERVER_FORCE_DOWNLOAD_PACKAGES}
8+
)
9+
10+
if(NOT USERVER_FORCE_DOWNLOAD_OPENSSL AND NOT OpenSSL_CPM)
11+
if(USERVER_DOWNLOAD_PACKAGE_OPENSSL)
12+
find_package(OpenSSL)
13+
else()
14+
find_package(OpenSSL REQUIRED)
15+
endif()
16+
17+
if(OpenSSL_FOUND)
18+
return()
19+
endif()
20+
endif()
21+
set(OpenSSL_CPM TRUE CACHE BOOL "")
22+
23+
include(DownloadUsingCPM)
24+
25+
set(OPENSSL_INSTALL_DIR ${CMAKE_BINARY_DIR}/openssl)
26+
execute_process(COMMAND mkdir -p ${OPENSSL_INSTALL_DIR}/usr/local/include)
27+
28+
# Flags are copied from Ubuntu's debian/rules
29+
set(CONFIGURE_FLAGS no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng)
30+
set(OPENSSL_VERSION 3.5.2)
31+
32+
cpmaddpackage(
33+
NAME OpenSSL
34+
URL https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz
35+
URL_HASH SHA512=db2c7a88bea432f96d867a98af15f850f371d4136c657338de93cb88a39a3578c025b5df7310e195a02fc715ad5a2422a319a44f0247c6a7e2ba8b36aad77651
36+
)
37+
38+
# We use custom target to be able to set build dependency
39+
# for *external* libcurl from CPM
40+
add_custom_target(
41+
OpenSSL
42+
test -e ${OPENSSL_INSTALL_DIR}/.installed || CFLAGS=${CMAKE_C_FLAGS} ./config --libdir=/usr/local/lib ${CONFIGURE_FLAGS}
43+
COMMAND
44+
test -e ${OPENSSL_INSTALL_DIR}/.installed || make -j8
45+
COMMAND
46+
test -e ${OPENSSL_INSTALL_DIR}/.installed || make DESTDIR=${OPENSSL_INSTALL_DIR} install_sw
47+
COMMAND
48+
touch ${OPENSSL_INSTALL_DIR}/.installed
49+
WORKING_DIRECTORY ${OpenSSL_SOURCE_DIR}
50+
COMMENT "Compiling OpenSSL library"
51+
)
52+
53+
54+
add_library(Crypto STATIC IMPORTED GLOBAL)
55+
add_dependencies(Crypto OpenSSL)
56+
set_property(TARGET Crypto PROPERTY IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/usr/local/lib/libcrypto.a)
57+
target_include_directories(Crypto INTERFACE ${OPENSSL_INSTALL_DIR}/usr/local/include)
58+
59+
60+
add_library(SSL STATIC IMPORTED GLOBAL)
61+
add_dependencies(SSL OpenSSL)
62+
set_property(TARGET SSL PROPERTY IMPORTED_LOCATION ${OPENSSL_INSTALL_DIR}/usr/local/lib/libssl.a)
63+
target_include_directories(SSL INTERFACE ${OPENSSL_INSTALL_DIR}/usr/local/include)
64+
65+
add_library(OpenSSL::Crypto ALIAS Crypto)
66+
add_library(OpenSSL::SSL ALIAS SSL)
67+
68+
# Light emulation of find_package(OpenSSL) for libcurl
69+
set(OpenSSL_FOUND TRUE CACHE BOOL "" FORCE)
70+
set(OPENSSL_FOUND TRUE CACHE BOOL "" FORCE)
71+
set(OPENSSL_CRYPTO_LIBRARY OpenSSL::Crypto CACHE STRING "" FORCE)
72+
set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/usr/local/include CACHE FILEPATH "" FORCE)

core/CMakeLists.txt

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ find_package_required(ZLIB "zlib1g-dev")
4242

4343
find_package(Iconv REQUIRED)
4444

45-
_userver_macos_set_default_dir(OPENSSL_ROOT_DIR "brew;--prefix;openssl")
46-
find_package_required(OpenSSL "libssl-dev")
4745

4846
find_package(libev REQUIRED)
4947
find_package(libnghttp2 REQUIRED)
@@ -98,14 +96,18 @@ endif()
9896

9997
target_link_libraries(
10098
${PROJECT_NAME}
101-
PUBLIC userver-universal Boost::locale CURL::libcurl
102-
PRIVATE Boost::filesystem
103-
Boost::program_options
104-
Boost::iostreams
105-
Iconv::Iconv
106-
OpenSSL::Crypto
107-
OpenSSL::SSL
108-
ZLIB::ZLIB
99+
PUBLIC
100+
userver-universal
101+
Boost::locale
102+
CURL::libcurl
103+
PRIVATE
104+
Boost::filesystem
105+
Boost::program_options
106+
Boost::iostreams
107+
Iconv::Iconv
108+
OpenSSL::SSL
109+
OpenSSL::Crypto
110+
ZLIB::ZLIB
109111
)
110112

111113
add_subdirectory(${USERVER_THIRD_PARTY_DIRS}/llhttp llhttp)

scripts/docs/en/deps/ubuntu-24.04/universal

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ libpugixml-dev
2121
libsnappy-dev
2222
libre2-dev
2323
libsnappy-dev
24-
libssh2-1-dev
2524
libxxhash-dev
2625
libyaml-cpp-dev
2726
libyaml-cpp0.8

universal/CMakeLists.txt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
4545
endif()
4646
endif()
4747

48-
find_package_required(OpenSSL "libssl-dev")
49-
5048
find_package(yaml-cpp REQUIRED)
5149
find_package(zstd REQUIRED)
5250

@@ -240,7 +238,11 @@ endif()
240238
target_link_libraries(
241239
${PROJECT_NAME}
242240
PUBLIC Threads::Threads userver-internal-sanitize-options userver-internal-compile-options
243-
PRIVATE Boost::filesystem Boost::program_options OpenSSL::Crypto OpenSSL::SSL
241+
PRIVATE
242+
Boost::filesystem
243+
Boost::program_options
244+
OpenSSL::SSL
245+
OpenSSL::Crypto
244246
)
245247

246248
if(USERVER_CONAN)

0 commit comments

Comments
 (0)