#
#  Copyright 2018 Android Open Source Project
#
#  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.
#

config("avrcp_config") {
  include_dirs = [
    "//bt/",
    "//bt/btcore/include",
    "//bt/internal_include",
    "//bt/stack/include",
    "//bt/profile/avrcp",
    "//bt/packet",
    "//bt/packet/include",
    "//bt/include/hardware/avrcp",
  ]

  configs = ["//bt:target_defaults"]
}

static_library("profile_avrcp") {
  sources = [
    "connection_handler.cc",
    "device.cc",
  ]

  deps = [
    "//bt/gd/rust/shim:message_loop_thread_bridge_header",
  ]

  configs += [
    ":avrcp_config"
  ]
}

if (use.test) {
  executable("net_test_avrcp") {
    sources = [
      "tests/avrcp_connection_handler_test.cc",
      "tests/avrcp_device_test.cc",
    ]

    deps = [
      ":profile_avrcp",
      "//bt/device:device",
      "//bt/osi:osi",
      "//bt/packet:packet",
      "//bt/types:types",
    ]

    configs += [
      "//bt:external_gmock_main",
      ":avrcp_config",
    ]
  }
}
