# Copyright 2022 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/bind/bind.gni")

# Generates a driver bind library for a FIDL library.
#
# Parameters (see //build/fidl/fidl.gni for descriptions):
#
#   name
#   testonly
#   visibility
#
template("fidl_bind_library") {
  not_needed(invoker,
             [
               "public_deps",
               "sdk_category",
             ])

  generation_target_name = "${target_name}_bindlib_generate"

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

  fidl_target_gen_dir =
      get_label_info(":bogus($fidl_toolchain)", "target_gen_dir")

  bind_library_file_name = "${library_name}.bind"
  generated_bind_library =
      "$fidl_target_gen_dir/$target_name/fidl_bindlibs/$bind_library_file_name"

  if (current_toolchain == fidl_toolchain) {
    not_needed(invoker, [ "visibility" ])

    main_target_name = target_name
    ir_file = "$fidl_target_gen_dir/$target_name.fidl.json"
    compiled_action(generation_target_name) {
      forward_variables_from(invoker, [ "testonly" ])
      visibility = [ ":*" ]

      tool = "//tools/bindc:bin"
      tool_output_name = "bindc"

      inputs = [ ir_file ]

      outputs = [ generated_bind_library ]

      deps = [ ":${main_target_name}($fidl_toolchain)" ]

      args = [
        "generate-bind",
        "--output",
        rebase_path("${generated_bind_library}", root_build_dir),
        rebase_path("${ir_file}", root_build_dir),
      ]

      metadata = {
        generated_sources = rebase_path(outputs, root_build_dir)
      }
    }
  } else {
    bind_library("${target_name}_bindlib") {
      forward_variables_from(invoker,
                             [
                               "testonly",
                               "visibility",
                             ])

      source_dep = ":$generation_target_name($fidl_toolchain)"
      source = generated_bind_library
      name = library_name
    }
  }
}
