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