aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/build_rules/genproto.bzl
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2016-04-07 14:22:59 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-04-07 17:02:48 +0000
commit3248a5ea6ecb9f5f2080876a70de016825f54707 (patch)
treeb862f4e89e4a1c8e6eb2ac8e7585d25ba2809803 /tools/build_rules/genproto.bzl
parent2c94a385bfcdec0ba0f43147b686fb04031f5051 (diff)
Update our rudimentary proto rules to be able to handle gRPC.
-- MOS_MIGRATED_REVID=119265313
Diffstat (limited to 'tools/build_rules/genproto.bzl')
-rw-r--r--tools/build_rules/genproto.bzl47
1 files changed, 41 insertions, 6 deletions
diff --git a/tools/build_rules/genproto.bzl b/tools/build_rules/genproto.bzl
index 62284a3b20..9ac399865d 100644
--- a/tools/build_rules/genproto.bzl
+++ b/tools/build_rules/genproto.bzl
@@ -25,6 +25,8 @@ def gensrcjar_impl(ctx):
"JAR='%s'" % ctx.executable._jar.path,
"OUTPUT='%s'" % out.path,
"PROTO_COMPILER='%s'" % ctx.executable._proto_compiler.path,
+ "GRPC_JAVA_PLUGIN='%s'" % ctx.executable.grpc_java_plugin.path if \
+ ctx.executable.grpc_java_plugin else "",
"SOURCE='%s'" % ctx.file.src.path,
ctx.executable._gensrcjar.path,
]),
@@ -43,14 +45,19 @@ gensrcjar = rule(
allow_files = proto_filetype,
single_file = True,
),
+ "grpc_java_plugin": attr.label(
+ cfg = HOST_CFG,
+ executable = True,
+ single_file = True,
+ ),
"_gensrcjar": attr.label(
- default = Label("@bazel_tools//tools/build_rules:gensrcjar"),
+ default = Label("//tools/build_rules:gensrcjar"),
executable = True,
),
# TODO(bazel-team): this should be a hidden attribute with a default
# value, but Skylark needs to support select first.
"_proto_compiler": attr.label(
- default = Label("@bazel_tools//third_party/protobuf:protoc"),
+ default = Label("//third_party/protobuf:protoc"),
allow_files = True,
executable = True,
single_file = True,
@@ -73,13 +80,41 @@ gensrcjar = rule(
outputs = {"srcjar": "lib%{name}.srcjar"},
)
-# TODO(bazel-team): support proto => proto dependencies too
-def java_proto_library(name, src):
- gensrcjar(name=name + "_srcjar", src=src)
+def cc_grpc_library(name, src):
+ basename = src[:-len(".proto")]
+
+ native.genrule(
+ name = name + "_codegen",
+ srcs = [src],
+ tools = ["//third_party/protobuf:protoc", "//third_party/grpc:cpp_plugin"],
+ cmd = "\\\n".join([
+ "$(location //third_party/protobuf:protoc)",
+ " --plugin=protoc-gen-grpc=$(location //third_party/grpc:cpp_plugin)",
+ " --cpp_out=$(GENDIR)",
+ " --grpc_out=$(GENDIR)",
+ " $(location " + src + ")"]),
+ outs = [basename + ".grpc.pb.h", basename + ".grpc.pb.cc", basename + ".pb.cc", basename + ".pb.h"])
+
+ native.cc_library(
+ name = name,
+ srcs = [basename + ".grpc.pb.cc", basename + ".pb.cc"],
+ hdrs = [basename + ".grpc.pb.h", basename + ".pb.h"],
+ deps = ["//third_party/grpc:grpc++"],
+ includes = ["."])
+
+def java_proto_library(name, src, use_grpc_plugin=False):
+ grpc_java_plugin = None
+ if use_grpc_plugin:
+ grpc_java_plugin = "//third_party/grpc:grpc-java-plugin"
+
+ gensrcjar(name=name + "_srcjar", src=src, grpc_java_plugin=grpc_java_plugin)
+ deps = ["//third_party/protobuf"]
+ if use_grpc_plugin:
+ deps += ["//third_party/grpc:grpc-jar", "//third_party:guava"]
native.java_library(
name=name,
srcs=[name + "_srcjar"],
- deps=["@bazel_tools//third_party/protobuf"],
+ deps=deps,
# The generated code has lots of 'rawtypes' warnings.
javacopts=["-Xlint:-rawtypes"],
)