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

go_library("testsharder_lib") {
  name = "go.fuchsia.dev/fuchsia/tools/integration/testsharder/lib"
  deps = [ "//tools/build" ]
}

go_library("main") {
  name = "go.fuchsia.dev/fuchsia/tools/integration/testsharder/cmd"
  source_dir = "cmd"
  deps = [
    ":testsharder_lib",
    "//tools/lib/command",
    "//tools/lib/flagmisc",
  ]
}

go_binary("testsharder") {
  gopackage = "go.fuchsia.dev/fuchsia/tools/integration/testsharder/cmd"
  deps = [ ":main" ]
}

go_test("testsharder_tests") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/integration/testsharder/lib" ]
  deps = [ ":testsharder_lib" ]
}
