# 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/testing/environments.gni")
import("//third_party/cobalt_config/metrics_registry.gni")

group("wlanstack") {
  testonly = true
  deps = [
    ":bin",
    ":wlan_metrics_registry",
    ":wlanstack2",
    ":wlanstack2-tests",
  ]
}

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 = "wlanstack2"
  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("wlanstack2") {
  deps = [
    ":bin",
    ":wlan_metrics_registry",
  ]

  binary = "wlanstack2"

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

package("wlanstack2-tests") {
  testonly = true

  deps = [
    ":bin",
  ]

  tests = [
    {
      name = "wlanstack2_bin_test"
      dest = "wlanstack2_bin_test"
      environments = basic_envs
    },
  ]
}
