# 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.

import("$zx/public/gn/copied_files_dir.gni")
import("$zx/public/gn/toolchain/environment_redirect.gni")

# TODO(BLD-353): This directory should probably merge with //tools after
# build unification.

# Build the host tools intended for developer use.
_all_hosts_deps = []
foreach(host, standard_build_hosts) {
  # Install tools for each platform in "$root_build_dir/tools-$os-$cpu"
  _tools_target = "tools-${host.os}-${host.cpu}"
  copied_files_dir(_tools_target) {
    testonly = true
    data_keys = [ "tool_executables" ]
    walk_keys = [ "action_barrier" ]
    deps = [ ":$_tools_target.redirect" ]
  }
  _all_hosts_deps += [ ":$_tools_target" ]

  environment_redirect("$_tools_target.redirect") {
    visibility = [ ":*" ]
    testonly = true
    environment_label = "$zx/public/gn/toolchain:host"
    cpu = host.cpu
    os = host.os
    direct = true

    # This covers all the host tools intended to be used directly by
    # developers.  Not listed here are tools whose only use is via GN rules
    # in this build.
    deps = [
      "fidl:tools",
      "kazoo",
      "lz4",
      "zbi",
    ]
  }
}

group("all-hosts") {
  testonly = true
  deps = _all_hosts_deps
}

# Install the tools for the running host platform in the
# "$root_build_dir/tools/" directory.
copied_files_dir("tools") {
  testonly = true
  data_keys = [ "tool_executables" ]
  deps = [ ":tools-${host_os}-${host_cpu}.redirect" ]
}

group("tests") {
  testonly = true
}
