blob: 1095916812c625bbf6bfe49c76f8e44af8b4aabe [file] [log] [blame]
Kenny Rootb8494592015-09-25 02:29:14 +00001include_directories(../include)
Adam Langleyd9e397b2015-01-22 14:27:53 -08002
Robert Sloan8ff03552017-06-14 12:40:58 -07003if(NOT OPENSSL_NO_ASM)
4 if(UNIX)
5 if (${ARCH} STREQUAL "aarch64")
6 # The "armx" Perl scripts look for "64" in the style argument
7 # in order to decide whether to generate 32- or 64-bit asm.
8 if (APPLE)
9 set(PERLASM_STYLE ios64)
10 else()
11 set(PERLASM_STYLE linux64)
12 endif()
13 elseif (${ARCH} STREQUAL "arm")
14 if (APPLE)
15 set(PERLASM_STYLE ios32)
16 else()
17 set(PERLASM_STYLE linux32)
18 endif()
19 elseif (${ARCH} STREQUAL "ppc64le")
20 set(PERLASM_STYLE linux64le)
Robert Sloan572a4e22017-04-17 10:52:19 -070021 else()
Robert Sloan8ff03552017-06-14 12:40:58 -070022 if (${ARCH} STREQUAL "x86")
23 set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2")
24 endif()
25 if (APPLE)
26 set(PERLASM_STYLE macosx)
27 else()
28 set(PERLASM_STYLE elf)
29 endif()
Robert Sloan572a4e22017-04-17 10:52:19 -070030 endif()
Robert Sloan8ff03552017-06-14 12:40:58 -070031 set(ASM_EXT S)
32 enable_language(ASM)
33 set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,--noexecstack")
Robert Sloan572a4e22017-04-17 10:52:19 -070034
Robert Sloan8ff03552017-06-14 12:40:58 -070035 # Clang's integerated assembler does not support debug symbols.
36 if(NOT CMAKE_ASM_COMPILER_ID MATCHES "Clang")
37 set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,-g")
38 endif()
Adam Langleyd9e397b2015-01-22 14:27:53 -080039
Robert Sloan8ff03552017-06-14 12:40:58 -070040 # CMake does not add -isysroot and -arch flags to assembly.
41 if (APPLE)
42 if (CMAKE_OSX_SYSROOT)
Robert Sloanae1abf92017-10-05 12:50:08 -070043 set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -isysroot \"${CMAKE_OSX_SYSROOT}\"")
Robert Sloan8ff03552017-06-14 12:40:58 -070044 endif()
45 foreach(arch ${CMAKE_OSX_ARCHITECTURES})
46 set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -arch ${arch}")
47 endforeach()
48 endif()
49 else()
Robert Sloan8f860b12017-08-28 07:37:06 -070050 if (${ARCH} STREQUAL "x86_64")
Robert Sloan8ff03552017-06-14 12:40:58 -070051 set(PERLASM_STYLE nasm)
52 else()
53 set(PERLASM_STYLE win32n)
54 set(PERLASM_FLAGS "-DOPENSSL_IA32_SSE2")
55 endif()
Robert Sloan978112c2018-01-22 12:53:01 -080056 set(CMAKE_ASM_NASM_FLAGS "-gcv8")
Robert Sloan8ff03552017-06-14 12:40:58 -070057
58 # On Windows, we use the NASM output, specifically built with Yasm.
59 set(ASM_EXT asm)
60 enable_language(ASM_NASM)
61 endif()
Adam Langleyd9e397b2015-01-22 14:27:53 -080062endif()
63
64function(perlasm dest src)
65 add_custom_command(
66 OUTPUT ${dest}
David Benjaminc895d6b2016-08-11 13:26:41 -040067 COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${PERLASM_STYLE} ${PERLASM_FLAGS} ${ARGN} ${dest}
Adam Langleyd9e397b2015-01-22 14:27:53 -080068 DEPENDS
69 ${src}
Adam Langleye9ada862015-05-11 17:20:37 -070070 ${PROJECT_SOURCE_DIR}/crypto/perlasm/arm-xlate.pl
Steven Valdezbb1ceac2016-10-07 10:34:51 -040071 ${PROJECT_SOURCE_DIR}/crypto/perlasm/ppc-xlate.pl
Adam Langleyd9e397b2015-01-22 14:27:53 -080072 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86_64-xlate.pl
73 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86asm.pl
74 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86gas.pl
75 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86masm.pl
76 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86nasm.pl
77 WORKING_DIRECTORY .
78 )
79endfunction()
80
Adam Langleyd9e397b2015-01-22 14:27:53 -080081# Level 0.1 - depends on nothing outside this set.
82add_subdirectory(stack)
83add_subdirectory(lhash)
84add_subdirectory(err)
85add_subdirectory(buf)
86add_subdirectory(base64)
87add_subdirectory(bytestring)
Steven Valdez909b19f2016-11-21 15:35:44 -050088add_subdirectory(pool)
Adam Langleyd9e397b2015-01-22 14:27:53 -080089
90# Level 0.2 - depends on nothing but itself
Adam Langleyd9e397b2015-01-22 14:27:53 -080091add_subdirectory(rc4)
92add_subdirectory(conf)
93add_subdirectory(chacha)
94add_subdirectory(poly1305)
Adam Langley4139edb2016-01-13 15:00:54 -080095add_subdirectory(curve25519)
Adam Langleyd9e397b2015-01-22 14:27:53 -080096
97# Level 1, depends only on 0.*
Robert Sloan572a4e22017-04-17 10:52:19 -070098add_subdirectory(digest_extra)
Robert Sloan8ff03552017-06-14 12:40:58 -070099add_subdirectory(cipher_extra)
Robert Sloan9254e682017-04-24 09:42:06 -0700100add_subdirectory(rand_extra)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800101add_subdirectory(bio)
Robert Sloan8ff03552017-06-14 12:40:58 -0700102add_subdirectory(bn_extra)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800103add_subdirectory(obj)
104add_subdirectory(asn1)
105
106# Level 2
107add_subdirectory(engine)
108add_subdirectory(dh)
109add_subdirectory(dsa)
Robert Sloan8ff03552017-06-14 12:40:58 -0700110add_subdirectory(rsa_extra)
111add_subdirectory(ec_extra)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800112add_subdirectory(ecdh)
Robert Sloan8ff03552017-06-14 12:40:58 -0700113add_subdirectory(ecdsa_extra)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800114
115# Level 3
Adam Langleye9ada862015-05-11 17:20:37 -0700116add_subdirectory(cmac)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800117add_subdirectory(evp)
118add_subdirectory(hkdf)
119add_subdirectory(pem)
120add_subdirectory(x509)
121add_subdirectory(x509v3)
122
123# Level 4
Robert Sloan9254e682017-04-24 09:42:06 -0700124add_subdirectory(pkcs7)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800125add_subdirectory(pkcs8)
126
Adam Langleye9ada862015-05-11 17:20:37 -0700127# Test support code
128add_subdirectory(test)
129
Robert Sloan572a4e22017-04-17 10:52:19 -0700130add_subdirectory(fipsmodule)
131
Adam Langleyd9e397b2015-01-22 14:27:53 -0800132add_library(
Robert Sloan572a4e22017-04-17 10:52:19 -0700133 crypto_base
134
135 OBJECT
Adam Langleyd9e397b2015-01-22 14:27:53 -0800136
Robert Sloanab8b8882018-03-26 11:39:51 -0700137 cpu-aarch64-fuchsia.c
David Benjamin4969cc92016-04-22 15:02:23 -0400138 cpu-aarch64-linux.c
139 cpu-arm.c
140 cpu-arm-linux.c
141 cpu-intel.c
Steven Valdezbb1ceac2016-10-07 10:34:51 -0400142 cpu-ppc64le.c
Adam Langleyd9e397b2015-01-22 14:27:53 -0800143 crypto.c
Adam Langleyf4e42722015-06-04 17:45:09 -0700144 ex_data.c
Adam Langleyd9e397b2015-01-22 14:27:53 -0800145 mem.c
Adam Langleyf4e42722015-06-04 17:45:09 -0700146 refcount_c11.c
147 refcount_lock.c
Adam Langleyd9e397b2015-01-22 14:27:53 -0800148 thread.c
Adam Langleye9ada862015-05-11 17:20:37 -0700149 thread_none.c
150 thread_pthread.c
151 thread_win.c
Robert Sloan572a4e22017-04-17 10:52:19 -0700152)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800153
Robert Sloan8ff03552017-06-14 12:40:58 -0700154if(FIPS_DELOCATE)
Robert Sloan572a4e22017-04-17 10:52:19 -0700155 SET_SOURCE_FILES_PROPERTIES(fipsmodule/bcm.o PROPERTIES EXTERNAL_OBJECT true)
156 SET_SOURCE_FILES_PROPERTIES(fipsmodule/bcm.o PROPERTIES GENERATED true)
157
158 set(
159 CRYPTO_FIPS_OBJECTS
160
161 fipsmodule/bcm.o
162 )
163endif()
164
165add_library(
166 crypto
167
168 $<TARGET_OBJECTS:crypto_base>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800169 $<TARGET_OBJECTS:stack>
170 $<TARGET_OBJECTS:lhash>
171 $<TARGET_OBJECTS:err>
172 $<TARGET_OBJECTS:base64>
173 $<TARGET_OBJECTS:bytestring>
Steven Valdez909b19f2016-11-21 15:35:44 -0500174 $<TARGET_OBJECTS:pool>
Robert Sloan572a4e22017-04-17 10:52:19 -0700175 $<TARGET_OBJECTS:fipsmodule>
176 $<TARGET_OBJECTS:digest_extra>
Robert Sloan8ff03552017-06-14 12:40:58 -0700177 $<TARGET_OBJECTS:cipher_extra>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800178 $<TARGET_OBJECTS:rc4>
179 $<TARGET_OBJECTS:conf>
180 $<TARGET_OBJECTS:chacha>
181 $<TARGET_OBJECTS:poly1305>
Adam Langley4139edb2016-01-13 15:00:54 -0800182 $<TARGET_OBJECTS:curve25519>
Robert Sloanb1b54b82017-11-06 13:50:02 -0800183 $<TARGET_OBJECTS:fiat>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800184 $<TARGET_OBJECTS:buf>
Robert Sloan8ff03552017-06-14 12:40:58 -0700185 $<TARGET_OBJECTS:bn_extra>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800186 $<TARGET_OBJECTS:bio>
Robert Sloan9254e682017-04-24 09:42:06 -0700187 $<TARGET_OBJECTS:rand_extra>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800188 $<TARGET_OBJECTS:obj>
189 $<TARGET_OBJECTS:asn1>
190 $<TARGET_OBJECTS:engine>
191 $<TARGET_OBJECTS:dh>
192 $<TARGET_OBJECTS:dsa>
Robert Sloan8ff03552017-06-14 12:40:58 -0700193 $<TARGET_OBJECTS:rsa_extra>
194 $<TARGET_OBJECTS:ec_extra>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800195 $<TARGET_OBJECTS:ecdh>
Robert Sloan8ff03552017-06-14 12:40:58 -0700196 $<TARGET_OBJECTS:ecdsa_extra>
Adam Langleye9ada862015-05-11 17:20:37 -0700197 $<TARGET_OBJECTS:cmac>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800198 $<TARGET_OBJECTS:evp>
199 $<TARGET_OBJECTS:hkdf>
200 $<TARGET_OBJECTS:pem>
201 $<TARGET_OBJECTS:x509>
202 $<TARGET_OBJECTS:x509v3>
Robert Sloan9254e682017-04-24 09:42:06 -0700203 $<TARGET_OBJECTS:pkcs7>
David Benjamin4969cc92016-04-22 15:02:23 -0400204 $<TARGET_OBJECTS:pkcs8_lib>
Robert Sloan572a4e22017-04-17 10:52:19 -0700205
206 ${CRYPTO_FIPS_OBJECTS}
Adam Langleyd9e397b2015-01-22 14:27:53 -0800207)
208
Robert Sloan8ff03552017-06-14 12:40:58 -0700209if(FIPS_DELOCATE)
Robert Sloan572a4e22017-04-17 10:52:19 -0700210 add_dependencies(crypto bcm_o_target)
211endif()
212
213SET_TARGET_PROPERTIES(crypto PROPERTIES LINKER_LANGUAGE C)
214
Adam Langleye9ada862015-05-11 17:20:37 -0700215if(NOT MSVC AND NOT ANDROID)
216 target_link_libraries(crypto pthread)
217endif()
218
David Benjaminf31229b2017-01-25 14:08:15 -0500219# TODO(davidben): Convert the remaining tests to GTest.
220add_executable(
221 crypto_test
222
Robert Sloan8ecb7cd2017-03-21 09:39:01 -0700223 asn1/asn1_test.cc
Robert Sloan572a4e22017-04-17 10:52:19 -0700224 base64/base64_test.cc
Robert Sloan921ef2c2017-10-17 09:02:20 -0700225 buf/buf_test.cc
Robert Sloan6d0d00e2017-03-27 07:13:07 -0700226 bio/bio_test.cc
Robert Sloan572a4e22017-04-17 10:52:19 -0700227 bytestring/bytestring_test.cc
Robert Sloana94fe052017-02-21 08:49:28 -0800228 chacha/chacha_test.cc
Robert Sloan8ff03552017-06-14 12:40:58 -0700229 cipher_extra/aead_test.cc
230 cipher_extra/cipher_test.cc
Robert Sloan2424d842017-05-01 07:46:28 -0700231 cmac/cmac_test.cc
Robert Sloan9254e682017-04-24 09:42:06 -0700232 compiler_test.cc
Robert Sloan6d0d00e2017-03-27 07:13:07 -0700233 constant_time_test.cc
Robert Sloan8ff03552017-06-14 12:40:58 -0700234 curve25519/ed25519_test.cc
Robert Sloan2424d842017-05-01 07:46:28 -0700235 curve25519/spake25519_test.cc
Robert Sloan7d422bc2017-03-06 10:04:29 -0800236 curve25519/x25519_test.cc
Robert Sloan8ff03552017-06-14 12:40:58 -0700237 ecdh/ecdh_test.cc
David Benjaminf31229b2017-01-25 14:08:15 -0500238 dh/dh_test.cc
Robert Sloan8ff03552017-06-14 12:40:58 -0700239 digest_extra/digest_test.cc
David Benjaminf31229b2017-01-25 14:08:15 -0500240 dsa/dsa_test.cc
Robert Sloan5d625782017-02-13 09:55:39 -0800241 err/err_test.cc
Robert Sloan7d422bc2017-03-06 10:04:29 -0800242 evp/evp_extra_test.cc
Robert Sloan8ff03552017-06-14 12:40:58 -0700243 evp/evp_test.cc
244 evp/pbkdf_test.cc
245 evp/scrypt_test.cc
246 fipsmodule/aes/aes_test.cc
247 fipsmodule/bn/bn_test.cc
248 fipsmodule/ec/ec_test.cc
249 fipsmodule/ec/p256-x86_64_test.cc
250 fipsmodule/ecdsa/ecdsa_test.cc
251 fipsmodule/modes/gcm_test.cc
Robert Sloan9254e682017-04-24 09:42:06 -0700252 fipsmodule/rand/ctrdrbg_test.cc
Robert Sloan8ff03552017-06-14 12:40:58 -0700253 hkdf/hkdf_test.cc
254 hmac_extra/hmac_test.cc
255 lhash/lhash_test.cc
256 obj/obj_test.cc
257 pkcs7/pkcs7_test.cc
258 pkcs8/pkcs8_test.cc
259 pkcs8/pkcs12_test.cc
260 poly1305/poly1305_test.cc
261 pool/pool_test.cc
262 refcount_test.cc
263 rsa_extra/rsa_test.cc
Robert Sloan978112c2018-01-22 12:53:01 -0800264 self_test.cc
Robert Sloan8ff03552017-06-14 12:40:58 -0700265 test/file_test_gtest.cc
266 thread_test.cc
267 x509/x509_test.cc
Robert Sloana12bf462017-07-17 07:08:26 -0700268 x509v3/tab_test.cc
269 x509v3/v3name_test.cc
David Benjaminf31229b2017-01-25 14:08:15 -0500270
Robert Sloan8ff03552017-06-14 12:40:58 -0700271 $<TARGET_OBJECTS:crypto_test_data>
Robert Sloana450c922018-01-08 10:35:32 -0800272 $<TARGET_OBJECTS:boringssl_gtest_main>
David Benjaminf31229b2017-01-25 14:08:15 -0500273 $<TARGET_OBJECTS:test_support>
274)
275
Robert Sloana450c922018-01-08 10:35:32 -0800276target_link_libraries(crypto_test crypto boringssl_gtest)
Robert Sloan6d0d00e2017-03-27 07:13:07 -0700277if (WIN32)
278 target_link_libraries(crypto_test ws2_32)
279endif()
David Benjaminf31229b2017-01-25 14:08:15 -0500280add_dependencies(all_tests crypto_test)