Commit f0966a74 authored by Manjunath Kudlur's avatar Manjunath Kudlur

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.
parent 8f67b165
...@@ -63,6 +63,10 @@ def _proto_gen_impl(ctx): ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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"],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment