# 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/config/fuchsia/zbi.gni")
import("//build/images/assemble_system.gni")
import("//garnet/build/pkgfs.gni")

guest_packages = [
  "//garnet/bin/appmgr",
  "//garnet/bin/appmgr:appmgr_scheme_config",
  "//src/virtualization/tests:guest_integration_tests_utils",
  "//src/virtualization/packages/zircon_guest:services_config",
  "//garnet/bin/run",
  "//garnet/bin/sysmgr",
  "//garnet/bin/trace",
  "//garnet/bin/vsock_service:vsock_service",
  pkgfs_package_label,
]

shell_commands("shell-commands") {
  testonly = true
  visibility = [ ":*" ]
  deps = guest_packages
}

config_package("config-data") {
  testonly = true
  visibility = [ ":*" ]
  deps = guest_packages
}

guest_packages += [
  ":shell-commands",
  ":config-data",
]

assemble_system("guest") {
  base_packages = guest_packages
}
