# Copyright 2017 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/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")
import("//third_party/cobalt_config/metrics_registry.gni")

metrics_registry("wlan_metrics_registry") {
  # This must match the directory name /third_party/cobalt_config/fuchsia/connectivity_wlan
  project_name = "connectivity_wlan"
  generate_rust = true

  # We don't need to include a copy of our projects's Cobalt registry in our package because we
  # rely on it being packaged with Cobalt itself
  generate_binarypb = false
}

rustc_binary("bin") {
  name = "wlanstack"
  with_unit_tests = true
  edition = "2018"

  # with_lto = "fat"

  deps = [
    ":wlan_metrics_registry_rustlib",
    "//garnet/lib/rust/fuchsia-wlan-dev",
    "//garnet/lib/wlan/fidl:fidl-rustc",
    "//garnet/lib/wlan/fidl:service-rustc",
    "//garnet/lib/wlan/fidl:sme-rustc",
    "//garnet/lib/wlan/fidl:wlantap-rustc",
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/fdio",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-component",
    "//garnet/public/rust/fuchsia-inspect",
    "//garnet/public/rust/fuchsia-vfs/fuchsia-vfs-watcher",
    "//garnet/public/rust/fuchsia-zircon",
    "//sdk/fidl/fuchsia.wlan.common:fuchsia.wlan.common-rustc",
    "//sdk/fidl/fuchsia.wlan.mesh:fuchsia.wlan.mesh-rustc",
    "//sdk/fidl/fuchsia.wlan.minstrel:fuchsia.wlan.minstrel-rustc",
    "//sdk/fidl/fuchsia.wlan.mlme:fuchsia.wlan.mlme-rustc",
    "//sdk/fidl/fuchsia.wlan.stats:fuchsia.wlan.stats-rustc",
    "//src/connectivity/wlan/lib/common/rust/:wlan-common",
    "//src/connectivity/wlan/lib/eapol",
    "//src/connectivity/wlan/lib/inspect:wlan-inspect",
    "//src/connectivity/wlan/lib/sme:wlan-sme",
    "//src/connectivity/wlan/testing/wlantap-client",
    "//src/lib/cobalt/rust:fuchsia-cobalt",
    "//third_party/rust_crates:failure",
    "//third_party/rust_crates:futures-preview",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:pin-utils",
    "//third_party/rust_crates:void",
    "//zircon/public/fidl/fuchsia-cobalt:fuchsia-cobalt-rustc",
    "//zircon/public/fidl/fuchsia-inspect:fuchsia-inspect-rustc",
    "//zircon/public/fidl/fuchsia-mem:fuchsia-mem-rustc",
  ]
}

package("wlanstack") {
  deps = [
    ":bin",
    ":wlan_metrics_registry",
  ]

  binary = "wlanstack"

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

test_package("wlanstack-tests") {
  deps = [
    ":bin_test",
  ]

  tests = [
    {
      name = "wlanstack_bin_test"
      environments = basic_envs
    },
  ]
}
