# 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/build",
    "//tools/debroot($host_toolchain)",
    "//tools/fidl/fidldoc($host_toolchain)",
    "//tools/fidlcat:fidlcat_host",
    "//tools/make-efi:host",
    "//tools/make-fuchsia-vol:host",
    "//tools/net/dev_finder:host",
  ]
}

group("infratools") {
  testonly = true

  # Building with the following toolchains ensures that, for the associated
  # tools, there will be at most one tool for every (name, cpu, os) tuple.
  toolchains = []
  if (host_os == "linux") {
    toolchains += [
      host_arm64_toolchain,
      host_x64_toolchain,
    ]
  } else if (host_os == "mac") {
    toolchains += [ host_toolchain ]
  }

  public_deps = []
  foreach(toolchain, toolchains) {
    public_deps += [
      "//tools/artifactory($toolchain)",
      "//tools/bootserver($toolchain)",
      "//tools/botanist($toolchain)",
      "//tools/build:tools($toolchain)",
      "//tools/debug:tools($toolchain)",
      "//tools/integration:tools($toolchain)",
      "//tools/size_checker/cmd:host",
      "//tools/testing:tools($toolchain)",
    ]
  }
}

group("tests") {
  testonly = true

  deps = [
    "//tools/artifactory:tests",
    "//tools/bindc:tests",
    "//tools/blackout:tests",
    "//tools/bootserver:tests($host_toolchain)",
    "//tools/botanist:tests($host_toolchain)",
    "//tools/build:tests($host_toolchain)",
    "//tools/debug:tests($host_toolchain)",
    "//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/testing:tests($host_toolchain)",
    "//tools/zedmon:tests",
  ]
}
