blob: bbc68d00420585fe43112fc60c6a3a976e0bbffe [file] [log] [blame]
Kenny Rootb8494592015-09-25 02:29:14 +00001include_directories(../include)
Adam Langleyd9e397b2015-01-22 14:27:53 -08002
3if(APPLE)
4 if (${ARCH} STREQUAL "x86")
Adam Langleye9ada862015-05-11 17:20:37 -07005 set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2")
Adam Langleyd9e397b2015-01-22 14:27:53 -08006 endif()
7 set(PERLASM_STYLE macosx)
8 set(ASM_EXT S)
9 enable_language(ASM)
10elseif(UNIX)
11 if (${ARCH} STREQUAL "aarch64")
12 # The "armx" Perl scripts look for "64" in the style argument
13 # in order to decide whether to generate 32- or 64-bit asm.
14 set(PERLASM_STYLE linux64)
Adam Langleye9ada862015-05-11 17:20:37 -070015 elseif (${ARCH} STREQUAL "arm")
16 set(PERLASM_STYLE linux32)
Adam Langleyd9e397b2015-01-22 14:27:53 -080017 elseif (${ARCH} STREQUAL "x86")
Adam Langleye9ada862015-05-11 17:20:37 -070018 set(PERLASM_FLAGS "-fPIC -DOPENSSL_IA32_SSE2")
Adam Langleyd9e397b2015-01-22 14:27:53 -080019 set(PERLASM_STYLE elf)
Steven Valdezbb1ceac2016-10-07 10:34:51 -040020 elseif (${ARCH} STREQUAL "ppc64le")
21 set(PERLASM_STYLE ppc64le)
Adam Langleyd9e397b2015-01-22 14:27:53 -080022 else()
23 set(PERLASM_STYLE elf)
24 endif()
25 set(ASM_EXT S)
26 enable_language(ASM)
David Benjamin4969cc92016-04-22 15:02:23 -040027 set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,--noexecstack")
Adam Langleyd9e397b2015-01-22 14:27:53 -080028else()
29 if (CMAKE_CL_64)
30 message("Using nasm")
31 set(PERLASM_STYLE nasm)
32 else()
33 message("Using win32n")
34 set(PERLASM_STYLE win32n)
Adam Langleye9ada862015-05-11 17:20:37 -070035 set(PERLASM_FLAGS "-DOPENSSL_IA32_SSE2")
Adam Langleyd9e397b2015-01-22 14:27:53 -080036 endif()
37
38 # On Windows, we use the NASM output, specifically built with Yasm.
39 set(ASM_EXT asm)
40 enable_language(ASM_NASM)
41endif()
42
43function(perlasm dest src)
44 add_custom_command(
45 OUTPUT ${dest}
David Benjaminc895d6b2016-08-11 13:26:41 -040046 COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${PERLASM_STYLE} ${PERLASM_FLAGS} ${ARGN} ${dest}
Adam Langleyd9e397b2015-01-22 14:27:53 -080047 DEPENDS
48 ${src}
Adam Langleye9ada862015-05-11 17:20:37 -070049 ${PROJECT_SOURCE_DIR}/crypto/perlasm/arm-xlate.pl
Steven Valdezbb1ceac2016-10-07 10:34:51 -040050 ${PROJECT_SOURCE_DIR}/crypto/perlasm/ppc-xlate.pl
Adam Langleyd9e397b2015-01-22 14:27:53 -080051 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86_64-xlate.pl
52 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86asm.pl
53 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86gas.pl
54 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86masm.pl
55 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86nasm.pl
56 WORKING_DIRECTORY .
57 )
58endfunction()
59
Adam Langleyd9e397b2015-01-22 14:27:53 -080060# Level 0.1 - depends on nothing outside this set.
61add_subdirectory(stack)
62add_subdirectory(lhash)
63add_subdirectory(err)
64add_subdirectory(buf)
65add_subdirectory(base64)
66add_subdirectory(bytestring)
Steven Valdez909b19f2016-11-21 15:35:44 -050067add_subdirectory(pool)
Adam Langleyd9e397b2015-01-22 14:27:53 -080068
69# Level 0.2 - depends on nothing but itself
70add_subdirectory(sha)
71add_subdirectory(md4)
72add_subdirectory(md5)
73add_subdirectory(modes)
74add_subdirectory(aes)
75add_subdirectory(des)
76add_subdirectory(rc4)
77add_subdirectory(conf)
78add_subdirectory(chacha)
79add_subdirectory(poly1305)
Adam Langley4139edb2016-01-13 15:00:54 -080080add_subdirectory(curve25519)
Adam Langleyd9e397b2015-01-22 14:27:53 -080081
82# Level 1, depends only on 0.*
83add_subdirectory(digest)
84add_subdirectory(cipher)
85add_subdirectory(rand)
86add_subdirectory(bio)
87add_subdirectory(bn)
88add_subdirectory(obj)
89add_subdirectory(asn1)
90
91# Level 2
92add_subdirectory(engine)
93add_subdirectory(dh)
94add_subdirectory(dsa)
95add_subdirectory(rsa)
96add_subdirectory(ec)
97add_subdirectory(ecdh)
98add_subdirectory(ecdsa)
99add_subdirectory(hmac)
100
101# Level 3
Adam Langleye9ada862015-05-11 17:20:37 -0700102add_subdirectory(cmac)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800103add_subdirectory(evp)
104add_subdirectory(hkdf)
105add_subdirectory(pem)
106add_subdirectory(x509)
107add_subdirectory(x509v3)
108
109# Level 4
110add_subdirectory(pkcs8)
111
Adam Langleye9ada862015-05-11 17:20:37 -0700112# Test support code
113add_subdirectory(test)
114
Adam Langleyd9e397b2015-01-22 14:27:53 -0800115add_library(
116 crypto
117
David Benjamin4969cc92016-04-22 15:02:23 -0400118 cpu-aarch64-linux.c
119 cpu-arm.c
120 cpu-arm-linux.c
121 cpu-intel.c
Steven Valdezbb1ceac2016-10-07 10:34:51 -0400122 cpu-ppc64le.c
Adam Langleyd9e397b2015-01-22 14:27:53 -0800123 crypto.c
Adam Langleyf4e42722015-06-04 17:45:09 -0700124 ex_data.c
Adam Langleyd9e397b2015-01-22 14:27:53 -0800125 mem.c
Adam Langleyf4e42722015-06-04 17:45:09 -0700126 refcount_c11.c
127 refcount_lock.c
Adam Langleyd9e397b2015-01-22 14:27:53 -0800128 thread.c
Adam Langleye9ada862015-05-11 17:20:37 -0700129 thread_none.c
130 thread_pthread.c
131 thread_win.c
Adam Langleyd9e397b2015-01-22 14:27:53 -0800132 time_support.c
Adam Langleyd9e397b2015-01-22 14:27:53 -0800133
Adam Langleyd9e397b2015-01-22 14:27:53 -0800134 $<TARGET_OBJECTS:stack>
135 $<TARGET_OBJECTS:lhash>
136 $<TARGET_OBJECTS:err>
137 $<TARGET_OBJECTS:base64>
138 $<TARGET_OBJECTS:bytestring>
Steven Valdez909b19f2016-11-21 15:35:44 -0500139 $<TARGET_OBJECTS:pool>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800140 $<TARGET_OBJECTS:sha>
141 $<TARGET_OBJECTS:md4>
142 $<TARGET_OBJECTS:md5>
143 $<TARGET_OBJECTS:digest>
144 $<TARGET_OBJECTS:cipher>
145 $<TARGET_OBJECTS:modes>
146 $<TARGET_OBJECTS:aes>
147 $<TARGET_OBJECTS:des>
148 $<TARGET_OBJECTS:rc4>
149 $<TARGET_OBJECTS:conf>
150 $<TARGET_OBJECTS:chacha>
151 $<TARGET_OBJECTS:poly1305>
Adam Langley4139edb2016-01-13 15:00:54 -0800152 $<TARGET_OBJECTS:curve25519>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800153 $<TARGET_OBJECTS:buf>
154 $<TARGET_OBJECTS:bn>
155 $<TARGET_OBJECTS:bio>
156 $<TARGET_OBJECTS:rand>
157 $<TARGET_OBJECTS:obj>
158 $<TARGET_OBJECTS:asn1>
159 $<TARGET_OBJECTS:engine>
160 $<TARGET_OBJECTS:dh>
161 $<TARGET_OBJECTS:dsa>
162 $<TARGET_OBJECTS:rsa>
163 $<TARGET_OBJECTS:ec>
164 $<TARGET_OBJECTS:ecdh>
165 $<TARGET_OBJECTS:ecdsa>
166 $<TARGET_OBJECTS:hmac>
Adam Langleye9ada862015-05-11 17:20:37 -0700167 $<TARGET_OBJECTS:cmac>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800168 $<TARGET_OBJECTS:evp>
169 $<TARGET_OBJECTS:hkdf>
170 $<TARGET_OBJECTS:pem>
171 $<TARGET_OBJECTS:x509>
172 $<TARGET_OBJECTS:x509v3>
David Benjamin4969cc92016-04-22 15:02:23 -0400173 $<TARGET_OBJECTS:pkcs8_lib>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800174)
175
Adam Langleye9ada862015-05-11 17:20:37 -0700176if(NOT MSVC AND NOT ANDROID)
177 target_link_libraries(crypto pthread)
178endif()
179
Adam Langleyd9e397b2015-01-22 14:27:53 -0800180add_executable(
181 constant_time_test
182
Robert Sloan69939df2017-01-09 10:53:07 -0800183 constant_time_test.cc
Adam Langleyf4e42722015-06-04 17:45:09 -0700184
185 $<TARGET_OBJECTS:test_support>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800186)
187
188target_link_libraries(constant_time_test crypto)
Kenny Roote99801b2015-11-06 15:31:15 -0800189add_dependencies(all_tests constant_time_test)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800190
Adam Langleye9ada862015-05-11 17:20:37 -0700191add_executable(
192 thread_test
193
194 thread_test.c
Adam Langleyf4e42722015-06-04 17:45:09 -0700195
196 $<TARGET_OBJECTS:test_support>
Adam Langleye9ada862015-05-11 17:20:37 -0700197)
198
199target_link_libraries(thread_test crypto)
Kenny Roote99801b2015-11-06 15:31:15 -0800200add_dependencies(all_tests thread_test)
Adam Langleye9ada862015-05-11 17:20:37 -0700201
Adam Langleyf4e42722015-06-04 17:45:09 -0700202add_executable(
203 refcount_test
204
Robert Sloan69939df2017-01-09 10:53:07 -0800205 refcount_test.cc
Adam Langleyf4e42722015-06-04 17:45:09 -0700206)
207
208target_link_libraries(refcount_test crypto)
Kenny Roote99801b2015-11-06 15:31:15 -0800209add_dependencies(all_tests refcount_test)
David Benjaminf31229b2017-01-25 14:08:15 -0500210
211# TODO(davidben): Convert the remaining tests to GTest.
212add_executable(
213 crypto_test
214
215 dh/dh_test.cc
216 dsa/dsa_test.cc
Robert Sloan5d625782017-02-13 09:55:39 -0800217 err/err_test.cc
David Benjaminf31229b2017-01-25 14:08:15 -0500218
219 $<TARGET_OBJECTS:gtest_main>
220 $<TARGET_OBJECTS:test_support>
221)
222
223target_link_libraries(crypto_test crypto gtest)
224add_dependencies(all_tests crypto_test)