# 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 = [
    # Should there be a separate "embedder" target?
    "../embedder/embedder.cc",
    "../embedder/embedder.h",
    "../embedder/platform_channel_pair.cc",
    "../embedder/platform_channel_pair.h",
    "../embedder/platform_channel_pair_posix.cc",
    "../embedder/platform_channel_pair_win.cc",
    "../embedder/platform_channel_utils_posix.cc",
    "../embedder/platform_channel_utils_posix.h",
    "../embedder/platform_handle.cc",
    "../embedder/platform_handle.h",
    "../embedder/platform_handle_utils.h",
    "../embedder/platform_handle_utils_posix.cc",
    "../embedder/platform_handle_utils_win.cc",
    "../embedder/platform_handle_vector.h",
    "../embedder/scoped_platform_handle.h",
    "channel.cc",
    "channel.h",
    "constants.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",
    "entrypoints.cc",
    "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",
    "raw_shared_buffer.cc",
    "raw_shared_buffer.h",
    "raw_shared_buffer_posix.cc",
    "raw_shared_buffer_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",
    # Test-only code:
    # TODO(vtl): It's a little unfortunate that these end up in the same
    # component as non-test-only code. In the static build, this code should
    # hopefully be dead-stripped.
    "../embedder/test_embedder.cc",
    "../embedder/test_embedder.h",
  ]

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

  all_dependent_configs = [ ":system_config" ]

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