From e504dae9e18ae8cd7a4dfddc75e8a2c7f1f1a248 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Tue, 15 Jan 2019 21:08:21 +0000 Subject: [PATCH] gn build: Add build files for compiler-rt/lib/{hwasan,interception,sanitizer_common,ubsan}. This allows the hwasan runtime to be built for Android aarch64. Differential Revision: https://reviews.llvm.org/D56628 llvm-svn: 351246 --- utils/gn/build/BUILD.gn | 9 ++ utils/gn/secondary/BUILD.gn | 7 +- .../secondary/compiler-rt/lib/hwasan/BUILD.gn | 107 ++++++++++++++++++ .../compiler-rt/lib/interception/BUILD.gn | 13 +++ .../compiler-rt/lib/sanitizer_common/BUILD.gn | 70 ++++++++++++ .../secondary/compiler-rt/lib/ubsan/BUILD.gn | 30 +++++ 6 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 utils/gn/secondary/compiler-rt/lib/hwasan/BUILD.gn create mode 100644 utils/gn/secondary/compiler-rt/lib/interception/BUILD.gn create mode 100644 utils/gn/secondary/compiler-rt/lib/sanitizer_common/BUILD.gn create mode 100644 utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn diff --git a/utils/gn/build/BUILD.gn b/utils/gn/build/BUILD.gn index 2a8d818cbec..cd9d6191322 100644 --- a/utils/gn/build/BUILD.gn +++ b/utils/gn/build/BUILD.gn @@ -135,6 +135,15 @@ config("clang_code") { ] } +config("crt_code") { + include_dirs = [ "//compiler-rt/lib" ] + cflags = [ + "-fPIC", + "-funwind-tables", + "-gline-tables-only", + ] +} + config("warn_covered_switch_default") { if (is_clang) { cflags = [ "-Wcovered-switch-default" ] diff --git a/utils/gn/secondary/BUILD.gn b/utils/gn/secondary/BUILD.gn index 0aca00b9c5a..229775953a4 100644 --- a/utils/gn/secondary/BUILD.gn +++ b/utils/gn/secondary/BUILD.gn @@ -12,7 +12,12 @@ group("default") { if (android_ndk_path != "") { # FIXME: This should be a dependency of a test target instead of being # depended on from here. - deps += [ "//llvm/tools/llvm-symbolizer(//llvm/utils/gn/build/toolchain:stage2_android_aarch64)" ] + android_aarch64_toolchain = + "//llvm/utils/gn/build/toolchain:stage2_android_aarch64" + deps += [ + "//compiler-rt/lib/hwasan:hwasan_shared($android_aarch64_toolchain)", + "//llvm/tools/llvm-symbolizer($android_aarch64_toolchain)", + ] } testonly = true diff --git a/utils/gn/secondary/compiler-rt/lib/hwasan/BUILD.gn b/utils/gn/secondary/compiler-rt/lib/hwasan/BUILD.gn new file mode 100644 index 00000000000..78e36cd9db5 --- /dev/null +++ b/utils/gn/secondary/compiler-rt/lib/hwasan/BUILD.gn @@ -0,0 +1,107 @@ +import("//llvm/version.gni") + +# FIXME: Make this support more platforms. +assert(current_os == "android") + +runtime_output_dir = "$root_build_dir/lib/clang/$llvm_version/lib/linux" +runtime_target = "aarch64-android" + +action("version_script") { + script = "//compiler-rt/lib/sanitizer_common/scripts/gen_dynamic_list.py" + sources = [ + "hwasan.syms.extra", + ] + deps = [ + ":hwasan", + ":hwasan_cxx", + ] + outputs = [ + "$target_gen_dir/hwasan.vers", + ] + args = [ + "--version-list", + "--extra", + rebase_path(sources[0], root_build_dir), + rebase_path("$runtime_output_dir/libclang_rt.hwasan-$runtime_target.a", + root_build_dir), + rebase_path("$runtime_output_dir/libclang_rt.hwasan_cxx-$runtime_target.a", + root_build_dir), + "-o", + rebase_path(outputs[0], root_build_dir), + ] +} + +source_set("sources") { + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + defines = [ "HWASAN_WITH_INTERCEPTORS=1" ] + deps = [ + "//compiler-rt/lib/interception:sources", + "//compiler-rt/lib/sanitizer_common:sources", + "//compiler-rt/lib/ubsan:sources", + ] + sources = [ + "hwasan.cc", + "hwasan_allocator.cc", + "hwasan_dynamic_shadow.cc", + "hwasan_interceptors.cc", + "hwasan_linux.cc", + "hwasan_memintrinsics.cc", + "hwasan_poisoning.cc", + "hwasan_report.cc", + "hwasan_thread.cc", + "hwasan_thread_list.cc", + ] +} + +source_set("cxx_sources") { + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + deps = [ + "//compiler-rt/lib/ubsan:cxx_sources", + ] + sources = [ + "hwasan_new_delete.cc", + ] +} + +static_library("hwasan") { + output_dir = runtime_output_dir + output_name = "clang_rt.hwasan-$runtime_target" + complete_static_lib = true + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + deps = [ + ":sources", + ] +} + +static_library("hwasan_cxx") { + output_dir = runtime_output_dir + output_name = "clang_rt.hwasan_cxx-$runtime_target" + complete_static_lib = true + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + deps = [ + ":cxx_sources", + ] +} + +shared_library("hwasan_shared") { + output_dir = runtime_output_dir + output_name = "clang_rt.hwasan-$runtime_target" + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + deps = [ + ":cxx_sources", + ":sources", + ":version_script", + ] + inputs = [ + "$target_gen_dir/hwasan.vers", + ] + ldflags = [ + "-Wl,--version-script," + rebase_path(inputs[0], root_build_dir), + "-Wl,-z,global", + ] +} diff --git a/utils/gn/secondary/compiler-rt/lib/interception/BUILD.gn b/utils/gn/secondary/compiler-rt/lib/interception/BUILD.gn new file mode 100644 index 00000000000..4276e2e47f5 --- /dev/null +++ b/utils/gn/secondary/compiler-rt/lib/interception/BUILD.gn @@ -0,0 +1,13 @@ +source_set("sources") { + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + deps = [ + "//compiler-rt/lib/sanitizer_common:sources", + ] + sources = [ + "interception_linux.cc", + "interception_mac.cc", + "interception_type_test.cc", + "interception_win.cc", + ] +} diff --git a/utils/gn/secondary/compiler-rt/lib/sanitizer_common/BUILD.gn b/utils/gn/secondary/compiler-rt/lib/sanitizer_common/BUILD.gn new file mode 100644 index 00000000000..af0f2903e51 --- /dev/null +++ b/utils/gn/secondary/compiler-rt/lib/sanitizer_common/BUILD.gn @@ -0,0 +1,70 @@ +source_set("sources") { + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + sources = [ + "sancov_flags.cc", + "sanitizer_allocator.cc", + "sanitizer_allocator_checks.cc", + "sanitizer_allocator_report.cc", + "sanitizer_common.cc", + "sanitizer_common_libcdep.cc", + "sanitizer_coverage_fuchsia.cc", + "sanitizer_coverage_libcdep_new.cc", + "sanitizer_coverage_win_sections.cc", + "sanitizer_deadlock_detector1.cc", + "sanitizer_deadlock_detector2.cc", + "sanitizer_errno.cc", + "sanitizer_file.cc", + "sanitizer_flag_parser.cc", + "sanitizer_flags.cc", + "sanitizer_fuchsia.cc", + "sanitizer_libc.cc", + "sanitizer_libignore.cc", + "sanitizer_linux.cc", + "sanitizer_linux_libcdep.cc", + "sanitizer_linux_s390.cc", + "sanitizer_mac.cc", + "sanitizer_mac_libcdep.cc", + "sanitizer_netbsd.cc", + "sanitizer_openbsd.cc", + "sanitizer_persistent_allocator.cc", + "sanitizer_platform_limits_freebsd.cc", + "sanitizer_platform_limits_linux.cc", + "sanitizer_platform_limits_netbsd.cc", + "sanitizer_platform_limits_openbsd.cc", + "sanitizer_platform_limits_posix.cc", + "sanitizer_platform_limits_solaris.cc", + "sanitizer_posix.cc", + "sanitizer_posix_libcdep.cc", + "sanitizer_printf.cc", + "sanitizer_procmaps_bsd.cc", + "sanitizer_procmaps_common.cc", + "sanitizer_procmaps_linux.cc", + "sanitizer_procmaps_mac.cc", + "sanitizer_procmaps_solaris.cc", + "sanitizer_rtems.cc", + "sanitizer_solaris.cc", + "sanitizer_stackdepot.cc", + "sanitizer_stacktrace.cc", + "sanitizer_stacktrace_libcdep.cc", + "sanitizer_stacktrace_printer.cc", + "sanitizer_stacktrace_sparc.cc", + "sanitizer_stoptheworld_linux_libcdep.cc", + "sanitizer_stoptheworld_mac.cc", + "sanitizer_suppressions.cc", + "sanitizer_symbolizer.cc", + "sanitizer_symbolizer_libbacktrace.cc", + "sanitizer_symbolizer_libcdep.cc", + "sanitizer_symbolizer_mac.cc", + "sanitizer_symbolizer_markup.cc", + "sanitizer_symbolizer_posix_libcdep.cc", + "sanitizer_symbolizer_report.cc", + "sanitizer_symbolizer_win.cc", + "sanitizer_termination.cc", + "sanitizer_thread_registry.cc", + "sanitizer_tls_get_addr.cc", + "sanitizer_unwind_linux_libcdep.cc", + "sanitizer_unwind_win.cc", + "sanitizer_win.cc", + ] +} diff --git a/utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn b/utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn new file mode 100644 index 00000000000..71698161e8f --- /dev/null +++ b/utils/gn/secondary/compiler-rt/lib/ubsan/BUILD.gn @@ -0,0 +1,30 @@ +source_set("sources") { + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + defines = [ "UBSAN_CAN_USE_CXXABI" ] + deps = [ + "//compiler-rt/lib/interception:sources", + "//compiler-rt/lib/sanitizer_common:sources", + ] + sources = [ + "ubsan_diag.cc", + "ubsan_flags.cc", + "ubsan_handlers.cc", + "ubsan_init.cc", + "ubsan_monitor.cc", + "ubsan_value.cc", + ] +} + +source_set("cxx_sources") { + configs -= [ "//llvm/utils/gn/build:llvm_code" ] + configs -= [ "//llvm/utils/gn/build:no_rtti" ] + configs += [ "//llvm/utils/gn/build:crt_code" ] + defines = [ "UBSAN_CAN_USE_CXXABI" ] + sources = [ + "ubsan_handlers_cxx.cc", + "ubsan_type_hash.cc", + "ubsan_type_hash_itanium.cc", + "ubsan_type_hash_win.cc", + ] +}