# 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",
    "display_item.proto",
    "display_list_recording_source.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",
    "rect.proto",
    "rectf.proto",
    "region.proto",
    "renderer_settings.proto",
    "scroll_offset.proto",
    "size.proto",
    "sizef.proto",
    "skregion.proto",
    "skrrect.proto",
    "skxfermode.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"

  defines = [ "CC_PROTO_IMPLEMENTATION" ]

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