#
#  Copyright 2018 The 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.
#

static_library("common") {
  sources = [
    "address_obfuscator.cc",
    "message_loop_thread.cc",
    "metric_id_allocator.cc",
    "metrics_linux.cc",
    "once_timer.cc",
    "os_utils.cc",
    "repeating_timer.cc",
    "stop_watch_legacy.cc",
    "time_util.cc",
  ]

  include_dirs = [
    "//bt/",
    "//bt/stack/include",
    "//bt/linux_include",
    "//bt/internal_include",
  ]

  deps = [
    "//bt:libbt-platform-protos-lite",
    "//bt/gd/rust/shim:init_flags_bridge_header",
  ]

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

if (use.test) {
  executable("bluetooth_test_common") {
    sources = [
      "leaky_bonded_queue_unittest.cc",
      "state_machine_unittest.cc",
      "time_util_unittest.cc",
    ]

    include_dirs = [
      "//bt/",
      "//bt/common",
    ]

    deps = [ "//bt/common" ]

    configs += [
      "//bt:external_gtest_main",
      "//bt:external_gmock_main",
      "//bt:target_defaults",
    ]

    libs = [
      "pthread",
      "rt",
    ]
  }
}
