From 33b740f8dc3496237619a7bc6722f23655cb1f94 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Sun, 13 Dec 2020 16:48:26 +0200 Subject: [PATCH] [CMake][compiler-rt][AArch64] Avoid preprocessing LSE builtins separately Invoking the preprocessor ourselves is fragile and would require us to replicate CMake's handling of definitions, compiler flags, etc for proper compatibility. In my toolchain builds this notably resulted in a bunch of warnings from unused flags as my CMAKE_C_FLAGS includes CPU-specific optimization options. Notably this part was already duplicating the logic for VISIBILITY_HIDDEN define. Instead, symlink the files and set the proper set of defines on each. This should also be faster as we avoid invoking the compiler multiple times. Fixes https://llvm.org/PR48494 Reviewed By: ilinpv Differential Revision: https://reviews.llvm.org/D93178 --- compiler-rt/lib/builtins/CMakeLists.txt | 25 ++++++++++--------------- compiler-rt/lib/builtins/aarch64/lse.S | 2 +- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt index d84f4d0..5259e95 100644 --- a/compiler-rt/lib/builtins/CMakeLists.txt +++ b/compiler-rt/lib/builtins/CMakeLists.txt @@ -509,31 +509,24 @@ set(aarch64_SOURCES ) # Generate outline atomics helpers from lse.S base -set(CUSTOM_FLAGS ${CMAKE_C_FLAGS}) -if(NOT ANDROID) - append_list_if(COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG -DVISIBILITY_HIDDEN CUSTOM_FLAGS) -endif() -append_list_if(COMPILER_RT_HAS_ASM_LSE -DHAS_ASM_LSE CUSTOM_FLAGS) -string(REPLACE " " "\t" CUSTOM_FLAGS "${CUSTOM_FLAGS}") set(OA_HELPERS_DIR "${CMAKE_CURRENT_BINARY_DIR}/outline_atomic_helpers.dir") -file(MAKE_DIRECTORY ${OA_HELPERS_DIR}) +file(MAKE_DIRECTORY "${OA_HELPERS_DIR}") foreach(pat cas swp ldadd ldclr ldeor ldset) foreach(size 1 2 4 8 16) foreach(model 1 2 3 4) if(pat STREQUAL "cas" OR NOT size STREQUAL "16") - set(helper_asm ${OA_HELPERS_DIR}/outline_atomic_${pat}${size}_${model}.S) + set(helper_asm "${OA_HELPERS_DIR}/outline_atomic_${pat}${size}_${model}.S") add_custom_command( OUTPUT ${helper_asm} - COMMAND ${CMAKE_C_COMPILER} -E ${CUSTOM_FLAGS} -DL_${pat} -DSIZE=${size} -DMODEL=${model} - ${CMAKE_CURRENT_SOURCE_DIR}/aarch64/lse.S -o ${helper_asm} - DEPENDS aarch64/lse.S assembly.h + COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_CURRENT_SOURCE_DIR}/aarch64/lse.S" "${helper_asm}" ) - set_source_files_properties(${helper_asm} PROPERTIES GENERATED TRUE) - set(aarch64_SOURCES - ${aarch64_SOURCES} - ${helper_asm} + set_source_files_properties("${helper_asm}" + PROPERTIES + COMPILE_DEFINITIONS "L_${pat};SIZE=${size};MODEL=${model}" + INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}" ) + list(APPEND aarch64_SOURCES "${helper_asm}") endif() endforeach(model) endforeach(size) @@ -687,6 +680,8 @@ else () append_list_if(COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG VISIBILITY_HIDDEN BUILTIN_DEFS) endif() + append_list_if(COMPILER_RT_HAS_ASM_LSE HAS_ASM_LSE BUILTIN_DEFS) + foreach (arch ${BUILTIN_SUPPORTED_ARCH}) if (CAN_TARGET_${arch}) # For ARM archs, exclude any VFP builtins if VFP is not supported diff --git a/compiler-rt/lib/builtins/aarch64/lse.S b/compiler-rt/lib/builtins/aarch64/lse.S index 4c75fa5..f030d5d 100644 --- a/compiler-rt/lib/builtins/aarch64/lse.S +++ b/compiler-rt/lib/builtins/aarch64/lse.S @@ -2,7 +2,7 @@ // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -#include "../assembly.h" +#include "assembly.h" // Out-of-line LSE atomics helpers. Ported from libgcc library. // N = {1, 2, 4, 8} -- 2.7.4