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

# Basic target with protocol definitions and no logic, suitable for test
# emulation.
source_set("definitions") {
  sources = [
    "connection_parameters.cc",
    "connection_parameters.h",
    "hci.h",
    "hci_constants.h",
    "link_key.cc",
    "link_key.h",
    "status.cc",
    "status.h",
    "util.cc",
    "util.h",
  ]

  public_deps = [
    "//src/connectivity/bluetooth/core/bt-host/common",
  ]
}

static_library("hci") {
  sources = [
    "acl_data_channel.cc",
    "acl_data_channel.h",
    "acl_data_packet.cc",
    "acl_data_packet.h",
    "advertising_report_parser.cc",
    "advertising_report_parser.h",
    "bredr_connection_request.cc",
    "bredr_connection_request.h",
    "command_channel.cc",
    "command_channel.h",
    "connection.cc",
    "connection.h",
    "control_packets.cc",
    "control_packets.h",
    "defaults.h",
    "device_wrapper.cc",
    "device_wrapper.h",
    "legacy_low_energy_advertiser.cc",
    "legacy_low_energy_advertiser.h",
    "legacy_low_energy_scanner.cc",
    "legacy_low_energy_scanner.h",
    "local_address_delegate.h",
    "low_energy_advertiser.h",
    "low_energy_connector.cc",
    "low_energy_connector.h",
    "low_energy_scanner.cc",
    "low_energy_scanner.h",
    "packet.h",
    "sequential_command_runner.cc",
    "sequential_command_runner.h",
    "slab_allocators.h",
    "transport.cc",
    "transport.h",
  ]

  public_deps = [
    ":definitions",
    "//src/lib/files",
    "//src/lib/fxl",
    "//zircon/public/banjo/ddk.protocol.bt.hci",
    "//zircon/public/fidl/fuchsia-hardware-bluetooth:fuchsia-hardware-bluetooth_c",
    "//zircon/public/fidl/fuchsia-hardware-bluetooth:fuchsia-hardware-bluetooth_c_client",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/fzl",
  ]
}

source_set("testing") {
  testonly = true

  sources = [
    "//src/lib/fxl",
    "fake_connection.cc",
    "fake_connection.h",
    "fake_local_address_delegate.cc",
    "fake_local_address_delegate.h",
  ]

  public_deps = [
    ":hci",
  ]
}

source_set("tests") {
  testonly = true

  sources = [
    "acl_data_channel_unittest.cc",
    "advertising_report_parser_unittest.cc",
    "command_channel_unittest.cc",
    "connection_unittest.cc",
    "legacy_low_energy_advertiser_unittest.cc",
    "legacy_low_energy_scanner_unittest.cc",
    "low_energy_connector_unittest.cc",
    "packet_unittest.cc",
    "sequential_command_runner_unittest.cc",
    "slab_allocators_unittest.cc",
    "status_unittest.cc",
    "util_unittest.cc",
  ]

  deps = [
    ":testing",
    "//src/connectivity/bluetooth/core/bt-host/testing",
    "//third_party/googletest:gtest",
  ]
}
