# Copyright 2019 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/sdk/host_tool_sdk_element.gni")
import("//build/sdk/sdk_prebuilt_executable.gni")

# Host tools are package per OS and architecture.
if (is_host) {
  # Host tool SDK element specs.
  # The tool scope contains:
  #
  # name (required)
  #   Target name.
  # label (required)
  #   Host tool binary label.
  # output (optional)
  #   The name of the output of the host tool binary if the target name and
  #   the binary name differ, which is applicable to rust binaries.
  # description (optional)
  #   A human readable description injected into the host tool SDK metadata.
  tools = [
    {
      name = "cmc"
      label = "//tools/cmc"
      output = "cmc"
      description = "Component manifest compiler."
    },
    {
      name = "fidlc"
      label = "//tools/fidl/fidlc"
      description = "FIDL compiler."
    },
    {
      name = "zbi"
      label = "//zircon/tools/zbi"
      description = "Zircon boot image manipulator."
    },
  ]

  sdk_prebuilt_executable("banjo") {
    category = "partner"

    prebuilt = "//prebuilt/tools/banjo/${host_platform}/banjo_bin"
  }

  # Experimental SDK targets.

  # TODO(42999): Consider adding element adapters when legacy host tools are
  # retired.
  foreach(tool, tools) {
    host_tool_sdk_element(tool.name) {
      deps = [ tool.label ]
      if (defined(tool.output)) {
        output_name = tool.output
      }
      if (defined(tool.description)) {
        description = tool.description
      }
    }
  }
}
