# Copyright 2019 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.

group("wlan") {
  testonly = true
  deps = [
    ":drivers",
    ":packages",
  ]
}

group("drivers") {
  deps = [
    "drivers/third_party/broadcom/brcmfmac:fuchsia_driver",
    "drivers/wlanif:wlanif_driver",
    "drivers/wlanphy:wlanphy_driver",
    "drivers/wlansoftmac:wlansoftmac_driver",
    "testing/wlantap-driver:wlantap_driver",
    "tests/helpers/testcontroller-driver:testcontroller_driver",
  ]
}

group("_packages_common") {
  deps = [
    "wlancfg",
    "//src/connectivity/location/regulatory_region",
  ]
}

group("packages") {
  deps = [
    ":_packages_common",
    "wlandevicemonitor:wlandevicemonitor",
  ]
}

group("packages-legacy-privacy") {
  deps = [
    ":_packages_common",
    "wlandevicemonitor:wlandevicemonitor-legacy-privacy",
  ]
}

group("tests") {
  testonly = true

  deps = [
    "drivers/lib/components/cpp/test:tests",
    "drivers/lib/fuzzing:tests",
    "drivers/lib/log:tests",
    "drivers/lib/timer/cpp/test:tests",
    "drivers/testing/lib/sim-env/test:wlan-sim-env-test",
    "drivers/testing/lib/sim-fake-ap/test:wlan-sim-fake-ap-test",
    "drivers/third_party/broadcom/brcmfmac:brcmfmac_host_tests",
    "drivers/third_party/broadcom/brcmfmac:brcmfmac_tests",
    "drivers/wlanif/test:tests",
    "drivers/wlanphy:tests",
    "drivers/wlansoftmac:tests",
    "drivers/wlansoftmac/rust_driver:wlansoftmac-rust-tests",
    "lib/bitfield/wlan-bitfield-tests",
    "lib/common/cpp:mcs_rate_lookup_tests",
    "lib/common/cpp:wlan_cpp_bitfield_tests",
    "lib/common/rust:wlan-common-tests",
    "lib/eapol:eapol-tests",
    "lib/fidl-ext:wlan-fidl-ext-tests",
    "lib/frame_writer:wlan-frame-writer-tests",
    "lib/ieee80211:ieee80211-tests",
    "lib/ieee80211-testutils:ieee80211-testutils-tests",
    "lib/mlme/fullmac:wlan-fullmac-mlme-tests",
    "lib/mlme/fullmac/c-binding:wlan-fullmac-mlme-c-tests",
    "lib/mlme/rust:wlan-mlme-tests",
    "lib/rsn:wlan-rsn-tests",
    "lib/sae:wlan-sae-tests",
    "lib/sme:wlan-sme-tests",
    "lib/stash:wlan-stash-tests",
    "lib/statemachine:wlan-statemachine-tests",
    "lib/trace:wlan-trace-tests",
    "lib/wep_deprecated:wep-deprecated-tests",
    "testing/hw-sim:wlan-hw-sim-lib-tests",
    "testing/hw-sim/test:wlan-hw-sim-component-tests",
    "tests",
    "tools/wlantool:wlantool-tests",
    "wlancfg:tests",
    "wlancfg/tool:donut-tests",
    "wlandevicemonitor:tests",
    "wlanix:wlanix-tests",
  ]
}

group("tools") {
  deps = [ "wlancfg/tool:donut" ]
}

# (https://fxbug.dev/42078127) Remove after transition that includes WLAN in assembly for most builds.
group("wlan-bundle-for-transition") {
  deps = []
}
