# 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("botanist_lib") {
  sources = [
    "botanist.go",
    "ip.go",
    "pkg.go",
    "pkg_test.go",
  ]
  deps = [
    ":constants",
    "//src/sys/pkg/lib/repo",
    "//third_party/golibs:github.com/kr/pretty",
    "//tools/build",
    "//tools/lib/logger",
    "//tools/lib/osmisc",
    "//tools/lib/retry",
    "//tools/lib/runner",
    "//tools/lib/syslog",
    "//tools/net/mdns",
    "//tools/net/netboot",
    "//tools/net/tftp",
  ]
}

go_library("target") {
  source_dir = "target"
  sources = [
    "aemu.go",
    "aemu_test.go",
    "device.go",
    "device_test.go",
    "errors.go",
    "gce.go",
    "gce_test.go",
    "qemu.go",
    "target.go",
  ]
  deps = [
    ":constants",
    "//third_party/golibs:github.com/creack/pty",
    "//third_party/golibs:golang.org/x/crypto",
    "//third_party/golibs:golang.org/x/sync",
    "//tools/bootserver:bootserver_lib",
    "//tools/lib/iomisc",
    "//tools/lib/logger",
    "//tools/lib/osmisc",
    "//tools/lib/ring",
    "//tools/net/netutil",
    "//tools/net/sshutil",
    "//tools/qemu",
    "//tools/serial",
  ]
}

go_library("main") {
  source_dir = "cmd"
  sources = [
    "main.go",
    "run.go",
  ]
  deps = [
    ":botanist_lib",
    ":constants",
    ":target",
    "//third_party/golibs:github.com/google/subcommands",
    "//third_party/golibs:golang.org/x/sync",
    "//tools/lib/color",
    "//tools/lib/command",
    "//tools/lib/environment",
    "//tools/lib/flagmisc",
    "//tools/lib/tarutil",
    "//tools/testing/runtests",
  ]
}

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

go_test("botanist_lib_tests") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/botanist" ]
  deps = [ ":botanist_lib" ]
}

go_test("botanist_target_tests") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/botanist/target" ]
  deps = [ ":target" ]
}

go_library("constants") {
  source_dir = "constants"
  sources = [ "constants.go" ]
}

group("tests") {
  testonly = true

  deps = [
    ":botanist_lib_tests",
    ":botanist_target_tests",
  ]
}
