# 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("bootserver_lib") {
  name = "go.fuchsia.dev/fuchsia/tools/bootserver/lib"
  deps = [
    "//third_party/golibs:cloud.google.com/go/storage",
    "//third_party/golibs:golang.org/x/crypto",
    "//third_party/golibs:golang.org/x/sync",
    "//tools/build",
    "//tools/lib/iomisc",
    "//tools/lib/logger",
    "//tools/lib/retry",
    "//tools/net/netboot",
    "//tools/net/tftp",
  ]
}

go_library("main") {
  name = "go.fuchsia.dev/fuchsia/tools/bootserver/cmd"
  source_dir = "cmd"
  deps = [
    ":bootserver_lib",
    "//tools/net/netboot",
    "//tools/net/netutil",
    "//tools/net/tftp",
    "//tools/testing/runtests",
  ]
}

go_binary("bootserver") {
  # TODO(fxbug.dev/38517): Stop renaming once zircon bootserver goes away.
  output_name = "bootserver_new"
  gopackage = "go.fuchsia.dev/fuchsia/tools/bootserver/cmd"
  deps = [ ":main" ]
}

go_test("bootserver_lib_tests") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/bootserver/lib" ]
  deps = [ ":bootserver_lib" ]
}

go_test("bootserver_cmd_tests") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/bootserver/cmd" ]
  deps = [ ":main" ]
}

group("tests") {
  testonly = true

  deps = [
    ":bootserver_cmd_tests",
    ":bootserver_lib_tests",
  ]
}
