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 | |
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
-rw-r--r-- | BUILD | 6 | ||||
-rw-r--r-- | src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD | 7 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/BUILD | 1 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/buildeventstream/proto/BUILD | 15 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/remote/BUILD | 1 | ||||
-rw-r--r-- | src/main/protobuf/BUILD | 42 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/BUILD | 1 | ||||
-rw-r--r-- | src/tools/benchmark/java/com/google/devtools/build/benchmark/BUILD | 13 | ||||
-rw-r--r-- | src/tools/benchmark/javatests/com/google/devtools/build/benchmark/BUILD | 4 | ||||
-rw-r--r-- | src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD | 1 | ||||
-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 |
13 files changed, 98 insertions, 206 deletions
@@ -50,6 +50,12 @@ filegroup( visibility = ["//visibility:private"], ) +filegroup( + name = "bootstrap-derived-java-srcs", + srcs = glob(["derived/**/*.java"]), + visibility = ["//:__subpackages__"], +) + load("//tools/build_defs/pkg:pkg.bzl", "pkg_tar") pkg_tar( diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD index ec99b7aece..173e827dc7 100644 --- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD +++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD @@ -128,19 +128,16 @@ load("//tools/build_rules:java_rules_skylark.bzl", "bootstrap_java_library", "bo bootstrap_java_library( name = "skylark-deps", + srcs = ["//:bootstrap-derived-java-srcs"], jars = [ "//third_party:auto_value-jars", "//third_party:bootstrap_guava_and_error_prone-jars", "//third_party:jsr305-jars", "//third_party/protobuf:protobuf-jars", "//third_party/java/jacoco:core-jars", + "//third_party/grpc:bootstrap-grpc-jars", ], neverlink_jars = ["//third_party/java/jdk/langtools:javac_jar"], - srcjars = [ - "//src/main/protobuf:deps_java_proto_srcjar", - "//src/main/protobuf:worker_protocol_java_proto_srcjar", - "//src/main/protobuf:java_compilation_java_proto_srcjar", - ], ) bootstrap_java_library( diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 8bf2d1af7b..610486e186 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -1159,6 +1159,7 @@ java_library( "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", "//src/main/java/com/google/devtools/common/options", "//src/main/protobuf:build_java_proto", + "//src/main/protobuf:command_server_java_grpc", "//src/main/protobuf:command_server_java_proto", "//src/main/protobuf:invocation_policy_java_proto", "//src/main/protobuf:test_status_java_proto", diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/BUILD b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/BUILD index 09c10cb3c0..efff5df2bf 100644 --- a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/BUILD +++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/BUILD @@ -1,18 +1,23 @@ package(default_visibility = ["//src:__subpackages__"]) -load("//tools/build_rules:genproto.bzl", "java_proto_library") +load("//tools/build_rules:utilities.bzl", "java_library_srcs") filegroup( name = "srcs", srcs = glob(["**"]), ) +java_library_srcs( + name = "dist_jars", + deps = [":build_event_stream_java_proto"], +) + java_proto_library( name = "build_event_stream_java_proto", - src = "build_event_stream.proto", + deps = ["build_event_stream_proto"], ) -filegroup( - name = "dist_jars", - srcs = ["build_event_stream_java_proto_srcjar"], +proto_library( + name = "build_event_stream_proto", + srcs = ["build_event_stream.proto"], ) diff --git a/src/main/java/com/google/devtools/build/lib/remote/BUILD b/src/main/java/com/google/devtools/build/lib/remote/BUILD index bfc9c39269..3a3c304d1e 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/BUILD +++ b/src/main/java/com/google/devtools/build/lib/remote/BUILD @@ -23,6 +23,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/standalone", "//src/main/java/com/google/devtools/common/options", + "//src/main/protobuf:remote_protocol_java_grpc", "//src/main/protobuf:remote_protocol_java_proto", "//third_party:apache_httpclient", "//third_party:apache_httpcore", diff --git a/src/main/protobuf/BUILD b/src/main/protobuf/BUILD index 55925685b9..96a9394a04 100644 --- a/src/main/protobuf/BUILD +++ b/src/main/protobuf/BUILD @@ -1,7 +1,9 @@ package(default_visibility = ["//visibility:public"]) -load("//tools/build_rules:genproto.bzl", "java_proto_library", "cc_grpc_library") +load("//tools/build_rules:genproto.bzl", "cc_grpc_library") +load("//tools/build_rules:utilities.bzl", "java_library_srcs") load("//third_party/protobuf/3.2.0:protobuf.bzl", "cc_proto_library", "py_proto_library") +load("//third_party/grpc:build_defs.bzl", "java_grpc_library") FILES = [ "build", @@ -19,11 +21,23 @@ FILES = [ "invocation_policy", "android_deploy_info", "apk_manifest", + "command_server", + "remote_protocol", ] +[proto_library( + name = s + "_proto", + srcs = [s + ".proto"], +) for s in FILES] + [java_proto_library( name = s + "_java_proto", - src = s + ".proto", + deps = [":" + s + "_proto"], +) for s in FILES] + +[java_library_srcs( + name = s + "_java_proto_srcs", + deps = [":" + s + "_java_proto"], ) for s in FILES] cc_proto_library( @@ -34,10 +48,10 @@ cc_proto_library( protoc = "//third_party/protobuf:protoc", ) -java_proto_library( - name = "command_server_java_proto", - src = "command_server.proto", - use_grpc_plugin = True, +java_grpc_library( + name = "command_server_java_grpc", + srcs = [":command_server_proto"], + deps = [":command_server_java_proto"], ) cc_grpc_library( @@ -46,10 +60,10 @@ cc_grpc_library( ) # TODO(olaola): add Golang support. -java_proto_library( - name = "remote_protocol_java_proto", - src = "remote_protocol.proto", - use_grpc_plugin = True, +java_grpc_library( + name = "remote_protocol_java_grpc", + srcs = [":remote_protocol_proto"], + deps = [":remote_protocol_java_proto"], ) py_proto_library( @@ -66,8 +80,8 @@ filegroup( filegroup( name = "dist_jars", - srcs = [ - "command_server_java_proto_srcjar", - "remote_protocol_java_proto_srcjar", - ] + [s + "_java_proto_srcjar" for s in FILES], + srcs = [s + "_java_proto_srcs" for s in FILES] + [ + ":command_server_java_grpc_srcs", + ":remote_protocol_java_grpc_srcs", + ], ) diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index 20a98908e9..d25a712dc0 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD @@ -1067,6 +1067,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/remote", "//src/main/java/com/google/devtools/common/options", + "//src/main/protobuf:remote_protocol_java_grpc", "//src/main/protobuf:remote_protocol_java_proto", "//third_party:api_client", "//third_party:guava", diff --git a/src/tools/benchmark/java/com/google/devtools/build/benchmark/BUILD b/src/tools/benchmark/java/com/google/devtools/build/benchmark/BUILD index d7e36607ac..b44c70fddc 100644 --- a/src/tools/benchmark/java/com/google/devtools/build/benchmark/BUILD +++ b/src/tools/benchmark/java/com/google/devtools/build/benchmark/BUILD @@ -1,10 +1,13 @@ package(default_visibility = ["//src/tools/benchmark:__subpackages__"]) -load("//tools/build_rules:genproto.bzl", "java_proto_library") - java_proto_library( + name = "build_data_java_proto", + deps = [":build_data_proto"], +) + +proto_library( name = "build_data_proto", - src = "build_data.proto", + srcs = ["build_data.proto"], ) java_binary( @@ -12,7 +15,7 @@ java_binary( srcs = glob(["*.java"]), main_class = "com.google.devtools.build.benchmark.Main", deps = [ - ":build_data_proto", + ":build_data_java_proto", "//src/main/java/com/google/devtools/build/lib:shell", "//src/main/java/com/google/devtools/build/lib:vfs", "//src/main/java/com/google/devtools/common/options", @@ -29,7 +32,7 @@ java_library( testonly = 1, srcs = glob(["*.java"]), deps = [ - ":build_data_proto", + ":build_data_java_proto", "//src/main/java/com/google/devtools/build/lib:shell", "//src/main/java/com/google/devtools/build/lib:vfs", "//src/main/java/com/google/devtools/common/options", diff --git a/src/tools/benchmark/javatests/com/google/devtools/build/benchmark/BUILD b/src/tools/benchmark/javatests/com/google/devtools/build/benchmark/BUILD index e21ae66efb..6376124fd6 100644 --- a/src/tools/benchmark/javatests/com/google/devtools/build/benchmark/BUILD +++ b/src/tools/benchmark/javatests/com/google/devtools/build/benchmark/BUILD @@ -16,7 +16,7 @@ java_test( srcs = ["BazelBuildCaseTest.java"], deps = [ "//src/tools/benchmark/java/com/google/devtools/build/benchmark:benchmark_lib", - "//src/tools/benchmark/java/com/google/devtools/build/benchmark:build_data_proto", + "//src/tools/benchmark/java/com/google/devtools/build/benchmark:build_data_java_proto", "//third_party:guava", "//third_party:junit4", "//third_party:truth", @@ -29,7 +29,7 @@ java_test( deps = [ "//src/main/java/com/google/devtools/build/lib:shell", "//src/tools/benchmark/java/com/google/devtools/build/benchmark:benchmark_lib", - "//src/tools/benchmark/java/com/google/devtools/build/benchmark:build_data_proto", + "//src/tools/benchmark/java/com/google/devtools/build/benchmark:build_data_java_proto", "//third_party:guava", "//third_party:junit4", "//third_party:truth", diff --git a/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD b/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD index fa0198c35f..a91e5e5d73 100644 --- a/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD +++ b/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD @@ -25,6 +25,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib:vfs", "//src/main/java/com/google/devtools/build/lib/remote", "//src/main/java/com/google/devtools/common/options", + "//src/main/protobuf:remote_protocol_java_grpc", "//src/main/protobuf:remote_protocol_java_proto", "//third_party:guava", "//third_party:hazelcast", 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) |