#
#  Copyright 2015 Google
#
#  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.
#

source_set("service") {
  sources = [
    "a2dp_sink.cc",
    "a2dp_source.cc",
    "adapter.cc",
    "avrcp_control.cc",
    "avrcp_target.cc",
    "common/bluetooth/a2dp_codec_config.cc",
    "common/bluetooth/adapter_state.cc",
    "common/bluetooth/advertise_data.cc",
    "common/bluetooth/advertise_settings.cc",
    "common/bluetooth/avrcp_int_value.cc",
    "common/bluetooth/avrcp_media_attr.cc",
    "common/bluetooth/avrcp_register_notification_response.cc",
    "common/bluetooth/characteristic.cc",
    "common/bluetooth/descriptor.cc",
    "common/bluetooth/remote_device_props.cc",
    "common/bluetooth/scan_filter.cc",
    "common/bluetooth/scan_result.cc",
    "common/bluetooth/scan_settings.cc",
    "common/bluetooth/service.cc",
    "common/bluetooth/util/atomic_string.cc",
    "daemon.cc",
    "gatt_client.cc",
    "gatt_server.cc",
    "gatt_server_old.cc",
    "hal/bluetooth_gatt_interface.cc",
    "hal/bluetooth_interface.cc",
    "ipc/dbus/bluetooth_adapter.cc",
    "ipc/dbus/ipc_handler_dbus.cc",
    "hal/bluetooth_av_interface.cc",
    "hal/bluetooth_avrcp_interface.cc",
    "hal/fake_bluetooth_gatt_interface.cc",
    "hal/fake_bluetooth_interface.cc",
    "ipc/ipc_handler.cc",
    "ipc/ipc_handler_linux.cc",
    "ipc/ipc_manager.cc",
    "ipc/linux_ipc_host.cc",
    "logging_helpers.cc",
    "low_energy_advertiser.cc",
    "low_energy_scanner.cc",
    "low_energy_client.cc",
    "settings.cc",
  ]

  include_dirs = [
    "//",
    "//linux_include",
    "//include",
    "//service/common",
    "//third_party/modp_b64/modp64",
  ]

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

executable("bluetoothtbd") {
  sources = [
    "main.cc",
  ]

  deps = [
    ":service",
    "//btcore",
    "//third_party/libchrome:base",
    "//third_party/modp_b64",
  ]

  include_dirs = [ "//" ]

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

executable("service_unittests") {
  testonly = true
  sources = [
    "test/fake_hal_util.cc",
    "test/settings_unittest.cc",
  ]

  include_dirs = [ "//" ]

  deps = [
    ":service",
    "//third_party/googletest:gmock_main",
    "//third_party/libchrome:base",
    "//third_party/modp_b64",
  ]
}
