# Copyright 2015 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/sysroot.gni")

# This build configuration is used by both Fuchsia and POSIX systems.
assert(is_posix || is_fuchsia)

group("posix") {
  visibility = [ "//:optimize_gn_gen" ]
}

# 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 Posix-only. Please see that target for advice on what should go in
# :runtime_library vs. :compiler.
config("runtime_library") {
  asmflags = []
  cflags = []
  cflags_c = []
  cflags_cc = []
  cflags_objc = []
  cflags_objcc = []
  defines = []
  ldflags = []

  if (!is_apple && sysroot != "" && current_os != "zos") {
    # Pass the sysroot to all C compiler variants, the assembler, and linker.
    sysroot_flags = [ "--sysroot=" + rebase_path(sysroot, root_build_dir) ]
    if (is_linux || is_chromeos) {
      # This is here so that all files get recompiled after a sysroot roll and
      # when turning the sysroot on or off. (defines are passed via the command
      # line, and build system rebuilds things when their commandline
      # changes). Nothing should ever read this define.
      import("//build/linux/sysroot_scripts/sysroot.gni")
      defines += [ "CR_SYSROOT_KEY=$cr_sysroot_key" ]
    }
    asmflags += sysroot_flags
    ldflags += sysroot_flags

    # When use_custom_libcxx=true, some -isystem flags get passed to
    # cflags_cc to set up libc++ include paths.  We want to make sure
    # the sysroot includes take lower precendence than the libc++
    # ones, so they must appear later in the command line.  However,
    # the gn reference states "These variant-specific versions of
    # cflags* will be appended on the compiler command line after
    # 'cflags'."  Because of this, we must set the sysroot flags for
    # all cflags variants instead of using 'cflags' directly.
    cflags_c += sysroot_flags
    cflags_cc += sysroot_flags
    cflags_objc += sysroot_flags
    cflags_objcc += sysroot_flags
  }
}
