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

import("//products/terminal.gni")

core_realm_package_name = "core-workstation"
core_realm_shards +=
    [ "//src/power/battery-manager:battery-manager-core-shard" ]

base_package_labels -= [
  "//garnet/bin/terminal:tiles_config",
  "//src/ui/bin/root_presenter",
]

base_package_labels += [
  "//garnet/packages/config:shortcut",
  "//src/dart:dart_jit",
  "//src/dart:dart_jit_product",
  "//src/developer/ssh-key-manager",
  "//src/fonts",
  "//src/fonts:open-fonts-collection",
  "//src/identity/bin:tier_2",
  "//src/media/audio/bundles:services",
  "//src/power:battery",
  "//src/session/bundles:session_manager",
  "//src/sys/activity",
  "//src/ui/bin/brightness_manager",
  "//src/ui/bin/shortcut",
  "//src/virtualization/packages/debian_guest",
  "//third_party/openssh-portable:openssh-tools",
]

# Add build type config data
base_package_labels += [ "//src/fonts:build_type_eng" ]

# Disable reporting DEBUG metrics in Cobalt
base_package_labels -= [ "//src/cobalt/bin/app:config" ]
base_package_labels += [ "//src/cobalt/bin/app:user_config" ]

cache_package_labels -= [ "//src/ui/tools/tiles" ]

cache_package_labels += [
  "//src/chromium:web_engine",
  "//src/experiences/bin/settings/license:license_settings",
  "//src/experiences/bin/simple_browser:simple-browser",
  "//src/experiences/bin/simple_browser:web_engine_config",
  "//src/experiences/session_shells/ermine",
  "//src/experiences/session_shells/ermine/session:session_config",
  "//src/flutter",
  "//src/media/playback/bundles:services",
  "//src/media/playback/bundles:audio_consumer_config",
  "//src/session",
]

universe_package_labels += [
  "//examples/fidl:tests",

  "//src/ui/examples/bouncing_ball",
  "//src/ui/examples/spinning_square_view",
  "//src/virtualization",
]

universe_package_labels -= [ "//src/tests/end_to_end/perf:test" ]

product_bootfs_labels += [
  # hide the virtual console on boot
  "//products/kernel_cmdline:virtcon.hide-on-boot",
]

# End to end (E2E) product test runtime dependencies. Must be added to cache,
# not universe, so the test can run on bots where there is no package server.
#
# TODO(fxbug.dev/9892): Support a package server on bots so this can be added to
# universe like the tests.
cache_package_labels += [
  "//src/tests/end_to_end/bundles:end_to_end_deps",
  "//src/experiences/tests/e2e:end_to_end_deps",
  "//src/experiences/tests/performance:performance_deps",
]

cache_package_labels -=
    [ "//src/tests/end_to_end/bundles:terminal_end_to_end_deps" ]

# E2E Product Tests. They don't produce fuchsia packages, but host executables
# used by the tests.
host_labels += [
  "//src/experiences/tests/e2e:test",
  "//src/experiences/tests/performance:test",
  "//src/tests/end_to_end/copy_files:test",
]

# Enable the live_usb component.
with_live_usb = true
product_bootfs_labels += [ "//src/sys/live_usb:live_usb_is_system" ]

# Enable input injection for testing through `fuchsia.input.injection.InputDeviceRegistry`.
use_modern_input_injection = true
