# 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 = [
    ":infratools",
    "//tools/bindc:host",
    "//tools/blackout:all",
    "//tools/bootserver_old:host($host_toolchain)",
    "//tools/build",
    "//tools/cmc:cmc($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/loglistener:host($host_toolchain)",
    "//tools/make-efi:host",
    "//tools/make-fuchsia-vol:host",
    "//tools/net/device-finder:host",
    "//tools/netprotocol($host_toolchain)",
    "//tools/symbol-index($host_toolchain)",
    "//tools/symbolizer($host_toolchain)",
    "//tools/virtual_device/proto",
  ]
}

# Tools that are used by the infrastructure for testing, data collection, etc.
group("infratools") {
  testonly = true

  # Tools that are only needed in the context of the current host.
  current_host_tools = [
    "//tools/artifactory",
    "//tools/blobstats",
    "//tools/integration:tools",
    "//tools/size_checker/cmd:host",
  ]

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

  # Tools needed on all possible hosts.
  all_host_tools = [
    "//tools/artifactory",
    "//tools/bootserver",
    "//tools/botanist",
    "//tools/build:tools",
    "//tools/debug:tools",
    "//tools/testing:tools",
    "//tools/testing/affectedtests",
    "//zircon/tools/fvm",
    "//zircon/tools/minfs",
  ]

  public_deps = []

  foreach(tool, current_host_tools) {
    public_deps += [ "$tool($host_toolchain)" ]
  }

  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/bootserver_old/tests($host_toolchain)",
    "//tools/botanist:tests($host_toolchain)",
    "//tools/build:tests($host_toolchain)",
    "//tools/cargo-gnaw:tests",
    "//tools/check-licenses:tests",
    "//tools/cmc:tests($host_toolchain)",
    "//tools/component_id_index:tests($host_toolchain)",
    "//tools/component_manager_config:tests($host_toolchain)",
    "//tools/create:tests($host_toolchain)",
    "//tools/dart-strict-deps:tests($host_toolchain)",
    "//tools/debug:tests($host_toolchain)",
    "//tools/devshell:tests($host_toolchain)",
    "//tools/doc_checker:tests",
    "//tools/fidl:tests",
    "//tools/fidlcat:fidlcat_host_tests($host_toolchain)",
    "//tools/fidlcat/tests",
    "//tools/fuzz:tests($host_toolchain)",
    "//tools/integration:tests($host_toolchain)",
    "//tools/lib:tests($host_toolchain)",
    "//tools/net:tests($host_toolchain)",
    "//tools/qemu:tests($host_toolchain)",
    "//tools/serial:tests($host_toolchain)",
    "//tools/size_checker/cmd:tests",
    "//tools/symbol-index:tests",
    "//tools/symbolizer:tests",
    "//tools/testing:tests($host_toolchain)",
    "//tools/zedmon:tests",
  ]
}
