diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt --- a/compiler-rt/CMakeLists.txt +++ b/compiler-rt/CMakeLists.txt @@ -18,6 +18,15 @@ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules" ) +if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") + set(CMAKE_C_ARCHIVE_CREATE " -X32_64 qc ") + set(CMAKE_CXX_ARCHIVE_CREATE " -X32_64 qc ") + set(CMAKE_C_ARCHIVE_APPEND " -X32_64 q ") + set(CMAKE_CXX_ARCHIVE_APPEND " -X32_64 q ") + set(CMAKE_C_ARCHIVE_FINISH " -X32_64 ") + set(CMAKE_CXX_ARCHIVE_FINISH " -X32_64 ") +endif() + if(CMAKE_CONFIGURATION_TYPES) set(CMAKE_CFG_RESOLVED_INTDIR "${CMAKE_CFG_INTDIR}/") else() @@ -27,50 +36,6 @@ include(base-config-ix) include(CompilerRTUtils) -option(COMPILER_RT_BUILD_BUILTINS "Build builtins" ON) -mark_as_advanced(COMPILER_RT_BUILD_BUILTINS) -option(COMPILER_RT_BUILD_CRT "Build crtbegin.o/crtend.o" ON) -mark_as_advanced(COMPILER_RT_BUILD_CRT) -option(COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY "Use eh_frame in crtbegin.o/crtend.o" ON) -mark_as_advanced(COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY) -option(COMPILER_RT_BUILD_SANITIZERS "Build sanitizers" ON) -mark_as_advanced(COMPILER_RT_BUILD_SANITIZERS) -option(COMPILER_RT_BUILD_XRAY "Build xray" ON) -mark_as_advanced(COMPILER_RT_BUILD_XRAY) -option(COMPILER_RT_BUILD_LIBFUZZER "Build libFuzzer" ON) -mark_as_advanced(COMPILER_RT_BUILD_LIBFUZZER) -option(COMPILER_RT_BUILD_PROFILE "Build profile runtime" ON) -mark_as_advanced(COMPILER_RT_BUILD_PROFILE) -option(COMPILER_RT_BUILD_MEMPROF "Build memory profiling runtime" ON) -mark_as_advanced(COMPILER_RT_BUILD_MEMPROF) -option(COMPILER_RT_BUILD_XRAY_NO_PREINIT "Build xray with no preinit patching" OFF) -mark_as_advanced(COMPILER_RT_BUILD_XRAY_NO_PREINIT) - -set(COMPILER_RT_ASAN_SHADOW_SCALE "" - CACHE STRING "Override the shadow scale to be used in ASan runtime") - -if (NOT COMPILER_RT_ASAN_SHADOW_SCALE STREQUAL "") - # Check that the shadow scale value is valid. - if (NOT (COMPILER_RT_ASAN_SHADOW_SCALE GREATER -1 AND - COMPILER_RT_ASAN_SHADOW_SCALE LESS 8)) - message(FATAL_ERROR " - Invalid ASan Shadow Scale '${COMPILER_RT_ASAN_SHADOW_SCALE}'.") - endif() - - set(COMPILER_RT_ASAN_SHADOW_SCALE_LLVM_FLAG - -mllvm -asan-mapping-scale=${COMPILER_RT_ASAN_SHADOW_SCALE}) - set(COMPILER_RT_ASAN_SHADOW_SCALE_DEFINITION - ASAN_SHADOW_SCALE=${COMPILER_RT_ASAN_SHADOW_SCALE}) - set(COMPILER_RT_ASAN_SHADOW_SCALE_FLAG - -D${COMPILER_RT_ASAN_SHADOW_SCALE_DEFINITION}) -endif() - -set(COMPILER_RT_HWASAN_WITH_INTERCEPTORS ON CACHE BOOL - "Enable libc interceptors in HWASan (testing mode)") - -set(COMPILER_RT_BAREMETAL_BUILD OFF CACHE BOOL - "Build for a bare-metal target.") - if (COMPILER_RT_STANDALONE_BUILD) load_llvm_config() if (TARGET intrinsics_gen) @@ -122,6 +87,71 @@ endif() pythonize_bool(ANDROID) +option(COMPILER_RT_BUILD_BUILTINS "Build builtins" ON) +mark_as_advanced(COMPILER_RT_BUILD_BUILTINS) +option(COMPILER_RT_BUILD_CRT "Build crtbegin.o/crtend.o" ON) +mark_as_advanced(COMPILER_RT_BUILD_CRT) +option(COMPILER_RT_BUILTINS_ENABLE_PIC "Use -fPIC for the builtin library" ON) +mark_as_advanced(COMPILER_RT_BUILTINS_ENABLE_PIC) +option(COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY "Use eh_frame in crtbegin.o/crtend.o" ON) +mark_as_advanced(COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY) + +option(COMPILER_RT_BOOTSTRAP "Build just builtins and crt" OFF) +mark_as_advanced(COMPILER_RT_BOOTSTRAP) + +if(COMPILER_RT_BOOTSTRAP) + include(AddCompilerRT) + + if(COMPILER_RT_BUILD_BUILTINS) + set(COMPILER_RT_BUILTINS_STANDALONE_BUILD TRUE) + add_subdirectory(lib/builtins) + endif() + if(COMPILER_RT_BUILD_CRT) + set(COMPILER_RT_CRT_STANDALONE_BUILD TRUE) + add_subdirectory(lib/crt) + endif() + + return() +endif() + +option(COMPILER_RT_BUILD_SANITIZERS "Build sanitizers" ON) +mark_as_advanced(COMPILER_RT_BUILD_SANITIZERS) +option(COMPILER_RT_BUILD_XRAY "Build xray" ON) +mark_as_advanced(COMPILER_RT_BUILD_XRAY) +option(COMPILER_RT_BUILD_LIBFUZZER "Build libFuzzer" ON) +mark_as_advanced(COMPILER_RT_BUILD_LIBFUZZER) +option(COMPILER_RT_BUILD_PROFILE "Build profile runtime" ON) +mark_as_advanced(COMPILER_RT_BUILD_PROFILE) +option(COMPILER_RT_BUILD_MEMPROF "Build memory profiling runtime" ON) +mark_as_advanced(COMPILER_RT_BUILD_MEMPROF) +option(COMPILER_RT_BUILD_XRAY_NO_PREINIT "Build xray with no preinit patching" OFF) +mark_as_advanced(COMPILER_RT_BUILD_XRAY_NO_PREINIT) + +set(COMPILER_RT_ASAN_SHADOW_SCALE "" + CACHE STRING "Override the shadow scale to be used in ASan runtime") + +if (NOT COMPILER_RT_ASAN_SHADOW_SCALE STREQUAL "") + # Check that the shadow scale value is valid. + if (NOT (COMPILER_RT_ASAN_SHADOW_SCALE GREATER -1 AND + COMPILER_RT_ASAN_SHADOW_SCALE LESS 8)) + message(FATAL_ERROR " + Invalid ASan Shadow Scale '${COMPILER_RT_ASAN_SHADOW_SCALE}'.") + endif() + + set(COMPILER_RT_ASAN_SHADOW_SCALE_LLVM_FLAG + -mllvm -asan-mapping-scale=${COMPILER_RT_ASAN_SHADOW_SCALE}) + set(COMPILER_RT_ASAN_SHADOW_SCALE_DEFINITION + ASAN_SHADOW_SCALE=${COMPILER_RT_ASAN_SHADOW_SCALE}) + set(COMPILER_RT_ASAN_SHADOW_SCALE_FLAG + -D${COMPILER_RT_ASAN_SHADOW_SCALE_DEFINITION}) +endif() + +set(COMPILER_RT_HWASAN_WITH_INTERCEPTORS ON CACHE BOOL + "Enable libc interceptors in HWASan (testing mode)") + +set(COMPILER_RT_BAREMETAL_BUILD OFF CACHE BOOL + "Build for a bare-metal target.") + set(COMPILER_RT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(COMPILER_RT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) @@ -546,15 +576,6 @@ set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /IGNORE:4221") endif() -if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") - set(CMAKE_C_ARCHIVE_CREATE " -X32_64 qc ") - set(CMAKE_CXX_ARCHIVE_CREATE " -X32_64 qc ") - set(CMAKE_C_ARCHIVE_APPEND " -X32_64 q ") - set(CMAKE_CXX_ARCHIVE_APPEND " -X32_64 q ") - set(CMAKE_C_ARCHIVE_FINISH " -X32_64 ") - set(CMAKE_CXX_ARCHIVE_FINISH " -X32_64 ") -endif() - add_subdirectory(include) option(COMPILER_RT_USE_LIBCXX 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 @@ -202,9 +202,9 @@ if(COMPILER_RT_BUILTINS_STANDALONE_BUILD) test_targets() endif() - # Architectures supported by compiler-rt libraries. + # Architectures supported by compiler-rt builtins library. filter_available_targets(BUILTIN_SUPPORTED_ARCH ${ALL_BUILTIN_SUPPORTED_ARCH}) endif() -message(STATUS "Builtin supported architectures: ${BUILTIN_SUPPORTED_ARCH}") +message(STATUS "Supported architectures for builtin: ${BUILTIN_SUPPORTED_ARCH}") diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake --- a/compiler-rt/cmake/config-ix.cmake +++ b/compiler-rt/cmake/config-ix.cmake @@ -299,7 +299,6 @@ ${ARM32} ${ARM64} ${MIPS32} ${MIPS64} ${S390X} ${SPARC} ${SPARCV9}) set(ALL_ASAN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${RISCV64} ${MIPS32} ${MIPS64} ${PPC64} ${S390X} ${SPARC} ${SPARCV9}) -set(ALL_CRT_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${RISCV32} ${RISCV64} ${VE}) set(ALL_DFSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64}) if(ANDROID) @@ -589,7 +588,6 @@ SANITIZER_COMMON_SUPPORTED_ARCH) else() - filter_available_targets(CRT_SUPPORTED_ARCH ${ALL_CRT_SUPPORTED_ARCH}) # Architectures supported by compiler-rt libraries. filter_available_targets(SANITIZER_COMMON_SUPPORTED_ARCH ${ALL_SANITIZER_COMMON_SUPPORTED_ARCH}) diff --git a/compiler-rt/cmake/crt-config-ix.cmake b/compiler-rt/cmake/crt-config-ix.cmake new file mode 100644 --- /dev/null +++ b/compiler-rt/cmake/crt-config-ix.cmake @@ -0,0 +1,51 @@ +include(BuiltinTests) +include(CheckCSourceCompiles) + +# Make all the tests only check the compiler +set(TEST_COMPILE_ONLY On) + +builtin_check_c_compiler_flag(-fPIC COMPILER_RT_HAS_FPIC_FLAG) +builtin_check_c_compiler_flag(-std=c11 COMPILER_RT_HAS_STD_C11_FLAG) +builtin_check_c_compiler_flag(-Wno-pedantic COMPILER_RT_HAS_WNO_PEDANTIC) +builtin_check_c_compiler_flag(-fno-lto COMPILER_RT_HAS_FNO_LTO_FLAG) +builtin_check_c_compiler_flag(-fno-profile-generate COMPILER_RT_HAS_FNO_PROFILE_GENERATE_FLAG) +builtin_check_c_compiler_flag(-fno-profile-instr-generate COMPILER_RT_HAS_FNO_PROFILE_INSTR_GENERATE_FLAG) +builtin_check_c_compiler_flag(-fno-profile-instr-use COMPILER_RT_HAS_FNO_PROFILE_INSTR_USE_FLAG) + +if(ANDROID) + set(OS_NAME "Android") +else() + set(OS_NAME "${CMAKE_SYSTEM_NAME}") +endif() + +set(ARM64 aarch64) +set(ARM32 arm armhf armv6m armv7m armv7em armv7 armv7s armv7k) +set(X86 i386) +set(X86_64 x86_64) +set(RISCV32 riscv32) +set(RISCV64 riscv64) +set(VE ve) + +set(ALL_CRT_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${RISCV32} ${RISCV64} ${VE}) + +include(CompilerRTUtils) + +if(NOT APPLE) + # If we're not building the builtins standalone, just rely on the tests in + # config-ix.cmake to tell us what to build. Otherwise we need to do some leg + # work here... + if(COMPILER_RT_CRT_STANDALONE_BUILD) + test_targets() + endif() + # Architectures supported by compiler-rt crt library. + filter_available_targets(CRT_SUPPORTED_ARCH + ${ALL_CRT_SUPPORTED_ARCH}) + + if (CRT_SUPPORTED_ARCH AND OS_NAME MATCHES "Linux" AND NOT LLVM_USE_SANITIZER) + set(COMPILER_RT_HAS_CRT TRUE) + else() + set(COMPILER_RT_HAS_CRT FALSE) + endif() +endif() + +message(STATUS "Supported architectures for crt: ${CRT_SUPPORTED_ARCH}") 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 @@ -2,48 +2,21 @@ # generic implementations of the core runtime library along with optimized # architecture-specific code in various subdirectories. -if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) cmake_minimum_required(VERSION 3.13.4) set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) project(CompilerRTBuiltins C ASM) - set(COMPILER_RT_STANDALONE_BUILD TRUE) - set(COMPILER_RT_BUILTINS_STANDALONE_BUILD TRUE) - list(INSERT CMAKE_MODULE_PATH 0 - "${CMAKE_SOURCE_DIR}/../../cmake" - "${CMAKE_SOURCE_DIR}/../../cmake/Modules") - include(base-config-ix) - include(CompilerRTUtils) - - load_llvm_config() - construct_compiler_rt_default_triple() - - if(APPLE) - include(CompilerRTDarwinUtils) - endif() - if(APPLE) - include(UseLibtool) - endif() - include(AddCompilerRT) - - if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") - set(CMAKE_C_ARCHIVE_CREATE " -X32_64 qc ") - set(CMAKE_CXX_ARCHIVE_CREATE " -X32_64 qc ") - set(CMAKE_C_ARCHIVE_APPEND " -X32_64 q ") - set(CMAKE_CXX_ARCHIVE_APPEND " -X32_64 q ") - set(CMAKE_C_ARCHIVE_FINISH " -X32_64 ") - set(CMAKE_CXX_ARCHIVE_FINISH " -X32_64 ") - endif() -endif() -if (COMPILER_RT_STANDALONE_BUILD) - # When compiler-rt is being built standalone, possibly as a cross-compilation - # target, the target may or may not want position independent code. This - # option provides an avenue through which the flag may be controlled when an - # LLVM configuration is not being utilized. - option(COMPILER_RT_BUILTINS_ENABLE_PIC - "Turns on or off -fPIC for the builtin library source" - ON) + if(NOT _BUILTINS_PROCESSED) + set(COMPILER_RT_BUILD_BUILTINS TRUE) + set(COMPILER_RT_BUILD_CRT FALSE) + set(COMPILER_RT_BOOTSTRAP TRUE) + set(COMPILER_RT_STANDALONE_BUILD TRUE) + include(../../CMakeLists.txt) + set(_BUILTINS_PROCESSED TRUE) + return() + endif() endif() include(builtin-config-ix) diff --git a/compiler-rt/lib/crt/CMakeLists.txt b/compiler-rt/lib/crt/CMakeLists.txt --- a/compiler-rt/lib/crt/CMakeLists.txt +++ b/compiler-rt/lib/crt/CMakeLists.txt @@ -1,3 +1,5 @@ +include(crt-config-ix) + add_compiler_rt_component(crt) function(check_cxx_section_exists section output) diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -79,14 +79,16 @@ endif() llvm_ExternalProject_Add(builtins - ${compiler_rt_path}/lib/builtins + ${compiler_rt_path} DEPENDS ${ARG_DEPENDS} CMAKE_ARGS -DLLVM_LIBRARY_OUTPUT_INTDIR=${LLVM_LIBRARY_DIR} -DLLVM_RUNTIME_OUTPUT_INTDIR=${LLVM_TOOLS_BINARY_DIR} -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_TRIPLE} -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default} -DCMAKE_C_COMPILER_WORKS=ON + -DCMAKE_CXX_COMPILER_WORKS=ON -DCMAKE_ASM_COMPILER_WORKS=ON + -DCOMPILER_RT_BOOTSTRAP=ON ${BUILTINS_CMAKE_ARGS} PASSTHROUGH_PREFIXES COMPILER_RT USE_TOOLCHAIN @@ -110,15 +112,17 @@ endforeach() llvm_ExternalProject_Add(builtins-${target} - ${compiler_rt_path}/lib/builtins + ${compiler_rt_path} DEPENDS ${ARG_DEPENDS} CMAKE_ARGS -DLLVM_LIBRARY_OUTPUT_INTDIR=${LLVM_LIBRARY_DIR} -DLLVM_RUNTIME_OUTPUT_INTDIR=${LLVM_TOOLS_BINARY_DIR} -DLLVM_DEFAULT_TARGET_TRIPLE=${target} -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON -DCMAKE_C_COMPILER_WORKS=ON + -DCMAKE_CXX_COMPILER_WORKS=ON -DCMAKE_ASM_COMPILER_WORKS=ON -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON + -DCOMPILER_RT_BOOTSTRAP=ON ${${target}_extra_args} USE_TOOLCHAIN TARGET_TRIPLE ${target} @@ -221,7 +225,8 @@ ${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes DEPENDS ${ARG_DEPENDS} # Builtins were built separately above - CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off + CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=OFF + -DCOMPILER_RT_BUILD_CRT=OFF -DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS} -DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_TRIPLE} -DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED} @@ -321,7 +326,8 @@ ${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes DEPENDS ${${name}_deps} # Builtins were built separately above - CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=Off + CMAKE_ARGS -DCOMPILER_RT_BUILD_BUILTINS=OFF + -DCOMPILER_RT_BUILD_CRT=OFF -DLLVM_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS} -DLLVM_DEFAULT_TARGET_TRIPLE=${target} -DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED}