[compiler-rt] 7c4dbff - Revert "[compiler-rt] Move crt into builtins"
Petr Hosek via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 11 08:33:19 PDT 2023
Author: Petr Hosek
Date: 2023-07-11T15:32:49Z
New Revision: 7c4dbff05d363d262a4a246b9a9726401652f268
URL: https://github.com/llvm/llvm-project/commit/7c4dbff05d363d262a4a246b9a9726401652f268
DIFF: https://github.com/llvm/llvm-project/commit/7c4dbff05d363d262a4a246b9a9726401652f268.diff
LOG: Revert "[compiler-rt] Move crt into builtins"
This reverts commit dae9d1b52469daca88a968e7b99a26420aef657c since
it caused https://github.com/llvm/llvm-project/issues/63799.
Added:
compiler-rt/lib/crt/CMakeLists.txt
compiler-rt/lib/crt/crtbegin.c
compiler-rt/lib/crt/crtend.c
compiler-rt/test/crt/CMakeLists.txt
compiler-rt/test/crt/ctor_dtor.c
compiler-rt/test/crt/dso_handle.cpp
compiler-rt/test/crt/lit.cfg.py
compiler-rt/test/crt/lit.site.cfg.py.in
Modified:
compiler-rt/CMakeLists.txt
compiler-rt/cmake/builtin-config-ix.cmake
compiler-rt/lib/CMakeLists.txt
compiler-rt/lib/builtins/CMakeLists.txt
compiler-rt/test/CMakeLists.txt
compiler-rt/test/builtins/CMakeLists.txt
compiler-rt/test/builtins/Unit/lit.cfg.py
compiler-rt/test/builtins/Unit/lit.site.cfg.py.in
Removed:
compiler-rt/lib/builtins/crtbegin.c
compiler-rt/lib/builtins/crtend.c
compiler-rt/test/builtins/Unit/ctor_dtor.c
compiler-rt/test/builtins/Unit/dso_handle.cpp
################################################################################
diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt
index d004474028ab30..6489aa17c2292c 100644
--- a/compiler-rt/CMakeLists.txt
+++ b/compiler-rt/CMakeLists.txt
@@ -39,6 +39,10 @@ option(COMPILER_RT_BUILD_BUILTINS "Build builtins" ON)
mark_as_advanced(COMPILER_RT_BUILD_BUILTINS)
option(COMPILER_RT_DISABLE_AARCH64_FMV "Disable AArch64 Function Multi Versioning support" OFF)
mark_as_advanced(COMPILER_RT_DISABLE_AARCH64_FMV)
+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)
diff --git a/compiler-rt/cmake/builtin-config-ix.cmake b/compiler-rt/cmake/builtin-config-ix.cmake
index 9cf4877baf4895..3638cff56eb08f 100644
--- a/compiler-rt/cmake/builtin-config-ix.cmake
+++ b/compiler-rt/cmake/builtin-config-ix.cmake
@@ -13,11 +13,6 @@ builtin_check_c_compiler_flag(-fvisibility=hidden COMPILER_RT_HAS_VISIBILITY_H
builtin_check_c_compiler_flag(-fomit-frame-pointer COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG)
builtin_check_c_compiler_flag(-ffreestanding COMPILER_RT_HAS_FFREESTANDING_FLAG)
builtin_check_c_compiler_flag(-fxray-instrument COMPILER_RT_HAS_XRAY_COMPILER_FLAG)
-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)
-builtin_check_c_compiler_flag(-Wno-pedantic COMPILER_RT_HAS_WNO_PEDANTIC)
builtin_check_c_compiler_source(COMPILER_RT_HAS_ATOMIC_KEYWORD
"
@@ -33,12 +28,6 @@ asm(\".arch armv8-a+lse\");
asm(\"cas w0, w1, [x2]\");
")
-if(ANDROID)
- set(OS_NAME "Android")
-else()
- set(OS_NAME "${CMAKE_SYSTEM_NAME}")
-endif()
-
set(ARM64 aarch64)
set(ARM32 arm armhf armv4t armv5te armv6 armv6m armv7m armv7em armv7 armv7s armv7k armv8m.base armv8m.main armv8.1m.main)
set(AVR avr)
@@ -225,10 +214,4 @@ else()
${ALL_BUILTIN_SUPPORTED_ARCH})
endif()
-if (OS_NAME MATCHES "Linux" AND NOT LLVM_USE_SANITIZER)
- set(COMPILER_RT_HAS_CRT TRUE)
-else()
- set(COMPILER_RT_HAS_CRT FALSE)
-endif()
-
message(STATUS "Builtin supported architectures: ${BUILTIN_SUPPORTED_ARCH}")
diff --git a/compiler-rt/lib/CMakeLists.txt b/compiler-rt/lib/CMakeLists.txt
index 43ba9a102c8487..a9a5b1c1009055 100644
--- a/compiler-rt/lib/CMakeLists.txt
+++ b/compiler-rt/lib/CMakeLists.txt
@@ -17,6 +17,10 @@ if(COMPILER_RT_BUILD_BUILTINS)
add_subdirectory(builtins)
endif()
+if(COMPILER_RT_BUILD_CRT)
+ add_subdirectory(crt)
+endif()
+
function(compiler_rt_build_runtime runtime)
string(TOUPPER ${runtime} runtime_uppercase)
if(COMPILER_RT_HAS_${runtime_uppercase})
diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt
index 45d68fdc841db3..66d11938d38ac7 100644
--- a/compiler-rt/lib/builtins/CMakeLists.txt
+++ b/compiler-rt/lib/builtins/CMakeLists.txt
@@ -51,9 +51,12 @@ if (COMPILER_RT_STANDALONE_BUILD)
endif()
include(builtin-config-ix)
-include(CMakeDependentOption)
include(CMakePushCheckState)
+if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")
+ include(CompilerRTAIXUtils)
+endif()
+
option(COMPILER_RT_BUILTINS_HIDE_SYMBOLS
"Do not export any symbols from the static library." ON)
@@ -687,7 +690,7 @@ set(powerpc64_SOURCES
${GENERIC_SOURCES}
)
# These routines require __int128, which isn't supported on AIX.
-if (NOT OS_NAME MATCHES "AIX")
+if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX")
set(powerpc64_SOURCES
ppc/floattitf.c
ppc/fixtfti.c
@@ -852,8 +855,6 @@ else ()
endforeach ()
endif ()
-add_dependencies(compiler-rt builtins)
-
option(COMPILER_RT_BUILD_STANDALONE_LIBATOMIC
"Build standalone shared atomic library."
OFF)
@@ -861,8 +862,7 @@ option(COMPILER_RT_BUILD_STANDALONE_LIBATOMIC
if(COMPILER_RT_BUILD_STANDALONE_LIBATOMIC)
add_custom_target(builtins-standalone-atomic)
set(BUILTIN_TYPE SHARED)
- if(OS_NAME MATCHES "AIX")
- include(CompilerRTAIXUtils)
+ if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")
if(NOT COMPILER_RT_LIBATOMIC_LINK_FLAGS)
get_aix_libatomic_default_link_flags(COMPILER_RT_LIBATOMIC_LINK_FLAGS
"${CMAKE_CURRENT_SOURCE_DIR}/ppc/atomic.exp")
@@ -887,7 +887,7 @@ if(COMPILER_RT_BUILD_STANDALONE_LIBATOMIC)
# FIXME: On AIX, we have to archive built shared libraries into a static
# archive, i.e., libatomic.a. Once cmake adds support of such usage for AIX,
# this ad-hoc part can be removed.
- if(OS_NAME MATCHES "AIX")
+ if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")
archive_aix_libatomic(clang_rt.atomic libatomic
ARCHS ${BUILTIN_SUPPORTED_ARCH}
PARENT_TARGET builtins-standalone-atomic)
@@ -895,40 +895,4 @@ if(COMPILER_RT_BUILD_STANDALONE_LIBATOMIC)
add_dependencies(compiler-rt builtins-standalone-atomic)
endif()
-cmake_dependent_option(COMPILER_RT_BUILD_CRT "Build crtbegin.o/crtend.o" ON "COMPILER_RT_HAS_CRT" OFF)
-
-if(COMPILER_RT_BUILD_CRT)
- add_compiler_rt_component(crt)
-
- option(COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY "Use eh_frame in crtbegin.o/crtend.o" ON)
-
- include(CheckSectionExists)
- check_section_exists(".init_array" COMPILER_RT_HAS_INITFINI_ARRAY
- SOURCE "volatile int x;\n__attribute__((constructor)) void f(void) {x = 0;}\nint main(void) { return 0; }\n")
-
- append_list_if(COMPILER_RT_HAS_STD_C11_FLAG -std=c11 CRT_CFLAGS)
- append_list_if(COMPILER_RT_HAS_INITFINI_ARRAY -DCRT_HAS_INITFINI_ARRAY CRT_CFLAGS)
- append_list_if(COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY -DEH_USE_FRAME_REGISTRY CRT_CFLAGS)
- append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC CRT_CFLAGS)
- append_list_if(COMPILER_RT_HAS_WNO_PEDANTIC -Wno-pedantic CRT_CFLAGS)
- if (COMPILER_RT_HAS_FCF_PROTECTION_FLAG)
- append_list_if(COMPILER_RT_ENABLE_CET -fcf-protection=full CRT_CFLAGS)
- endif()
-
- foreach(arch ${BUILTIN_SUPPORTED_ARCH})
- add_compiler_rt_runtime(clang_rt.crtbegin
- OBJECT
- ARCHS ${arch}
- SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtbegin.c
- CFLAGS ${CRT_CFLAGS}
- PARENT_TARGET crt)
- add_compiler_rt_runtime(clang_rt.crtend
- OBJECT
- ARCHS ${arch}
- SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtend.c
- CFLAGS ${CRT_CFLAGS}
- PARENT_TARGET crt)
- endforeach()
-
- add_dependencies(compiler-rt crt)
-endif()
+add_dependencies(compiler-rt builtins)
diff --git a/compiler-rt/lib/crt/CMakeLists.txt b/compiler-rt/lib/crt/CMakeLists.txt
new file mode 100644
index 00000000000000..32fd61b1fa11ed
--- /dev/null
+++ b/compiler-rt/lib/crt/CMakeLists.txt
@@ -0,0 +1,63 @@
+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+ cmake_minimum_required(VERSION 3.20.0)
+
+ set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+ project(CompilerRTCRT C)
+ set(COMPILER_RT_STANDALONE_BUILD TRUE)
+ set(COMPILER_RT_CRT_STANDALONE_BUILD TRUE)
+
+ set(COMPILER_RT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../..")
+
+ set(LLVM_COMMON_CMAKE_UTILS "${COMPILER_RT_SOURCE_DIR}/../cmake")
+
+ # Add path for custom modules
+ list(INSERT CMAKE_MODULE_PATH 0
+ "${COMPILER_RT_SOURCE_DIR}/cmake"
+ "${COMPILER_RT_SOURCE_DIR}/cmake/Modules"
+ "${LLVM_COMMON_CMAKE_UTILS}"
+ "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ )
+
+ include(base-config-ix)
+ include(CompilerRTUtils)
+
+ load_llvm_config()
+ construct_compiler_rt_default_triple()
+
+ include(SetPlatformToolchainTools)
+ include(AddCompilerRT)
+endif()
+
+include(crt-config-ix)
+
+if(COMPILER_RT_HAS_CRT)
+ add_compiler_rt_component(crt)
+
+ include(CheckSectionExists)
+ check_section_exists(".init_array" COMPILER_RT_HAS_INITFINI_ARRAY
+ SOURCE "volatile int x;\n__attribute__((constructor)) void f(void) {x = 0;}\nint main(void) { return 0; }\n")
+
+ append_list_if(COMPILER_RT_HAS_STD_C11_FLAG -std=c11 CRT_CFLAGS)
+ append_list_if(COMPILER_RT_HAS_INITFINI_ARRAY -DCRT_HAS_INITFINI_ARRAY CRT_CFLAGS)
+ append_list_if(COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY -DEH_USE_FRAME_REGISTRY CRT_CFLAGS)
+ append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC CRT_CFLAGS)
+ append_list_if(COMPILER_RT_HAS_WNO_PEDANTIC -Wno-pedantic CRT_CFLAGS)
+ if (COMPILER_RT_HAS_FCF_PROTECTION_FLAG)
+ append_list_if(COMPILER_RT_ENABLE_CET -fcf-protection=full CRT_CFLAGS)
+ endif()
+
+ foreach(arch ${CRT_SUPPORTED_ARCH})
+ add_compiler_rt_runtime(clang_rt.crtbegin
+ OBJECT
+ ARCHS ${arch}
+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtbegin.c
+ CFLAGS ${CRT_CFLAGS}
+ PARENT_TARGET crt)
+ add_compiler_rt_runtime(clang_rt.crtend
+ OBJECT
+ ARCHS ${arch}
+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtend.c
+ CFLAGS ${CRT_CFLAGS}
+ PARENT_TARGET crt)
+ endforeach()
+endif()
diff --git a/compiler-rt/lib/builtins/crtbegin.c b/compiler-rt/lib/crt/crtbegin.c
similarity index 100%
rename from compiler-rt/lib/builtins/crtbegin.c
rename to compiler-rt/lib/crt/crtbegin.c
diff --git a/compiler-rt/lib/builtins/crtend.c b/compiler-rt/lib/crt/crtend.c
similarity index 100%
rename from compiler-rt/lib/builtins/crtend.c
rename to compiler-rt/lib/crt/crtend.c
diff --git a/compiler-rt/test/CMakeLists.txt b/compiler-rt/test/CMakeLists.txt
index bc37c85a140adc..3106ab73e9c228 100644
--- a/compiler-rt/test/CMakeLists.txt
+++ b/compiler-rt/test/CMakeLists.txt
@@ -103,6 +103,9 @@ if(COMPILER_RT_CAN_EXECUTE_TESTS)
if(COMPILER_RT_BUILD_ORC)
compiler_rt_Test_runtime(orc)
endif()
+ if(COMPILER_RT_BUILD_CRT)
+ add_subdirectory(crt)
+ endif()
# ShadowCallStack does not yet provide a runtime with compiler-rt, the tests
# include their own minimal runtime
add_subdirectory(shadowcallstack)
diff --git a/compiler-rt/test/builtins/CMakeLists.txt b/compiler-rt/test/builtins/CMakeLists.txt
index 2d0cc24ac6e746..466a715dbbcfe0 100644
--- a/compiler-rt/test/builtins/CMakeLists.txt
+++ b/compiler-rt/test/builtins/CMakeLists.txt
@@ -13,10 +13,6 @@ configure_lit_site_cfg(
include(builtin-config-ix)
-if (COMPILER_RT_HAS_CRT)
- list(APPEND BUILTINS_TEST_DEPS crt)
-endif()
-
# Indicate if this is an MSVC environment.
pythonize_bool(MSVC)
diff --git a/compiler-rt/test/builtins/Unit/lit.cfg.py b/compiler-rt/test/builtins/Unit/lit.cfg.py
index 16d5a466248f46..12a77436983b84 100644
--- a/compiler-rt/test/builtins/Unit/lit.cfg.py
+++ b/compiler-rt/test/builtins/Unit/lit.cfg.py
@@ -2,8 +2,6 @@
import os
import platform
-import shlex
-import subprocess
import lit.formats
@@ -30,40 +28,6 @@ def get_required_attr(config, attr_name):
return attr_value
-def get_library_path(file):
- cmd = subprocess.Popen(
- [config.clang.strip(), "-print-file-name=%s" % file]
- + shlex.split(config.target_cflags),
- stdout=subprocess.PIPE,
- env=config.environment,
- universal_newlines=True,
- )
- if not cmd.stdout:
- lit_config.fatal("Couldn't find the library path for '%s'" % file)
- dir = cmd.stdout.read().strip()
- if sys.platform in ["win32"] and execute_external:
- # Don't pass dosish path separator to msys bash.exe.
- dir = dir.replace("\\", "/")
- return dir
-
-
-def get_libgcc_file_name():
- cmd = subprocess.Popen(
- [config.clang.strip(), "-print-libgcc-file-name"]
- + shlex.split(config.target_cflags),
- stdout=subprocess.PIPE,
- env=config.environment,
- universal_newlines=True,
- )
- if not cmd.stdout:
- lit_config.fatal("Couldn't find the library path for '%s'" % file)
- dir = cmd.stdout.read().strip()
- if sys.platform in ["win32"] and execute_external:
- # Don't pass dosish path separator to msys bash.exe.
- dir = dir.replace("\\", "/")
- return dir
-
-
# Setup config name.
config.name = "Builtins" + config.name_suffix
@@ -106,27 +70,6 @@ def get_libgcc_file_name():
base_lib = base_lib.replace("\\", "/")
config.substitutions.append(("%librt ", base_lib + " -lc -lm "))
- if config.host_os == "Linux":
- base_obj = os.path.join(
- config.compiler_rt_libdir, "clang_rt.%%s%s.o" % config.target_suffix
- )
- if sys.platform in ["win32"] and execute_external:
- # Don't pass dosish path separator to msys bash.exe.
- base_obj = base_obj.replace("\\", "/")
-
- config.substitutions.append(("%crtbegin", base_obj % "crtbegin"))
- config.substitutions.append(("%crtend", base_obj % "crtend"))
-
- config.substitutions.append(("%crt1", get_library_path("crt1.o")))
- config.substitutions.append(("%crti", get_library_path("crti.o")))
- config.substitutions.append(("%crtn", get_library_path("crtn.o")))
-
- config.substitutions.append(("%libgcc", get_libgcc_file_name()))
-
- config.substitutions.append(
- ("%libstdcxx", "-l" + config.sanitizer_cxx_lib.lstrip("lib"))
- )
-
builtins_source_dir = os.path.join(
get_required_attr(config, "compiler_rt_src_root"), "lib", "builtins"
)
diff --git a/compiler-rt/test/builtins/Unit/lit.site.cfg.py.in b/compiler-rt/test/builtins/Unit/lit.site.cfg.py.in
index 920c915feb08b6..e55dd5d51f3dce 100644
--- a/compiler-rt/test/builtins/Unit/lit.site.cfg.py.in
+++ b/compiler-rt/test/builtins/Unit/lit.site.cfg.py.in
@@ -4,7 +4,6 @@ config.name_suffix = "@BUILTINS_TEST_CONFIG_SUFFIX@"
config.builtins_lit_source_dir = "@BUILTINS_LIT_SOURCE_DIR@/Unit"
config.target_cflags = "@BUILTINS_TEST_TARGET_CFLAGS@"
config.target_arch = "@BUILTINS_TEST_TARGET_ARCH@"
-config.sanitizer_cxx_lib = "@SANITIZER_TEST_CXX_LIBNAME@"
config.is_msvc = @MSVC_PYBOOL@
config.builtins_is_msvc = @BUILTINS_IS_MSVC_PYBOOL@
config.builtins_lit_source_features = "@BUILTINS_LIT_SOURCE_FEATURES@"
diff --git a/compiler-rt/test/crt/CMakeLists.txt b/compiler-rt/test/crt/CMakeLists.txt
new file mode 100644
index 00000000000000..f539be34f6ca2c
--- /dev/null
+++ b/compiler-rt/test/crt/CMakeLists.txt
@@ -0,0 +1,41 @@
+include(crt-config-ix)
+
+if (COMPILER_RT_HAS_CRT)
+ set(CRT_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+
+ if(NOT COMPILER_RT_STANDALONE_BUILD)
+ list(APPEND CRT_TEST_DEPS crt)
+ endif()
+ if(NOT COMPILER_RT_STANDALONE_BUILD AND NOT LLVM_RUNTIMES_BUILD)
+ # Use LLVM utils and Clang from the same build tree.
+ list(APPEND CRT_TEST_DEPS
+ clang clang-resource-headers FileCheck not llvm-config)
+ endif()
+
+ set(CRT_TEST_ARCH ${CRT_SUPPORTED_ARCH})
+ foreach(arch ${CRT_TEST_ARCH})
+ set(CRT_TEST_TARGET_ARCH ${arch})
+ string(TOLOWER "-${arch}-${OS_NAME}" CRT_TEST_CONFIG_SUFFIX)
+ get_test_cc_for_arch(${arch} CRT_TEST_TARGET_CC CRT_TEST_TARGET_CFLAGS)
+ string(TOUPPER ${arch} ARCH_UPPER_CASE)
+ set(CONFIG_NAME ${ARCH_UPPER_CASE}${OS_NAME}Config)
+
+ if (COMPILER_RT_ENABLE_CET)
+ if (${arch} MATCHES "i386|x86_64")
+ list(APPEND CRT_TEST_TARGET_CFLAGS -fcf-protection=full)
+ string(REPLACE ";" " " CRT_TEST_TARGET_CFLAGS "${CRT_TEST_TARGET_CFLAGS}")
+ else()
+ message(FATAL_ERROR "The target arch ${arch} doesn't support CET")
+ endif()
+ endif()
+ configure_lit_site_cfg(
+ ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
+ ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg.py)
+ list(APPEND CRT_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME})
+ endforeach()
+
+ add_lit_testsuite(check-crt "Running the CRT tests"
+ ${CRT_TESTSUITES}
+ DEPENDS ${CRT_TEST_DEPS})
+ set_target_properties(check-crt PROPERTIES FOLDER "Compiler-RT Misc")
+endif()
diff --git a/compiler-rt/test/builtins/Unit/ctor_dtor.c b/compiler-rt/test/crt/ctor_dtor.c
similarity index 97%
rename from compiler-rt/test/builtins/Unit/ctor_dtor.c
rename to compiler-rt/test/crt/ctor_dtor.c
index 2fdd2f7bea2375..2bea05073b4d2a 100644
--- a/compiler-rt/test/builtins/Unit/ctor_dtor.c
+++ b/compiler-rt/test/crt/ctor_dtor.c
@@ -1,5 +1,3 @@
-// REQUIRES: linux
-
// RUN: %clang -fno-use-init-array -g -c %s -o %t.o
// RUN: %clang -o %t -no-pie -nostdlib %crt1 %crti %crtbegin %t.o -lc %libgcc %crtend %crtn
// RUN: %run %t 2>&1 | FileCheck %s
diff --git a/compiler-rt/test/builtins/Unit/dso_handle.cpp b/compiler-rt/test/crt/dso_handle.cpp
similarity index 79%
rename from compiler-rt/test/builtins/Unit/dso_handle.cpp
rename to compiler-rt/test/crt/dso_handle.cpp
index 00c54915c81665..46d36531386a8a 100644
--- a/compiler-rt/test/builtins/Unit/dso_handle.cpp
+++ b/compiler-rt/test/crt/dso_handle.cpp
@@ -1,7 +1,5 @@
-// REQUIRES: linux
-
-// RUN: %clangxx -g -fno-exceptions -DCRT_SHARED -c %s -fPIC -o %tshared.o
-// RUN: %clangxx -g -fno-exceptions -c %s -fPIC -o %t.o
+// RUN: %clangxx -g -DCRT_SHARED -c %s -fPIC -o %tshared.o
+// RUN: %clangxx -g -c %s -fPIC -o %t.o
// RUN: %clangxx -g -shared -o %t.so -nostdlib %crti %crtbegin %tshared.o %libstdcxx -lc -lm %libgcc %crtend %crtn
// RUN: %clangxx -g -o %t -fno-pic -no-pie -nostdlib %crt1 %crti %crtbegin %t.o %libstdcxx -lc -lm %libgcc %t.so %crtend %crtn
// RUN: %run %t 2>&1 | FileCheck %s
diff --git a/compiler-rt/test/crt/lit.cfg.py b/compiler-rt/test/crt/lit.cfg.py
new file mode 100644
index 00000000000000..7024c7e80dae8a
--- /dev/null
+++ b/compiler-rt/test/crt/lit.cfg.py
@@ -0,0 +1,95 @@
+# -*- Python -*-
+
+import os
+import subprocess
+import shlex
+
+# Setup config name.
+config.name = "CRT" + config.name_suffix
+
+# Setup source root.
+config.test_source_root = os.path.dirname(__file__)
+
+
+# Choose between lit's internal shell pipeline runner and a real shell. If
+# LIT_USE_INTERNAL_SHELL is in the environment, we use that as an override.
+use_lit_shell = os.environ.get("LIT_USE_INTERNAL_SHELL")
+if use_lit_shell:
+ # 0 is external, "" is default, and everything else is internal.
+ execute_external = use_lit_shell == "0"
+else:
+ # Otherwise we default to internal on Windows and external elsewhere, as
+ # bash on Windows is usually very slow.
+ execute_external = not sys.platform in ["win32"]
+
+
+def get_library_path(file):
+ cmd = subprocess.Popen(
+ [config.clang.strip(), "-print-file-name=%s" % file]
+ + shlex.split(config.target_cflags),
+ stdout=subprocess.PIPE,
+ env=config.environment,
+ universal_newlines=True,
+ )
+ if not cmd.stdout:
+ lit_config.fatal("Couldn't find the library path for '%s'" % file)
+ dir = cmd.stdout.read().strip()
+ if sys.platform in ["win32"] and execute_external:
+ # Don't pass dosish path separator to msys bash.exe.
+ dir = dir.replace("\\", "/")
+ return dir
+
+
+def get_libgcc_file_name():
+ cmd = subprocess.Popen(
+ [config.clang.strip(), "-print-libgcc-file-name"]
+ + shlex.split(config.target_cflags),
+ stdout=subprocess.PIPE,
+ env=config.environment,
+ universal_newlines=True,
+ )
+ if not cmd.stdout:
+ lit_config.fatal("Couldn't find the library path for '%s'" % file)
+ dir = cmd.stdout.read().strip()
+ if sys.platform in ["win32"] and execute_external:
+ # Don't pass dosish path separator to msys bash.exe.
+ dir = dir.replace("\\", "/")
+ return dir
+
+
+def build_invocation(compile_flags):
+ return " " + " ".join([config.clang] + compile_flags) + " "
+
+
+# Setup substitutions.
+config.substitutions.append(("%clang ", build_invocation([config.target_cflags])))
+config.substitutions.append(
+ ("%clangxx ", build_invocation(config.cxx_mode_flags + [config.target_cflags]))
+)
+
+base_lib = os.path.join(
+ config.compiler_rt_libdir, "clang_rt.%%s%s.o" % config.target_suffix
+)
+
+if sys.platform in ["win32"] and execute_external:
+ # Don't pass dosish path separator to msys bash.exe.
+ base_lib = base_lib.replace("\\", "/")
+
+config.substitutions.append(("%crtbegin", base_lib % "crtbegin"))
+config.substitutions.append(("%crtend", base_lib % "crtend"))
+
+config.substitutions.append(("%crt1", get_library_path("crt1.o")))
+config.substitutions.append(("%crti", get_library_path("crti.o")))
+config.substitutions.append(("%crtn", get_library_path("crtn.o")))
+
+config.substitutions.append(("%libgcc", get_libgcc_file_name()))
+
+config.substitutions.append(
+ ("%libstdcxx", "-l" + config.sanitizer_cxx_lib.lstrip("lib"))
+)
+
+# Default test suffixes.
+config.suffixes = [".c", ".cpp"]
+
+if config.host_os not in ["Linux"]:
+ config.unsupported = True
diff --git a/compiler-rt/test/crt/lit.site.cfg.py.in b/compiler-rt/test/crt/lit.site.cfg.py.in
new file mode 100644
index 00000000000000..53eda0c45948b7
--- /dev/null
+++ b/compiler-rt/test/crt/lit.site.cfg.py.in
@@ -0,0 +1,14 @@
+ at LIT_SITE_CFG_IN_HEADER@
+
+# Tool-specific config options.
+config.name_suffix = "@CRT_TEST_CONFIG_SUFFIX@"
+config.crt_lit_source_dir = "@CRT_LIT_SOURCE_DIR@"
+config.target_cflags = "@CRT_TEST_TARGET_CFLAGS@"
+config.target_arch = "@CRT_TEST_TARGET_ARCH@"
+config.sanitizer_cxx_lib = "@SANITIZER_TEST_CXX_LIBNAME@"
+
+# Load common config for all compiler-rt lit tests
+lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured")
+
+# Load tool-specific config that would do the real work.
+lit_config.load_config(config, "@CRT_LIT_SOURCE_DIR@/lit.cfg.py")
More information about the llvm-commits
mailing list