diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt --- a/compiler-rt/CMakeLists.txt +++ b/compiler-rt/CMakeLists.txt @@ -33,45 +33,12 @@ option(COMPILER_RT_BUILD_BUILTINS "Build builtins" ON) mark_as_advanced(COMPILER_RT_BUILD_BUILTINS) +option(COMPILER_RT_BUILTINS_ENABLE_PIC "Use -fPIC for the builtin library" ON) +mark_as_advanced(COMPILER_RT_BUILTINS_ENABLE_PIC) 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_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() @@ -122,6 +89,69 @@ endif() pythonize_bool(ANDROID) +option(COMPILER_RT_BUILTINS_ONLY "Build just builtins and crt" OFF) + +if(COMPILER_RT_BUILTINS_ONLY) + include(AddCompilerRT) + + if(COMPILER_RT_STANDALONE_BUILD) + set(COMPILER_RT_BUILTINS_STANDALONE_BUILD TRUE) + 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() + + if(COMPILER_RT_BUILD_BUILTINS) + add_subdirectory(lib/builtins) + endif() + if(COMPILER_RT_BUILD_CRT AND COMPILER_RT_HAS_CRT) + 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_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(ANDROID_NDK_VERSION 18 CACHE STRING "Set this to the Android NDK version that you are using") 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 @@ -13,6 +13,7 @@ builtin_check_c_compiler_flag(-fomit-frame-pointer COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG) builtin_check_c_compiler_flag(-ffreestanding COMPILER_RT_HAS_FREESTANDING_FLAG) builtin_check_c_compiler_flag(-fxray-instrument COMPILER_RT_HAS_XRAY_COMPILER_FLAG) +builtin_check_c_compiler_flag(-Wno-pedantic COMPILER_RT_HAS_WNO_PEDANTIC) builtin_check_c_compiler_source(COMPILER_RT_HAS_ATOMIC_KEYWORD " @@ -46,11 +47,18 @@ set(X86_64 x86_64 x86_64h) endif() +if(ANDROID) + set(OS_NAME "Android") +else() + set(OS_NAME "${CMAKE_SYSTEM_NAME}") +endif() + set(ALL_BUILTIN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${HEXAGON} ${MIPS32} ${MIPS64} ${PPC32} ${PPC64} ${RISCV32} ${RISCV64} ${SPARC} ${SPARCV9} ${WASM32} ${WASM64} ${VE}) +set(ALL_CRT_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${RISCV32} ${RISCV64}) include(CompilerRTUtils) include(CompilerRTDarwinUtils) @@ -192,6 +200,15 @@ # Architectures supported by compiler-rt libraries. filter_available_targets(BUILTIN_SUPPORTED_ARCH ${ALL_BUILTIN_SUPPORTED_ARCH}) + filter_available_targets(CRT_SUPPORTED_ARCH + ${ALL_CRT_SUPPORTED_ARCH}) + + if (CRT_SUPPORTED_ARCH AND OS_NAME MATCHES "Linux") + set(COMPILER_RT_HAS_CRT TRUE) + else() + set(COMPILER_RT_HAS_CRT FALSE) + endif() endif() -message(STATUS "Builtin supported architectures: ${BUILTIN_SUPPORTED_ARCH}") +message(STATUS "Supported architectures for builtin: ${BUILTIN_SUPPORTED_ARCH}") +message(STATUS "Supported architectures for crt: ${CRT_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 @@ -297,7 +297,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}) set(ALL_DFSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64}) if(ANDROID) @@ -583,7 +582,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/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,47 +2,17 @@ # 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) - 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__) + message(WARNING "Using this directory is deprecated, use compiler-rt with COMPILER_RT_BUILTINS_ONLY") + set(COMPILER_RT_BUILTINS_ONLY TRUE) + include(../../CMakeLists.txt) + set(__BUILTINS_PROCESSED__ TRUE) + return() + endif() endif() include(builtin-config-ix) diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -263,16 +263,19 @@ 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_TARGET=${TARGET_TRIPLE} + -DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE} -DCMAKE_ASM_COMPILER_TARGET=${TARGET_TRIPLE} -DCMAKE_C_COMPILER_WORKS=ON + -DCMAKE_CXX_COMPILER_WORKS=ON -DCMAKE_ASM_COMPILER_WORKS=ON + -DCOMPILER_RT_BUILTINS_ONLY=ON ${BUILTINS_CMAKE_ARGS} PASSTHROUGH_PREFIXES COMPILER_RT USE_TOOLCHAIN @@ -295,17 +298,20 @@ 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_TARGET=${target} + -DCMAKE_CXX_COMPILER_TARGET=${target} -DCMAKE_ASM_COMPILER_TARGET=${target} -DCMAKE_C_COMPILER_WORKS=ON + -DCMAKE_CXX_COMPILER_WORKS=ON -DCMAKE_ASM_COMPILER_WORKS=ON -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON + -DCOMPILER_RT_BUILTINS_ONLY=ON ${${target}_extra_args} USE_TOOLCHAIN ${EXTRA_ARGS}) @@ -412,7 +418,8 @@ ${CMAKE_CURRENT_SOURCE_DIR} 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} @@ -518,7 +525,8 @@ ${CMAKE_CURRENT_SOURCE_DIR} 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}