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

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/botanist($toolchain)",
      "//tools/build:tools($toolchain)",
      "//tools/debug:tools($toolchain)",
      "//tools/integration:tools($toolchain)",
      "//tools/size_checker/cmd:size_checker($toolchain)",
      "//tools/testing:tools($toolchain)",
    ]
  }
}

group("tests") {
  testonly = true

  deps = [
    "//tools/artifactory:tests",
    "//tools/bindc:tests",
    "//tools/blackout:tests",
    "//tools/botanist:tests($host_toolchain)",
    "//tools/build:tests($host_toolchain)",
    "//tools/debug:tests($host_toolchain)",
    "//tools/fidlcat:fidlcat_host_tests($host_toolchain)",
    "//tools/integration:tests($host_toolchain)",
    "//tools/lib:tests($host_toolchain)",
    "//tools/net:tests($host_toolchain)",
    "//tools/size_checker/cmd:size_checker_tests($host_toolchain)",
    "//tools/testing:tests($host_toolchain)",
  ]
}
