diff --git a/compiler-rt/lib/msan/CMakeLists.txt b/compiler-rt/lib/msan/CMakeLists.txt --- a/compiler-rt/lib/msan/CMakeLists.txt +++ b/compiler-rt/lib/msan/CMakeLists.txt @@ -26,7 +26,8 @@ msan_origin.h msan_poisoning.h msan_report.h - msan_thread.h) + msan_thread.h + ) set(MSAN_RTL_CFLAGS ${SANITIZER_COMMON_CFLAGS}) if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") diff --git a/llvm/utils/gn/TODO.txt b/llvm/utils/gn/TODO.txt --- a/llvm/utils/gn/TODO.txt +++ b/llvm/utils/gn/TODO.txt @@ -1,6 +1,6 @@ Ideas for things to do: -- more projects (compiler-rt's asan/ubsan/msan/tsan, lldb) +- more projects (lldb, check- targets for compiler-rt's asan/ubsan/msan/tsan) - once there are more projects, have an llvm_enable_projects arg, modeled after llvm_targets_to_build in the GN build - a check-all build target that runs test of all projects diff --git a/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn b/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn --- a/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn +++ b/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn @@ -1,5 +1,8 @@ group("lib") { deps = [ "//compiler-rt/lib/profile" ] + if (current_os == "linux") { + deps += [ "//compiler-rt/lib/msan" ] + } if (current_os != "win") { deps += [ "//compiler-rt/lib/asan", diff --git a/llvm/utils/gn/secondary/compiler-rt/lib/msan/BUILD.gn b/llvm/utils/gn/secondary/compiler-rt/lib/msan/BUILD.gn new file mode 100644 --- /dev/null +++ b/llvm/utils/gn/secondary/compiler-rt/lib/msan/BUILD.gn @@ -0,0 +1,73 @@ +import("//compiler-rt/target.gni") + +static_library("msan") { + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + + output_dir = crt_current_out_dir + assert(current_os == "linux", "MSan only works on Linux") + output_name = "clang_rt.msan$crt_current_target_suffix" + + deps = [ + "//compiler-rt/lib/interception:sources", + "//compiler-rt/lib/sanitizer_common:sources", + "//compiler-rt/lib/ubsan:sources", + ] + + complete_static_lib = true + configs -= [ "//llvm/utils/gn/build:thin_archive" ] + deps += [ ":msan_cxx" ] + + sources = [ + "msan.cpp", + "msan.h", + "msan_allocator.cpp", + "msan_allocator.h", + "msan_chained_origin_depot.cpp", + "msan_chained_origin_depot.h", + "msan_flags.h", + "msan_flags.inc", + "msan_interceptors.cpp", + "msan_interface_internal.h", + "msan_linux.cpp", + "msan_origin.h", + "msan_poisoning.cpp", + "msan_poisoning.h", + "msan_report.cpp", + "msan_report.h", + "msan_thread.cpp", + "msan_thread.h", + ] + + # To be able to include sanitizer_common. + include_dirs = [ ".." ] + + # FIXME: have SANITIZER_COMMON_CFLAGS thingy? should fno-builtin be in + # crt_code? + cflags = [ "-fno-builtin" ] + + cflags += [ "-fPIE" ] + + # Prevent clang from generating libc calls. + cflags += [ "-ffreestanding" ] + + # FIXME: link rt dl m pthread log + # FIXME: need libclang_rt.msan*.a.syms? + # FIXME: msan_ignorelist.txt +} + +static_library("msan_cxx") { + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + + output_dir = crt_current_out_dir + assert(current_os == "linux", "MSan only works on Linux") + output_name = "clang_rt.msan_cxx$crt_current_target_suffix" + + complete_static_lib = true + configs -= [ "//llvm/utils/gn/build:thin_archive" ] + + deps = [ "//compiler-rt/lib/ubsan:cxx_sources" ] + + sources = [ "msan_new_delete.cpp" ] +}