Skip to content

Commit 24b160e

Browse files
build: add OpenSSL find_package dispatcher
Refactor openssl.cmake to use the find-first dispatcher pattern: - RV_FIND_DEPENDENCY with ALLOW_MODULE and PKG_CONFIG_NAME for CONFIG → MODULE (FindOpenSSL) → pkg-config resolution - Extract ExternalProject_Add build logic into build/openssl.cmake - Preserve RHEL8/CY2023 system OpenSSL 1.1.1 path - Use TARGET_LIBS for found-package staging - Linux OpenSSL/ subdirectory isolation for RHEL ABI compatibility - Shared naming logic for both found and built paths
1 parent 9aee113 commit 24b160e

File tree

2 files changed

+225
-216
lines changed

2 files changed

+225
-216
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
#
2+
# Copyright (C) 2022 Autodesk, Inc. All Rights Reserved.
3+
#
4+
# SPDX-License-Identifier: Apache-2.0
5+
#
6+
7+
SET(RV_DEPS_WIN_PERL_ROOT
8+
""
9+
CACHE STRING "Path to Windows perl root"
10+
)
11+
12+
STRING(REPLACE "." "_" _version_underscored ${_version})
13+
14+
IF(RV_TARGET_WINDOWS
15+
AND (NOT RV_DEPS_WIN_PERL_ROOT
16+
OR RV_DEPS_WIN_PERL_ROOT STREQUAL "")
17+
)
18+
MESSAGE(
19+
FATAL_ERROR
20+
"Unable to build without a RV_DEPS_WIN_PERL_ROOT. OpenSSL requires a Windows native perl interpreter to build (it recommends https://strawberryperl.com/). Example -DRV_DEPS_WIN_PERL_ROOT=c:/Strawberry/perl/bin"
21+
)
22+
ENDIF()
23+
24+
SET(_make_command_script
25+
"${PROJECT_SOURCE_DIR}/src/build/make_openssl.py"
26+
)
27+
SET(_make_command
28+
python3 "${_make_command_script}"
29+
)
30+
31+
LIST(APPEND _make_command "--source-dir")
32+
LIST(APPEND _make_command ${_source_dir})
33+
LIST(APPEND _make_command "--output-dir")
34+
LIST(APPEND _make_command ${_install_dir})
35+
36+
LIST(APPEND _make_command "--vfx_platform")
37+
LIST(APPEND _make_command ${RV_VFX_CY_YEAR})
38+
39+
IF(RV_TARGET_WINDOWS)
40+
LIST(APPEND _make_command "--perlroot")
41+
LIST(APPEND _make_command ${RV_DEPS_WIN_PERL_ROOT})
42+
ENDIF()
43+
44+
IF(APPLE)
45+
IF(RV_TARGET_APPLE_X86_64)
46+
SET(__openssl_arch__
47+
x86_64
48+
)
49+
ELSEIF(RV_TARGET_APPLE_ARM64)
50+
SET(__openssl_arch__
51+
arm64
52+
)
53+
ENDIF()
54+
LIST(APPEND _make_command --arch=-${__openssl_arch__})
55+
ENDIF()
56+
57+
EXTERNALPROJECT_ADD(
58+
${_target}
59+
DOWNLOAD_NAME ${_target}_${_version}.zip
60+
DOWNLOAD_DIR ${RV_DEPS_DOWNLOAD_DIR}
61+
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
62+
SOURCE_DIR ${_source_dir}
63+
INSTALL_DIR ${_install_dir}
64+
URL ${_download_url}
65+
URL_MD5 ${_download_hash}
66+
CONFIGURE_COMMAND ${_make_command} --configure
67+
BUILD_COMMAND ${_make_command} --build
68+
INSTALL_COMMAND ${_make_command} --install
69+
BUILD_IN_SOURCE TRUE
70+
BUILD_ALWAYS FALSE
71+
BUILD_BYPRODUCTS ${_crypto_lib} ${_ssl_lib}
72+
USES_TERMINAL_BUILD TRUE
73+
)
74+
75+
FILE(MAKE_DIRECTORY ${_include_dir})
76+
77+
IF(RV_TARGET_WINDOWS)
78+
ADD_CUSTOM_COMMAND(
79+
TARGET ${_target}
80+
POST_BUILD
81+
COMMENT "Renaming the openssl import libs to the name FFmpeg is expecting"
82+
COMMAND ${CMAKE_COMMAND} -E copy ${_install_dir}/lib/libssl.lib ${_lib_dir}/ssl.lib
83+
COMMAND ${CMAKE_COMMAND} -E copy ${_install_dir}/lib/libcrypto.lib ${_lib_dir}/crypto.lib
84+
)
85+
ENDIF()
86+
87+
ADD_LIBRARY(OpenSSL::Crypto SHARED IMPORTED GLOBAL)
88+
ADD_DEPENDENCIES(OpenSSL::Crypto ${_target})
89+
SET_PROPERTY(
90+
TARGET OpenSSL::Crypto
91+
PROPERTY IMPORTED_LOCATION ${_crypto_lib}
92+
)
93+
SET_PROPERTY(
94+
TARGET OpenSSL::Crypto
95+
PROPERTY IMPORTED_SONAME ${_crypto_lib_name}
96+
)
97+
IF(RV_TARGET_WINDOWS)
98+
SET_PROPERTY(
99+
TARGET OpenSSL::Crypto
100+
PROPERTY IMPORTED_IMPLIB ${_implibpath_crypto}
101+
)
102+
ENDIF()
103+
TARGET_INCLUDE_DIRECTORIES(
104+
OpenSSL::Crypto
105+
INTERFACE ${_include_dir}
106+
)
107+
LIST(APPEND RV_DEPS_LIST OpenSSL::Crypto)
108+
109+
ADD_LIBRARY(OpenSSL::SSL SHARED IMPORTED GLOBAL)
110+
ADD_DEPENDENCIES(OpenSSL::SSL ${_target})
111+
SET_PROPERTY(
112+
TARGET OpenSSL::SSL
113+
PROPERTY IMPORTED_LOCATION ${_ssl_lib}
114+
)
115+
SET_PROPERTY(
116+
TARGET OpenSSL::SSL
117+
PROPERTY IMPORTED_SONAME ${_ssl_lib_name}
118+
)
119+
IF(RV_TARGET_WINDOWS)
120+
SET_PROPERTY(
121+
TARGET OpenSSL::SSL
122+
PROPERTY IMPORTED_IMPLIB ${_implibpath_ssl}
123+
)
124+
ENDIF()
125+
TARGET_INCLUDE_DIRECTORIES(
126+
OpenSSL::SSL
127+
INTERFACE ${_include_dir}
128+
)
129+
LIST(APPEND RV_DEPS_LIST OpenSSL::SSL)

0 commit comments

Comments
 (0)