# Copyright 2018 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/banjo/toolchain.gni")
import("//build/compiled_action.gni")
import("//build/rust/toolchain.gni")

# Generates some Rust bindings for a banjo library.
#
# The parameters for this template are defined in //build/banjo/banjo.gni. The
# relevant parameters in this template are:
#   - name.

template("banjo_rust") {
  assert(current_toolchain == rust_toolchain,
         "This template can only be used in $rust_toolchain.")

  not_needed(invoker, [ "sources" ])

  main_target_name = target_name
  generation_target_name = "${target_name}_rust_generate"

  library_name = target_name
  if (defined(invoker.name)) {
    library_name = invoker.name
  }

  underscore_name = "banjo_" + string_replace(library_name, ".", "_")
  dash_name = string_replace(library_name, ".", "-")

  banjo_target_gen_dir =
      get_label_info(":bogus($banjo_toolchain)", "target_gen_dir")
  file_stem = "$banjo_target_gen_dir/$underscore_name.rs"
  file_args = "$banjo_target_gen_dir/rust/$dash_name.args"

  compiled_action(generation_target_name) {
    forward_variables_from(invoker, [ "testonly" ])

    visibility = [ ":*" ]

    tool = "//tools/banjo/banjo:banjo_bin"

    inputs = [
      "//tools/banjo/banjo/zx.banjo",
    ]
    inputs += invoker.sources

    outputs = [
      "$file_stem",
    ]

    args = [ "@" + rebase_path(file_args, root_build_dir) ]

    deps = [
      ":$main_target_name($banjo_toolchain)",
    ]
  }

  group(main_target_name) {
    forward_variables_from(invoker,
                           [
                             "public_deps",
                             "testonly",
                             "visibility",
                           ])

    deps = [
      ":$generation_target_name",
    ]

    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
  }
}
