# 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/test/test_package.gni")
import("//build/testing/environments.gni")

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

source_set("common") {
  sources = [
    "band.cc",
    "channel.cc",
    "element.cc",
    "element_splitter.cc",
    "energy.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/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/status_code.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",
    "status_code.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/ddk.protocol.wlanphyimpl",
    "//sdk/fidl/fuchsia.wlan.common",
    "//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" ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  public_configs += [ "//build/config:Wno-conversion" ]
}

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",
  ]
}

unittest_package("mcs_rate_lookup_tests") {
  package_name = "mcs-rate-lookup-tests"
  deps = [ ":mcs_rate_lookup_test" ]
  tests = [
    {
      name = "mcs_rate_lookup_test"
      environments = basic_envs
    },
  ]
}
