import("//build/config/c++/c++.gni")
import("//build/config/chrome_build.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/dcheck_always_on.gni")
import("//buildtools/deps_revisions.gni")

assert(use_custom_libcxx, "should only be used if use_custom_libcxx is set")

# This is included by reference in the //build/config/compiler:runtime_library
# config that is applied to all targets. It is here to separate out the logic
# that is specific to libc++. Please see that target for advice on what should
# go in :runtime_library vs. :compiler.
config("runtime_library") {
  cflags = []
  cflags_cc = []
  defines = []
  include_dirs = []
  ldflags = []
  libs = []

  # Fixed libc++ configuration macros are in
  # buildtools/third_party/libc++/__config_site. This config only has defines
  # that vary depending on gn args, and non-define flags.

  if (!libcxx_is_shared) {
    # Don't leak any symbols on a static build.
    defines += [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ]
    if (!export_libcxxabi_from_executables && !is_win) {
      defines += [ "_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" ]
    }
  }

  include_dirs += [ "//buildtools/third_party/libc++" ]

  # libc++ has two levels of additional checking:
  # 1. _LIBCPP_ENABLE_ASSERTIONS enables assertions for bounds checking.
  #    We always enable this in __config_site, in all build configurations.
  # 2. _LIBCPP_ENABLE_DEBUG_MODE enables iterator debugging and other
  #    expensive checks. Enable these only if enable_iterator_debugging is on.
  if (enable_iterator_debugging) {
    defines += [ "_LIBCPP_ENABLE_DEBUG_MODE" ]
  }

  defines += [ "CR_LIBCXX_REVISION=$libcxx_revision" ]

  if (is_win) {
    # Intentionally not using libc++abi on Windows because libc++abi only
    # implements the Itanium C++ ABI, and not the Microsoft ABI which we use on
    # Windows (and we need to use in order to interoperate correctly with COM
    # among other things).
    assert(!export_libcxxabi_from_executables,
           "Don't use libcxxabi on Windows.")

    cflags_cc +=
        [ "-I" + rebase_path("$libcxx_prefix/include", root_build_dir) ]

    # Add a debug visualizer for Microsoft's debuggers so that they can display
    # libc++ types well.
    if (libcxx_natvis_include) {
      # chrome.natvis listed as an input in //buildtools/third_party/libc++ to
      # guarantee relinking on changes.
      ldflags += [ "/NATVIS:" + rebase_path("libc++.natvis", root_build_dir) ]
    }
  } else {
    cflags_cc += [
      "-nostdinc++",
      "-isystem" + rebase_path("$libcxx_prefix/include", root_build_dir),
      "-isystem" + rebase_path("$libcxxabi_prefix/include", root_build_dir),
    ]

    cflags_objcc = cflags_cc

    # Make sure we don't link against the system libstdc++ or libc++.
    if (is_clang) {
      ldflags += [ "-nostdlib++" ]
    } else {
      # Gcc has a built-in abs() definition with default visibility.
      # If it was not disabled, it would conflict with libc++'s abs()
      # with hidden visibility.
      cflags += [ "-fno-builtin-abs" ]

      ldflags += [ "-nodefaultlibs" ]

      # Unfortunately, there's no way to disable linking against just libc++
      # (gcc doesn't have -notstdlib++:
      # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83931); -nodefaultlibs
      # removes all of the default libraries, so add back the ones that we need.
      libs += [
        "c",
        "gcc_s",
        "m",
        "rt",
      ]
    }
  }
  if (use_custom_libcxx && enable_safe_libcxx) {
    defines += [ "_LIBCPP_ENABLE_ASSERTIONS=1" ]
  }
}
