blob: e978820049c2b6fddb7944f593a80a713104d683 [file] [log] [blame]
Robert Sloan572a4e22017-04-17 10:52:19 -07001include_directories(../../include)
2
Robert Sloand9e572d2018-08-27 12:27:00 -07003if(${ARCH} STREQUAL "x86_64")
Robert Sloan572a4e22017-04-17 10:52:19 -07004 set(
5 BCM_ASM_SOURCES
6
Robert Sloan9254e682017-04-24 09:42:06 -07007 aesni-gcm-x86_64.${ASM_EXT}
8 aesni-x86_64.${ASM_EXT}
9 aes-x86_64.${ASM_EXT}
Robert Sloan4c22c5f2019-03-01 15:53:37 -080010 ghash-ssse3-x86_64.${ASM_EXT}
Robert Sloan9254e682017-04-24 09:42:06 -070011 ghash-x86_64.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070012 md5-x86_64.${ASM_EXT}
Robert Sloan8ff03552017-06-14 12:40:58 -070013 p256-x86_64-asm.${ASM_EXT}
Robert Sloana51059f2018-11-12 13:38:50 -080014 p256_beeu-x86_64-asm.${ASM_EXT}
Robert Sloan9254e682017-04-24 09:42:06 -070015 rdrand-x86_64.${ASM_EXT}
Robert Sloan8ff03552017-06-14 12:40:58 -070016 rsaz-avx2.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070017 sha1-x86_64.${ASM_EXT}
18 sha256-x86_64.${ASM_EXT}
19 sha512-x86_64.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070020 vpaes-x86_64.${ASM_EXT}
Robert Sloan8ff03552017-06-14 12:40:58 -070021 x86_64-mont5.${ASM_EXT}
22 x86_64-mont.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070023 )
24endif()
25
Robert Sloand9e572d2018-08-27 12:27:00 -070026if(${ARCH} STREQUAL "x86")
Robert Sloan572a4e22017-04-17 10:52:19 -070027 set(
28 BCM_ASM_SOURCES
29
Robert Sloan9254e682017-04-24 09:42:06 -070030 aes-586.${ASM_EXT}
31 aesni-x86.${ASM_EXT}
Robert Sloan8ff03552017-06-14 12:40:58 -070032 bn-586.${ASM_EXT}
33 co-586.${ASM_EXT}
Robert Sloan89678152019-03-12 14:24:00 -070034 ghash-ssse3-x86.${ASM_EXT}
Robert Sloan9254e682017-04-24 09:42:06 -070035 ghash-x86.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070036 md5-586.${ASM_EXT}
37 sha1-586.${ASM_EXT}
38 sha256-586.${ASM_EXT}
39 sha512-586.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070040 vpaes-x86.${ASM_EXT}
Robert Sloan8ff03552017-06-14 12:40:58 -070041 x86-mont.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070042 )
43endif()
44
Robert Sloand9e572d2018-08-27 12:27:00 -070045if(${ARCH} STREQUAL "arm")
Robert Sloan572a4e22017-04-17 10:52:19 -070046 set(
47 BCM_ASM_SOURCES
48
Robert Sloan9254e682017-04-24 09:42:06 -070049 aes-armv4.${ASM_EXT}
50 aesv8-armx.${ASM_EXT}
Robert Sloan8ff03552017-06-14 12:40:58 -070051 armv4-mont.${ASM_EXT}
Robert Sloan9254e682017-04-24 09:42:06 -070052 bsaes-armv7.${ASM_EXT}
53 ghash-armv4.${ASM_EXT}
54 ghashv8-armx.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070055 sha1-armv4-large.${ASM_EXT}
56 sha256-armv4.${ASM_EXT}
57 sha512-armv4.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070058 )
59endif()
60
Robert Sloand9e572d2018-08-27 12:27:00 -070061if(${ARCH} STREQUAL "aarch64")
Robert Sloan572a4e22017-04-17 10:52:19 -070062 set(
63 BCM_ASM_SOURCES
64
Robert Sloan9254e682017-04-24 09:42:06 -070065 aesv8-armx.${ASM_EXT}
Robert Sloan8ff03552017-06-14 12:40:58 -070066 armv8-mont.${ASM_EXT}
Robert Sloan9d5d1a72019-03-18 09:32:50 -070067 ghash-neon-armv8.${ASM_EXT}
Robert Sloan9254e682017-04-24 09:42:06 -070068 ghashv8-armx.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070069 sha1-armv8.${ASM_EXT}
70 sha256-armv8.${ASM_EXT}
71 sha512-armv8.${ASM_EXT}
Robert Sloan89678152019-03-12 14:24:00 -070072 vpaes-armv8.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070073 )
74endif()
75
Robert Sloand9e572d2018-08-27 12:27:00 -070076if(${ARCH} STREQUAL "ppc64le")
Robert Sloan572a4e22017-04-17 10:52:19 -070077 set(
Robert Sloan8ff03552017-06-14 12:40:58 -070078 BCM_ASM_SOURCES
Robert Sloan572a4e22017-04-17 10:52:19 -070079
80 aesp8-ppc.${ASM_EXT}
Robert Sloan9254e682017-04-24 09:42:06 -070081 ghashp8-ppc.${ASM_EXT}
Robert Sloan572a4e22017-04-17 10:52:19 -070082 )
83endif()
84
85perlasm(aes-586.${ASM_EXT} aes/asm/aes-586.pl)
86perlasm(aes-armv4.${ASM_EXT} aes/asm/aes-armv4.pl)
Robert Sloan9254e682017-04-24 09:42:06 -070087perlasm(aesni-gcm-x86_64.${ASM_EXT} modes/asm/aesni-gcm-x86_64.pl)
Robert Sloan572a4e22017-04-17 10:52:19 -070088perlasm(aesni-x86_64.${ASM_EXT} aes/asm/aesni-x86_64.pl)
89perlasm(aesni-x86.${ASM_EXT} aes/asm/aesni-x86.pl)
90perlasm(aesp8-ppc.${ASM_EXT} aes/asm/aesp8-ppc.pl)
91perlasm(aesv8-armx.${ASM_EXT} aes/asm/aesv8-armx.pl)
92perlasm(aes-x86_64.${ASM_EXT} aes/asm/aes-x86_64.pl)
Robert Sloan8ff03552017-06-14 12:40:58 -070093perlasm(armv4-mont.${ASM_EXT} bn/asm/armv4-mont.pl)
94perlasm(armv8-mont.${ASM_EXT} bn/asm/armv8-mont.pl)
95perlasm(bn-586.${ASM_EXT} bn/asm/bn-586.pl)
Robert Sloan572a4e22017-04-17 10:52:19 -070096perlasm(bsaes-armv7.${ASM_EXT} aes/asm/bsaes-armv7.pl)
Robert Sloan8ff03552017-06-14 12:40:58 -070097perlasm(co-586.${ASM_EXT} bn/asm/co-586.pl)
Robert Sloan9254e682017-04-24 09:42:06 -070098perlasm(ghash-armv4.${ASM_EXT} modes/asm/ghash-armv4.pl)
99perlasm(ghashp8-ppc.${ASM_EXT} modes/asm/ghashp8-ppc.pl)
100perlasm(ghashv8-armx.${ASM_EXT} modes/asm/ghashv8-armx.pl)
Robert Sloan9d5d1a72019-03-18 09:32:50 -0700101perlasm(ghash-neon-armv8.${ASM_EXT} modes/asm/ghash-neon-armv8.pl)
Robert Sloan4c22c5f2019-03-01 15:53:37 -0800102perlasm(ghash-ssse3-x86_64.${ASM_EXT} modes/asm/ghash-ssse3-x86_64.pl)
Robert Sloan89678152019-03-12 14:24:00 -0700103perlasm(ghash-ssse3-x86.${ASM_EXT} modes/asm/ghash-ssse3-x86.pl)
Robert Sloan9254e682017-04-24 09:42:06 -0700104perlasm(ghash-x86_64.${ASM_EXT} modes/asm/ghash-x86_64.pl)
105perlasm(ghash-x86.${ASM_EXT} modes/asm/ghash-x86.pl)
Robert Sloan572a4e22017-04-17 10:52:19 -0700106perlasm(md5-586.${ASM_EXT} md5/asm/md5-586.pl)
107perlasm(md5-x86_64.${ASM_EXT} md5/asm/md5-x86_64.pl)
Robert Sloan8ff03552017-06-14 12:40:58 -0700108perlasm(p256-x86_64-asm.${ASM_EXT} ec/asm/p256-x86_64-asm.pl)
Robert Sloana51059f2018-11-12 13:38:50 -0800109perlasm(p256_beeu-x86_64-asm.${ASM_EXT} ec/asm/p256_beeu-x86_64-asm.pl)
Robert Sloan9254e682017-04-24 09:42:06 -0700110perlasm(rdrand-x86_64.${ASM_EXT} rand/asm/rdrand-x86_64.pl)
Robert Sloan8ff03552017-06-14 12:40:58 -0700111perlasm(rsaz-avx2.${ASM_EXT} bn/asm/rsaz-avx2.pl)
Robert Sloan572a4e22017-04-17 10:52:19 -0700112perlasm(sha1-586.${ASM_EXT} sha/asm/sha1-586.pl)
113perlasm(sha1-armv4-large.${ASM_EXT} sha/asm/sha1-armv4-large.pl)
114perlasm(sha1-armv8.${ASM_EXT} sha/asm/sha1-armv8.pl)
115perlasm(sha1-x86_64.${ASM_EXT} sha/asm/sha1-x86_64.pl)
116perlasm(sha256-586.${ASM_EXT} sha/asm/sha256-586.pl)
117perlasm(sha256-armv4.${ASM_EXT} sha/asm/sha256-armv4.pl)
118perlasm(sha256-armv8.${ASM_EXT} sha/asm/sha512-armv8.pl)
119perlasm(sha256-x86_64.${ASM_EXT} sha/asm/sha512-x86_64.pl)
120perlasm(sha512-586.${ASM_EXT} sha/asm/sha512-586.pl)
121perlasm(sha512-armv4.${ASM_EXT} sha/asm/sha512-armv4.pl)
122perlasm(sha512-armv8.${ASM_EXT} sha/asm/sha512-armv8.pl)
123perlasm(sha512-x86_64.${ASM_EXT} sha/asm/sha512-x86_64.pl)
Robert Sloan89678152019-03-12 14:24:00 -0700124perlasm(vpaes-armv8.${ASM_EXT} aes/asm/vpaes-armv8.pl)
Robert Sloan572a4e22017-04-17 10:52:19 -0700125perlasm(vpaes-x86_64.${ASM_EXT} aes/asm/vpaes-x86_64.pl)
126perlasm(vpaes-x86.${ASM_EXT} aes/asm/vpaes-x86.pl)
Robert Sloan8ff03552017-06-14 12:40:58 -0700127perlasm(x86_64-mont5.${ASM_EXT} bn/asm/x86_64-mont5.pl)
128perlasm(x86_64-mont.${ASM_EXT} bn/asm/x86_64-mont.pl)
129perlasm(x86-mont.${ASM_EXT} bn/asm/x86-mont.pl)
Robert Sloan572a4e22017-04-17 10:52:19 -0700130
Robert Sloan8ff03552017-06-14 12:40:58 -0700131if(FIPS_DELOCATE)
Pete Bentley0c61efe2019-08-13 09:32:23 +0100132 if(FIPS_SHARED)
133 error("Can't set both delocate and shared mode for FIPS build")
134 endif()
135
Adam Vartanianbfcf3a72018-08-10 14:55:24 +0100136 if(OPENSSL_NO_ASM)
137 # If OPENSSL_NO_ASM was defined then ASM will not have been enabled, but in
138 # FIPS mode we have to have it because the module build requires going via
139 # textual assembly.
140 enable_language(ASM)
141 endif()
142
Robert Sloan572a4e22017-04-17 10:52:19 -0700143 add_library(
144 bcm_c_generated_asm
145
146 STATIC
147
148 bcm.c
149 )
150
Robert Sloan726e9d12018-09-11 11:45:04 -0700151 add_dependencies(bcm_c_generated_asm global_target)
152
Robert Sloan2424d842017-05-01 07:46:28 -0700153 set_target_properties(bcm_c_generated_asm PROPERTIES COMPILE_OPTIONS "-S")
154 set_target_properties(bcm_c_generated_asm PROPERTIES POSITION_INDEPENDENT_CODE ON)
Robert Sloan572a4e22017-04-17 10:52:19 -0700155
Robert Sloanf573be72018-09-17 15:29:11 -0700156 go_executable(delocate boringssl.googlesource.com/boringssl/util/fipstools/delocate)
Robert Sloan572a4e22017-04-17 10:52:19 -0700157 add_custom_command(
158 OUTPUT bcm-delocated.S
Robert Sloanf573be72018-09-17 15:29:11 -0700159 COMMAND ./delocate -a $<TARGET_FILE:bcm_c_generated_asm> -o bcm-delocated.S ${BCM_ASM_SOURCES}
160 DEPENDS bcm_c_generated_asm delocate ${BCM_ASM_SOURCES}
161 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
Robert Sloan572a4e22017-04-17 10:52:19 -0700162 )
163
164 add_library(
165 bcm_hashunset
166
167 STATIC
168
169 bcm-delocated.S
170 )
171
Robert Sloan726e9d12018-09-11 11:45:04 -0700172 add_dependencies(bcm_hashunset global_target)
173
Robert Sloan572a4e22017-04-17 10:52:19 -0700174 set_target_properties(bcm_hashunset PROPERTIES POSITION_INDEPENDENT_CODE ON)
175 set_target_properties(bcm_hashunset PROPERTIES LINKER_LANGUAGE C)
176
Robert Sloanf068def2018-10-10 18:45:40 -0700177 go_executable(inject_hash
178 boringssl.googlesource.com/boringssl/util/fipstools/inject_hash)
Robert Sloan572a4e22017-04-17 10:52:19 -0700179 add_custom_command(
180 OUTPUT bcm.o
Robert Sloanf068def2018-10-10 18:45:40 -0700181 COMMAND ./inject_hash -o bcm.o -in-archive $<TARGET_FILE:bcm_hashunset>
182 DEPENDS bcm_hashunset inject_hash
Robert Sloanf573be72018-09-17 15:29:11 -0700183 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
Robert Sloan572a4e22017-04-17 10:52:19 -0700184 )
185
186 # The outputs of add_custom_command cannot be referenced outside of the
187 # CMakeLists.txt that defines it. Thus we have to wrap bcm.o in a custom target
188 # so that crypto can depend on it.
189 add_custom_target(bcm_o_target DEPENDS bcm.o)
190
191 add_library(
192 fipsmodule
193
194 OBJECT
195
Pete Bentley0c61efe2019-08-13 09:32:23 +0100196 fips_shared_support.c
Robert Sloan572a4e22017-04-17 10:52:19 -0700197 is_fips.c
198 )
199
Robert Sloan726e9d12018-09-11 11:45:04 -0700200 add_dependencies(fipsmodule global_target)
201
Robert Sloan572a4e22017-04-17 10:52:19 -0700202 set_target_properties(fipsmodule PROPERTIES LINKER_LANGUAGE C)
Pete Bentley0c61efe2019-08-13 09:32:23 +0100203elseif(FIPS_SHARED)
204 if(NOT BUILD_SHARED_LIBS)
205 error("FIPS_SHARED set but not BUILD_SHARED_LIBS")
206 endif()
207
208 add_library(
209 fipsmodule
210
211 OBJECT
212
213 fips_shared_support.c
214 is_fips.c
215 )
216
217 add_dependencies(fipsmodule global_target)
218
219 add_library(
220 bcm_library
221
222 STATIC
223
224 bcm.c
225
226 ${BCM_ASM_SOURCES}
227 )
228
229 add_dependencies(bcm_library global_target)
230
231 add_custom_command(
232 OUTPUT bcm.o
233 COMMAND ld -r -T ${CMAKE_CURRENT_SOURCE_DIR}/fips_shared.lds -o bcm.o --whole-archive $<TARGET_FILE:bcm_library>
234 DEPENDS bcm_library fips_shared.lds
235 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
236 )
237
238 add_custom_target(bcm_o_target DEPENDS bcm.o)
Robert Sloan572a4e22017-04-17 10:52:19 -0700239else()
240 add_library(
241 fipsmodule
242
243 OBJECT
244
245 bcm.c
Pete Bentley0c61efe2019-08-13 09:32:23 +0100246 fips_shared_support.c
Robert Sloan572a4e22017-04-17 10:52:19 -0700247 is_fips.c
248
249 ${BCM_ASM_SOURCES}
250 )
Robert Sloan726e9d12018-09-11 11:45:04 -0700251
252 add_dependencies(fipsmodule global_target)
Robert Sloan572a4e22017-04-17 10:52:19 -0700253endif()