Explorar o código

Merge pull request #1268 from keveman/grpc_support

Added grpc plugin support to cc_proto_library.
Jisi Liu %!s(int64=9) %!d(string=hai) anos
pai
achega
fc51bdc033
Modificáronse 1 ficheiros con 17 adicións e 0 borrados
  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"],