# 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") {
  sources = [
    "doc.go",
    "durations.go",
    "mode.go",
    "postprocess.go",
    "postprocess_test.go",
    "preprocess.go",
    "preprocess_test.go",
    "shard.go",
    "shard_test.go",
    "test.go",
    "test_modifier.go",
    "test_modifier_test.go",
  ]

  deps = [ "//tools/build" ]
}

go_library("main") {
  source_dir = "cmd"
  sources = [ "main.go" ]
  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" ]
  deps = [ ":testsharder_lib" ]
}
