diff --git a/compiler-rt/cmake/builtin-config-ix.cmake b/compiler-rt/cmake/builtin-config-ix.cmake --- a/compiler-rt/cmake/builtin-config-ix.cmake +++ b/compiler-rt/cmake/builtin-config-ix.cmake @@ -22,22 +22,6 @@ } ") -builtin_check_c_compiler_source(COMPILER_RT_HAS_FLOAT16 -" -_Float16 foo(_Float16 x) { - return x; -} -" -) - -builtin_check_c_compiler_source(COMPILER_RT_HAS_BFLOAT16 -" -__bf16 foo(__bf16 x) { - return x; -} -" -) - builtin_check_c_compiler_source(COMPILER_RT_HAS_ASM_LSE " asm(\".arch armv8-a+lse\"); diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt --- a/compiler-rt/lib/builtins/CMakeLists.txt +++ b/compiler-rt/lib/builtins/CMakeLists.txt @@ -58,6 +58,7 @@ endif() include(builtin-config-ix) +include(CMakePushCheckState) if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") include(CompilerRTAIXUtils) @@ -190,14 +191,11 @@ umodti3.c ) -# Build BF16 files only when "__bf16" is available. -if(COMPILER_RT_HAS_BFLOAT16 AND NOT APPLE) - set(GENERIC_SOURCES - ${GENERIC_SOURCES} +# We only build BF16 files when "__bf16" is available. +set(BF16_SOURCES truncdfbf2.c truncsfbf2.c - ) -endif() +) # TODO: Several "tf" files (and divtc3.c, but not multc3.c) are in # GENERIC_SOURCES instead of here. @@ -751,8 +749,6 @@ append_list_if(COMPILER_RT_ENABLE_CET -fcf-protection=full BUILTIN_CFLAGS) endif() - append_list_if(COMPILER_RT_HAS_FLOAT16 -DCOMPILER_RT_HAS_FLOAT16 BUILTIN_CFLAGS) - append_list_if(COMPILER_RT_HAS_STD_C11_FLAG -std=c11 BUILTIN_CFLAGS) # These flags would normally be added to CMAKE_C_FLAGS by the llvm @@ -784,7 +780,11 @@ foreach (arch ${BUILTIN_SUPPORTED_ARCH}) if (CAN_TARGET_${arch}) + cmake_push_check_state() + # TODO: we should probably most more of the checks in builtin-config depend on the target flags. + message(STATUS "Performing additional configure checks with target flags: ${TARGET_${arch}_CFLAGS}") set(BUILTIN_CFLAGS_${arch} ${BUILTIN_CFLAGS}) + list(APPEND CMAKE_REQUIRED_FLAGS ${TARGET_${arch}_CFLAGS} ${BUILTIN_CFLAGS_${arch}}) # For ARM archs, exclude any VFP builtins if VFP is not supported if (${arch} MATCHES "^(arm|armhf|armv7|armv7s|armv7k|armv7m|armv7em|armv8m.main|armv8.1m.main)$") string(REPLACE ";" " " _TARGET_${arch}_CFLAGS "${TARGET_${arch}_CFLAGS}") @@ -803,6 +803,16 @@ endif() endif() endif() + check_c_source_compiles("_Float16 foo(_Float16 x) { return x; }" + COMPILER_RT_HAS_${arch}_FLOAT16) + append_list_if(COMPILER_RT_HAS_${arch}_FLOAT16 -DCOMPILER_RT_HAS_FLOAT16 BUILTIN_CFLAGS_${arch}) + check_c_source_compiles("__bf16 foo(__bf16 x) { return x; }" + COMPILER_RT_HAS_${arch}_BFLOAT16) + # Build BF16 files only when "__bf16" is available. + # FIXME: why is this disabled for APPLE? D131147 does not explain it. + if(COMPILER_RT_HAS_${arch}_BFLOAT16 AND NOT APPLE) + list(APPEND ${arch}_SOURCES ${BF16_SOURCES}) + endif() # Remove a generic C builtin when an arch-specific builtin is specified. filter_builtin_sources(${arch}_SOURCES ${arch}) @@ -837,6 +847,7 @@ DEFS ${BUILTIN_DEFS} CFLAGS ${BUILTIN_CFLAGS_${arch}} PARENT_TARGET builtins) + cmake_pop_check_state() endif () endforeach () endif ()