# Copyright 2014 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.

config("system_config") {
  defines = [
    # Ensures that dependent projects import the core functions on Windows.
    "MOJO_USE_SYSTEM_IMPL",
  ]
}

component("system") {
  output_name = "mojo_system_impl"

  sources = [
    "channel.cc",
    "channel.h",
    "channel_endpoint.cc",
    "channel_endpoint.h",
    "channel_endpoint_id.cc",
    "channel_endpoint_id.h",
    "channel_info.cc",
    "channel_info.h",
    "channel_manager.cc",
    "channel_manager.h",
    "configuration.cc",
    "configuration.h",
    "core.cc",
    "core.h",
    "data_pipe.cc",
    "data_pipe.h",
    "data_pipe_consumer_dispatcher.cc",
    "data_pipe_consumer_dispatcher.h",
    "data_pipe_producer_dispatcher.cc",
    "data_pipe_producer_dispatcher.h",
    "dispatcher.cc",
    "dispatcher.h",
    "handle_signals_state.h",
    "handle_table.cc",
    "handle_table.h",
    "local_data_pipe.cc",
    "local_data_pipe.h",
    "local_message_pipe_endpoint.cc",
    "local_message_pipe_endpoint.h",
    "mapping_table.cc",
    "mapping_table.h",
    "memory.cc",
    "memory.h",
    "message_in_transit.cc",
    "message_in_transit.h",
    "message_in_transit_queue.cc",
    "message_in_transit_queue.h",
    "message_pipe.cc",
    "message_pipe.h",
    "message_pipe_dispatcher.cc",
    "message_pipe_dispatcher.h",
    "message_pipe_endpoint.cc",
    "message_pipe_endpoint.h",
    "options_validation.h",
    "platform_handle_dispatcher.cc",
    "platform_handle_dispatcher.h",
    "proxy_message_pipe_endpoint.cc",
    "proxy_message_pipe_endpoint.h",
    "raw_channel.cc",
    "raw_channel.h",
    "raw_channel_posix.cc",
    "raw_channel_win.cc",
    "shared_buffer_dispatcher.cc",
    "shared_buffer_dispatcher.h",
    "simple_dispatcher.cc",
    "simple_dispatcher.h",
    "transport_data.cc",
    "transport_data.h",
    "waiter.cc",
    "waiter.h",
    "waiter_list.cc",
    "waiter_list.h",
  ]

  defines = [
    "MOJO_SYSTEM_IMPL_IMPLEMENTATION",
    "MOJO_SYSTEM_IMPLEMENTATION",
  ]

  all_dependent_configs = [ ":system_config" ]

  public_deps = [
    "//mojo/edk/embedder",
    "//mojo/edk/embedder:platform",
    "//mojo/public/c/system",
  ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
  ]

  allow_circular_includes_from = [ "//mojo/edk/embedder" ]
}

# GYP version: mojo/edk/mojo_edk.gyp:mojo_system_unittests
test("mojo_system_unittests") {
  sources = [
    "../test/multiprocess_test_helper_unittest.cc",
    "channel_endpoint_id_unittest.cc",
    "channel_unittest.cc",
    "core_test_base.cc",
    "core_test_base.h",
    "core_unittest.cc",
    "data_pipe_unittest.cc",
    "dispatcher_unittest.cc",
    "local_data_pipe_unittest.cc",
    "memory_unittest.cc",
    "message_pipe_dispatcher_unittest.cc",
    "message_pipe_test_utils.cc",
    "message_pipe_test_utils.h",
    "message_pipe_unittest.cc",
    "multiprocess_message_pipe_unittest.cc",
    "options_validation_unittest.cc",
    "platform_handle_dispatcher_unittest.cc",
    "raw_channel_unittest.cc",
    "remote_message_pipe_unittest.cc",
    "run_all_unittests.cc",
    "shared_buffer_dispatcher_unittest.cc",
    "simple_dispatcher_unittest.cc",
    # TODO(vtl): Factor test_utils.* into their own source set.
    "test_utils.cc",
    "test_utils.h",
    "waiter_list_unittest.cc",
    "waiter_test_utils.cc",
    "waiter_test_utils.h",
    "waiter_unittest.cc",
  ]

  deps = [
    ":system",
    "//base",
    "//base/test:test_support",
    "//mojo/edk/embedder:embedder_unittests",
    "//mojo/edk/test:test_support",
    "//testing/gtest",
  ]

  allow_circular_includes_from = [ "//mojo/edk/embedder:embedder_unittests" ]
}

# GYP version: mojo/edk/mojo_edk.gyp:mojo_message_pipe_perftests
test("mojo_message_pipe_perftests") {
  sources = [
    "message_pipe_perftest.cc",
    "message_pipe_test_utils.h",
    "message_pipe_test_utils.cc",
    "test_utils.cc",
    "test_utils.h",
  ]

  deps = [
    ":system",
    "//base",
    "//base/test:test_support",
    "//base/test:test_support_perf",
    "//mojo/edk/test:test_support",
    "//testing/gtest",
  ]
}