# Copyright 2017 The Fuchsia 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/clang/clang.gni")
import("//build/config/sysroot.gni")
import("//build/rust/config.gni")

config("compiler") {
  cflags = []
  ldflags = [
    # Use static C++ standard library.
    "-static-libstdc++",

    # Set rpath to find dynamically linked libraries placed next to executables
    # in the host build directory.
    "-Wl,-rpath=\$ORIGIN/",
  ]
  configs = [
    ":sysroot",
    ":target",
    ":clang_defaults",
  ]

  rustflags = [
    "-Clinker=" + rebase_path("$clang_prefix/clang++", "", root_build_dir),
    "-Cdefault-linker-libraries",
  ]
  foreach(flag, ldflags) {
    rustflags += [ "-Clink-arg=$flag" ]
  }

  if (!toolchain_variant.is_pic_default) {
    # Rust links are always PIE on Linux.  C/C++ static library code that is
    # linked into Rust programs must be compiled as PIE too.  Since there's no
    # good way to distinguish code going into Rust links from other code, just
    # do it for everything.
    cflags = [ "-fPIE" ]

    # Since we're compiling as PIE, link as PIE too.
    # This makes `#ifdef __PIE__` checks comport with link-time behavior.
    ldflags += cflags + [ "-pie" ]
  }

  # TODO(fxbug.dev/26846) The implicitly linked static libc++.a depends on these.
  libs = [
    "dl",
    "pthread",
  ]

  asmflags = cflags
}

config("sysroot") {
  cflags = [ "--sysroot=" + rebase_path(sysroot, root_build_dir) ]
  ldflags = cflags
  asmflags = cflags

  rustflags = []
  foreach(flag, ldflags) {
    rustflags += [ "-Clink-arg=$flag" ]
  }
}

config("target") {
  cflags = [ "--target=$clang_target" ]
  asmflags = cflags
  ldflags = cflags

  rustflags = []
  foreach(flag, ldflags) {
    rustflags += [ "-Clink-arg=$flag" ]
  }
}

# These flags are enabled by default in Fuchsia's Clang toolchain, but we set
# them explicitly to support other Clang toolchains and Clang-based tools.
config("clang_defaults") {
  cflags_cc = [
    # Use libc++ as the C++ standard library.
    "-stdlib=libc++",
  ]
  ldflags = [
    # Use libc++ as the C++ standard library.
    "-stdlib=libc++",

    # Use unwinder provided by the C++ standard library.
    "-unwindlib=",

    # Use compiler-rt as the compiler runtime.
    "-rtlib=compiler-rt",

    # Use lld as the linker.
    "-fuse-ld=lld",

    # Generate build ID for all binaries.
    "-Wl,--build-id",
  ]

  rustflags = []
  foreach(flag, ldflags) {
    rustflags += [ "-Clink-arg=$flag" ]
  }
}
