# 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("//src/sys/build/components.gni")

config("wlan_common_config") {
  include_dirs = [ "include" ]
}

source_set("common") {
  sources = [
    "band.cc",
    "channel.cc",
    "element.cc",
    "element_splitter.cc",
    "energy.cc",
    "ieee80211_codes.cc",
    "include/wlan/common/action_frame.h",
    "include/wlan/common/band.h",
    "include/wlan/common/bitfield.h",
    "include/wlan/common/buffer_reader.h",
    "include/wlan/common/buffer_writer.h",
    "include/wlan/common/channel.h",
    "include/wlan/common/cipher.h",
    "include/wlan/common/dispatcher.h",
    "include/wlan/common/element.h",
    "include/wlan/common/element_id.h",
    "include/wlan/common/energy.h",
    "include/wlan/common/ieee80211_codes.h",
    "include/wlan/common/logging.h",
    "include/wlan/common/mac_frame.h",
    "include/wlan/common/macaddr.h",
    "include/wlan/common/mcs_rate_lookup.h",
    "include/wlan/common/moving_average.h",
    "include/wlan/common/parse_element.h",
    "include/wlan/common/phy.h",
    "include/wlan/common/stats.h",
    "include/wlan/common/tx_vector.h",
    "include/wlan/common/write_element.h",
    "logging.cc",
    "mac_frame.cc",
    "macaddr.cc",
    "mcs_rate_lookup.cc",
    "parse_element.cc",
    "parse_mac_header.cc",
    "perr_destination_parser.cc",
    "phy.cc",
    "tim_element.cc",
    "tx_vector.cc",
    "write_element.cc",
  ]

  public_deps = [
    "//sdk/banjo/ddk.hw.wlan.ieee80211",
    "//sdk/banjo/ddk.hw.wlan.wlaninfo",
    "//sdk/banjo/fuchsia.hardware.wlanphyimpl",
    "//sdk/fidl/fuchsia.wlan.common",
    "//sdk/fidl/fuchsia.wlan.ieee80211",
    "//sdk/fidl/fuchsia.wlan.mlme",
    "//sdk/fidl/fuchsia.wlan.stats",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]

  public_configs = [ ":wlan_common_config" ]
  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]

  deps = [ "//garnet/lib/wlan/protocol" ]

  # TODO(fxbug.dev/46688): UBSan has found an instance of undefined behavior in this target.
  # Disable UBSan for this target temporarily until it is migrated into CI/CQ.
  public_configs += [ "//build/config:temporarily_disable_ubsan_do_not_use" ]
}

executable("mcs_rate_lookup_test") {
  output_name = "mcs_rate_lookup_test"
  testonly = true
  sources = [ "mcs_rate_lookup_test.cc" ]
  deps = [
    ":common",
    "//sdk/fidl/fuchsia.wlan.common",
    "//src/lib/fxl/test:gtest_main",
  ]
}

fuchsia_unittest_package("mcs_rate_lookup_tests") {
  package_name = "mcs-rate-lookup-tests"
  deps = [ ":mcs_rate_lookup_test" ]
}
