# Copyright 2020 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/dev.gni")
import("//build/security.gni")

group("bootfs_labels") {
  testonly = fuchsia_zbi_testonly
  deps = dev_bootfs_labels
}

group("build_only_deps") {
  testonly = fuchsia_zbi_testonly
  deps = dev_build_only_deps
}

group("recovery_bootfs_labels") {
  deps = dev_recovery_bootfs_labels
}

group("system_image_deps") {
  testonly = fuchsia_zbi_testonly
  deps = dev_system_image_deps
}

group("zedboot_bootfs_labels") {
  testonly = true
  deps = dev_zedboot_bootfs_labels
}
