# 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/create",
    "//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)",
      "//zircon/tools/minfs($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/create: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",
  ]
}
