# Copyright (c) 2012 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("//build/buildflag_header.gni") import("//build/config/nacl/config.gni") import("//ipc/features.gni") import("//mojo/public/tools/bindings/mojom.gni") import("//testing/test.gni") import("//third_party/protobuf/proto_library.gni") import("//tools/ipc_fuzzer/ipc_fuzzer.gni") buildflag_header("ipc_buildflags") { header = "ipc_buildflags.h" flags = [ "IPC_MESSAGE_LOG_ENABLED=$enable_ipc_logging" ] } component("ipc") { sources = [ # These are the param_traits sources needed by all platforms, # including ios. The rest are added in a conditional block below. "ipc_message_utils.cc", "ipc_message_utils.h", "ipc_mojo_param_traits.cc", "ipc_mojo_param_traits.h", "param_traits_log_macros.h", "param_traits_macros.h", "param_traits_read_macros.h", "param_traits_write_macros.h", "struct_constructor_macros.h", ] if (!is_ios) { sources += [ # Most sources go here since ios only needs the param_traits # code. "ipc_channel.h", "ipc_channel_common.cc", "ipc_channel_factory.cc", "ipc_channel_factory.h", "ipc_channel_handle.h", "ipc_channel_mojo.cc", "ipc_channel_mojo.h", "ipc_channel_proxy.cc", "ipc_channel_proxy.h", "ipc_channel_reader.cc", "ipc_channel_reader.h", "ipc_listener.cc", "ipc_listener.h", "ipc_logging.cc", "ipc_logging.h", "ipc_message_macros.h", "ipc_message_pipe_reader.cc", "ipc_message_pipe_reader.h", "ipc_message_start.h", "ipc_message_templates.h", "ipc_message_templates_impl.h", "ipc_mojo_bootstrap.cc", "ipc_mojo_bootstrap.h", "ipc_sender.h", "ipc_sync_channel.cc", "ipc_sync_channel.h", "ipc_sync_message_filter.cc", "ipc_sync_message_filter.h", "message_filter.cc", "message_filter.h", "message_filter_router.cc", "message_filter_router.h", "message_router.cc", "message_router.h", "trace_ipc_message.cc", "trace_ipc_message.h", ] } if (is_nacl) { sources += [ "ipc_channel_nacl.cc", "ipc_channel_nacl.h", ] } else { sources += [ "ipc_channel.cc" ] } defines = [ "IS_IPC_IMPL" ] public_deps = [ ":ipc_buildflags", ":message_support", ":mojom", ":native_handle_type_converters", ":param_traits", "//base", "//mojo/public/cpp/base", "//mojo/public/cpp/bindings", "//mojo/public/cpp/system", "//services/tracing/public/cpp", ] deps = [ "//base" ] if (enable_ipc_fuzzer) { public_configs = [ "//tools/ipc_fuzzer:ipc_fuzzer_config" ] } } component("message_support") { sources = [ "ipc_message.cc", "ipc_message.h", "ipc_message_attachment.cc", "ipc_message_attachment.h", "ipc_message_attachment_set.cc", "ipc_message_attachment_set.h", "ipc_message_support_export.h", "ipc_mojo_handle_attachment.cc", "ipc_mojo_handle_attachment.h", "ipc_mojo_message_helper.cc", "ipc_mojo_message_helper.h", "ipc_platform_file.cc", "ipc_platform_file.h", "ipc_sync_message.cc", "ipc_sync_message.h", ] if (is_win) { sources += [ "handle_attachment_win.cc", "handle_attachment_win.h", "handle_win.cc", "handle_win.h", ] } if (is_posix || is_fuchsia) { sources += [ "ipc_platform_file_attachment_posix.cc", "ipc_platform_file_attachment_posix.h", ] } if (is_apple) { sources += [ "mach_port_attachment_mac.cc", "mach_port_attachment_mac.h", "mach_port_mac.cc", "mach_port_mac.h", ] } if (is_fuchsia) { sources += [ "handle_attachment_fuchsia.cc", "handle_attachment_fuchsia.h", ] } defines = [ "IPC_MESSAGE_SUPPORT_IMPL" ] public_deps = [ ":ipc_buildflags", ":param_traits", "//base", "//mojo/public/cpp/system", ] if (is_win || is_mac) { # On Windows HandleAttachmentWin needs to generate random IDs. # On Mac MachPortAttachmentMac needs to generate random IDs. deps = [ "//crypto" ] } } source_set("native_handle_type_converters") { sources = [ "native_handle_type_converters.cc", "native_handle_type_converters.h", ] public_deps = [ ":message_support", "//mojo/public/interfaces/bindings:bindings_headers", ] } mojom_component("mojom") { output_prefix = "ipc_mojom" macro_prefix = "IPC_MOJOM" sources = [ "ipc.mojom" ] public_deps = [ "//mojo/public/interfaces/bindings", "//mojo/public/mojom/base", ] cpp_typemaps = [ { types = [ { mojom = "IPC.mojom.Message" cpp = "::IPC::MessageView" move_only = true }, ] traits_headers = [ "//ipc/message_mojom_traits.h" ] traits_sources = [ "//ipc/message_mojom_traits.cc", "//ipc/message_view.cc", "//ipc/message_view.h", ] traits_public_deps = [ "//ipc:message_support" ] }, ] # Don't generate a variant sources since we depend on generated internal # bindings types and we don't generate or build variants of those. disable_variants = true } mojom("mojom_constants") { sources = [ "constants.mojom" ] } mojom("test_interfaces") { testonly = true sources = [ "ipc_test.mojom" ] support_lazy_serialization = true } # This is provided as a separate target so other targets can provide param # traits implementations without necessarily linking to all of IPC. source_set("param_traits") { public = [ "ipc_param_traits.h" ] } # This is provided as a separate target so other targets can use IPC without # necessarily linking to protobuf. source_set("protobuf_support") { public = [ "ipc_message_protobuf_utils.h" ] public_deps = [ ":ipc", "//third_party/protobuf:protobuf_lite", ] } if (!is_ios) { source_set("run_all_unittests") { testonly = true sources = [ "run_all_unittests.cc" ] deps = [ "//base", "//base/test:test_support", "//mojo/core/embedder", "//mojo/core/test:test_support", "//third_party/ipcz/src:ipcz_test_support_chromium", "//third_party/ipcz/src:test_buildflags", ] } proto_library("test_proto") { sources = [ "test_proto.proto" ] } test("ipc_tests") { sources = [ "ipc_channel_mojo_unittest.cc", "ipc_channel_proxy_unittest.cc", "ipc_channel_reader_unittest.cc", "ipc_fuzzing_tests.cc", "ipc_message_protobuf_utils_unittest.cc", "ipc_message_unittest.cc", "ipc_message_utils_unittest.cc", "ipc_mojo_bootstrap_unittest.cc", "ipc_sync_channel_unittest.cc", "ipc_sync_message_unittest.cc", "ipc_sync_message_unittest.h", "sync_socket_unittest.cc", ] if (is_posix || is_fuchsia) { sources += [ "ipc_message_attachment_set_posix_unittest.cc" ] if (!is_ios) { sources += [ "ipc_send_fds_test.cc" ] } } deps = [ ":ipc", ":protobuf_support", ":run_all_unittests", ":test_interfaces", ":test_proto", ":test_support", "//base", "//base:i18n", "//base/test:test_support", "//crypto", "//mojo/core/test:test_support", "//testing/gtest", "//third_party/ipcz/src:ipcz_tests_sources_chromium", ] if (is_mac) { deps += [ "//sandbox/mac:seatbelt" ] } } test("ipc_perftests") { sources = [ "ipc_cpu_perftest.cc", "ipc_mojo_perftest.cc", "ipc_perftest_messages.cc", "ipc_perftest_messages.h", "ipc_perftest_util.cc", "ipc_perftest_util.h", "run_all_perftests.cc", ] deps = [ ":ipc", ":test_interfaces", ":test_support", "//base", "//base:i18n", "//base/test:test_support", "//mojo/core/embedder", "//mojo/core/test:test_support", "//mojo/core/test:test_support_impl", "//testing/gtest", ] } static_library("test_support") { testonly = true sources = [ "ipc_security_test_util.cc", "ipc_security_test_util.h", "ipc_test_base.cc", "ipc_test_base.h", "ipc_test_channel_listener.cc", "ipc_test_channel_listener.h", "ipc_test_sink.cc", "ipc_test_sink.h", ] public_deps = [ ":ipc" ] deps = [ "//base", "//base/test:test_support", "//mojo/core/test:test_support", "//testing/gtest", ] } }