Merge pull request #1268 from keveman/grpc_support

Added grpc plugin support to cc_proto_library.
diff --git a/protobuf.bzl b/protobuf.bzl
index f674a6c..399cf62 100644
--- a/protobuf.bzl
+++ b/protobuf.bzl
@@ -63,6 +63,10 @@
   if ctx.attr.gen_py:
     args += ["--python_out=" + ctx.var["GENDIR"] + "/" + gen_dir]
 
+  if ctx.executable.grpc_cpp_plugin:
+    args += ["--plugin=protoc-gen-grpc=" + ctx.executable.grpc_cpp_plugin.path]
+    args += ["--grpc_out=" + ctx.var["GENDIR"] + "/" + gen_dir]
+
   if args:
     ctx.action(
         inputs=srcs + deps,
@@ -90,6 +94,11 @@
             single_file = True,
             mandatory = True,
         ),
+        "grpc_cpp_plugin": attr.label(
+            cfg = HOST_CFG,
+            executable = True,
+            single_file = True,
+        ),
         "gen_cc": attr.bool(),
         "gen_py": attr.bool(),
         "outs": attr.output_list(),
@@ -106,6 +115,7 @@
         include=None,
         protoc="//google/protobuf:protoc",
         internal_bootstrap_hack=False,
+        use_grpc_plugin=False,
         default_runtime="//google/protobuf:protobuf",
         **kargs):
   """Bazel rule to create a C++ protobuf library from proto source files
@@ -126,6 +136,8 @@
         for bootstraping. When it is set to True, no files will be generated.
         The rule will simply be a provider for .proto files, so that other
         cc_proto_library can depend on it.
+    use_grpc_plugin: a flag to indicate whether to call the grpc C++ plugin
+        when processing the proto files.
     default_runtime: the implicitly default runtime which will be depended on by
         the generated cc_library target.
     **kargs: other keyword arguments that are passed to cc_library.
@@ -153,6 +165,10 @@
         **kargs)
     return
 
+  grpc_cpp_plugin = None
+  if use_grpc_plugin:
+    grpc_cpp_plugin = "//external:grpc_cpp_plugin"
+
   outs = _CcOuts(srcs)
   _proto_gen(
       name=name + "_genproto",
@@ -160,6 +176,7 @@
       deps=[s + "_genproto" for s in deps],
       includes=includes,
       protoc=protoc,
+      grpc_cpp_plugin=grpc_cpp_plugin,
       gen_cc=1,
       outs=outs,
       visibility=["//visibility:public"],