# 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 = [
    ":packages",
    "drivers",
  ]
}

group("drivers") {
  deps = [
    "drivers/realtek/rtl88xx:rtl88xx_driver",
    "drivers/testing:wlanphy-testdev",
    "drivers/third_party/atheros/ath10k:ath10k_driver",
    "drivers/third_party/broadcom/brcmfmac:driver_module",
    "drivers/third_party/broadcom/brcmfmac:test_driver_module",
    "drivers/third_party/intel/iwlwifi:iwlwifi_driver",
    "drivers/wlan:wlan_driver",
    "drivers/wlanif:wlanif_driver",
    "drivers/wlanphy:wlanphy_driver",
    "testing/wlantap-driver:wlantap_driver",
  ]
}

# This target just includes the wlan-related packages, but not any sysmgr
# config that will cause them to actually be used. Product configs (and only
# product configs, rather than other group targets, to avoid conflicts) should
# also include an appropriate target under config/.
group("packages") {
  deps = [
    "wlancfg",
    "wlanstack",
    "//src/connectivity/location/regulatory_region",
  ]
}

group("tests") {
  testonly = true

  deps = [
    "drivers/realtek:tests",
    "drivers/testing/lib/sim-device/test:sim_device_test",
    "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/third_party/intel/iwlwifi:tests",
    "drivers/third_party/intel/iwlwifi/test:iwlwifi_test",
    "drivers/wlan:tests",
    "drivers/wlanif/test:tests",
    "drivers/wlanphy:tests",
    "lib/bitfield/wlan-bitfield-tests",
    "lib/common/cpp:ieee80211_codes_tests",
    "lib/common/cpp:mcs_rate_lookup_tests",
    "lib/common/rust:wlan-common-tests",
    "lib/eapol:eapol-tests",
    "lib/frame_writer:wlan-frame-writer-tests",
    "lib/inspect:wlan-inspect-tests",
    "lib/mlme/cpp/tests",
    "lib/mlme/rust:wlan-mlme-tests",
    "lib/mlme/rust/c-binding:wlan-mlme-c-tests",
    "lib/rsn:wlan-rsn-tests",
    "lib/sae:wlan-sae-tests",
    "lib/sme:wlan-sme-tests",
    "lib/span:wlan-span-tests",
    "lib/stash:wlan-stash-tests",
    "lib/statemachine:wlan-statemachine-tests",
    "lib/wep_deprecated:wep-deprecated-tests",
    "testing/ap-smoke-test:wlan-ap-smoke-test",
    "testing/client-smoke-test:wlan-smoke-test",
    "testing/client-smoke-test:wlan-smoke-test-tests",
    "testing/client-stress-test:wlan-stress-test",
    "testing/hw-sim:wlan-hw-sim-lib-tests",
    "testing/hw-sim/test:rate-selection-package",
    "testing/hw-sim/test:wlan-hw-sim-test",
    "testing/wlan-service-util:wlan-service-util-tests",
    "testing/wlantap-client",
    "testing/wlantap-driver:tests",
    "testing/wlantap-driver:wlantap",
    "tools/wlantool:wlantool-tests",
    "wlancfg:wlancfg-tests",
    "wlancfg/tool:donut-tests",
    "wlanstack:wlanstack-tests",
  ]
}

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