# Copyright (c) 2014 The Native Client 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/nacl/config.gni")
import("//build/toolchain/gcc_toolchain.gni")

# This template defines a NaCl toolchain.
#
# It requires the following variables specifying the executables to run:
#  - cc
#  - cxx
#  - ar
#  - ld

template("nacl_toolchain") {
  assert(defined(invoker.cc), "nacl_toolchain() must specify a \"cc\" value")
  assert(defined(invoker.cxx), "nacl_toolchain() must specify a \"cxx\" value")
  assert(defined(invoker.ar), "nacl_toolchain() must specify a \"ar\" value")
  assert(defined(invoker.ld), "nacl_toolchain() must specify a \"ld\" value")
  gcc_toolchain(target_name) {
    if (defined(invoker.executable_extension)) {
      executable_extension = invoker.executable_extension
    } else {
      executable_extension = ".nexe"
    }
    rebuild_define = "NACL_TC_REV=" + invoker.toolchain_revision

    forward_variables_from(invoker,
                           [
                             "ar",
                             "cc",
                             "cxx",
                             "deps",
                             "is_clang_analysis_supported",
                             "ld",
                             "link_outputs",
                             "nm",
                             "readelf",
                             "strip",
                           ])

    toolchain_args = {
      # Use all values set on the invoker's toolchain_args.
      forward_variables_from(invoker.toolchain_args, "*")

      current_os = "nacl"

      # We do not support component builds with the NaCl toolchains.
      is_component_build = false

      # We do not support tcmalloc in the NaCl toolchains.
      use_allocator = "none"

      # We do not support clang code coverage in the NaCl toolchains.
      use_clang_coverage = false
    }
  }
}
