#
#  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("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/metrics_linux.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/time.cc",
    "src/wakelock.cc",
  ]

  include_dirs = [
    "//",
    "//utils/include",
    "//stack/include",
  ]

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

executable("net_test_osi") {
  testonly = true
  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/leaky_bonded_queue_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",
    "test/time_test.cc",
  ]

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

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

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