# 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:
#
# //products/core/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.

include_shell_commands_package = true

product_bootfs_labels = []
legacy_base_package_labels = []
legacy_cache_package_labels = []
core_realm_shards = []

legacy_cache_package_labels += [
  "//src/media/codec/bundles:services",
  "//src/media/sessions/bundles:services",
]

discoverable_package_labels = [ "//bundles/tools" ]

# Use the product assembly config target to specify the product configuration.
#
# NOTE: This should be overridden by products which inherit from core.
fuchsia_product_assembly_config_label = "//products/core"
zedboot_product_assembly_config_label = "//products/zedboot"
