[gn build] Add build file for msan runtime
authorNico Weber <thakis@chromium.org>
Sat, 15 May 2021 03:07:09 +0000 (23:07 -0400)
committerNico Weber <thakis@chromium.org>
Mon, 17 May 2021 10:58:10 +0000 (06:58 -0400)
Works for the examples on
https://clang.llvm.org/docs/MemorySanitizer.html

Differential Revision: https://reviews.llvm.org/D102554

compiler-rt/lib/msan/CMakeLists.txt
llvm/utils/gn/TODO.txt
llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn
llvm/utils/gn/secondary/compiler-rt/lib/msan/BUILD.gn [new file with mode: 0644]

index cb1a784..b115f68 100644 (file)
@@ -26,7 +26,8 @@ set(MSAN_RTL_HEADERS
   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")
index f573481..97b64d4 100644 (file)
@@ -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
index b98b85e..45ba483 100644 (file)
@@ -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 (file)
index 0000000..92be6df
--- /dev/null
@@ -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" ]
+}