# 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_infra",
    ":test_infra",
    "//tools/bindc:host",
    "//tools/blackout:all",
    "//tools/bootserver_old:host($host_toolchain)",
    "//tools/build",
    "//tools/cmc:install($host_toolchain)",
    "//tools/component_id_index($host_toolchain)",
    "//tools/component_manager_config($host_toolchain)",
    "//tools/create:install($host_toolchain)",
    "//tools/dart-strict-deps:strict_deps($host_toolchain)",
    "//tools/debroot($host_toolchain)",
    "//tools/doc_checker($host_toolchain)",
    "//tools/fidl",
    "//tools/fidlcat:fidlcat_host",
    "//tools/fvdl:host($host_toolchain)",
    "//tools/integration/cmd/fint($host_toolchain)",
    "//tools/loglistener:host($host_toolchain)",
    "//tools/make-efi:host",
    "//tools/make-fuchsia-vol:host",
    "//tools/net/device-finder:host",
    "//tools/netprotocol($host_toolchain)",
    "//tools/sdk-tools:tools($host_toolchain)",
    "//tools/symbol-index($host_toolchain)",
    "//tools/symbolizer($host_toolchain)",
    "//tools/virtual_device:fvd($host_toolchain)",
    "//tools/zedmon/client:zedmon_client",
  ]
}

# Tools that are used by the infrastructure for building.
group("build_infra") {
  public_deps = [
    "//tools/artifactory($host_toolchain)",
    "//tools/blobstats($host_toolchain)",
    "//tools/build/ninjago/buildstats($host_toolchain)",
    "//tools/build/ninjago/ninjatrace($host_toolchain)",
    "//tools/size_checker/cmd:host($host_toolchain)",
  ]
}

# Tools that are used by the infrastructure for running tests.
group("test_infra") {
  testonly = true

  # Tools that are only needed on the type of host that does the build.
  public_deps = [ "//tools/integration/testsharder($host_toolchain)" ]

  # Tools that are only needed on Linux x64, regardless of the current host.
  linux_x64_only_tools = [
    "//src/diagnostics/triage:triage_bin",
    "//tools/debug/covargs",
    "//tools/debug/symbolize",
    "//tools/testing/resultdb",
    "//tools/testing/tefmocheck",
  ]

  # Tools needed on all possible hosts.
  # Anything that runs on ARM64 hosts during testing should be here,
  # since in that case the build happens on an X64 host.
  all_host_tools = [
    "//src/storage/bin/fvm",
    "//tools/bootserver",
    "//tools/botanist",
    "//tools/testing:tools",
  ]

  foreach(tool, linux_x64_only_tools) {
    if (host_os == "linux") {
      public_deps += [ "$tool($host_x64_toolchain)" ]
    } else {
      public_deps += [ "$tool($linux_x64_toolchain)" ]
    }
  }

  all_host_toolchains = []
  if (host_os == "linux") {
    all_host_toolchains += [
      host_arm64_toolchain,
      host_x64_toolchain,
    ]
  } else if (host_os == "mac") {
    all_host_toolchains += [ host_toolchain ]
  }

  foreach(tool, all_host_tools) {
    foreach(toolchain, all_host_toolchains) {
      public_deps += [ "$tool($toolchain)" ]
    }
  }
}

group("tests") {
  testonly = true

  deps = [
    "//tools/artifactory:tests",
    "//tools/bindc:tests",
    "//tools/blackout:tests",
    "//tools/blobstats:tests",
    "//tools/bootserver:tests($host_toolchain)",
    "//tools/botanist:tests($host_toolchain)",
    "//tools/build:tests($host_toolchain)",
    "//tools/cargo-gnaw:tests",
    "//tools/check-licenses:tests",
    "//tools/cmc:tests",
    "//tools/component_id_index:tests($host_toolchain)",
    "//tools/component_manager_config:tests($host_toolchain)",
    "//tools/create:tests",
    "//tools/dart-strict-deps:tests($host_toolchain)",
    "//tools/debug:tests($host_toolchain)",
    "//tools/devshell:tests($host_toolchain)",
    "//tools/doc_checker:tests",
    "//tools/femu-control:tests",
    "//tools/fidl:tests",
    "//tools/fidlcat:fidlcat_host_tests($host_toolchain)",
    "//tools/fidlcat/tests",
    "//tools/fuzz:tests($host_toolchain)",
    "//tools/fvdl:tests",
    "//tools/integration:tests($host_toolchain)",
    "//tools/lib:tests($host_toolchain)",
    "//tools/make-fuchsia-vol:tests",
    "//tools/net:tests($host_toolchain)",
    "//tools/qemu:tests($host_toolchain)",
    "//tools/sdk-tools:tests($host_toolchain)",
    "//tools/serial:tests($host_toolchain)",
    "//tools/size_checker:tests($host_toolchain)",
    "//tools/symbol-index:tests",
    "//tools/symbolizer:tests",
    "//tools/sys-realm-analyzer:tests($host_toolchain)",
    "//tools/testing:tests($host_toolchain)",
    "//tools/virtual_device:tests($host_toolchain)",
    "//tools/zedmon:tests",
  ]

  # TODO(fxbug.dev/63992): Temporarily disable bootserver_old tests on profile builders.
  if (select_variant + [ "profile" ] - [ "profile" ] == select_variant) {
    deps += [ "//tools/bootserver_old/tests($host_toolchain)" ]
  }
}
