blob: 972d57db719a8104f5438f5507bd21168e938bca [file] [log] [blame]
Adam Langley95c29f32014-06-20 12:00:00 -07001include_directories(. ../include)
2
Adam Langley30eda1d2014-06-24 11:15:12 -07003if(APPLE)
Adam Langley4a0f0c42015-01-28 16:37:10 -08004 if (${ARCH} STREQUAL "x86")
5 set(PERLASM_FLAGS "-fPIC")
6 endif()
7 set(PERLASM_STYLE macosx)
8 set(ASM_EXT S)
9 enable_language(ASM)
Adam Langleyded93582014-07-31 15:23:51 -070010elseif(UNIX)
Adam Langley4a0f0c42015-01-28 16:37:10 -080011 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)
15 elseif (${ARCH} STREQUAL "x86")
16 set(PERLASM_FLAGS "-fPIC")
17 set(PERLASM_STYLE elf)
18 else()
19 set(PERLASM_STYLE elf)
20 endif()
21 set(ASM_EXT S)
22 enable_language(ASM)
Adam Langley95c29f32014-06-20 12:00:00 -070023else()
Adam Langley4a0f0c42015-01-28 16:37:10 -080024 if (CMAKE_CL_64)
25 message("Using nasm")
26 set(PERLASM_STYLE nasm)
27 else()
28 message("Using win32n")
29 set(PERLASM_STYLE win32n)
30 endif()
David Benjaminbc786a92014-10-31 17:27:40 -040031
Adam Langley4a0f0c42015-01-28 16:37:10 -080032 # On Windows, we use the NASM output, specifically built with Yasm.
33 set(ASM_EXT asm)
34 enable_language(ASM_NASM)
Adam Langley95c29f32014-06-20 12:00:00 -070035endif()
36
37function(perlasm dest src)
Adam Langley4a0f0c42015-01-28 16:37:10 -080038 add_custom_command(
39 OUTPUT ${dest}
40 COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${PERLASM_STYLE} ${PERLASM_FLAGS} ${ARGN} > ${dest}
41 DEPENDS
42 ${src}
43 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86_64-xlate.pl
44 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86asm.pl
45 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86gas.pl
46 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86masm.pl
47 ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86nasm.pl
48 WORKING_DIRECTORY .
49 )
Adam Langley95c29f32014-06-20 12:00:00 -070050endfunction()
51
52if (${ARCH} STREQUAL "x86_64")
Adam Langley4a0f0c42015-01-28 16:37:10 -080053 set(
54 CRYPTO_ARCH_SOURCES
Adam Langley95c29f32014-06-20 12:00:00 -070055
Adam Langley4a0f0c42015-01-28 16:37:10 -080056 cpu-x86_64-asm.${ASM_EXT}
57 cpu-intel.c
58 )
Adam Langley95c29f32014-06-20 12:00:00 -070059endif()
60
61if (${ARCH} STREQUAL "x86")
Adam Langley4a0f0c42015-01-28 16:37:10 -080062 set(
63 CRYPTO_ARCH_SOURCES
Adam Langley95c29f32014-06-20 12:00:00 -070064
Adam Langley4a0f0c42015-01-28 16:37:10 -080065 cpu-x86-asm.${ASM_EXT}
66 cpu-intel.c
67 )
Adam Langley95c29f32014-06-20 12:00:00 -070068endif()
69
70if (${ARCH} STREQUAL "arm")
Adam Langley4a0f0c42015-01-28 16:37:10 -080071 set(
72 CRYPTO_ARCH_SOURCES
Adam Langley95c29f32014-06-20 12:00:00 -070073
Adam Langley4a0f0c42015-01-28 16:37:10 -080074 cpu-arm.c
Adam Langleyd062c8a2015-01-30 15:30:44 -080075 cpu-arm-asm.S
Adam Langley4a0f0c42015-01-28 16:37:10 -080076 )
Adam Langley3e652652015-01-09 15:44:37 -080077endif()
78
79if (${ARCH} STREQUAL "aarch64")
Adam Langley4a0f0c42015-01-28 16:37:10 -080080 set(
81 CRYPTO_ARCH_SOURCES
Adam Langley3e652652015-01-09 15:44:37 -080082
Adam Langley4a0f0c42015-01-28 16:37:10 -080083 cpu-arm.c
84 )
Adam Langley95c29f32014-06-20 12:00:00 -070085endif()
86
87# Level 0.1 - depends on nothing outside this set.
88add_subdirectory(stack)
89add_subdirectory(lhash)
90add_subdirectory(err)
91add_subdirectory(buf)
Adam Langley95c29f32014-06-20 12:00:00 -070092add_subdirectory(base64)
93add_subdirectory(bytestring)
94
95# Level 0.2 - depends on nothing but itself
96add_subdirectory(sha)
Adam Langleyc9eb7ea2014-08-22 11:06:14 -070097add_subdirectory(md4)
Adam Langley95c29f32014-06-20 12:00:00 -070098add_subdirectory(md5)
99add_subdirectory(modes)
100add_subdirectory(aes)
101add_subdirectory(des)
102add_subdirectory(rc4)
103add_subdirectory(conf)
Adam Langleyde0b2022014-06-20 12:00:00 -0700104add_subdirectory(chacha)
105add_subdirectory(poly1305)
Adam Langley95c29f32014-06-20 12:00:00 -0700106
107# Level 1, depends only on 0.*
108add_subdirectory(digest)
109add_subdirectory(cipher)
110add_subdirectory(rand)
111add_subdirectory(bio)
112add_subdirectory(bn)
113add_subdirectory(obj)
114add_subdirectory(asn1)
115
116# Level 2
117add_subdirectory(engine)
118add_subdirectory(dh)
119add_subdirectory(dsa)
120add_subdirectory(rsa)
121add_subdirectory(ec)
122add_subdirectory(ecdh)
123add_subdirectory(ecdsa)
124add_subdirectory(hmac)
125
126# Level 3
127add_subdirectory(evp)
Nick Harper4685e872014-12-09 15:51:28 -0800128add_subdirectory(hkdf)
Adam Langley95c29f32014-06-20 12:00:00 -0700129add_subdirectory(pem)
130add_subdirectory(x509)
131add_subdirectory(x509v3)
132
133# Level 4
134add_subdirectory(pkcs8)
135
136add_library(
Adam Langley4a0f0c42015-01-28 16:37:10 -0800137 crypto
Adam Langley95c29f32014-06-20 12:00:00 -0700138
Adam Langley4a0f0c42015-01-28 16:37:10 -0800139 crypto.c
Adam Langley4a0f0c42015-01-28 16:37:10 -0800140 mem.c
141 thread.c
142 ex_data.c
143 ex_data_impl.c
144 time_support.c
145 directory_posix.c
146 directory_win.c
Adam Langley95c29f32014-06-20 12:00:00 -0700147
Adam Langley4a0f0c42015-01-28 16:37:10 -0800148 ${CRYPTO_ARCH_SOURCES}
Adam Langley95c29f32014-06-20 12:00:00 -0700149
Adam Langley4a0f0c42015-01-28 16:37:10 -0800150 $<TARGET_OBJECTS:stack>
151 $<TARGET_OBJECTS:lhash>
152 $<TARGET_OBJECTS:err>
153 $<TARGET_OBJECTS:base64>
154 $<TARGET_OBJECTS:bytestring>
155 $<TARGET_OBJECTS:sha>
156 $<TARGET_OBJECTS:md4>
157 $<TARGET_OBJECTS:md5>
158 $<TARGET_OBJECTS:digest>
159 $<TARGET_OBJECTS:cipher>
160 $<TARGET_OBJECTS:modes>
161 $<TARGET_OBJECTS:aes>
162 $<TARGET_OBJECTS:des>
163 $<TARGET_OBJECTS:rc4>
164 $<TARGET_OBJECTS:conf>
165 $<TARGET_OBJECTS:chacha>
166 $<TARGET_OBJECTS:poly1305>
167 $<TARGET_OBJECTS:buf>
168 $<TARGET_OBJECTS:bn>
169 $<TARGET_OBJECTS:bio>
170 $<TARGET_OBJECTS:rand>
171 $<TARGET_OBJECTS:obj>
172 $<TARGET_OBJECTS:asn1>
173 $<TARGET_OBJECTS:engine>
174 $<TARGET_OBJECTS:dh>
175 $<TARGET_OBJECTS:dsa>
176 $<TARGET_OBJECTS:rsa>
177 $<TARGET_OBJECTS:ec>
178 $<TARGET_OBJECTS:ecdh>
179 $<TARGET_OBJECTS:ecdsa>
180 $<TARGET_OBJECTS:hmac>
181 $<TARGET_OBJECTS:evp>
182 $<TARGET_OBJECTS:hkdf>
183 $<TARGET_OBJECTS:pem>
184 $<TARGET_OBJECTS:x509>
185 $<TARGET_OBJECTS:x509v3>
186 $<TARGET_OBJECTS:pkcs8>
Adam Langley95c29f32014-06-20 12:00:00 -0700187)
188
Adam Langleyb15d8132014-11-03 18:51:20 -0800189add_executable(
Adam Langley4a0f0c42015-01-28 16:37:10 -0800190 constant_time_test
Adam Langleyb15d8132014-11-03 18:51:20 -0800191
Adam Langley4a0f0c42015-01-28 16:37:10 -0800192 constant_time_test.c
Adam Langleyb15d8132014-11-03 18:51:20 -0800193)
194
195target_link_libraries(constant_time_test crypto)
196
Adam Langley95c29f32014-06-20 12:00:00 -0700197perlasm(cpu-x86_64-asm.${ASM_EXT} cpu-x86_64-asm.pl)
198perlasm(cpu-x86-asm.${ASM_EXT} cpu-x86-asm.pl)