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 --- /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 --- a/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn +++ b/llvm/utils/gn/secondary/compiler-rt/lib/BUILD.gn @@ -10,7 +10,10 @@ 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:ubsan_shared", + ] 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 --- 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 @@ 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 --- 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 @@ 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,47 @@ "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", + ":version_script", + ] + inputs = [ "$target_gen_dir/ubsan.vers" ] + ldflags = [ + "-Wl,--version-script," + rebase_path(inputs[0], root_build_dir), + ] +}