#
#  Copyright (C) 2015 Google, Inc.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at:
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#

static_library("hci") {
  sources = [
    "src/btsnoop.cc",
    "src/btsnoop_mem.cc",
    "src/btsnoop_net.cc",
    "src/buffer_allocator.cc",
    "src/hci_audio.cc",
    "src/hci_hal.cc",
    "src/hci_hal_h4.cc",
    "src/hci_hal_mct.cc",
    "src/hci_inject.cc",
    "src/hci_layer.cc",
    "src/hci_packet_factory.cc",
    "src/hci_packet_parser.cc",
    "src/low_power_manager.cc",
    "src/packet_fragmenter.cc",
    "src/vendor.cc",
  ]

  include_dirs = [
    "include",
    "//",
    "//include",
    "//bta/include",
    "//btcore/include",
    "//stack/include",
  ]

  deps = [
    "//third_party/libchrome:base",
  ]
}

executable("net_test_hci") {
  testonly = true
  sources = [
    "//osi/test/AllocationTestHarness.cc",
    "//osi/test/AlarmTestHarness.cc",
    "test/hci_hal_h4_test.cc",
    "test/hci_hal_mct_test.cc",
    "test/hci_layer_test.cc",
    "test/low_power_manager_test.cc",
    "test/packet_fragmenter_test.cc",
  ]

  include_dirs = [
    "//",
    "//include",
    "//btcore/include",
    "//hci/include",
    "//osi/test",
    "//stack/include",
  ]

  deps = [
    "//hci",
    "//osi",
    "//btcore",
    "//third_party/googletest:gtest_main",
    "//third_party/libchrome:base",
  ]

  libs = [
    "-lpthread",
    "-lrt",
    "-ldl",
  ]
}
