summaryrefslogtreecommitdiff
path: root/chromium/buildtools/third_party/libc++/BUILD.gn
blob: e49a49c842e6c6e8840ae14fdd004a480362907a (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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# Copyright 2015 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/c++/c++.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/toolchain/toolchain.gni")

# Used by libc++ and libc++abi.
config("config") {
  defines = [ "LIBCXX_BUILDING_LIBCXXABI" ]
  if (libcpp_is_static) {
    defines += [
      # This resets the visibility to default only for the various
      # flavors of operator new and operator delete.  These symbols
      # are weak and get overriden by Chromium-provided ones, but if
      # these symbols had hidden visibility, this would make the
      # Chromium symbols hidden too because elf visibility rules
      # require that linkers use the least visible form when merging,
      # and if this is hidden, then when we merge it with tcmalloc's
      # operator new, hidden visibility would win. However, tcmalloc
      # needs a visible operator new to also override operator new
      # references from system libraries.
      # TODO(lld): Ask lld for a --force-public-visibility flag or
      # similar to that overrides the default elf merging rules, and
      # make tcmalloc's gn config pass that to all its dependencies,
      # then remove this override here.
      "_LIBCPP_OVERRIDABLE_FUNC_VIS=__attribute__((__visibility__(\"default\")))",
    ]
  }
  cflags = [
    "-fPIC",
    "-fstrict-aliasing",
  ]
}

if (libcpp_is_static) {
  link_target_type = "source_set"
} else {
  link_target_type = "shared_library"
}
target(link_target_type, "libc++") {
  sources = [
    "trunk/src/algorithm.cpp",
    "trunk/src/any.cpp",
    "trunk/src/bind.cpp",
    "trunk/src/chrono.cpp",
    "trunk/src/condition_variable.cpp",
    "trunk/src/debug.cpp",
    "trunk/src/exception.cpp",
    "trunk/src/functional.cpp",
    "trunk/src/future.cpp",
    "trunk/src/hash.cpp",
    "trunk/src/ios.cpp",
    "trunk/src/iostream.cpp",
    "trunk/src/locale.cpp",
    "trunk/src/memory.cpp",
    "trunk/src/mutex.cpp",
    "trunk/src/new.cpp",
    "trunk/src/optional.cpp",
    "trunk/src/random.cpp",
    "trunk/src/regex.cpp",
    "trunk/src/shared_mutex.cpp",
    "trunk/src/stdexcept.cpp",
    "trunk/src/string.cpp",
    "trunk/src/strstream.cpp",
    "trunk/src/system_error.cpp",
    "trunk/src/thread.cpp",
    "trunk/src/typeinfo.cpp",
    "trunk/src/utility.cpp",
    "trunk/src/valarray.cpp",
    "trunk/src/variant.cpp",
  ]
  configs -= [
    "//build/config/compiler:chromium_code",
    "//build/config/compiler:no_rtti",
    "//build/config/gcc:no_exceptions",
  ]
  configs += [
    ":config",
    "//build/config/compiler:no_chromium_code",
    "//build/config/compiler:rtti",
    "//build/config/sanitizers:sanitizer_options_link_helper",
  ]
  defines = [ "_LIBCPP_BUILDING_LIBRARY" ]

  deps = [
    "//buildtools/third_party/libc++abi",
  ]
}