# 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/config/nacl/config.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//testing/test.gni")
import("//tools/ipc_fuzzer/ipc_fuzzer.gni")

component("ipc") {
  sources = [
    "export_template.h",
    "handle_attachment_win.cc",
    "handle_attachment_win.h",
    "handle_win.cc",
    "handle_win.h",
    "ipc_channel.cc",
    "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_nacl.cc",
    "ipc_channel_nacl.h",
    "ipc_channel_proxy.cc",
    "ipc_channel_proxy.h",
    "ipc_channel_reader.cc",
    "ipc_channel_reader.h",
    "ipc_descriptors.h",
    "ipc_export.h",
    "ipc_listener.h",
    "ipc_logging.cc",
    "ipc_logging.h",
    "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_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_message_utils.cc",
    "ipc_message_utils.h",
    "ipc_mojo_bootstrap.cc",
    "ipc_mojo_bootstrap.h",
    "ipc_mojo_handle_attachment.cc",
    "ipc_mojo_handle_attachment.h",
    "ipc_mojo_message_helper.cc",
    "ipc_mojo_message_helper.h",
    "ipc_mojo_param_traits.cc",
    "ipc_mojo_param_traits.h",
    "ipc_platform_file.cc",
    "ipc_platform_file.h",
    "ipc_platform_file_attachment_posix.cc",
    "ipc_platform_file_attachment_posix.h",
    "ipc_sender.h",
    "ipc_sync_channel.cc",
    "ipc_sync_channel.h",
    "ipc_sync_message.cc",
    "ipc_sync_message.h",
    "ipc_sync_message_filter.cc",
    "ipc_sync_message_filter.h",
    "mach_port_attachment_mac.cc",
    "mach_port_attachment_mac.h",
    "mach_port_mac.cc",
    "mach_port_mac.h",
    "message_filter.cc",
    "message_filter.h",
    "message_filter_router.cc",
    "message_filter_router.h",
    "message_router.cc",
    "message_router.h",
    "param_traits_log_macros.h",
    "param_traits_macros.h",
    "param_traits_read_macros.h",
    "param_traits_write_macros.h",
    "struct_constructor_macros.h",
    "struct_destructor_macros.h",
  ]

  if (is_nacl && !is_nacl_nonsfi) {
    sources -= [ "ipc_channel.cc" ]
  } else {
    sources -= [
      "ipc_channel_nacl.cc",
      "ipc_channel_nacl.h",
    ]
  }

  defines = [ "IPC_IMPLEMENTATION" ]

  public_deps = [
    ":mojom",
    ":param_traits",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
  ]
  deps = [
    "//base",
  ]

  if (is_win || is_mac) {
    # On Windows HandleAttachmentWin needs to generate random IDs.
    # On Mac MachPortAttachmentMac needs to generate random IDs.
    deps += [ "//crypto" ]
  }

  if (enable_ipc_fuzzer) {
    public_configs = [ "//tools/ipc_fuzzer:ipc_fuzzer_config" ]
  }
}

mojom("mojom") {
  sources = [
    "ipc.mojom",
  ]
  export_class_attribute = "IPC_EXPORT"
  export_define = "IPC_IMPLEMENTATION"
  export_header = "ipc/ipc_export.h"
}

mojom("test_interfaces") {
  testonly = true
  sources = [
    "ipc_test.mojom",
  ]
}

# 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",
  ]
}

if (!is_ios) {
  source_set("run_all_unittests") {
    testonly = true

    sources = [
      "run_all_unittests.cc",
    ]

    deps = [
      "//base",
      "//base/test:test_support",
      "//mojo/edk/system",
      "//mojo/edk/test:test_support",
    ]
  }

  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_attachment_set_posix_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",
      "ipc_test_message_generator.cc",
      "ipc_test_message_generator.h",
      "ipc_test_messages.h",
      "sync_socket_unittest.cc",
    ]

    if (!is_ios) {
      sources += [ "ipc_send_fds_test.cc" ]
    }

    deps = [
      ":ipc",
      ":run_all_unittests",
      ":test_interfaces",
      ":test_support",
      "//base",
      "//base:i18n",
      "//base/test:test_support",
      "//crypto",
      "//mojo/edk/system",
      "//mojo/edk/test:test_support",
      "//testing/gtest",
    ]

    if (is_mac) {
      deps += [ "//sandbox/mac:seatbelt" ]
    }
  }

  test("ipc_perftests") {
    sources = [
      "ipc_mojo_perftest.cc",
      "run_all_perftests.cc",
    ]

    deps = [
      ":ipc",
      ":test_interfaces",
      ":test_support",
      "//base",
      "//base:i18n",
      "//base/test:test_support",
      "//mojo/edk/system",
      "//mojo/edk/test:test_support",
      "//mojo/edk/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/edk/test:test_support",
      "//testing/gtest",
    ]
  }
}
