diff options
author | Lukacs Berki <lberki@google.com> | 2016-04-11 11:10:45 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2016-04-11 11:24:02 +0000 |
commit | 821a5046f4d9a41a9a518e4c6074c967b90d09d5 (patch) | |
tree | cce377653df8cbe9e0337cf58297b131d039162f /tools/build_rules | |
parent | 285112c9b61ca3782e00ccf6411339da7291a3c3 (diff) |
Support gRPC in the Bazel-internal protobuf rules.
--
MOS_MIGRATED_REVID=119518388
Diffstat (limited to 'tools/build_rules')
-rw-r--r-- | tools/build_rules/genproto.bzl | 42 | ||||
-rwxr-xr-x | tools/build_rules/gensrcjar.sh | 10 |
2 files changed, 47 insertions, 5 deletions
diff --git a/tools/build_rules/genproto.bzl b/tools/build_rules/genproto.bzl index 3acec8d743..bc76cd1ac3 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,6 +45,11 @@ 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("//tools/build_rules:gensrcjar"), executable = True, @@ -73,13 +80,42 @@ gensrcjar = rule( outputs = {"srcjar": "lib%{name}.srcjar"}, ) +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 = ["."]) + # TODO(bazel-team): support proto => proto dependencies too -def java_proto_library(name, src): - gensrcjar(name=name + "_srcjar", src=src) +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=["//third_party/protobuf"], + deps=deps, # The generated code has lots of 'rawtypes' warnings. javacopts=["-Xlint:-rawtypes"], ) diff --git a/tools/build_rules/gensrcjar.sh b/tools/build_rules/gensrcjar.sh index b94408a703..c1674a3950 100755 --- a/tools/build_rules/gensrcjar.sh +++ b/tools/build_rules/gensrcjar.sh @@ -65,8 +65,14 @@ main() { "${PREPROCESSOR}" <"${SOURCE}" >"${processed_source}" \ || err "Preprocessor ${PREPROCESSOR} failed" - "${PROTO_COMPILER}" --java_out="${proto_output}" "${processed_source}" \ - || err "proto_compiler failed" + if [ -n "${GRPC_JAVA_PLUGIN}" ]; then + "${PROTO_COMPILER}" --plugin=protoc-gen-grpc="${GRPC_JAVA_PLUGIN}" \ + --grpc_out="${proto_output}" --java_out="${proto_output}" "${processed_source}" \ + || err "proto_compiler failed" + else + "${PROTO_COMPILER}" --java_out="${proto_output}" "${processed_source}" \ + || err "proto_compiler failed" + fi find "${proto_output}" -exec touch -t "${TIMESTAMP}" '{}' \; \ || err "Failed to reset timestamps" "${JAR}" cMf "${OUTPUT}.tmp" -C "${proto_output}" . \ |