# 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_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/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",
    "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",
    "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/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/system/test",
    "mojo/edk/system/test:perf",
    "mojo/edk/test:test_support",
  ]
}
