# 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/sanitizers/sanitizers.gni")
import("//build/config/sysroot.gni")
import("//build/toolchain/toolchain.gni")

assert(is_posix)

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

# This is included by reference in the //build/config/compiler config that
# is applied to all Posix targets. It is here to separate out the logic that is
# Posix-only. Note that this is in addition to an OS-specific variant of this
# config.
config("compiler") {
  if ((allow_posix_link_time_opt || is_cfi) && !is_nacl) {
    arflags = [
      "--plugin",
      rebase_path("//third_party/llvm-build/Release+Asserts/lib/LLVMgold.so",
                  root_build_dir),
    ]
  }
}

# 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") {
  if (!is_mac && !is_ios && sysroot != "") {
    # Pass the sysroot to all C compiler variants, the assembler, and linker.
    cflags = [ "--sysroot=" + rebase_path(sysroot, root_build_dir) ]
    asmflags = cflags
    ldflags = cflags

    # Need to get some linker flags out of the sysroot.
    ldflags += [ exec_script("sysroot_ld_path.py",
                             [
                               rebase_path("//build/linux/sysroot_ld_path.sh",
                                           root_build_dir),
                               sysroot,
                             ],
                             "value") ]
  }
}
