# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("../mojo_edk.gni")

# Declares/defines platform-dependent things. Some things are left
# unimplemented, and the final binary must include a separate implementation
# (e.g., //mojo/edk/base_edk, which implements these platform-dependent things
# using //base).
mojo_edk_source_set("platform") {
  sources = [
    "io_thread.h",
    "message_loop.h",
    "platform_handle.cc",
    "platform_handle.h",
    "platform_handle_utils_posix.cc",
    "platform_handle_utils_posix.h",
    "platform_handle_watcher.h",
    "platform_pipe.h",
    "platform_pipe_utils_posix.h",
    "platform_shared_buffer.h",
    "random.h",
    "scoped_platform_handle.h",
    "simple_platform_shared_buffer.h",
    "task_runner.h",
    "thread.h",
    "thread_utils.h",
    "time_ticks.h",
  ]

  mojo_sdk_public_deps = [ "mojo/public/cpp/system" ]

  mojo_edk_public_deps = [ "mojo/edk/util" ]
}

# Functionality to be used by tests (both those merely using :platform as well
# as those implementing the unimplemented parts of :platform).
mojo_edk_source_set("test_platform") {
  testonly = true

  sources = [
    "message_loop_test_helper.cc",
    "message_loop_test_helper.h",
    "platform_handle_watcher_test_helper.cc",
    "platform_handle_watcher_test_helper.h",
    "test_message_loops.h",
    "test_stopwatch.cc",
    "test_stopwatch.h",
  ]

  public_deps = [
    ":platform",
  ]

  mojo_edk_public_deps = [ "mojo/edk/util" ]

  deps = [
    "//testing/gtest",
  ]
}

# Tests for both :platform and :test_platform. Actually linking these tests into
# a test binary will require an implementation of :platform and :test_platform
# (e.g., this is done by //mojo/edk/base_edk:mojo_edk_platform_unittests).
mojo_edk_source_set("unittests") {
  testonly = true

  sources = [
    "aligned_alloc_unittest.cc",
    "io_thread_unittest.cc",
    "platform_pipe_unittest.cc",
    "random_unittest.cc",
    "simple_platform_shared_buffer_unittest.cc",
    "test_message_loops_unittest.cc",
    "test_stopwatch_unittest.cc",
    "thread_utils_unittest.cc",
    "time_ticks_unittest.cc",
  ]

  deps = [
    ":platform",
    ":test_platform",
    "//testing/gtest",
  ]

  # TODO(vtl): This is a suboptimal dependency, but we have to get timeouts from
  # somewhere.
  mojo_edk_deps = [ "mojo/edk/system/test" ]

  mojo_sdk_deps = [ "mojo/public/cpp/system" ]
}
