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

Differential Revision: https://reviews.llvm.org/D127556
This commit is contained in:
Peter Collingbourne 2022-04-28 17:23:47 -07:00
parent bfcfd53b92
commit b49bd8e07f
4 changed files with 101 additions and 21 deletions

View File

@ -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),
]
}
}

View File

@ -19,6 +19,9 @@ group("lib") {
deps += [ "//compiler-rt/lib/builtins" ] deps += [ "//compiler-rt/lib/builtins" ]
} }
if (current_os != "baremetal") { if (current_os != "baremetal") {
deps += [ "//compiler-rt/lib/profile" ] deps += [
"//compiler-rt/lib/profile",
"//compiler-rt/lib/ubsan:ubsan_shared",
]
} }
} }

View File

@ -1,3 +1,4 @@
import("//compiler-rt/gen_version_script.gni")
import("//compiler-rt/target.gni") import("//compiler-rt/target.gni")
if (current_cpu == "x64") { if (current_cpu == "x64") {
@ -6,28 +7,16 @@ if (current_cpu == "x64") {
hwasan_name = "hwasan" hwasan_name = "hwasan"
} }
action("version_script") { gen_version_script("version_script") {
script = "//compiler-rt/lib/sanitizer_common/scripts/gen_dynamic_list.py" extra = "hwasan.syms.extra"
sources = [ "hwasan.syms.extra" ] output = "$target_gen_dir/hwasan.vers"
deps = [ libs = [
":hwasan", ":hwasan",
":hwasan_cxx", ":hwasan_cxx",
] ]
outputs = [ "$target_gen_dir/hwasan.vers" ] lib_names = [
args = [ "$hwasan_name",
"--version-list", "${hwasan_name}_cxx",
"--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),
] ]
} }

View File

@ -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") { source_set("sources") {
configs -= [ "//llvm/utils/gn/build:llvm_code" ] configs -= [ "//llvm/utils/gn/build:llvm_code" ]
configs += [ "//llvm/utils/gn/build:crt_code" ] configs += [ "//llvm/utils/gn/build:crt_code" ]
@ -46,7 +62,6 @@ source_set("dynamic_runtime_thunk") {
sources = [ "ubsan_win_dynamic_runtime_thunk.cpp" ] sources = [ "ubsan_win_dynamic_runtime_thunk.cpp" ]
} }
# Unreferenced; at the moment exists to make sync_source_lists_from_cmake happy.
source_set("standalone_sources") { source_set("standalone_sources") {
configs -= [ "//llvm/utils/gn/build:llvm_code" ] configs -= [ "//llvm/utils/gn/build:llvm_code" ]
configs -= [ "//llvm/utils/gn/build:no_rtti" ] configs -= [ "//llvm/utils/gn/build:no_rtti" ]
@ -72,3 +87,48 @@ source_set("cxx_sources") {
"ubsan_type_hash_win.cpp", "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) ]
}
}