# 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.

#  ________  _________  ________  ________
# |\   ____\|\___   ___\\   __  \|\   __  \
# \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
#  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
#   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
#     ____\_\  \   \ \__\ \ \_______\ \__\
#    |\_________\   \|__|  \|_______|\|__|
#    \|_________|
#
# Every new addition to this gni file is an instance of tech-debt that must be
# cleaned up to have a proper platform+product interface. If you need to add a
# specific artifact to the core product, please consider adding it to:
# //build/images/bringup/BUILD.gn
#
# If the artifact is incapable of being put inside that location, reach out to
# the assembly team for guidance: //src/lib/assembly/OWNERS. The assembly team
# may allow an exception so that artifacts can be added directly to this file,
# but each entry needs a ticket assigned to the assembly team with an agreed
# upon solution for how to address the tech-debt.

# bringup products have their own assemble_system() instantiation.
use_bringup_assembly = true
bootfs_only = true

base_package_labels = []
cache_package_labels = []
universe_package_labels = []

product_bootfs_labels = []
base_driver_package_labels = []
sdk_archive_labels = []

product_bootfs_labels += [
  "//products/kernel_cmdline:kernel.oom.behavior--jobkill",
  "//products/kernel_cmdline:oom.reboot-timeout--low",
]

zedboot_product_assembly_config_label = "//products/zedboot"
