# 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("//build/buildflag_header.gni")
interfaces_bindings_gen_dir = "$root_gen_dir/mojo/public/interfaces/bindings"

declare_args() {
  enable_mojo_tracing = false
}

buildflag_header("mojo_features") {
  header = "mojo_features.h"

  flags = [ "MOJO_TRACE_ENABLED=$enable_mojo_tracing" ]
}

component("bindings") {
  sources = [
    # Normally, targets should depend on the source_sets generated by mojom
    # targets. However, the generated source_sets use portions of the bindings
    # library. In order to avoid linker warnings about locally-defined imports
    # in Windows components build, this target depends on the generated C++
    # files directly so that the EXPORT macro defintions match.
    "$interfaces_bindings_gen_dir/interface_control_messages.mojom-shared-internal.h",
    "$interfaces_bindings_gen_dir/interface_control_messages.mojom-shared.cc",
    "$interfaces_bindings_gen_dir/interface_control_messages.mojom-shared.h",
    "$interfaces_bindings_gen_dir/interface_control_messages.mojom.cc",
    "$interfaces_bindings_gen_dir/interface_control_messages.mojom.h",
    "$interfaces_bindings_gen_dir/native_struct.mojom-shared-internal.h",
    "$interfaces_bindings_gen_dir/native_struct.mojom-shared.cc",
    "$interfaces_bindings_gen_dir/native_struct.mojom-shared.h",
    "$interfaces_bindings_gen_dir/native_struct.mojom.cc",
    "$interfaces_bindings_gen_dir/native_struct.mojom.h",
    "$interfaces_bindings_gen_dir/pipe_control_messages.mojom-shared-internal.h",
    "$interfaces_bindings_gen_dir/pipe_control_messages.mojom-shared.cc",
    "$interfaces_bindings_gen_dir/pipe_control_messages.mojom-shared.h",
    "$interfaces_bindings_gen_dir/pipe_control_messages.mojom.cc",
    "$interfaces_bindings_gen_dir/pipe_control_messages.mojom.h",
    "array_data_view.h",
    "array_traits_span.h",
    "array_traits_stl.h",
    "associated_binding.h",
    "associated_binding_set.h",
    "associated_group.h",
    "associated_group_controller.h",
    "associated_interface_ptr.h",
    "associated_interface_ptr_info.h",
    "associated_interface_request.h",
    "binding.h",
    "binding_set.h",
    "bindings_export.h",
    "callback_helpers.h",
    "clone_traits.h",
    "connection_error_callback.h",
    "connector.h",
    "disconnect_reason.h",
    "equals_traits.h",
    "filter_chain.h",
    "interface_data_view.h",
    "interface_endpoint_client.h",
    "interface_endpoint_controller.h",
    "interface_id.h",
    "interface_ptr.h",
    "interface_ptr_info.h",
    "interface_ptr_set.h",
    "interface_request.h",
    "lib/array_internal.cc",
    "lib/array_internal.h",
    "lib/array_serialization.h",
    "lib/associated_binding.cc",
    "lib/associated_group.cc",
    "lib/associated_group_controller.cc",
    "lib/associated_interface_ptr.cc",
    "lib/associated_interface_ptr_state.cc",
    "lib/associated_interface_ptr_state.h",
    "lib/binding_state.cc",
    "lib/binding_state.h",
    "lib/bindings_internal.h",
    "lib/buffer.cc",
    "lib/buffer.h",
    "lib/connector.cc",
    "lib/control_message_handler.cc",
    "lib/control_message_handler.h",
    "lib/control_message_proxy.cc",
    "lib/control_message_proxy.h",
    "lib/filter_chain.cc",
    "lib/fixed_buffer.cc",
    "lib/fixed_buffer.h",
    "lib/handle_interface_serialization.h",
    "lib/hash_util.h",
    "lib/interface_endpoint_client.cc",
    "lib/interface_ptr_state.cc",
    "lib/interface_ptr_state.h",
    "lib/map_data_internal.h",
    "lib/map_serialization.h",
    "lib/may_auto_lock.h",
    "lib/message.cc",
    "lib/message_header_validator.cc",
    "lib/message_internal.cc",
    "lib/message_internal.h",
    "lib/multiplex_router.cc",
    "lib/multiplex_router.h",
    "lib/native_enum_data.h",
    "lib/native_enum_serialization.h",
    "lib/native_struct_serialization.cc",
    "lib/native_struct_serialization.h",
    "lib/pipe_control_message_handler.cc",
    "lib/pipe_control_message_proxy.cc",
    "lib/scoped_interface_endpoint_handle.cc",
    "lib/serialization.h",
    "lib/serialization_context.cc",
    "lib/serialization_context.h",
    "lib/serialization_forward.h",
    "lib/serialization_util.h",
    "lib/string_serialization.h",
    "lib/string_traits_string16.cc",
    "lib/sync_call_restrictions.cc",
    "lib/sync_event_watcher.cc",
    "lib/sync_handle_registry.cc",
    "lib/sync_handle_watcher.cc",
    "lib/task_runner_helper.cc",
    "lib/task_runner_helper.h",
    "lib/unserialized_message_context.cc",
    "lib/unserialized_message_context.h",
    "lib/validate_params.h",
    "lib/validation_context.cc",
    "lib/validation_context.h",
    "lib/validation_errors.cc",
    "lib/validation_errors.h",
    "lib/validation_util.cc",
    "lib/validation_util.h",
    "map.h",
    "map_data_view.h",
    "map_traits_stl.h",
    "message.h",
    "message_header_validator.h",
    "native_enum.h",
    "pipe_control_message_handler.h",
    "pipe_control_message_handler_delegate.h",
    "pipe_control_message_proxy.h",
    "raw_ptr_impl_ref_traits.h",
    "scoped_interface_endpoint_handle.h",
    "string_data_view.h",
    "string_traits_stl.h",
    "string_traits_string16.h",
    "string_traits_string_piece.h",
    "strong_associated_binding.h",
    "strong_binding.h",
    "strong_binding_set.h",
    "struct_ptr.h",
    "sync_call_restrictions.h",
    "sync_event_watcher.h",
    "sync_handle_registry.h",
    "sync_handle_watcher.h",
    "thread_safe_interface_ptr.h",
    "type_converter.h",
    "unique_ptr_impl_ref_traits.h",
  ]

  public_deps = [
    ":mojo_features",
    ":struct_traits",
    "//base",
    "//ipc:message_support",
    "//ipc:param_traits",
    "//mojo/public/cpp/system",
  ]

  deps = [
    "//base",
    "//ipc:native_handle_type_converters",
    "//mojo/public/interfaces/bindings:bindings__generator",
    "//mojo/public/interfaces/bindings:bindings_shared__generator",
  ]

  defines = [ "MOJO_CPP_BINDINGS_IMPLEMENTATION" ]
}

source_set("struct_traits") {
  sources = [
    "array_traits.h",
    "enum_traits.h",
    "lib/template_util.h",
    "map_traits.h",
    "string_traits.h",
    "struct_traits.h",
    "union_traits.h",
  ]
}

if (!is_ios) {
  # TODO(yzshen): crbug.com/617718 Consider moving this into blink.
  source_set("wtf_support") {
    sources = [
      "array_traits_wtf_vector.h",
      "lib/string_traits_wtf.cc",
      "lib/wtf_clone_equals_util.h",
      "lib/wtf_hash_util.h",
      "lib/wtf_serialization.h",
      "map_traits_wtf_hash_map.h",
      "string_traits_wtf.h",
    ]

    public_deps = [
      ":bindings",
      "//third_party/WebKit/Source/platform/wtf",
    ]

    public_configs = [ "//third_party/WebKit/Source:config" ]
  }
}
