diff options
author | Jakob Buchgraber <buchgr@google.com> | 2017-06-06 11:58:26 -0400 |
---|---|---|
committer | John Cater <jcater@google.com> | 2017-06-06 12:37:03 -0400 |
commit | 6073f1d41a102b70007356d1445c57b7f7533d78 (patch) | |
tree | 9ce021a4d4c91ca032946e1dc440159a055a3f1c /tools/build_rules | |
parent | d9223e00c18466bd286a5e400007acb78ddeb9de (diff) |
protobuf: Use bazel's native java_proto_library rules.
Additional changes:
- Introduce a Skylark macro java_library_srcs that provides the source jars of a java_*_library rule.
- Remove bazel's own java_proto_library implementation.
Change-Id: I18f2259bc75ca0fb32dcd8a6a857c609bd2c7773
PiperOrigin-RevId: 158146210
Diffstat (limited to 'tools/build_rules')
-rw-r--r-- | tools/build_rules/genproto.bzl | 92 | ||||
-rwxr-xr-x | tools/build_rules/gensrcjar.sh | 83 | ||||
-rw-r--r-- | tools/build_rules/utilities.bzl | 38 |
3 files changed, 38 insertions, 175 deletions
diff --git a/tools/build_rules/genproto.bzl b/tools/build_rules/genproto.bzl index 5ccd934122..f935e52b68 100644 --- a/tools/build_rules/genproto.bzl +++ b/tools/build_rules/genproto.bzl @@ -17,73 +17,6 @@ proto_filetype = [".proto"] -def gensrcjar_impl(ctx): - out = ctx.outputs.srcjar - - ctx.action( - command=' '.join([ - "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, - ]), - inputs=([ctx.file.src] + ctx.files._gensrcjar + ctx.files._jar + - ctx.files._jdk + ctx.files._proto_compiler + - ctx.files.grpc_java_plugin), - outputs=[out], - mnemonic="GenProtoSrcJar", - use_default_shell_env=True) - - return struct(runfiles=ctx.runfiles(collect_default=True)) - -gensrcjar = rule( - gensrcjar_impl, - attrs = { - "src": attr.label( - allow_files = proto_filetype, - single_file = True, - ), - "grpc_java_plugin": attr.label( - cfg = "host", - executable = True, - single_file = True, - ), - "_gensrcjar": attr.label( - default = Label("//tools/build_rules:gensrcjar"), - cfg = "host", - 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("//third_party/protobuf:protoc"), - allow_files = True, - cfg = "host", - executable = True, - single_file = True, - ), - "_jar": attr.label( - default = Label("@bazel_tools//tools/jdk:jar"), - allow_files = True, - cfg = "host", - executable = True, - single_file = True, - ), - # The jdk dependency is required to ensure dependent libraries are found - # when we invoke jar (see issue #938). - # TODO(bazel-team): Figure out why we need to pull this in explicitly; - # the jar dependency above should just do the right thing on its own. - "_jdk": attr.label( - default = Label("@bazel_tools//tools/jdk:jdk"), - allow_files = True, - ), - }, - outputs = {"srcjar": "lib%{name}.srcjar"}, -) - def cc_grpc_library(name, src): basename = src[:-len(".proto")] protoc_label = str(Label("//third_party/protobuf:protoc")) @@ -107,28 +40,3 @@ def cc_grpc_library(name, src): deps = [str(Label("//third_party/grpc:grpc++_unsecure"))], includes = ["."]) -# TODO(bazel-team): support proto => proto dependencies too -def java_proto_library(name, src, use_grpc_plugin=False): - grpc_java_plugin = None - if use_grpc_plugin: - grpc_java_plugin = str(Label("//third_party/grpc:grpc-java-plugin")) - - gensrcjar(name=name + "_srcjar", src=src, grpc_java_plugin=grpc_java_plugin) - deps = [str(Label("//third_party/protobuf:protobuf_java"))] - if use_grpc_plugin: - deps += [ - str(Label("//third_party/grpc:grpc-jar")), - str(Label("//third_party:guava")), - ] - native.java_library( - name=name, - srcs=[name + "_srcjar"], - deps=deps, - # The generated code has lots of 'rawtypes' warnings. - javacopts=["-Xlint:-rawtypes"], -) - -def proto_java_library(name, src): - print("Deprecated: use java_proto_library() instead, proto_java_library " + - "will be removed in version 0.2.1") - java_proto_library(name, src) diff --git a/tools/build_rules/gensrcjar.sh b/tools/build_rules/gensrcjar.sh deleted file mode 100755 index c1674a3950..0000000000 --- a/tools/build_rules/gensrcjar.sh +++ /dev/null @@ -1,83 +0,0 @@ -#! /bin/sh -# Copyright 2016 The Bazel Authors. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# List of environment variables that must be defined as input. -# -# We use environment variables instead of positional arguments or flags for -# clarity in the caller .bzl file and for simplicity of processing. There is no -# need to implement a full-blown argument parser for this simple script. -INPUT_VARS="JAR OUTPUT PREPROCESSOR PROTO_COMPILER SOURCE" - -# Now set defaults for optional input variables. -: "${PREPROCESSOR:=cat}" - -# Basename of the script for error reporting purposes. -PROGRAM_NAME="${0##*/}" - -# A timestamp to mark all generated files with to get deterministic JAR outputs. -TIMESTAMP=198001010000 - -# Prints an error and exits. -# -# Args: -# ...: list(str). Parts of the message to print; all of them are joined -# with a single space in between. -err() { - echo "${PROGRAM_NAME}: ${*}" 1>&2 - exit 1 -} - -# Entry point. -main() { - [ ${#} -eq 0 ] || err "No arguments allowed; set the following environment" \ - "variables for configuration instead: ${INPUT_VARS}" - for var in ${INPUT_VARS}; do - local value - eval "value=\"\$${var}\"" - [ -n "${value}" ] || err "Input environment variable ${var} is not set" - done - - rm -f "${OUTPUT}" - - local proto_output="${OUTPUT}.proto_output" - rm -rf "${proto_output}" - mkdir -p "${proto_output}" - - # Apply desired preprocessing to the input proto file. For this to work, we - # must maintain the name of the original .proto file or else the generated - # classes in the JAR file would have an invalid name. - local processed_dir="${OUTPUT}.preprocessed" - rm -rf "${processed_dir}" - mkdir -p "${processed_dir}" - local processed_source="${processed_dir}/$(basename "${SOURCE}")" - "${PREPROCESSOR}" <"${SOURCE}" >"${processed_source}" \ - || err "Preprocessor ${PREPROCESSOR} 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}" . \ - || err "jar failed" - mv "${OUTPUT}.tmp" "${OUTPUT}" -} - -main "${@}" diff --git a/tools/build_rules/utilities.bzl b/tools/build_rules/utilities.bzl new file mode 100644 index 0000000000..5574c63187 --- /dev/null +++ b/tools/build_rules/utilities.bzl @@ -0,0 +1,38 @@ +# Copyright 2017 Google Inc. All Rights Reserved. +# Copyright 2017 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""This rule exposes the source jar of a java_*_library rule as a label.""" + +def _java_library_srcs_impl(ctx): + if len(ctx.attr.deps) != 1: + fail("Only one deps value supported", "deps") + dep = ctx.attr.deps[0] + return [DefaultInfo(files=depset(dep.java.source_jars))] + + +_java_library_srcs = rule( + implementation=_java_library_srcs_impl, + attrs={ + "deps": + attr.label_list( + mandatory=True, + non_empty=True, + providers=["java"],) + }) + + +def java_library_srcs(name, deps, visibility=None, **kwargs): + """Provides the source jars generated by a java_*_library rule.""" + _java_library_srcs(name=name, deps=deps, visibility=visibility, **kwargs) |