delocate: preprocess perlasm output on Aarch64 Aarch64 perlasm outputs need to be run via the C preprocessor before being parsed by delocate. Change-Id: Ie420388e0e1707cb064d696ee8f87728cab9a36e Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/44847 Reviewed-by: David Benjamin <davidben@google.com> Commit-Queue: Adam Langley <agl@google.com>
diff --git a/crypto/fipsmodule/CMakeLists.txt b/crypto/fipsmodule/CMakeLists.txt index a675fbd..b74d50c 100644 --- a/crypto/fipsmodule/CMakeLists.txt +++ b/crypto/fipsmodule/CMakeLists.txt
@@ -124,6 +124,17 @@ perlasm(x86_64-mont.${ASM_EXT} bn/asm/x86_64-mont.pl) perlasm(x86-mont.${ASM_EXT} bn/asm/x86-mont.pl) +function(cpreprocess dest src) + add_custom_command( + OUTPUT ${dest} + COMMAND cpp ${src} -I${PROJECT_SOURCE_DIR}/include > ${dest} + DEPENDS + ${src} + ${PROJECT_SOURCE_DIR}/include/openssl/arm_arch.h + WORKING_DIRECTORY . + ) +endfunction() + if(FIPS_DELOCATE) if(FIPS_SHARED) error("Can't set both delocate and shared mode for FIPS build") @@ -144,6 +155,18 @@ bcm.c ) + if(${ARCH} STREQUAL "aarch64") + # Perlasm output on Aarch64 needs to pass through the C preprocessor before + # it can be parsed by delocate. + foreach(asm ${BCM_ASM_SOURCES}) + cpreprocess(${asm}.s ${asm}) + list(APPEND BCM_ASM_PROCESSED_SOURCES "${asm}.s") + endforeach() + else() + # No preprocessing is required on other platforms. + set(BCM_ASM_PROCESSED_SOURCES ${BCM_ASM_SOURCES}) + endif() + add_dependencies(bcm_c_generated_asm global_target) set_target_properties(bcm_c_generated_asm PROPERTIES COMPILE_OPTIONS "-S") @@ -152,8 +175,8 @@ go_executable(delocate boringssl.googlesource.com/boringssl/util/fipstools/delocate) add_custom_command( OUTPUT bcm-delocated.S - COMMAND ./delocate -a $<TARGET_FILE:bcm_c_generated_asm> -o bcm-delocated.S ${BCM_ASM_SOURCES} - DEPENDS bcm_c_generated_asm delocate ${BCM_ASM_SOURCES} + COMMAND ./delocate -a $<TARGET_FILE:bcm_c_generated_asm> -o bcm-delocated.S ${BCM_ASM_PROCESSED_SOURCES} + DEPENDS bcm_c_generated_asm delocate ${BCM_ASM_PROCESSED_SOURCES} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )