1# Copyright 2015 The Chromium Authors 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import("//build/config/android/config.gni") 6import("//build/config/c++/c++.gni") 7import("//build/config/unwind.gni") 8 9source_set("libc++abi") { 10 if (export_libcxxabi_from_executables) { 11 visibility = [ "//build/config:executable_deps" ] 12 } else { 13 visibility = [ "//buildtools/third_party/libc++" ] 14 } 15 16 # Fuchsia builds don't link against any libraries that provide stack 17 # unwinding symbols, unlike Linux does with glibc (same applies for Android). 18 # Build and link against libunwind manually to get this functionality. 19 if (use_custom_libunwind) { 20 deps = [ "//buildtools/third_party/libunwind" ] 21 } 22 23 # TODO(crbug.com/1458042): Move this build file to third_party/libc++/BUILD.gn once submodule migration is done 24 sources = [ 25 "//third_party/libc++abi/src/src/abort_message.cpp", 26 "//third_party/libc++abi/src/src/cxa_aux_runtime.cpp", 27 "//third_party/libc++abi/src/src/cxa_default_handlers.cpp", 28 "//third_party/libc++abi/src/src/cxa_exception.cpp", 29 "//third_party/libc++abi/src/src/cxa_exception_storage.cpp", 30 "//third_party/libc++abi/src/src/cxa_handlers.cpp", 31 32 # This file is supposed to be used in fno-exception builds of 33 # libc++abi. We build lib++/libc++abi with exceptions enabled. 34 #"//third_party/libc++abi/src/src/cxa_noexception.cpp", 35 "//third_party/libc++abi/src/src/cxa_personality.cpp", 36 "//third_party/libc++abi/src/src/cxa_vector.cpp", 37 "//third_party/libc++abi/src/src/cxa_virtual.cpp", 38 "//third_party/libc++abi/src/src/fallback_malloc.cpp", 39 "//third_party/libc++abi/src/src/private_typeinfo.cpp", 40 "//third_party/libc++abi/src/src/stdlib_exception.cpp", 41 "//third_party/libc++abi/src/src/stdlib_stdexcept.cpp", 42 "//third_party/libc++abi/src/src/stdlib_typeinfo.cpp", 43 ] 44 45 if (!is_tsan) { 46 sources += [ "//third_party/libc++abi/src/src/cxa_guard.cpp" ] 47 } 48 49 # See the comment in cxa_demangle_stub.cc for why we don't use LLVM's 50 # demangler on android. 51 # TODO(thakis): Switch to building with LIBCXXABI_NON_DEMANGLING_TERMINATE 52 # defined instead. 53 if (is_android) { 54 sources += [ "cxa_demangle_stub.cc" ] 55 } else { 56 sources += [ "//third_party/libc++abi/src/src/cxa_demangle.cpp" ] 57 } 58 59 defines = [ "LIBCXXABI_SILENT_TERMINATE" ] 60 61 if (is_fuchsia || (is_posix && !is_apple)) { 62 sources += [ "//third_party/libc++abi/src/src/cxa_thread_atexit.cpp" ] 63 64 # Android's bionic libc added support for '__cxa_thread_atexit_impl' as of 65 # API level 23. 66 if (is_android && 67 ((!android_64bit_target_cpu && android32_ndk_api_level >= 23) || 68 (android_64bit_target_cpu && android64_ndk_api_level >= 23))) { 69 defines += [ "HAVE___CXA_THREAD_ATEXIT_IMPL" ] 70 } 71 } 72 73 configs -= [ 74 "//build/config/compiler:chromium_code", 75 "//build/config/compiler:no_exceptions", 76 "//build/config/compiler:no_rtti", 77 "//build/config/coverage:default_coverage", 78 ] 79 configs += [ 80 "//build/config/compiler:no_chromium_code", 81 "//build/config/compiler:exceptions", 82 "//build/config/compiler:rtti", 83 "//buildtools/third_party/libc++:config", 84 ] 85 86 # private_typeinfo.cpp implements __dynamic_cast(), which is the runtime 87 # bit that implements dynamic_cast<>(). But ubsan's vptr check inserts 88 # dynamic_cast<>()s, which leads to infinite recursion. So make sure we don't 89 # pass -fsanitize=vptr. 90 configs -= [ "//build/config/sanitizers:default_sanitizer_flags" ] 91 configs += 92 [ "//build/config/sanitizers:default_sanitizer_flags_but_ubsan_vptr" ] 93 94 if (export_libcxxabi_from_executables || libcxx_is_shared) { 95 configs -= [ "//build/config/gcc:symbol_visibility_hidden" ] 96 configs += [ "//build/config/gcc:symbol_visibility_default" ] 97 } 98 99 # libc++abi depends on libc++ internals. 100 include_dirs = [ "//third_party/libc++/src/src" ] 101} 102