1+ load ("@bazel_skylib//rules:common_settings.bzl" , "bool_flag" )
12load ("@rules_foreign_cc//foreign_cc:defs.bzl" , "cmake" )
23load ("@rules_pkg//pkg:mappings.bzl" , "pkg_files" )
34load ("@rules_pkg//pkg:pkg.bzl" , "pkg_tar" )
@@ -7,20 +8,56 @@ package(default_visibility = ["//visibility:public"])
78
89exports_files (["sanitizer_libs.bzl" , "extensions.bzl" ])
910
10- SANITIZER_ENV = {
11+ # Build setting to control which toolchain to use
12+ # This can be set with --//compile:use_gcc_toolchain=true
13+ bool_flag (
14+ name = "use_gcc_toolchain" ,
15+ build_setting_default = False ,
16+ )
17+
18+ config_setting (
19+ name = "gcc_build" ,
20+ flag_values = {":use_gcc_toolchain" : "true" },
21+ )
22+
23+ # LLVM/Clang specific environment variables
24+ LLVM_SANITIZER_ENV = {
1125 "CXXFLAGS" : "-nostdinc++ -nostdlib++" ,
1226 "LDFLAGS" : "-nostdlib++" ,
1327}
1428
15- BASE_CMAKE_CACHE = {
16- "CMAKE_BUILD_TYPE" : "RelWithDebInfo" ,
17- "CMAKE_INSTALL_PREFIX" : "." ,
18- "CMAKE_POSITION_INDEPENDENT_CODE" : "ON" ,
19- "LLVM_ENABLE_RUNTIMES" : "libcxxabi;libcxx;libunwind" ,
29+ # GCC compatible environment (nostdlib++ is Clang-specific)
30+ GCC_SANITIZER_ENV = {
31+ "CXXFLAGS" : "-nostdinc++" ,
32+ "LDFLAGS" : "" ,
33+ }
34+
35+ SANITIZER_ENV = select ({
36+ ":gcc_build" : GCC_SANITIZER_ENV ,
37+ "//conditions:default" : LLVM_SANITIZER_ENV ,
38+ })
39+
40+ # Linker flags that differ between LLVM (lld) and GCC (default linker)
41+ LLVM_LINKER_FLAGS = {
2042 "LLVM_USE_LINKER" : "lld" ,
2143 "CMAKE_SHARED_LINKER_FLAGS" : "-shared -Wl,-S -fuse-ld=lld" ,
2244 "CMAKE_MODULE_LINKER_FLAGS" : "-shared -Wl,-S -fuse-ld=lld" ,
2345 "CMAKE_EXE_LINKER_FLAGS" : "-Wl,-S -fuse-ld=lld" ,
46+ }
47+
48+ GCC_LINKER_FLAGS = {
49+ # Don't specify LLVM_USE_LINKER for GCC, let CMake/compiler choose
50+ "CMAKE_SHARED_LINKER_FLAGS" : "-shared -Wl,-S" ,
51+ "CMAKE_MODULE_LINKER_FLAGS" : "-shared -Wl,-S" ,
52+ "CMAKE_EXE_LINKER_FLAGS" : "-Wl,-S" ,
53+ }
54+
55+ # Base CMake configuration without linker-specific flags
56+ BASE_CMAKE_CACHE_COMMON = {
57+ "CMAKE_BUILD_TYPE" : "RelWithDebInfo" ,
58+ "CMAKE_INSTALL_PREFIX" : "." ,
59+ "CMAKE_POSITION_INDEPENDENT_CODE" : "ON" ,
60+ "LLVM_ENABLE_RUNTIMES" : "libcxxabi;libcxx;libunwind" ,
2461 "BUILD_SHARED_LIBS" : "OFF" ,
2562 "LIBCXX_ENABLE_SHARED" : "OFF" ,
2663 "LIBCXX_ENABLE_STATIC" : "ON" ,
@@ -30,6 +67,12 @@ BASE_CMAKE_CACHE = {
3067 "LIBUNWIND_ENABLE_STATIC" : "ON" ,
3168}
3269
70+ # Merge with linker-specific flags based on toolchain
71+ BASE_CMAKE_CACHE = BASE_CMAKE_CACHE_COMMON | select ({
72+ ":gcc_build" : GCC_LINKER_FLAGS ,
73+ "//conditions:default" : LLVM_LINKER_FLAGS ,
74+ })
75+
3376cmake (
3477 name = "libcxx_msan" ,
3578 cache_entries = BASE_CMAKE_CACHE | {
0 commit comments