# Copyright 2015 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("//third_party/protobuf/proto_library.gni")

# Use a group here to allow external targets to depend on "cc/proto" instead of
# cc/proto:cc_proto.  We need a group because other component targets are named
# "proto" which breaks component builds.  A group doesn't have the same issue.
group("proto") {
  public_deps = [
    ":cc_proto",
  ]
}

component("cc_proto") {
  # Only expose the target to the "proto" group.
  visibility = [ ":proto" ]

  public_deps = [
    ":proto_internal",
  ]
}

proto_library("proto_internal") {
  # Only expose the target to the "cc_proto" target.
  visibility = [ ":cc_proto" ]

  sources = [
    # TODO(dtrainor): Move protos to their correct packages once it's possible
    # to include protos from other directories/targets (crbug.com/542423).
    "begin_main_frame_and_commit_state.proto",
    "commit_earlyout_reason.proto",
    "compositor_message.proto",
    "compositor_message_to_impl.proto",
    "compositor_message_to_main.proto",
    "display_item.proto",
    "element_id.proto",
    "layer.proto",
    "layer_position_constraint.proto",
    "layer_selection_bound.proto",
    "layer_tree_debug_state.proto",
    "layer_tree_host.proto",
    "layer_tree_settings.proto",
    "managed_memory_policy.proto",
    "memory_allocation.proto",
    "point.proto",
    "point3f.proto",
    "pointf.proto",
    "property_tree.proto",
    "recording_source.proto",
    "rect.proto",
    "rectf.proto",
    "region.proto",
    "renderer_settings.proto",
    "scroll_offset.proto",
    "size.proto",
    "sizef.proto",
    "skregion.proto",
    "skrrect.proto",
    "skxfermode.proto",
    "synced_property.proto",
    "transform.proto",
    "vector2d.proto",
    "vector2df.proto",
  ]

  deps = [
    "//third_party/protobuf:protobuf_lite",
  ]

  cc_generator_options = "dllexport_decl=CC_PROTO_EXPORT:"
  cc_include = "cc/proto/cc_proto_export.h"
  component_build_force_source_set = true
  defines = [ "CC_PROTO_IMPLEMENTATION" ]

  # Warn if clang creates exit destructors.
  extra_configs = [ "//build/config/compiler:wexit_time_destructors" ]
}
