@ -63,6 +63,10 @@ def _proto_gen_impl(ctx):
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 @@ _proto_gen = rule(
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 @@ def cc_proto_library(
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 @@ def cc_proto_library(
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 @@ def cc_proto_library(
* * 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 @@ def cc_proto_library(
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 " ] ,