# 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/minimal.gni")

include_shell_commands_package = true

product_system_image_deps = [
  "//src/connectivity/bluetooth:core-system",

  # Test drivers will only be loaded as tests require. They should be removed from production
  # products that have limited storage.
  # TODO(fxbug.dev/3150): Move to a regular package.
  "//src/graphics/lib/magma/tests:test-drivers",
]

# core and above are larger products, make sure that we're not using the "low"
# timeout
product_bootfs_labels += [ "//products/kernel_cmdline:oom.reboot-timeout--low" ]
product_bootfs_labels -= [ "//products/kernel_cmdline:oom.reboot-timeout--low" ]

core_realm_package_name = "core"
core_realm_shards += [
  "//src/connectivity/wlan/wlancfg:wlancfg-core-shard",
  "//src/connectivity/wlan/wlandevicemonitor:wlandevicemonitor-core-shard",
  "//src/connectivity/wlan/wlanstack:wlanstack-core-shard",
  "//src/developer/remote-control:laboratory-core-shard",
  "//src/devices/bin/driver_playground:driver-playground-core-shard",
  "//src/developer/sshd-host:core_shard",
  "//src/media/audio/audio_core:core_shard",
  "//src/media/sounds/soundplayer:core_shard",
  "//src/proc/bin/starnix:starnix_manager_core_shard",
  "//src/settings/service:setui_service_core_shard",
  "//src/sys/pkg/bin/system-update-checker:system-update-checker-core-shard",
  "//src/sys/pkg/bin/system-updater:system-updater-core-shard",

  # TODO(fxbug.dev/80375): only include in eng builds
  "//src/sys/test_manager:test_manager_core_shard",
]
core_realm_restrict_persistent_storage = false

legacy_base_package_labels += [
  "//src/developer/sshd-host",
  "//src/developer/sshd-host:config",
  "//src/connectivity/bluetooth:core",
  "//src/connectivity/wlan:packages",
  "//src/devices/sysmem/bin/sysmem_connector",
  "//src/settings/service:setui_service",
]

# Tools to control the pkg subsystem are in the base package set by default
# so the software delivery system can be debugged and reconfigured without
# access to the full universe package set.
# Product configurations that lack an accessible shell environment should
# remove these tools from the base package set.
legacy_base_package_labels += [ "//src/sys/pkg:tools" ]

# cargo-gnaw is currently part of all build graphs, but it should only
# built by fx tooling
legacy_base_package_labels += [ "//tools/cargo-gnaw:install-cargo-gnaw" ]

legacy_cache_package_labels += [ "//src/developer/ffx:runtime" ]

product_system_image_deps += [ "//bundles:tools-system" ]
legacy_universe_package_labels += [
  "//bundles:tools",
  "//src/devices/bin/driver_playground:pkg",
  "//src/testing/metrics-logger",
]

# Set the default pkgfs allowlist to use for all core-based products to the
# "eng" allowlist.
product_system_image_deps +=
    [ "//src/security/policy:pkgfs_non_static_pkgs_allowlist_eng" ]

# Use the product assembly config file to specify the product configuration.
#
# This should be overridden by products which inherit from core.
fuchsia_product_assembly_config_file =
    "//build/assembly/empty_product_config.json"
