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 @@ -6,11 +6,11 @@ if (current_os == "linux") { deps += [ "//compiler-rt/lib/msan" ] } - if (current_os == "linux" || current_os == "android") { - deps += [ - "//compiler-rt/lib/ubsan", - "//compiler-rt/lib/ubsan_minimal", - ] + if (current_os == "android" || current_os == "linux" || current_os == "mac") { + deps += [ "//compiler-rt/lib/ubsan" ] + } + if (current_os == "android" || current_os == "linux") { + deps += [ "//compiler-rt/lib/ubsan_minimal" ] } if (current_os != "win" && current_os != "baremetal") { deps += [ "//compiler-rt/lib/asan" ] 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,10 +1,14 @@ import("//compiler-rt/target.gni") group("ubsan") { - deps = [ - ":ubsan_standalone", - ":ubsan_standalone_cxx", - ] + if (current_os == "mac") { + deps = [ ":ubsan_shared_library" ] + } else { + deps = [ + ":ubsan_standalone", + ":ubsan_standalone_cxx", + ] + } } source_set("sources") { @@ -86,8 +90,43 @@ ] } -# FIXME: Make ubsan_standalone work on mac. -if (current_os != "mac") { +if (current_os == "mac") { + shared_library("ubsan_shared_library") { + 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", + ] + # The -U flags below correspond to the add_weak_symbols() calls in CMake. + ldflags = [ + "-lc++", + "-lc++abi", + + # ubsan + "-Wl,-U,___ubsan_default_options", + + # sanitizer_common + "-Wl,-U,___sanitizer_free_hook", + "-Wl,-U,___sanitizer_malloc_hook", + "-Wl,-U,___sanitizer_report_error_summary", + "-Wl,-U,___sanitizer_sandbox_on_notify", + "-Wl,-U,___sanitizer_symbolize_code", + "-Wl,-U,___sanitizer_symbolize_data", + "-Wl,-U,___sanitizer_symbolize_demangle", + "-Wl,-U,___sanitizer_symbolize_flush", + "-Wl,-U,___sanitizer_symbolize_set_demangle", + "-Wl,-U,___sanitizer_symbolize_set_inline_frames", + + # FIXME: better + "-Wl,-install_name,@rpath/libclang_rt.ubsan_osx_dynamic.dylib", + ] + # FIXME: -Wl,-rpath + } +} else { static_library("ubsan_standalone") { output_dir = crt_current_out_dir output_name = "clang_rt.ubsan_standalone$crt_current_target_suffix"