[llvm] 0f9f95f - gn build: Add support for building the standalone ubsan runtime as a shared library on non-Mac.
Peter Collingbourne via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 30 12:33:35 PDT 2022
Author: Peter Collingbourne
Date: 2022-09-30T12:33:23-07:00
New Revision: 0f9f95fe9361c506c3cc9d78fb77707fdc80ca51
URL: https://github.com/llvm/llvm-project/commit/0f9f95fe9361c506c3cc9d78fb77707fdc80ca51
DIFF: https://github.com/llvm/llvm-project/commit/0f9f95fe9361c506c3cc9d78fb77707fdc80ca51.diff
LOG: gn build: Add support for building the standalone ubsan runtime as a shared library on non-Mac.
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..7cfae7d9738aa
--- /dev/null
+++ b/llvm/utils/gn/secondary/compiler-rt/gen_version_script.gni
@@ -0,0 +1,37 @@
+import("//compiler-rt/target.gni")
+
+template("gen_version_script") {
+ if (current_os != "mac" && current_os != "win") {
+ 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),
+ ]
+ }
+ } else {
+ source_set(target_name) {}
+ not_needed(invoker,
+ [
+ "extra",
+ "lib_names",
+ "libs",
+ "output",
+ ])
+ }
+}
diff --git a/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn b/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn
index acbe616b19b4e..e4606bfa89dc1 100644
--- a/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn
+++ b/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn
@@ -6,14 +6,14 @@ group("lib") {
if (current_os == "linux") {
deps += [ "//compiler-rt/lib/msan" ]
}
- if (current_os == "android" || current_os == "linux" || current_os == "mac") {
- deps += [ "//compiler-rt/lib/ubsan" ]
- }
- if (current_os == "android" || current_os == "linux") {
+ if (current_os == "linux" || current_os == "android") {
deps += [ "//compiler-rt/lib/ubsan_minimal" ]
}
if (current_os != "win" && current_os != "baremetal") {
- deps += [ "//compiler-rt/lib/asan" ]
+ deps += [
+ "//compiler-rt/lib/asan",
+ "//compiler-rt/lib/ubsan",
+ ]
if (current_cpu == "x64" || current_cpu == "arm64") {
deps += [ "//compiler-rt/lib/tsan/rtl" ]
}
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 b91500fee8baf..2dc74350f396a 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 fb7cb827060f3..ab05b32dbcb95 100644
--- a/llvm/utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn
+++ b/llvm/utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn
@@ -1,16 +1,29 @@
+import("//compiler-rt/gen_version_script.gni")
import("//compiler-rt/target.gni")
group("ubsan") {
- if (current_os == "mac") {
- deps = [ ":ubsan_shared_library" ]
- } else {
- deps = [
- ":ubsan_standalone",
- ":ubsan_standalone_cxx",
- ]
+ deps = [
+ ":ubsan_shared",
+ ":ubsan_static",
+ ]
+ if (current_os != "mac") {
+ deps += [ ":ubsan_static_cxx" ]
}
}
+gen_version_script("version_script") {
+ extra = "ubsan.syms.extra"
+ output = "$target_gen_dir/ubsan.vers"
+ libs = [
+ ":ubsan_static",
+ ":ubsan_static_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" ]
@@ -69,11 +82,6 @@ source_set("standalone_sources") {
"ubsan_init_standalone.cpp",
"ubsan_signals_standalone.cpp",
]
- deps = [
- ":sources",
- "//compiler-rt/lib/interception:sources",
- "//compiler-rt/lib/sanitizer_common:sources",
- ]
}
source_set("cxx_sources") {
@@ -90,18 +98,52 @@ source_set("cxx_sources") {
]
}
-if (current_os == "mac") {
- shared_library("ubsan_shared_library") {
+static_library("ubsan_static") {
+ output_dir = crt_current_out_dir
+ if (current_os == "mac") {
+ output_name = "clang_rt.ubsan_osx"
+ } else {
+ 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",
+ ]
+ if (current_os == "mac") {
+ deps += [ ":cxx_sources" ]
+ }
+}
+
+if (current_os != "mac") {
+ static_library("ubsan_static_cxx") {
output_dir = crt_current_out_dir
- output_name = "clang_rt.ubsan_osx_dynamic"
- deps = [
- ":cxx_sources",
- ":sources",
- ":standalone_sources",
- "//compiler-rt/lib/interception:sources",
- "//compiler-rt/lib/sanitizer_common:sources",
+ 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",
]
- # The -U flags below correspond to the add_weak_symbols() calls in CMake.
+ configs += [ "//llvm/utils/gn/build:crt_code" ]
+ deps = [ ":cxx_sources" ]
+ }
+}
+
+shared_library("ubsan_shared") {
+ output_dir = crt_current_out_dir
+ if (current_os == "mac") {
+ output_name = "clang_rt.ubsan_osx_dynamic"
+ } else {
+ output_name = "clang_rt.ubsan_standalone$crt_current_target_suffix"
+ }
+ configs -= [ "//llvm/utils/gn/build:llvm_code" ]
+ configs += [ "//llvm/utils/gn/build:crt_code" ]
+ if (current_os == "mac") {
ldflags = [
"-lc++",
"-lc++abi",
@@ -125,33 +167,17 @@ if (current_os == "mac") {
"-Wl,-install_name, at rpath/libclang_rt.ubsan_osx_dynamic.dylib",
]
# FIXME: -Wl,-rpath
+ # FIXME: codesign (??)
}
-} else {
- static_library("ubsan_standalone") {
- 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",
- ]
- deps = [
- ":sources",
- ":standalone_sources",
- ]
- configs += [ "//llvm/utils/gn/build:crt_code" ]
- sources = [ "ubsan_init_standalone_preinit.cpp" ]
- }
-
- static_library("ubsan_standalone_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",
- ]
- deps = [ ":cxx_sources" ]
- configs += [ "//llvm/utils/gn/build:crt_code" ]
+ deps = [
+ ":cxx_sources",
+ ":sources",
+ ":standalone_sources",
+ ":version_script",
+ ]
+ if (current_os != "mac") {
+ 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