# 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.

# Template to define a config for use in the `known_variants` list.
# `variant` is used just like `config`, but it also accepts two other
# optional parameters:
#
#   common_flags
#     This is a shorthand for appending the same thing to cflags,
#     asmflags, and ldflags.  Most flags that affect code generation
#     should be used uniformly in compilation, assembly, and linking.
#     If cflags, asmflags, or ldflags is also specified, common_flags
#     will be appended to it.
#
#   deps
#     This lists labels that will be automatically added to the deps list
#     of each executable target built in this variant.
#
template("variant") {
  config(target_name) {
    asmflags = []
    cflags = []
    ldflags = []
    forward_variables_from(invoker,
                           "*",
                           [
                             "common_flags",
                             "deps",
                           ])
    if (defined(invoker.common_flags)) {
      asmflags += invoker.common_flags
      cflags += invoker.common_flags
      ldflags += invoker.common_flags
    }
  }
  group("${target_name}_deps") {
    # Propagate it as public_deps so that targets in deps can have
    # public_configs that will be applied to variant executables.
    if (defined(invoker.deps)) {
      public_deps = invoker.deps
    }
  }
}
