blob: d1e2cb9d63d01481937631be198a1b0e8d6d2858 [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)
Adam Vartanianbfcf3a72018-08-10 14:55:24 +0100132 if(OPENSSL_NO_ASM)
133 # If OPENSSL_NO_ASM was defined then ASM will not have been enabled, but in
134 # FIPS mode we have to have it because the module build requires going via
135 # textual assembly.
136 enable_language(ASM)
137 endif()
138
Robert Sloan572a4e22017-04-17 10:52:19 -0700139 add_library(
140 bcm_c_generated_asm
141
142 STATIC
143
144 bcm.c
145 )
146
Robert Sloan726e9d12018-09-11 11:45:04 -0700147 add_dependencies(bcm_c_generated_asm global_target)
148
Robert Sloan2424d842017-05-01 07:46:28 -0700149 set_target_properties(bcm_c_generated_asm PROPERTIES COMPILE_OPTIONS "-S")
150 set_target_properties(bcm_c_generated_asm PROPERTIES POSITION_INDEPENDENT_CODE ON)
Robert Sloan572a4e22017-04-17 10:52:19 -0700151
Robert Sloanf573be72018-09-17 15:29:11 -0700152 go_executable(delocate boringssl.googlesource.com/boringssl/util/fipstools/delocate)
Robert Sloan572a4e22017-04-17 10:52:19 -0700153 add_custom_command(
154 OUTPUT bcm-delocated.S
Robert Sloanf573be72018-09-17 15:29:11 -0700155 COMMAND ./delocate -a $<TARGET_FILE:bcm_c_generated_asm> -o bcm-delocated.S ${BCM_ASM_SOURCES}
156 DEPENDS bcm_c_generated_asm delocate ${BCM_ASM_SOURCES}
157 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
Robert Sloan572a4e22017-04-17 10:52:19 -0700158 )
159
160 add_library(
161 bcm_hashunset
162
163 STATIC
164
165 bcm-delocated.S
166 )
167
Robert Sloan726e9d12018-09-11 11:45:04 -0700168 add_dependencies(bcm_hashunset global_target)
169
Robert Sloan572a4e22017-04-17 10:52:19 -0700170 set_target_properties(bcm_hashunset PROPERTIES POSITION_INDEPENDENT_CODE ON)
171 set_target_properties(bcm_hashunset PROPERTIES LINKER_LANGUAGE C)
172
Robert Sloanf068def2018-10-10 18:45:40 -0700173 go_executable(inject_hash
174 boringssl.googlesource.com/boringssl/util/fipstools/inject_hash)
Robert Sloan572a4e22017-04-17 10:52:19 -0700175 add_custom_command(
176 OUTPUT bcm.o
Robert Sloanf068def2018-10-10 18:45:40 -0700177 COMMAND ./inject_hash -o bcm.o -in-archive $<TARGET_FILE:bcm_hashunset>
178 DEPENDS bcm_hashunset inject_hash
Robert Sloanf573be72018-09-17 15:29:11 -0700179 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
Robert Sloan572a4e22017-04-17 10:52:19 -0700180 )
181
182 # The outputs of add_custom_command cannot be referenced outside of the
183 # CMakeLists.txt that defines it. Thus we have to wrap bcm.o in a custom target
184 # so that crypto can depend on it.
185 add_custom_target(bcm_o_target DEPENDS bcm.o)
186
187 add_library(
188 fipsmodule
189
190 OBJECT
191
192 is_fips.c
193 )
194
Robert Sloan726e9d12018-09-11 11:45:04 -0700195 add_dependencies(fipsmodule global_target)
196
Robert Sloan572a4e22017-04-17 10:52:19 -0700197 set_target_properties(fipsmodule PROPERTIES LINKER_LANGUAGE C)
198else()
199 add_library(
200 fipsmodule
201
202 OBJECT
203
204 bcm.c
205 is_fips.c
206
207 ${BCM_ASM_SOURCES}
208 )
Robert Sloan726e9d12018-09-11 11:45:04 -0700209
210 add_dependencies(fipsmodule global_target)
Robert Sloan572a4e22017-04-17 10:52:19 -0700211endif()