# Copyright 2020 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("main") {
  source_dir = "cmd"
  deps = [
    ":synckeys",
    ":tunnel",
    "//third_party/golibs:github.com/google/subcommands",
    "//tools/lib/color",
    "//tools/lib/logger",
    "//tools/sdk-tools/sdkcommon",
  ]
  sources = [
    "fssh.go",
    "fssh_test.go",
    "main.go",
    "synckeys.go",
    "tunnel.go",
    "tunnel_test.go",
  ]
}

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

go_test("fssh-test") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/sdk-tools/fssh/cmd" ]
  deps = [ ":main" ]
}
install_host_tools("fssh-host") {
  deps = [
    ":fssh",
    "//tools/sdk-tools/sdkcommon:host-tool-deps",
  ]
  outputs = [ "fssh" ]
}

go_library("synckeys") {
  name = "go.fuchsia.dev/fuchsia/tools/sdk-tools/fssh/synckeys"
  source_dir = "synckeys"
  deps = [
    "//third_party/golibs:github.com/google/go-cmp",
    "//tools/lib/logger",
  ]
  sources = [
    "synckeys.go",
    "synckeys_test.go",
  ]
}

go_test("synckeys-tests") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/sdk-tools/fssh/synckeys" ]
  deps = [ ":synckeys" ]
}

go_library("tunnel") {
  name = "go.fuchsia.dev/fuchsia/tools/sdk-tools/fssh/tunnel"
  source_dir = "tunnel"
  deps = [ "//tools/lib/logger" ]
  sources = [
    "tunnel.go",
    "tunnel_test.go",
  ]
}

go_test("tunnel-tests") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/sdk-tools/fssh/tunnel" ]
  deps = [ ":tunnel" ]
}

sdk_host_tool("fssh_sdk") {
  category = "partner"
  output_name = "fssh"
  deps = [ ":fssh" ]
}

group("tests") {
  testonly = true
  deps = [
    ":fssh-test($host_toolchain)",
    ":synckeys-tests($host_toolchain)",
    ":tunnel-tests($host_toolchain)",
  ]
}
