# 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/images/manifest.gni")

# Creates a devmgr_manifest to be used by isolated devmgr components.
# TODO(brunodalbo) expand this template in the future to allow specifying which drivers specifically
#  we want to include in the component.
#
# Note that only one target per build file may use this template.
#
# Outputs
#   $target_gen_dir/devmgr.manifest
#     The generated manifest.
template("devmgr_manifest") {
  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "public_deps",
                             "deps",
                             "testonly",
                           ])
    visibility = [ ":*" ]
    sources = zircon_boot_manifests
    deps = zircon_boot_manifests_deps
    outputs = [ "$target_gen_dir/devmgr.manifest" ]
    script = "//build/images/manifest.py"
    args = [
      "--include=bin/driver_manager",
      "--include=bin/fshost",
      "--output=" + rebase_path(outputs[0], root_build_dir),
    ]
    foreach(manifest, sources) {
      args += [
        "--cwd=.",
        "--manifest=" + rebase_path(manifest, root_build_dir),
      ]
    }
  }
}
