blob: fbfc4b27b304d6851e9d459c78f55531d6ab263d [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
Adam Langleyd9e397b2015-01-22 14:27:53 -0800133 $<TARGET_OBJECTS:stack>
134 $<TARGET_OBJECTS:lhash>
135 $<TARGET_OBJECTS:err>
136 $<TARGET_OBJECTS:base64>
137 $<TARGET_OBJECTS:bytestring>
Steven Valdez909b19f2016-11-21 15:35:44 -0500138 $<TARGET_OBJECTS:pool>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800139 $<TARGET_OBJECTS:sha>
140 $<TARGET_OBJECTS:md4>
141 $<TARGET_OBJECTS:md5>
142 $<TARGET_OBJECTS:digest>
143 $<TARGET_OBJECTS:cipher>
144 $<TARGET_OBJECTS:modes>
145 $<TARGET_OBJECTS:aes>
146 $<TARGET_OBJECTS:des>
147 $<TARGET_OBJECTS:rc4>
148 $<TARGET_OBJECTS:conf>
149 $<TARGET_OBJECTS:chacha>
150 $<TARGET_OBJECTS:poly1305>
Adam Langley4139edb2016-01-13 15:00:54 -0800151 $<TARGET_OBJECTS:curve25519>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800152 $<TARGET_OBJECTS:buf>
153 $<TARGET_OBJECTS:bn>
154 $<TARGET_OBJECTS:bio>
155 $<TARGET_OBJECTS:rand>
156 $<TARGET_OBJECTS:obj>
157 $<TARGET_OBJECTS:asn1>
158 $<TARGET_OBJECTS:engine>
159 $<TARGET_OBJECTS:dh>
160 $<TARGET_OBJECTS:dsa>
161 $<TARGET_OBJECTS:rsa>
162 $<TARGET_OBJECTS:ec>
163 $<TARGET_OBJECTS:ecdh>
164 $<TARGET_OBJECTS:ecdsa>
165 $<TARGET_OBJECTS:hmac>
Adam Langleye9ada862015-05-11 17:20:37 -0700166 $<TARGET_OBJECTS:cmac>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800167 $<TARGET_OBJECTS:evp>
168 $<TARGET_OBJECTS:hkdf>
169 $<TARGET_OBJECTS:pem>
170 $<TARGET_OBJECTS:x509>
171 $<TARGET_OBJECTS:x509v3>
David Benjamin4969cc92016-04-22 15:02:23 -0400172 $<TARGET_OBJECTS:pkcs8_lib>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800173)
174
Adam Langleye9ada862015-05-11 17:20:37 -0700175if(NOT MSVC AND NOT ANDROID)
176 target_link_libraries(crypto pthread)
177endif()
178
Adam Langleyd9e397b2015-01-22 14:27:53 -0800179add_executable(
180 constant_time_test
181
Robert Sloan69939df2017-01-09 10:53:07 -0800182 constant_time_test.cc
Adam Langleyf4e42722015-06-04 17:45:09 -0700183
184 $<TARGET_OBJECTS:test_support>
Adam Langleyd9e397b2015-01-22 14:27:53 -0800185)
186
187target_link_libraries(constant_time_test crypto)
Kenny Roote99801b2015-11-06 15:31:15 -0800188add_dependencies(all_tests constant_time_test)
Adam Langleyd9e397b2015-01-22 14:27:53 -0800189
Adam Langleye9ada862015-05-11 17:20:37 -0700190add_executable(
191 thread_test
192
193 thread_test.c
Adam Langleyf4e42722015-06-04 17:45:09 -0700194
195 $<TARGET_OBJECTS:test_support>
Adam Langleye9ada862015-05-11 17:20:37 -0700196)
197
198target_link_libraries(thread_test crypto)
Kenny Roote99801b2015-11-06 15:31:15 -0800199add_dependencies(all_tests thread_test)
Adam Langleye9ada862015-05-11 17:20:37 -0700200
Adam Langleyf4e42722015-06-04 17:45:09 -0700201add_executable(
202 refcount_test
203
Robert Sloan69939df2017-01-09 10:53:07 -0800204 refcount_test.cc
Adam Langleyf4e42722015-06-04 17:45:09 -0700205)
206
207target_link_libraries(refcount_test crypto)
Kenny Roote99801b2015-11-06 15:31:15 -0800208add_dependencies(all_tests refcount_test)
David Benjaminf31229b2017-01-25 14:08:15 -0500209
210# TODO(davidben): Convert the remaining tests to GTest.
211add_executable(
212 crypto_test
213
Robert Sloana94fe052017-02-21 08:49:28 -0800214 chacha/chacha_test.cc
David Benjaminf31229b2017-01-25 14:08:15 -0500215 dh/dh_test.cc
216 dsa/dsa_test.cc
Robert Sloana94fe052017-02-21 08:49:28 -0800217 ec/ec_test.cc
Robert Sloan5d625782017-02-13 09:55:39 -0800218 err/err_test.cc
Robert Sloana94fe052017-02-21 08:49:28 -0800219 rsa/rsa_test.cc
David Benjaminf31229b2017-01-25 14:08:15 -0500220
221 $<TARGET_OBJECTS:gtest_main>
222 $<TARGET_OBJECTS:test_support>
223)
224
225target_link_libraries(crypto_test crypto gtest)
226add_dependencies(all_tests crypto_test)