#
#  Copyright 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("osi") {
  sources = [
    "src/alarm.cc",
    "src/allocation_tracker.cc",
    "src/allocator.cc",
    "src/array.cc",
    "src/buffer.cc",
    "src/compat.cc",
    "src/config.cc",
    "src/fixed_queue.cc",
    "src/future.cc",
    "src/hash_map_utils.cc",
    "src/list.cc",
    "src/mutex.cc",
    "src/osi.cc",
    "src/properties.cc",
    "src/reactor.cc",
    "src/ringbuffer.cc",
    "src/semaphore.cc",
    "src/socket.cc",

    # TODO(mcchou): Remove these sources after platform specific
    # dependencies are abstracted.
    "src/socket_utils/socket_local_client.cc",
    "src/socket_utils/socket_local_server.cc",
    "src/thread.cc",
    "src/wakelock.cc",
  ]

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

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

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

if (use.test) {
  executable("net_test_osi") {
    sources = [
      "test/AlarmTestHarness.cc",
      "test/AllocationTestHarness.cc",
      "test/alarm_test.cc",
      "test/allocation_tracker_test.cc",
      "test/allocator_test.cc",
      "test/array_test.cc",
      "test/config_test.cc",
      "test/future_test.cc",
      "test/hash_map_utils_test.cc",
      "test/list_test.cc",
      "test/properties_test.cc",
      "test/rand_test.cc",
      "test/reactor_test.cc",
      "test/ringbuffer_test.cc",
      "test/thread_test.cc",
    ]

    include_dirs = [
      "//bt/",
      "//bt/osi/test",
    ]

    deps = [
      "//bt/osi",
    ]

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

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