# 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",
    "entrypoint_class.h",
    "handle.cc",
    "handle.h",
    "handle_signals_state.h",
    "handle_table.cc",
    "handle_table.h",
    "handle_transport.cc",
    "handle_transport.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",
  ]
}
