# 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 libc++ (buildtools/third_party/libc++ and
  # buildtools/third_party/libc++abi) instead of stdlibc++ as standard
  # library.
  # Don't check in changes that set this to false for more platforms; doing so
  # is not supported.
  use_custom_libcxx =
      is_msan || is_fuchsia ||
      (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

  # ASan, MSan and TSan builds need to override operator new, operator delete,
  # and some exception handling symbols, so libc++ must be a shared library to
  # prevent duplicate symbol errors when linking.
  # Additionally, -fsanitize=vptr requires libc++ to be a shared library
  # because the ubsan runtime library that implements -fsanitize=vptr calls
  # dynamic_cast with the ABI type info classes, which won't return the right
  # answer if each DSO has its own copy of the ABI classes.
  libcpp_is_static = !is_component_build && !is_asan && !is_msan && !is_tsan &&
                     !is_ubsan && !is_ubsan_security && !is_ubsan_vptr
}

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

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