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

cm_compile("root.cm") {
  data = rebase_path("meta/root.cml")
}

# TODO(BLD-448): This should move into the devcoordinator package that's
# included in bootfs along with devcoordinator's binary and other
# resources/libraries. For now it's here since cm_compile doesn't exist in
# //zircon.
cm_compile("devcoordinator.cm") {
  data = rebase_path("meta/devcoordinator.cml")
}
cm_compile("console.cm") {
  data = rebase_path("meta/console.cml")
}
cm_compile("ptysvc.cm") {
  data = rebase_path("meta/ptysvc.cml")
}

# TODO(BLD-448): Should become a package just containing the root manifests.
generate_manifest("root_manifests.bootfs") {
  deps = [
    ":console.cm",
    ":devcoordinator.cm",
    ":ptysvc.cm",
    ":root.cm",
  ]

  root_cm_out = get_target_outputs(":root.cm")
  devc_cm_out = get_target_outputs(":devcoordinator.cm")
  console_cm_out = get_target_outputs(":console.cm")
  ptysvc_cm_out = get_target_outputs(":ptysvc.cm")
  args = [
    "--entry=meta/root.cm=" + rebase_path(root_cm_out[0]),
    "--entry=meta/devcoordinator.cm=" + rebase_path(devc_cm_out[0]),
    "--entry=meta/console.cm=" + rebase_path(console_cm_out[0]),
    "--entry=meta/ptysvc.cm=" + rebase_path(ptysvc_cm_out[0]),
  ]
}
