# 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/terminal/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 = []

# Add UI packages on terminal.
legacy_cache_package_labels += [
  "//src/media/codec/bundles:services",
  "//src/media/sessions/bundles:services",

  "//src/fonts/collections:small-open-fonts-collection",
  "//src/ui/bin/terminal",
  "//src/ui/bin/tiles-session",

  # Used to mock out display hardware in UI integration tests.
  "//src/graphics/display/testing/fake-coordinator-connector",
]

# Used by Chromium tests, such as //src/chromium:tests.
# Although deps in the individual tests ensures these are available in Fuchsia
# infrastructure, Chromium infrastructure runs such tests run on this image,
# so they must be explicitly included in cached packages.
# TODO(crbug.com/1408597): Remove once the Chromium tests package the fake.
legacy_cache_package_labels += [ "//src/chromium:chromium_test_base_deps" ]

# Add SDK tools set to "cache" so these tools are automatically available in
# QEMU images generated for the SDK, but in cache, so they can be updated.
legacy_cache_package_labels += [ "//sdk/bundles:tools" ]

core_realm_shards += [ "//src/media/codec:codec_factory_shard" ]

# Run tiles-flatland and flatland-view-provider automatically.
core_realm_shards += [ "//products/terminal:tiles_flatland_core_shard" ]

# Add Test UI Stack for use in tests.
# TODO(https://fxbug.dev/42056298): Remove once we migrate client usage to subpackages.
legacy_cache_package_labels +=
    [ "//src/ui/testing/test_ui_stack:test-ui-stack-flavors" ]

# Add validator package for use in tests.
# TODO(https://fxbug.dev/42077782): Remove once we support packages in the SDK.
legacy_cache_package_labels +=
    [ "//src/diagnostics/validator/inspect:validator" ]

# Add test validation packages for use in tests.
# TODO(https://fxbug.dev/42077782): Remove once we support packages in the SDK and we want to put this
# in the SDK.
legacy_cache_package_labels += [
  "//src/tests/fidl/dynsuite/client_suite/harness",
  "//src/tests/fidl/compatibility:packages",
  "//src/tests/fidl/dynsuite/server_suite/harness",
]

fxfs_blob = false

# Use the product assembly config target to specify the product configuration.
fuchsia_product_assembly_config_label = "//products/terminal"
zedboot_product_assembly_config_label = "//products/zedboot:zedboot_with_fvm"

# Include the session framework
core_realm_shards += [ "//src/session/bin/session_manager:terminal_core_shard" ]

discoverable_package_labels = [ "//bundles/tools" ]
