# 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") {
  cflags = [ "-fstrict-aliasing" ]
  if (is_win) {
    # libc++ wants to redefine the macros WIN32_LEAN_AND_MEAN and _CRT_RAND_S in its
    # implementation.
    cflags += [ "-Wno-macro-redefined" ]
  } else {
    cflags += [ "-fPIC" ]
  }
}

if (libcpp_is_static) {
  link_target_type = "source_set"
} else {
  link_target_type = "shared_library"
}
target(link_target_type, "libc++") {
  if (!libcpp_is_static) {
    no_default_deps = true
  }
  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",
    "trunk/src/vector.cpp",
  ]
  if (is_win) {
    sources += [
      "trunk/src/support/win32/locale_win32.cpp",
      "trunk/src/support/win32/support.cpp",
      "trunk/src/support/win32/thread_win32.cpp",
    ]
  }
  configs -= [
    "//build/config/compiler:chromium_code",
    "//build/config/compiler:no_exceptions",
    "//build/config/compiler:no_rtti",
    "//build/config/coverage:default_coverage",
  ]
  if (is_android && !libcpp_is_static) {
    configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
  }
  configs += [
    ":config",
    "//build/config/compiler:no_chromium_code",
    "//build/config/compiler:exceptions",
    "//build/config/compiler:rtti",
    "//build/config/sanitizers:sanitizer_options_link_helper",
  ]

  defines = [ "_LIBCPP_BUILDING_LIBRARY" ]
  if (!is_clang && !libcpp_is_static) {
    # This is a temporary workaround to get libc++ builds working with
    # gcc.  It can be removed with either
    # https://reviews.llvm.org/D35326 or
    # https://reviews.llvm.org/D35388 lands.
    defines += [ "_LIBCPP_EXTERN_TEMPLATE_TYPE_VIS=__attribute__((__visibility__(\"default\")))" ]
  }
  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\")))",
    ]
  }

  if (!is_win) {
    defines += [ "LIBCXX_BUILDING_LIBCXXABI" ]
    deps = [
      "//buildtools/third_party/libc++abi",
    ]
  }
}
