# Copyright 2021 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/bazel/bazel_fuchsia_test_package.gni")
import("//build_overrides/pigweed.gni")
import("$dir_pw_unit_test/test.gni")

dir_public_hci_spec = "../public/pw_bluetooth_sapphire/internal/host/hci-spec"

# Static library containing the HCI specification definitions
pw_source_set("hci-spec") {
  public = [
    "$dir_public_hci_spec/constants.h",
    "$dir_public_hci_spec/defaults.h",
    "$dir_public_hci_spec/le_connection_parameters.h",
    "$dir_public_hci_spec/link_key.h",
    "$dir_public_hci_spec/lmp_feature_set.h",
    "$dir_public_hci_spec/protocol.h",
    "$dir_public_hci_spec/util.h",
    "$dir_public_hci_spec/vendor_protocol.h",
  ]

  sources = [
    "le_connection_parameters.cc",
    "util.cc",
  ]

  public_deps = [
    "$dir_pw_bluetooth:emboss_hci_group",
    "$dir_pw_chrono:system_clock",
    "//src/connectivity/bluetooth/core/bt-host:config",
    "//src/connectivity/bluetooth/core/bt-host/common",
  ]
}

pw_test("tests") {
  sources = [ "util_test.cc" ]

  deps = [ ":hci-spec" ]

  test_main = "//src/connectivity/bluetooth/core/bt-host/testing:gtest_main"
}

bazel_fuchsia_test_package("test_pkg") {
  test_package_name = "hci_spec_tests"
  test_component_names = [ "hci_spec_test_autogen_cml" ]
}
