# 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("//build/go/go_library.gni")
import("//build/go/go_test.gni")

group("tools") {
  testonly = true

  public_deps = [
    "//tools/build/ninjago/buildstats($host_toolchain)",
    "//tools/build/ninjago/ninjatrace($host_toolchain)",
  ]
}

group("tests") {
  testonly = true

  deps = [
    ":build_tests",
    "fx-set:tests",
    "ninjago:tests",
  ]
}

go_library("build") {
  sources = [
    "archives.go",
    "args.go",
    "args_test.go",
    "assembly_input_archives.go",
    "binaries.go",
    "binaries_test.go",
    "checkout_artifacts.go",
    "clippy.go",
    "images.go",
    "modules.go",
    "package_manifest_list.go",
    "package_repositories.go",
    "prebuilt_binaries.go",
    "sdk_archives.go",
    "test_durations.go",
    "test_durations_test.go",
    "test_list.go",
    "test_list_test.go",
    "tests.go",
    "tests_test.go",
    "tools.go",
    "tools_test.go",
    "zbi_tests.go",
  ]
  deps = [
    "//third_party/golibs:github.com/google/go-cmp",
    "//tools/lib/hostplatform",
    "//tools/lib/jsonutil",
    "//tools/lib/osmisc",
  ]
}

go_test("build_tests") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/build" ]
  deps = [ ":build" ]
}
