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

# This product configuration is "core" with size limits defined. The limits can
# be enforced by running size_checker.

import("//products/common/core_size_limits.gni")
import("//products/core.gni")
