summaryrefslogtreecommitdiff
path: root/indra/cmake/OpenSSL.cmake
blob: 801850b7abff8db68b1ea9f11cad74ed4ec55fd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# -*- cmake -*-
include(Prebuilt)
include(Linking)

include_guard()
add_library( ll::openssl INTERFACE IMPORTED )

if (NOT USESYSTEMLIBS)
use_system_binary(openssl)
endif (NOT USESYSTEMLIBS)
if (DARWIN OR LINUX OR NOT USESYSTEMLIBS)
use_prebuilt_binary(openssl)
  if (DARWIN)
    execute_process(
      COMMAND lipo -archs libcrypto.a
      WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}/lib/release
      OUTPUT_VARIABLE crypto_archs
      OUTPUT_STRIP_TRAILING_WHITESPACE
      )
    if (NOT ${crypto_archs} STREQUAL ${CMAKE_OSX_ARCHITECTURES})
      execute_process(
        COMMAND lipo
          libcrypto.a
          -thin ${CMAKE_OSX_ARCHITECTURES}
          -output libcrypto.a
        WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}/lib/release
        )
    endif (NOT ${crypto_archs} STREQUAL ${CMAKE_OSX_ARCHITECTURES})
    execute_process(
      COMMAND lipo -archs libssl.a
      WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}/lib/release
      OUTPUT_VARIABLE ssl_archs
      OUTPUT_STRIP_TRAILING_WHITESPACE
      )
    if (NOT ${ssl_archs} STREQUAL ${CMAKE_OSX_ARCHITECTURES})
      execute_process(
        COMMAND lipo
          libssl.a
          -thin ${CMAKE_OSX_ARCHITECTURES}
          -output libssl.a
        WORKING_DIRECTORY ${LIBS_PREBUILT_DIR}/lib/release
        )
    endif (NOT ${ssl_archs} STREQUAL ${CMAKE_OSX_ARCHITECTURES})
  endif (DARWIN)
elseif (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/openssl_installed OR NOT ${openssl_installed} EQUAL 0)
  if (NOT EXISTS ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w.tar.gz)
    file(DOWNLOAD
      https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_1_1_1w.tar.gz
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w.tar.gz
      )
  endif (NOT EXISTS ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w.tar.gz)
  file(ARCHIVE_EXTRACT
    INPUT ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w.tar.gz
    DESTINATION ${CMAKE_BINARY_DIR}
    )
  execute_process(
    COMMAND ./config no-shared
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w
    )
  execute_process(
    COMMAND make -j${MAKE_JOBS}
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w
    RESULT_VARIABLE openssl_installed
    )
  file(
    COPY
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/aes.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/asn1.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/asn1_mac.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/asn1err.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/asn1t.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/async.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/asyncerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/bio.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/bioerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/blowfish.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/bn.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/bnerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/buffer.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/buffererr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/camellia.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/cast.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/cmac.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/cms.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/cmserr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/comp.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/comperr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/conf.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/conf_api.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/conferr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/crypto.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/cryptoerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ct.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/cterr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/des.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/dh.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/dherr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/dsa.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/dsaerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/dtls1.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/e_os2.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ebcdic.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ec.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ecdh.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ecdsa.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ecerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/engine.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/engineerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/err.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/evp.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/evperr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/hmac.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/idea.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/kdf.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/kdferr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/lhash.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/md2.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/md4.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/md5.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/mdc2.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/modes.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/obj_mac.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/objects.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/objectserr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ocsp.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ocsperr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/opensslconf.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/opensslv.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ossl_typ.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/pem.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/pem2.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/pemerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/pkcs12.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/pkcs12err.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/pkcs7.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/pkcs7err.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/rand.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/rand_drbg.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/randerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/rc2.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/rc4.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/rc5.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ripemd.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/rsa.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/rsaerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/safestack.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/seed.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/sha.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/srp.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/srtp.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ssl.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ssl2.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ssl3.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/sslerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/stack.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/store.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/storeerr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/symhacks.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/tls1.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ts.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/tserr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/txt_db.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/ui.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/uierr.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/whrlpool.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/x509.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/x509_vfy.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/x509err.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/x509v3.h
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/include/openssl/x509v3err.h
    DESTINATION ${LIBS_PREBUILT_DIR}/include/openssl
    )
  file(
    COPY
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/libcrypto.a
      ${CMAKE_BINARY_DIR}/OpenSSL_1_1_1w/libssl.a
    DESTINATION ${LIBS_PREBUILT_DIR}/lib/release
    )
  file(WRITE ${PREBUILD_TRACKING_DIR}/openssl_installed "${openssl_installed}")
endif (DARWIN OR LINUX OR NOT USESYSTEMLIBS)
if (WINDOWS)
  target_link_libraries(ll::openssl INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE}/libssl.lib ${ARCH_PREBUILT_DIRS_RELEASE}/libcrypto.lib Crypt32.lib)
elseif (LINUX)
  target_link_libraries(ll::openssl INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE}/libssl.a ${ARCH_PREBUILT_DIRS_RELEASE}/libcrypto.a dl)
else()
  target_link_libraries(ll::openssl INTERFACE ssl crypto)
endif (WINDOWS)
target_include_directories( ll::openssl SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include)