| diff --git a/tools/build_rules/genproto.bzl b/tools/build_rules/genproto.bzl | |
| index 62284a3..bc76cd1 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", | |
| + 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,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=["@bazel_tools//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 b94408a..c1674a3 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}" . \ |