# 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("//build/package.gni")

go_binary("heartbeat_client_go_bin") {
  output_name = "heartbeat_client_go"
  gopackage = "heartbeat_client_go"
  deps = [
    ":heartbeat_client_go_lib",
  ]
}

go_library("heartbeat_client_go_lib") {
  name = "heartbeat_client_go"
  deps = [
    "//garnet/examples/fidl/services:heartbeat($go_toolchain)",
    "//garnet/examples/fidl/services:heartbeat($go_toolchain)",
    "//garnet/public/fidl/fuchsia.sys($go_toolchain)",
    "//garnet/public/lib/component/go/src/app",
    "//garnet/public/lib/svc/go/src/svc",
  ]
}

package("heartbeat_client_go") {
  deprecated_bare_package_url = "//build"

  deps = [
    ":heartbeat_client_go_bin",
  ]

  binary = "heartbeat_client_go"

  meta = [
    {
      path = rebase_path("//garnet/bin/appmgr/legacy_flat_exported_dir")
      dest = "legacy_flat_exported_dir"
    },
    {
      path = rebase_path("meta/heartbeat_client_go.cmx")
      dest = "heartbeat_client_go.cmx"
    },
  ]
}
