Browse Source

Added grpc plugin support to cc_proto_library.

cc_proto_library now supports use_grpc_plugin flag that passes
--plugin=protoc-gen-grpc=grpc_cpp_plugin to protoc compiler
invocation. grpc_cpp_plugin is assumed to be present as
//external:grpc_cpp_plugin, so clients can setup their WORKSPACE files
appropriately to point to grpc location using bind.
Manjunath Kudlur 9 years ago
parent
commit
f0966a746e
1 changed files with 17 additions and 0 deletions
  1. 17 0
      protobuf.bzl

+ 17 - 0
protobuf.bzl

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