From 6e68d116dd6f5cd6e4e6146335f86b967a6e0c69 Mon Sep 17 00:00:00 2001 From: Ivo List Date: Thu, 3 Dec 2020 09:39:05 +0000 Subject: [PATCH 1/8] Use release_archive to create java_tools' zips. --- src/BUILD | 87 +++++++---------------------- src/main/cpp/util/BUILD | 20 +++---- src/main/native/windows/BUILD | 7 +-- src/release_archive.bzl | 98 +++++++++++++++++++++++++++++++++ src/tools/singlejar/BUILD | 23 +++----- third_party/ijar/BUILD | 24 ++++---- third_party/java/jacoco/BUILD | 9 ++- third_party/java/proguard/BUILD | 8 +-- 8 files changed, 155 insertions(+), 121 deletions(-) create mode 100644 src/release_archive.bzl diff --git a/src/BUILD b/src/BUILD index 8da89dea40b6a7..4fc7553673362a 100644 --- a/src/BUILD +++ b/src/BUILD @@ -3,6 +3,7 @@ load("//tools/python:private/defs.bzl", "py_binary", "py_library") load(":embedded_tools.bzl", "srcsfile") load(":rule_size_test.bzl", "rule_size_test") +load("//src:release_archive.bzl", "release_archive") exports_files(["jdeps_modules.golden"]) @@ -583,8 +584,6 @@ genrule( ) # Following targets build java_tools.zip - platform independent part of java_tools -# It is painstainkingly built by renaming single files, zipping them and merging zips together -# TODO(bazel-team): Replace this with a single target, for example "release_archive" in rules_kotlin JAVA_TOOLS_DEPLOY_JARS = [ "//src/java_tools/buildjar:JavaBuilder_deploy.jar", "//src/java_tools/buildjar:VanillaJavaBuilder_deploy.jar", @@ -595,88 +594,42 @@ JAVA_TOOLS_DEPLOY_JARS = [ "//src/java_tools/singlejar/java/com/google/devtools/build/singlejar:bazel-singlejar_deploy.jar", ] -genrule( +release_archive( name = "jars_java_tools_zip", srcs = JAVA_TOOLS_DEPLOY_JARS + [ "@java_tools_langtools_javac11//:jdk_compiler_jar", "@java_tools_langtools_javac11//:java_compiler_jar", "@java_tools_langtools_javac11//:javac_jar", ], - outs = ["jars_java_tools.zip"], - cmd = "zip -qjX $@ $$(echo $(SRCS) | sort)", + package_dir = "java_tools", visibility = ["//visibility:private"], ) -genrule( - name = "java_tools_build_zip", - srcs = ["//tools/jdk:BUILD.java_tools"], - outs = ["java_tools_build.zip"], - cmd = "cat $(SRCS) > BUILD; zip -qjX $@ BUILD", -) - -genrule( - name = "java_tools_no_build_zip", - srcs = [ - ":jars_java_tools.zip", +release_archive( + name = "java_tools_zip", + src_map = { + "//tools/jdk:BUILD.java_tools": "BUILD", + }, + deps = [ + ":jars_java_tools_zip", "//src/tools/singlejar:singlejar_transitive_zip", "//third_party/ijar:ijar_transitive_srcs_zip", "//third_party/java/jacoco:jacoco_jars_zip", "//third_party/java/proguard:proguard_zip", ], - outs = ["java_tools_no_build.zip"], - cmd = "$(location //src:merge_zip_files) java_tools $@ $(SRCS)", - output_to_bindir = 1, - tools = ["//src:merge_zip_files"], - visibility = ["//src/test/shell/bazel:__pkg__"], ) -genrule( - name = "java_tools_zip", - srcs = [ - "java_tools_no_build.zip", - "java_tools_build.zip", - ], - outs = ["java_tools.zip"], - cmd = "$(location //src:merge_zip_files) - $@ $(SRCS)", - output_to_bindir = 1, - tools = ["//src:merge_zip_files"], +# Following target builds java_tools_prebuilt.zip part of java_tools +release_archive( + name = "java_tools_prebuilt_zip", + src_map = { + "//tools/jdk:BUILD.java_tools_prebuilt": "BUILD", + }, visibility = ["//src/test/shell/bazel:__pkg__"], -) - -# Following targets build java_tools_prebuilt.zip part of java_tools -# It is painstainkingly built by renaming single files, zipping them and merging zips together -# TODO(bazel-team): Replace this with a single target, for example "release_archive" in rules_kotlin -genrule( - name = "java_tools_prebuilt_build_zip", - srcs = ["//tools/jdk:BUILD.java_tools_prebuilt"], - outs = ["java_tools_prebuilt_build.zip"], - cmd = "cat $(SRCS) > BUILD; zip -qjX $@ BUILD", -) - -genrule( - name = "java_tools_prebuilt_no_build_zip", - srcs = [ + deps = [ "//src/tools/singlejar:singlejar_deploy_zip", "//third_party/ijar:ijar_deploy_zip", ], - outs = ["java_tools_prebuilt_no_build.zip"], - cmd = "$(location //src:merge_zip_files) java_tools $@ $(SRCS)", - output_to_bindir = True, - tools = ["//src:merge_zip_files"], - visibility = ["//src/test/shell/bazel:__pkg__"], -) - -genrule( - name = "java_tools_prebuilt_zip", - srcs = [ - "java_tools_prebuilt_no_build.zip", - "java_tools_prebuilt_build.zip", - ], - outs = ["java_tools_prebuilt.zip"], - cmd = "$(location //src:merge_zip_files) - $@ $(SRCS)", - output_to_bindir = 1, - tools = ["//src:merge_zip_files"], - visibility = ["//src/test/shell/bazel:__pkg__"], ) # Following targets used by the java_tools_binaries Buildkite pipeline to upload @@ -727,12 +680,10 @@ sh_binary( ) # Part of the Java tools remote archive. Not embedded or used in Bazel. -genrule( +release_archive( name = "zlib_zip", srcs = ["//third_party/zlib:embedded_tools"], - outs = ["zlib.zip"], - cmd = "$(location //src:zip_files) zlib $@ $(SRCS)", - tools = ["//src:zip_files"], + package_dir = "zlib", visibility = [ "//src/tools/singlejar:__pkg__", "//third_party/ijar:__pkg__", diff --git a/src/main/cpp/util/BUILD b/src/main/cpp/util/BUILD index 5a9c53c4135626..414ec963423a96 100644 --- a/src/main/cpp/util/BUILD +++ b/src/main/cpp/util/BUILD @@ -8,6 +8,7 @@ package_group( ) load("@rules_cc//cc:defs.bzl", "cc_library") +load("//src:release_archive.bzl", "release_archive") cc_library( name = "util", @@ -177,26 +178,21 @@ filegroup( ) # A zip containing source files used by ijar. -genrule( +release_archive( name = "cpp_util_with_deps_zip", - srcs = [ - ":cpp_util_zip", - "//src/main/native/windows:native_windows_zip", - ], - outs = ["cpp_util_with_deps.zip"], - cmd = "$(location //src:merge_zip_files) - $@ $(SRCS)", - tools = ["//src:merge_zip_files"], visibility = [ "//src/tools/singlejar:__pkg__", "//third_party/ijar:__pkg__", ], + deps = [ + ":cpp_util_zip", + "//src/main/native/windows:native_windows_zip", + ], ) -genrule( +release_archive( name = "cpp_util_zip", srcs = glob(["*.cc"]) + glob(["*.h"]), - outs = ["cpp_util.zip"], - cmd = "$(location //src:zip_files) src/main/cpp/util $@ $(SRCS)", - tools = ["//src:zip_files"], + package_dir = "src/main/cpp/util", visibility = ["//visibility:private"], ) diff --git a/src/main/native/windows/BUILD b/src/main/native/windows/BUILD index cc90b561b968c2..a53c13f5a28a7c 100644 --- a/src/main/native/windows/BUILD +++ b/src/main/native/windows/BUILD @@ -1,4 +1,5 @@ load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") +load("//src:release_archive.bzl", "release_archive") filegroup( name = "srcs", @@ -85,11 +86,9 @@ filegroup( ) # A zip containing source files used by ijar. -genrule( +release_archive( name = "native_windows_zip", srcs = [":embedded_java_tools"], - outs = ["native_windows.zip"], - cmd = "$(location //src:zip_files) src/main/native/windows $@ $(SRCS)", - tools = ["//src:zip_files"], + package_dir = "src/main/native/windows", visibility = ["//src/main/cpp/util:__pkg__"], ) diff --git a/src/release_archive.bzl b/src/release_archive.bzl new file mode 100644 index 00000000000000..dfab9c081e0d16 --- /dev/null +++ b/src/release_archive.bzl @@ -0,0 +1,98 @@ +# Copyright 2020 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. + +def release_archive(name, srcs = [], src_map = {}, package_dir = "-", deps = [], visibility = []): + """ + Creates an zip of the srcs, and renamed label artifacts. + Usage: + //:BUILD + load("//src:release_archive.bzl", "release_archive") + release_archive( + name = "release_archive", + src_map = { + "BUILD.release.bazel.bazel": "BUILD.bazel", + "WORKSPACE.release.bazel": "WORKSPACE", + }, + deps = [ + "//dep:pkg" + ], + ) + //dep:BUILD + load("//src:release_archive.bzl", "release_archive") + release_archive( + name = "pkg", + srcs = [ + ":label_of_artifact", + ], + ) + Args: + name: target identifier, points to a pkg_tar target. + package_dir: directory to place the srcs, src_map, and dist_files under. Defaults to the current directory. + dist_files: dict of : for files to be generated in the distribution artifact. + src_map: dict of