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

group("tennis") {
  testonly = true
  deps = [
    ":tennis_rust5_ai",
    ":tennis_rust5_ai_bin",
    ":tennis_service",
    ":tennis_service_bin",
    ":tennis_sysmgr_config",
    ":tennis_viewer",
    ":tennis_viewer_bin",
    "bots",
  ]
}

package("tennis_service") {
  deps = [ ":tennis_service_bin" ]

  binaries = [
    {
      name = "tennis_service"
    },
  ]
  meta = [
    {
      path = rebase_path("meta/tennis_service.cmx")
      dest = "tennis_service.cmx"
    },
  ]
}

rustc_binary("tennis_service_bin") {
  name = "tennis_service"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.game.tennis:fuchsia.game.tennis-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:rand",
  ]
}

package("tennis_viewer") {
  deps = [ ":tennis_viewer_bin" ]

  binaries = [
    {
      name = "tennis_viewer"
    },
  ]
  meta = [
    {
      path = rebase_path("meta/tennis_viewer.cmx")
      dest = "tennis_viewer.cmx"
    },
  ]
}

rustc_binary("tennis_viewer_bin") {
  name = "tennis_viewer"
  edition = "2018"

  source_root = "viewer/main.rs"

  deps = [
    "//sdk/fidl/fuchsia.game.tennis:fuchsia.game.tennis-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:rand",
  ]
}

package("tennis_rust5_ai") {
  deps = [ ":tennis_rust5_ai_bin" ]

  binaries = [
    {
      name = "tennis_rust5_ai"
    },
  ]
  meta = [
    {
      path = rebase_path("meta/tennis_rust5_ai.cmx")
      dest = "tennis_rust5_ai.cmx"
    },
  ]
}

rustc_binary("tennis_rust5_ai_bin") {
  name = "tennis_rust5_ai"
  edition = "2018"

  source_root = "rust5_ai/main.rs"

  deps = [
    "//sdk/fidl/fuchsia.game.tennis:fuchsia.game.tennis-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:parking_lot",
  ]
}

config_data("tennis_sysmgr_config") {
  for_pkg = "sysmgr"
  outputs = [ "tennis.config" ]
  sources = [ "tennis_sysmgr.config" ]
}
