# Copyright 2018 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/toolchain.gni")
import("//src/sys/build/components.gni")

# The go_binary GN rule requires us to declare a go_library that creates the
# gopackage, even if the library doesn't have any sources.
go_library("lib") {
  name = "compatibility_test"
  deps = [
    "//sdk/fidl/fuchsia.sys($go_toolchain)",
    "//src/lib/component",
    "//src/tests/fidl/compatibility:fidl($go_toolchain)",
  ]
  sources = [ "go_server.go" ]
}
go_binary("go_server") {
  gopackage = "compatibility_test"
  output_name = "go-server"
  output_dir = target_out_dir

  deps = [ ":lib" ]
}

fuchsia_component("go-server") {
  manifest = "meta/go-server.cmx"
  deps = [ ":go_server" ]
}
