summaryrefslogtreecommitdiff
path: root/deps/v8/build/config/c++/c++.gni
blob: 4deaf03575c31871e43d485c2f9bdd874faeffbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/sanitizers/sanitizers.gni")

declare_args() {
  # Use in-tree libc++ (buildtools/third_party/libc++ and
  # buildtools/third_party/libc++abi) instead of the system C++ library for C++
  # standard library support.
  # Don't check in changes that set this to false for more platforms; doing so
  # is not supported.
  use_custom_libcxx =
      is_fuchsia || is_android || is_mac || is_ios ||
      (is_linux &&
       (!is_chromeos || default_toolchain != "//build/toolchain/cros:target"))

  # Use libc++ instead of stdlibc++ when using the host_cpu toolchain, even if
  # use_custom_libcxx is false. This is useful for cross-compiles where a custom
  # toolchain for the target_cpu has been set as the default toolchain, but
  # use_custom_libcxx should still be true when building for the host.  The
  # expected usage is to set use_custom_libcxx=false and
  # use_custom_libcxx_for_host=true in the passed in buildargs.
  use_custom_libcxx_for_host = false
}

use_custom_libcxx =
    use_custom_libcxx || (use_custom_libcxx_for_host && current_cpu == host_cpu)
use_custom_libcxx = use_custom_libcxx && !is_nacl

declare_args() {
  # WARNING: Setting this to a non-default value is highly discouraged.
  # If true, libc++ will be built as a shared library; otherwise libc++ will be
  # linked statically. Setting this to something other than the default is
  # unsupported and can be broken by libc++ rolls. Note that if this is set to
  # true, you must also set libcxx_abi_unstable=false, which is bad for
  # performance and memory use.
  libcxx_is_shared = use_custom_libcxx && is_component_build
}

# libc++abi needs to be exported from executables to be picked up by shared
# libraries on certain instrumented builds.
export_libcxxabi_from_executables =
    use_custom_libcxx && !is_win && !is_component_build &&
    (is_asan || is_ubsan_vptr)

# On Android, many shared libraries get loaded from the context of a JRE.  In
# this case, there's no "main executable" to export libc++abi from.  We could
# export libc++abi from each "toplevel" shared library instead, but that would
# require adding an explicit dependency for each one, and might introduce
# subtle, hard-to-fix problems down the line if the dependency is missing.
#
# export_libcxxabi_from_executables was added to avoid having an RPATH set in
# static sanitizer builds just for executables to find libc++.  But on Android,
# the Bionic dynamic loader doesn't even look at RPATH; instead, LD_LIBRARY_PATH
# is set for tests. Because of this, we make libc++ a shared library on android
# since it should get loaded properly.
if (is_android && export_libcxxabi_from_executables) {
  export_libcxxabi_from_executables = false
  libcxx_is_shared = true
}

libcxx_prefix = "//buildtools/third_party/libc++/trunk"
libcxxabi_prefix = "//buildtools/third_party/libc++abi/trunk"