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

group("tools") {
  testonly = true
  public_deps = [
    "//build/tools/formatjson5:install($host_toolchain)",
    "//garnet/bin/run_test_component:run-test-component",
    "//garnet/go/src/fidlmerge:host",
    "//garnet/packages/prod:cmdutils",
    "//garnet/packages/prod:debug_agent",
    "//garnet/packages/prod:far",
    "//garnet/packages/prod:iquery",
    "//garnet/packages/prod:run",
    "//garnet/packages/prod:tracing",
    "//garnet/packages/testing:all",
    "//src/camera:tools",
    "//src/connectivity:tools",
    "//src/connectivity/bluetooth/tools",
    "//src/connectivity/bluetooth/tools/bt-snoop",
    "//src/developer/debug/zxdb:zxdb_host",
    "//src/developer/fastboot",
    "//src/developer/ffx:ffx_tool",
    "//src/developer/ffx:runtime",
    "//src/developer/forensics/exceptions/limbo_client:limbo-client",
    "//src/developer/kcounter_inspect",
    "//src/developer/memory/mem",
    "//src/developer/system_monitor/bin/dockyard_host:host_tools",
    "//src/developer/system_monitor/bin/harvester:system_monitor_harvester",
    "//src/devices/bind/debugger",
    "//src/devices/tools/banjo:banjo_bin",
    "//src/diagnostics/tool:diag_tool_host($host_toolchain)",
    "//src/diagnostics/triage:install($host_toolchain)",
    "//src/graphics/lib/magma:magma-tools",
    "//src/lib/chunked-compression:chunked-compress-host-tool",
    "//src/lib/icu:tools",
    "//src/media/bundles:tools",
    "//src/recovery/factory_reset:tools",
    "//src/security/scrutiny",
    "//src/storage/blobfs-stress-test:blobfs-stressor",
    "//src/sys/component_manager_for_test",
    "//src/sys/locate",
    "//src/sys/pkg/bin/pm",
    "//src/sys/pkg/bin/pm:host",
    "//src/sys/run_test_suite",
    "//src/sys/tools/cs",
    "//src/sys/tools/log",
    "//src/sys/tools/runmany",
    "//src/ui/tools:scenic",
    "//src/ui/tools/tiles_ctl",
    "//third_party/boringssl:boringssl_tool",
    "//third_party/cobalt:host",
    "//third_party/curl",
    "//third_party/iperf",
    "//third_party/openssh-portable:openssh-tools",
    "//tools",
    "//tools/check-licenses:host($host_toolchain)",
    "//tools/whereiscl:host($host_toolchain)",
  ]
  deps = [ "//build/validate:non_production_tag" ]
}

# Same as "tools" above, but for tools that are hosted by the system package.
group("tools-system") {
  testonly = true
  deps = [ "//src/connectivity/bluetooth/hci/emulator" ]
}

group("infratools") {
  testonly = true
  public_deps = [ "//tools:infratools" ]
}

group("tests") {
  testonly = true
  public_deps = [
    "fidl:tests",
    "//examples:tests",
    "//garnet/packages/tests:all",
    "//scripts:tests",
    "//sdk:tests",
    "//src:tests",
    "//third_party/go:tests",
    "//tools:tests",
    "//topaz:tests",
  ]
}

group("kitchen_sink") {
  testonly = true
  public_deps = [
    ":tests",
    "//bundles:tools",
    "//examples",
    "//garnet/packages:all",
    "//garnet/packages/config:amber",
    "//garnet/packages/config:network",
    "//garnet/packages/config:openssh_keys",
    "//garnet/packages/config:thermd",
    "//src/connectivity/telephony",
    "//src/media/audio/bundles:virtual_audio_driver",
    "//src/media/bundles:examples",
    "//src/media/bundles:services",
    "//src/media/bundles:tools",
    "//topaz",
  ]
}

# While we don't necessarily want to run all tests on devices with limited
# flash, we should run a few amlogic-HW-dependent tests on astro and/or
# sherlock.  This list is those tests.  This list intentionally doesn't include
# all of :tests above.
group("amlogic_hw_dependent_tests") {
  testonly = true

  public_deps = [
    "//src/media/codec:hw_dependent_tests",

    # Verify communication with amlogic optee.
    "//src/security/tee_manager:optee_smoke_test",
  ]
}

# Binaries that form the base of every single product.
group("bootstrap") {
  deps = [
    "//src/bringup/bundles:bootstrap",
    "//src/devices/bundles:bootstrap-bin",
    "//src/power/bundles:bootstrap",
    "//src/storage/bundles:bootstrap",
    "//src/sys/bundles:bootstrap",
  ]
}

# Binaries that form the base of every single zedboot image.
group("bootstrap-zedboot") {
  deps = [
    "//src/bringup/bundles:zedboot",
    "//src/devices/bundles:bootstrap-bin",
    "//src/power/bundles:bootstrap",
    "//src/storage/bundles:bootstrap",
    "//src/sys/bundles:bootstrap",
  ]
}

# Debugging tools installed on the boot image.
group("debugging") {
  deps = [
    "//src/bringup/bundles:debugging",
    "//src/connectivity/bundles:debugging",
    "//src/developer/bundles:debugging",
    "//src/devices/bundles:debugging",
    "//src/diagnostics/bundles:debugging",
    "//src/storage/bundles:debugging",
    "//src/sys/bundles:debugging",
    "//src/zircon/bundles:debugging",
  ]
}
