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

import("../mojo_edk.gni")
import("//testing/test.gni")

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

mojo_edk_source_set("system") {
  sources = [
    "async_waiter.cc",
    "async_waiter.h",
    "awakable.h",
    "awakable_list.cc",
    "awakable_list.h",
    "channel.cc",
    "channel.h",
    "channel_endpoint.cc",
    "channel_endpoint.h",
    "channel_endpoint_client.h",
    "channel_endpoint_id.cc",
    "channel_endpoint_id.h",
    "channel_id.h",
    "channel_manager.cc",
    "channel_manager.h",
    "configuration.cc",
    "configuration.h",
    "connection_identifier.h",
    "connection_manager.cc",
    "connection_manager.h",
    "connection_manager_messages.h",
    "core.cc",
    "core.h",
    "data_pipe.cc",
    "data_pipe.h",
    "data_pipe_consumer_dispatcher.cc",
    "data_pipe_consumer_dispatcher.h",
    "data_pipe_impl.cc",
    "data_pipe_impl.h",
    "data_pipe_producer_dispatcher.cc",
    "data_pipe_producer_dispatcher.h",
    "dispatcher.cc",
    "dispatcher.h",
    "endpoint_relayer.cc",
    "endpoint_relayer.h",
    "handle.cc",
    "handle.h",
    "handle_signals_state.h",
    "handle_table.cc",
    "handle_table.h",
    "incoming_endpoint.cc",
    "incoming_endpoint.h",
    "ipc_support.cc",
    "ipc_support.h",
    "local_data_pipe_impl.cc",
    "local_data_pipe_impl.h",
    "local_message_pipe_endpoint.cc",
    "local_message_pipe_endpoint.h",
    "mapping_table.cc",
    "mapping_table.h",
    "master_connection_manager.cc",
    "master_connection_manager.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",
    "process_identifier.h",
    "proxy_message_pipe_endpoint.cc",
    "proxy_message_pipe_endpoint.h",
    "raw_channel.cc",
    "raw_channel.h",
    "raw_channel_posix.cc",
    "remote_consumer_data_pipe_impl.cc",
    "remote_consumer_data_pipe_impl.h",
    "remote_data_pipe_ack.h",
    "remote_producer_data_pipe_impl.cc",
    "remote_producer_data_pipe_impl.h",
    "shared_buffer_dispatcher.cc",
    "shared_buffer_dispatcher.h",
    "simple_dispatcher.cc",
    "simple_dispatcher.h",
    "slave_connection_manager.cc",
    "slave_connection_manager.h",
    "transport_data.cc",
    "transport_data.h",
    "unique_identifier.cc",
    "unique_identifier.h",
    "waiter.cc",
    "waiter.h",
  ]

  mojo_edk_public_deps = [
    "mojo/edk/embedder",
    "mojo/edk/embedder:delegates",
    "mojo/edk/embedder:platform",
    "mojo/edk/platform",
    "mojo/edk/util",
  ]

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

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

  allow_circular_includes_from = [ "../embedder" ]
}

mojo_edk_unittests("mojo_edk_system_unittests") {
  sources = [
    # TODO(vtl): This should be in its own mojo_edk_unittests target.
    "../test/multiprocess_test_helper_unittest.cc",
    "awakable_list_unittest.cc",
    "channel_endpoint_id_unittest.cc",
    "channel_endpoint_unittest.cc",
    "channel_manager_unittest.cc",
    "channel_test_base.cc",
    "channel_test_base.h",
    "channel_unittest.cc",
    "connection_manager_unittest.cc",
    "core_test_base.cc",
    "core_test_base.h",
    "core_unittest.cc",
    "data_pipe_impl_unittest.cc",
    "data_pipe_unittest.cc",
    "dispatcher_unittest.cc",
    "endpoint_relayer_unittest.cc",
    "handle_table_unittest.cc",
    "handle_unittest.cc",
    "ipc_support_unittest.cc",
    "memory_unittest.cc",
    "message_in_transit_queue_unittest.cc",
    "message_in_transit_test_utils.cc",
    "message_in_transit_test_utils.h",
    "message_pipe_dispatcher_unittest.cc",
    "message_pipe_test_utils.cc",
    "message_pipe_test_utils.h",
    "message_pipe_unittest.cc",
    "mock_simple_dispatcher.cc",
    "mock_simple_dispatcher.h",
    "multiprocess_message_pipe_unittest.cc",
    "options_validation_unittest.cc",
    "platform_handle_dispatcher_unittest.cc",
    "raw_channel_unittest.cc",
    "remote_data_pipe_impl_unittest.cc",
    "remote_message_pipe_unittest.cc",
    "shared_buffer_dispatcher_unittest.cc",
    "simple_dispatcher_unittest.cc",
    "test_channel_endpoint_client.cc",
    "test_channel_endpoint_client.h",
    "unique_identifier_unittest.cc",
    "waiter_test_utils.cc",
    "waiter_test_utils.h",
    "waiter_unittest.cc",
  ]

  deps = [
    ":system",
    "//base",
    "//testing/gtest",
  ]

  mojo_edk_deps = [
    "mojo/edk/base_edk",
    "mojo/edk/base_edk:test_base_edk",
    "mojo/edk/platform:test_platform",
    "mojo/edk/system/test",
    "mojo/edk/test:test_support",
    "mojo/edk/util",
  ]
}

mojo_edk_perftests("mojo_edk_system_perftests") {
  sources = [
    "message_pipe_perftest.cc",
    "message_pipe_test_utils.cc",
    "message_pipe_test_utils.h",
  ]

  deps = [
    ":system",
    "//base",
    "//testing/gtest",
  ]

  mojo_edk_deps = [
    # TODO(vtl): Add separate test targets for this.
    "mojo/edk/util:perftests",

    "mojo/edk/base_edk",
    "mojo/edk/base_edk:test_base_edk",
    "mojo/edk/system/test",
    "mojo/edk/system/test:perf",
    "mojo/edk/test:test_support",
  ]
}
