[llvm] b49bd8e - gn build: Add support for building the standalone ubsan runtime.

Peter Collingbourne via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 13 13:15:55 PDT 2022


Author: Peter Collingbourne
Date: 2022-06-13T13:15:28-07:00
New Revision: b49bd8e07faf0f4d04e6cdfe33d901a2cd8b2346

URL: https://github.com/llvm/llvm-project/commit/b49bd8e07faf0f4d04e6cdfe33d901a2cd8b2346
DIFF: https://github.com/llvm/llvm-project/commit/b49bd8e07faf0f4d04e6cdfe33d901a2cd8b2346.diff

LOG: gn build: Add support for building the standalone ubsan runtime.

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

Added: 
    llvm/utils/gn/secondary/compiler-rt/gen_version_script.gni

Modified: 
    llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn
    llvm/utils/gn/secondary/compiler-rt/lib/hwasan/BUILD.gn
    llvm/utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn

Removed: 
    


################################################################################
diff  --git a/llvm/utils/gn/secondary/compiler-rt/gen_version_script.gni b/llvm/utils/gn/secondary/compiler-rt/gen_version_script.gni
new file mode 100644
index 0000000000000..ebbf64b8c5f44
--- /dev/null
+++ b/llvm/utils/gn/secondary/compiler-rt/gen_version_script.gni
@@ -0,0 +1,28 @@
+import("//compiler-rt/target.gni")
+
+template("gen_version_script") {
+  action(target_name) {
+    script = "//compiler-rt/lib/sanitizer_common/scripts/gen_dynamic_list.py"
+    sources = [ invoker.extra ]
+    deps = invoker.libs
+    outputs = [ invoker.output ]
+    args = [
+      "--version-list",
+      "--extra",
+      rebase_path(invoker.extra, root_build_dir),
+    ]
+    foreach (lib_name, invoker.lib_names) {
+      args += [
+      rebase_path(
+          "$crt_current_out_dir/libclang_rt.$lib_name$crt_current_target_suffix.a",
+          root_build_dir)
+          ]
+    }
+    args += [
+      "--nm-executable",
+      "nm",
+      "-o",
+      rebase_path(invoker.output, root_build_dir),
+    ]
+  }
+}

diff  --git a/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn b/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn
index 52c6431f1f67b..62d3270150b8d 100644
--- a/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn
+++ b/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn
@@ -19,6 +19,9 @@ group("lib") {
     deps += [ "//compiler-rt/lib/builtins" ]
   }
   if (current_os != "baremetal") {
-    deps += [ "//compiler-rt/lib/profile" ]
+    deps += [
+      "//compiler-rt/lib/profile",
+      "//compiler-rt/lib/ubsan:ubsan_shared",
+    ]
   }
 }

diff  --git a/llvm/utils/gn/secondary/compiler-rt/lib/hwasan/BUILD.gn b/llvm/utils/gn/secondary/compiler-rt/lib/hwasan/BUILD.gn
index f95aec83fe2cc..f14c41bfc00c4 100644
--- a/llvm/utils/gn/secondary/compiler-rt/lib/hwasan/BUILD.gn
+++ b/llvm/utils/gn/secondary/compiler-rt/lib/hwasan/BUILD.gn
@@ -1,3 +1,4 @@
+import("//compiler-rt/gen_version_script.gni")
 import("//compiler-rt/target.gni")
 
 if (current_cpu == "x64") {
@@ -6,28 +7,16 @@ if (current_cpu == "x64") {
   hwasan_name = "hwasan"
 }
 
-action("version_script") {
-  script = "//compiler-rt/lib/sanitizer_common/scripts/gen_dynamic_list.py"
-  sources = [ "hwasan.syms.extra" ]
-  deps = [
+gen_version_script("version_script") {
+  extra = "hwasan.syms.extra"
+  output = "$target_gen_dir/hwasan.vers"
+  libs = [
     ":hwasan",
     ":hwasan_cxx",
   ]
-  outputs = [ "$target_gen_dir/hwasan.vers" ]
-  args = [
-    "--version-list",
-    "--extra",
-    rebase_path(sources[0], root_build_dir),
-    rebase_path(
-        "$crt_current_out_dir/libclang_rt.$hwasan_name$crt_current_target_suffix.a",
-        root_build_dir),
-    rebase_path(
-        "$crt_current_out_dir/libclang_rt.${hwasan_name}_cxx$crt_current_target_suffix.a",
-        root_build_dir),
-    "--nm-executable",
-    "nm",
-    "-o",
-    rebase_path(outputs[0], root_build_dir),
+  lib_names = [
+    "$hwasan_name",
+    "${hwasan_name}_cxx",
   ]
 }
 

diff  --git a/llvm/utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn b/llvm/utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn
index 35b4c20315753..50ed1be0285aa 100644
--- a/llvm/utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn
+++ b/llvm/utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn
@@ -1,3 +1,19 @@
+import("//compiler-rt/gen_version_script.gni")
+import("//compiler-rt/target.gni")
+
+gen_version_script("version_script") {
+  extra = "ubsan.syms.extra"
+  output = "$target_gen_dir/ubsan.vers"
+  libs = [
+    ":ubsan",
+    ":ubsan_cxx",
+  ]
+  lib_names = [
+    "ubsan_standalone",
+    "ubsan_standalone_cxx",
+  ]
+}
+
 source_set("sources") {
   configs -= [ "//llvm/utils/gn/build:llvm_code" ]
   configs += [ "//llvm/utils/gn/build:crt_code" ]
@@ -46,7 +62,6 @@ source_set("dynamic_runtime_thunk") {
   sources = [ "ubsan_win_dynamic_runtime_thunk.cpp" ]
 }
 
-# Unreferenced; at the moment exists to make sync_source_lists_from_cmake happy.
 source_set("standalone_sources") {
   configs -= [ "//llvm/utils/gn/build:llvm_code" ]
   configs -= [ "//llvm/utils/gn/build:no_rtti" ]
@@ -72,3 +87,48 @@ source_set("cxx_sources") {
     "ubsan_type_hash_win.cpp",
   ]
 }
+
+static_library("ubsan") {
+  output_dir = crt_current_out_dir
+  output_name = "clang_rt.ubsan_standalone$crt_current_target_suffix"
+  complete_static_lib = true
+  configs -= [
+    "//llvm/utils/gn/build:llvm_code",
+    "//llvm/utils/gn/build:thin_archive",
+  ]
+  configs += [ "//llvm/utils/gn/build:crt_code" ]
+  deps = [
+    ":sources",
+    ":standalone_sources",
+  ]
+}
+
+static_library("ubsan_cxx") {
+  output_dir = crt_current_out_dir
+  output_name = "clang_rt.ubsan_standalone_cxx$crt_current_target_suffix"
+  complete_static_lib = true
+  configs -= [
+    "//llvm/utils/gn/build:llvm_code",
+    "//llvm/utils/gn/build:thin_archive",
+  ]
+  configs += [ "//llvm/utils/gn/build:crt_code" ]
+  deps = [ ":cxx_sources" ]
+}
+
+shared_library("ubsan_shared") {
+  output_dir = crt_current_out_dir
+  output_name = "clang_rt.ubsan_standalone$crt_current_target_suffix"
+  configs -= [ "//llvm/utils/gn/build:llvm_code" ]
+  configs += [ "//llvm/utils/gn/build:crt_code" ]
+  deps = [
+    ":cxx_sources",
+    ":sources",
+    ":standalone_sources",
+  ]
+  if (current_os != "mac" && current_os != "win") {
+    deps += [ ":version_script" ]
+    inputs = [ "$target_gen_dir/ubsan.vers" ]
+    ldflags =
+        [ "-Wl,--version-script," + rebase_path(inputs[0], root_build_dir) ]
+  }
+}


        


More information about the llvm-commits mailing list