1include_directories(../../include) 2 3if (${ARCH} STREQUAL "x86_64") 4 set( 5 BCM_ASM_SOURCES 6 7 aesni-gcm-x86_64.${ASM_EXT} 8 aesni-x86_64.${ASM_EXT} 9 aes-x86_64.${ASM_EXT} 10 bsaes-x86_64.${ASM_EXT} 11 ghash-x86_64.${ASM_EXT} 12 md5-x86_64.${ASM_EXT} 13 p256-x86_64-asm.${ASM_EXT} 14 rdrand-x86_64.${ASM_EXT} 15 rsaz-avx2.${ASM_EXT} 16 sha1-x86_64.${ASM_EXT} 17 sha256-x86_64.${ASM_EXT} 18 sha512-x86_64.${ASM_EXT} 19 vpaes-x86_64.${ASM_EXT} 20 x86_64-mont5.${ASM_EXT} 21 x86_64-mont.${ASM_EXT} 22 ) 23endif() 24 25if (${ARCH} STREQUAL "x86") 26 set( 27 BCM_ASM_SOURCES 28 29 aes-586.${ASM_EXT} 30 aesni-x86.${ASM_EXT} 31 bn-586.${ASM_EXT} 32 co-586.${ASM_EXT} 33 ghash-x86.${ASM_EXT} 34 md5-586.${ASM_EXT} 35 sha1-586.${ASM_EXT} 36 sha256-586.${ASM_EXT} 37 sha512-586.${ASM_EXT} 38 vpaes-x86.${ASM_EXT} 39 x86-mont.${ASM_EXT} 40 ) 41endif() 42 43if (${ARCH} STREQUAL "arm") 44 set( 45 BCM_ASM_SOURCES 46 47 aes-armv4.${ASM_EXT} 48 aesv8-armx.${ASM_EXT} 49 armv4-mont.${ASM_EXT} 50 bsaes-armv7.${ASM_EXT} 51 ghash-armv4.${ASM_EXT} 52 ghashv8-armx.${ASM_EXT} 53 sha1-armv4-large.${ASM_EXT} 54 sha256-armv4.${ASM_EXT} 55 sha512-armv4.${ASM_EXT} 56 ) 57endif() 58 59if (${ARCH} STREQUAL "aarch64") 60 set( 61 BCM_ASM_SOURCES 62 63 aesv8-armx.${ASM_EXT} 64 armv8-mont.${ASM_EXT} 65 ghashv8-armx.${ASM_EXT} 66 sha1-armv8.${ASM_EXT} 67 sha256-armv8.${ASM_EXT} 68 sha512-armv8.${ASM_EXT} 69 ) 70endif() 71 72if (${ARCH} STREQUAL "ppc64le") 73 set( 74 BCM_ASM_SOURCES 75 76 aesp8-ppc.${ASM_EXT} 77 ghashp8-ppc.${ASM_EXT} 78 ) 79endif() 80 81perlasm(aes-586.${ASM_EXT} aes/asm/aes-586.pl) 82perlasm(aes-armv4.${ASM_EXT} aes/asm/aes-armv4.pl) 83perlasm(aesni-gcm-x86_64.${ASM_EXT} modes/asm/aesni-gcm-x86_64.pl) 84perlasm(aesni-x86_64.${ASM_EXT} aes/asm/aesni-x86_64.pl) 85perlasm(aesni-x86.${ASM_EXT} aes/asm/aesni-x86.pl) 86perlasm(aesp8-ppc.${ASM_EXT} aes/asm/aesp8-ppc.pl) 87perlasm(aesv8-armx.${ASM_EXT} aes/asm/aesv8-armx.pl) 88perlasm(aes-x86_64.${ASM_EXT} aes/asm/aes-x86_64.pl) 89perlasm(armv4-mont.${ASM_EXT} bn/asm/armv4-mont.pl) 90perlasm(armv8-mont.${ASM_EXT} bn/asm/armv8-mont.pl) 91perlasm(bn-586.${ASM_EXT} bn/asm/bn-586.pl) 92perlasm(bsaes-armv7.${ASM_EXT} aes/asm/bsaes-armv7.pl) 93perlasm(bsaes-x86_64.${ASM_EXT} aes/asm/bsaes-x86_64.pl) 94perlasm(co-586.${ASM_EXT} bn/asm/co-586.pl) 95perlasm(ghash-armv4.${ASM_EXT} modes/asm/ghash-armv4.pl) 96perlasm(ghashp8-ppc.${ASM_EXT} modes/asm/ghashp8-ppc.pl) 97perlasm(ghashv8-armx.${ASM_EXT} modes/asm/ghashv8-armx.pl) 98perlasm(ghash-x86_64.${ASM_EXT} modes/asm/ghash-x86_64.pl) 99perlasm(ghash-x86.${ASM_EXT} modes/asm/ghash-x86.pl) 100perlasm(md5-586.${ASM_EXT} md5/asm/md5-586.pl) 101perlasm(md5-x86_64.${ASM_EXT} md5/asm/md5-x86_64.pl) 102perlasm(p256-x86_64-asm.${ASM_EXT} ec/asm/p256-x86_64-asm.pl) 103perlasm(rdrand-x86_64.${ASM_EXT} rand/asm/rdrand-x86_64.pl) 104perlasm(rsaz-avx2.${ASM_EXT} bn/asm/rsaz-avx2.pl) 105perlasm(sha1-586.${ASM_EXT} sha/asm/sha1-586.pl) 106perlasm(sha1-armv4-large.${ASM_EXT} sha/asm/sha1-armv4-large.pl) 107perlasm(sha1-armv8.${ASM_EXT} sha/asm/sha1-armv8.pl) 108perlasm(sha1-x86_64.${ASM_EXT} sha/asm/sha1-x86_64.pl) 109perlasm(sha256-586.${ASM_EXT} sha/asm/sha256-586.pl) 110perlasm(sha256-armv4.${ASM_EXT} sha/asm/sha256-armv4.pl) 111perlasm(sha256-armv8.${ASM_EXT} sha/asm/sha512-armv8.pl) 112perlasm(sha256-x86_64.${ASM_EXT} sha/asm/sha512-x86_64.pl) 113perlasm(sha512-586.${ASM_EXT} sha/asm/sha512-586.pl) 114perlasm(sha512-armv4.${ASM_EXT} sha/asm/sha512-armv4.pl) 115perlasm(sha512-armv8.${ASM_EXT} sha/asm/sha512-armv8.pl) 116perlasm(sha512-x86_64.${ASM_EXT} sha/asm/sha512-x86_64.pl) 117perlasm(vpaes-x86_64.${ASM_EXT} aes/asm/vpaes-x86_64.pl) 118perlasm(vpaes-x86.${ASM_EXT} aes/asm/vpaes-x86.pl) 119perlasm(x86_64-mont5.${ASM_EXT} bn/asm/x86_64-mont5.pl) 120perlasm(x86_64-mont.${ASM_EXT} bn/asm/x86_64-mont.pl) 121perlasm(x86-mont.${ASM_EXT} bn/asm/x86-mont.pl) 122 123if(FIPS_DELOCATE) 124 add_library( 125 bcm_c_generated_asm 126 127 STATIC 128 129 bcm.c 130 ) 131 132 set_target_properties(bcm_c_generated_asm PROPERTIES COMPILE_OPTIONS "-S") 133 set_target_properties(bcm_c_generated_asm PROPERTIES POSITION_INDEPENDENT_CODE ON) 134 135 function(prepend_path values prefix output) 136 set(result) 137 foreach(value ${values}) 138 list(APPEND result "${prefix}/${value}") 139 endforeach(value) 140 set(${output} ${result} PARENT_SCOPE) 141 endfunction() 142 143 prepend_path("${BCM_ASM_SOURCES}" "${CMAKE_CURRENT_BINARY_DIR}" DELOCATE_ASM_ARGS) 144 145 add_custom_command( 146 OUTPUT bcm-delocated.S 147 COMMAND ${GO_EXECUTABLE} run util/fipstools/delocate.go util/fipstools/delocate.peg.go util/fipstools/ar.go util/fipstools/const.go -a $<TARGET_FILE:bcm_c_generated_asm> -o ${CMAKE_CURRENT_BINARY_DIR}/bcm-delocated.S ${DELOCATE_ASM_ARGS} 148 DEPENDS bcm_c_generated_asm ${BCM_ASM_SOURCES} ${CMAKE_SOURCE_DIR}/util/fipstools/delocate.go ${CMAKE_SOURCE_DIR}/util/fipstools/delocate.peg.go ${CMAKE_SOURCE_DIR}/util/fipstools/ar.go ${CMAKE_SOURCE_DIR}/util/fipstools/const.go 149 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} 150 ) 151 152 add_library( 153 bcm_hashunset 154 155 STATIC 156 157 bcm-delocated.S 158 ) 159 160 set_target_properties(bcm_hashunset PROPERTIES POSITION_INDEPENDENT_CODE ON) 161 set_target_properties(bcm_hashunset PROPERTIES LINKER_LANGUAGE C) 162 163 add_custom_command( 164 OUTPUT bcm.o 165 COMMAND ${GO_EXECUTABLE} run util/fipstools/inject-hash.go util/fipstools/ar.go util/fipstools/const.go -o ${CMAKE_CURRENT_BINARY_DIR}/bcm.o -in-archive $<TARGET_FILE:bcm_hashunset> 166 DEPENDS bcm_hashunset ${CMAKE_SOURCE_DIR}/util/fipstools/inject-hash.go ${CMAKE_SOURCE_DIR}/util/fipstools/ar.go ${CMAKE_SOURCE_DIR}/util/fipstools/const.go 167 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} 168 ) 169 170 # The outputs of add_custom_command cannot be referenced outside of the 171 # CMakeLists.txt that defines it. Thus we have to wrap bcm.o in a custom target 172 # so that crypto can depend on it. 173 add_custom_target(bcm_o_target DEPENDS bcm.o) 174 175 add_library( 176 fipsmodule 177 178 OBJECT 179 180 is_fips.c 181 ) 182 183 set_target_properties(fipsmodule PROPERTIES LINKER_LANGUAGE C) 184else() 185 add_library( 186 fipsmodule 187 188 OBJECT 189 190 bcm.c 191 is_fips.c 192 193 ${BCM_ASM_SOURCES} 194 ) 195endif() 196