#
#  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/data_dispatcher.cc",
    "src/eager_reader.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",
  ]
}

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/data_dispatcher_test.cc",
    "test/eager_reader_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",
    "test/time_test.cc",
  ]

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

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

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