Adding deps to protobuf rules.
Change-Id: Ib1f4f1e061a55885389a7b51c98317ee241a1bba
diff --git a/tools/build_rules/protobuf.bzl b/tools/build_rules/protobuf.bzl
index d5f4284..c9bb9ef 100644
--- a/tools/build_rules/protobuf.bzl
+++ b/tools/build_rules/protobuf.bzl
@@ -1,16 +1,22 @@
def _do_proto_cc_library_impl(ctx):
+ srcs = ctx.files.srcs
+ deps = []
+ deps += ctx.files.srcs
+
+ for dep in ctx.attr.deps:
+ deps += dep.proto.deps
+
message = 'Building %s and %s from %s' % (ctx.outputs.pb_h.short_path,
ctx.outputs.pb_cc.short_path,
- ctx.file.src.short_path)
+ ctx.files.srcs[0].short_path)
ctx.action(
- inputs = ctx.files.src + ctx.files._well_known_protos,
+ inputs = deps + ctx.files._well_known_protos,
executable = ctx.executable._protoc,
arguments = [
'--cpp_out=%s' % ctx.configuration.genfiles_dir.path,
'-I.',
'-Ithird_party/protobuf/src',
- ctx.file.src.path,
- ],
+ ] + [s.path for s in srcs],
mnemonic = 'ProtocCc',
progress_message = message,
outputs = [
@@ -19,8 +25,15 @@
],
)
-def _do_proto_cc_library_outputs(src):
- basename = src.name[:-len('.proto')]
+ return struct(
+ proto = struct(
+ srcs = srcs,
+ deps = deps,
+ )
+ )
+
+def _do_proto_cc_library_outputs(srcs):
+ basename = srcs[0].name[:-len('.proto')]
return {
'pb_h': '%s.pb.h' % basename,
'pb_cc': '%s.pb.cc' % basename,
@@ -29,11 +42,10 @@
_do_proto_cc_library = rule(
implementation = _do_proto_cc_library_impl,
attrs = {
- 'src': attr.label(
+ 'srcs': attr.label_list(
allow_files = FileType(['.proto']),
- mandatory = True,
- single_file = True,
),
+ 'deps': attr.label_list(providers = ["proto"]),
'_protoc': attr.label(
default = Label('//third_party/protobuf:protoc'),
executable = True,
@@ -47,7 +59,7 @@
output_to_genfiles = True,
)
-def proto_cc_library(name, src, visibility = None):
+def proto_cc_library(name, src, deps = [], visibility = None):
'''Generates a cc_library from a single .proto file. Does not support
dependencies on any .proto files except the well-known ones protobuf comes
with (which are unconditionally depended on).
@@ -58,7 +70,8 @@
_do_proto_cc_library(
name = '%s__proto_srcs' % name,
- src = src,
+ srcs = [src],
+ deps = [('%s__proto_srcs' % o_name) for o_name in deps],
visibility = ['//visibility:private'],
)
basename = src[:-len('.proto')]
@@ -66,6 +79,6 @@
name = name,
srcs = [ '%s.pb.cc' % basename ],
hdrs = [ '%s.pb.h' % basename ],
- deps = [ '//third_party/protobuf' ],
+ deps = [ '//third_party/protobuf' ] + deps,
visibility = visibility,
)