xref: /aosp_15_r20/external/cronet/buildtools/third_party/libc++abi/BUILD.gn (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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