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