# 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")

# TODO(thomasanderson): Remove this conditional once Android builds always set
# use_custom_libcxx=true.
if (use_custom_libcxx) {
  source_set("libc++abi") {
    visibility = [ "//buildtools/third_party/libc++" ]
    deps = []

    # Fuchsia builds don't link against any libraries that provide stack
    # unwinding symbols, unlike Linux does with glibc.  Build and link against
    # libunwind manually to get this functionality.
    if (is_fuchsia) {
      deps += [ "//buildtools/third_party/libunwind" ]
    }

    sources = [
      "trunk/src/abort_message.cpp",
      "trunk/src/cxa_aux_runtime.cpp",
      "trunk/src/cxa_default_handlers.cpp",
      "trunk/src/cxa_exception.cpp",
      "trunk/src/cxa_exception_storage.cpp",
      "trunk/src/cxa_guard.cpp",
      "trunk/src/cxa_handlers.cpp",

      # This file is supposed to be used in fno-exception builds of
      # libc++abi.  We build lib++/libc++abi with exceptions enabled.
      #"trunk/src/cxa_noexception.cpp",
      "trunk/src/cxa_personality.cpp",
      "trunk/src/cxa_unexpected.cpp",
      "trunk/src/cxa_vector.cpp",
      "trunk/src/cxa_virtual.cpp",
      "trunk/src/fallback_malloc.cpp",
      "trunk/src/private_typeinfo.cpp",
      "trunk/src/stdlib_exception.cpp",
      "trunk/src/stdlib_stdexcept.cpp",
      "trunk/src/stdlib_typeinfo.cpp",
    ]

    # See the comment in cxa_demangle_stub.cc for why we don't use LLVM's
    # demangler on android.
    if (is_android) {
      deps += [ ":cxa_demangle_stub" ]
    } else {
      sources += [ "trunk/src/cxa_demangle.cpp" ]
    }

    # This file should really be included on linux as well, but that
    # would introduce an unwanted glibc 2.18 dependency.
    if (is_fuchsia || (is_posix && !is_mac && !is_linux)) {
      sources += [ "trunk/src/cxa_thread_atexit.cpp" ]
    }

    defines = [
      "LIBCXXABI_SILENT_TERMINATE",
      "_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS",
    ]

    configs -= [
      "//build/config/compiler:chromium_code",
      "//build/config/compiler:no_exceptions",
      "//build/config/compiler:no_rtti",
      "//build/config/coverage:default_coverage",
    ]
    configs += [
      "//build/config/compiler:no_chromium_code",
      "//build/config/compiler:exceptions",
      "//build/config/compiler:rtti",
      "//buildtools/third_party/libc++:config",
    ]
  }
}

source_set("cxa_demangle_stub") {
  # TODO(thomasanderson): This file is currently pulled in from //base on
  # Android, but will no longer be needed once Android builds always set
  # use_custom_libcxx=true.  When this happens, this target can be removed,
  # cxa_demangle_stub.cc can be added to the libc++abi target above, and
  # __cxa_demangle can simply be annoted with _LIBCXXABI_FUNC_VIS.
  if (use_custom_libcxx && !libcpp_is_static) {
    defines = [ "EXPORT_CXA_DEMANGLE" ]
  }
  sources = [ "cxa_demangle_stub.cc" ]
}
