Separate java_tools into platform independent and prebuilt part.
java_tools is repository package containing tools needed during Java compilation: JavaBuilder, patches for Java compiler, ijar, singlejar, ...
Most of the files are jars with Java classes. java_tools are released for three platforms: linux, windows and darwin, however the only difference is in two binaries: ijar and singlejar.
This is part one of splitting java_tools and releasing split version (following PR makes use of released split version in Bazel)
Java_tools used to be released for multiple Java versions, but all the releases were the same except a some string substitutions in BUILD file. I changed to build only a single version, since it already supports Java from 8 to 14.
Changes:
- BUILD.java_tools is split into BUILD.java_tools_prebuilt (where the second contains prebuilt binaries)
- toolchain definitions are removed from BUILD.java_tools and will be added to tools/jdk/BUILD in the second part
- java_toolchain_default.bzl.java_tools is removed (default_java_toolchain.bzl will be updated with its features in the second part).
- src/BUILD: JAVA_VERSION is removed, targets used to build java_tools.zip are duplicated to build java_tools_prebuilt.zip (done some cleanup as well)
- upload_all_java_tools.sh and upload_java_tools.sh: used by Build kite, I removed java_version over the release, but kept it over tests (for different JDKs)
- create_java_tools_release.sh: used by the user in the release process - added platform independent part
- tests are updated to use platform independent and platform files, some tests had to be disabled and will be reenabled after the release
Closes #12546.
PiperOrigin-RevId: 344319092
diff --git a/src/BUILD b/src/BUILD
index f00e228..b39dc0d 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -552,6 +552,39 @@
visibility = ["//visibility:public"],
)
+# The java_tools release process produces following zip files:
+# - java_tools_dist.zip: all sources (Java and C++)
+# - java_tools.zip: platform independent part - Java classes (deploy jars) and C++ sources
+# - java_tools_prebuilt.zip: C++ binaries (for platforms: Linux, Darwin and Windows)
+#
+# The files are then used in Bazel as @remote_java_tools and @remote_java_tools_{platform}
+# repositories.
+# The zip files are not embedded or used in Bazel.
+
+# Following target build java_tools_dist.zip - the sources
+genrule(
+ name = "java_tools_dist",
+ srcs = [
+ "//src/java_tools/buildjar:srcs",
+ "//src/java_tools/junitrunner:srcs",
+ "//src/java_tools/singlejar:srcs",
+ "//src/tools/singlejar:embedded_java_tools",
+ "//third_party/checker_framework_dataflow:srcs",
+ "//third_party/checker_framework_javacutil:srcs",
+ "//third_party/ijar:transitive_sources",
+ "//third_party/java/jacoco:transitive_sources",
+ "//third_party/java/proguard:srcs",
+ "@java_tools_langtools_javac11//:srcs",
+ ],
+ outs = ["java_tools_dist.zip"],
+ cmd = "zip -qXr $@ $$(echo $(SRCS) | sort)",
+ output_to_bindir = 1,
+ visibility = ["//src/test/shell/bazel:__pkg__"],
+)
+
+# 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",
@@ -559,174 +592,139 @@
"//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine:turbine_direct_binary_deploy.jar",
"//src/java_tools/junitrunner/java/com/google/testing/coverage:JacocoCoverage_jarjar_deploy.jar",
"//src/java_tools/junitrunner/java/com/google/testing/junit/runner:Runner_deploy.jar",
-] + select({
- "//src/conditions:arm": ["//src/java_tools/singlejar/java/com/google/devtools/build/singlejar:bazel-singlejar_deploy.jar"],
- "//conditions:default": [],
-})
-
-JAVA_VERSIONS = ("11",)
-
-[
- genrule(
- name = "jars_java_tools_java" + java_version + "_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_java" + java_version + ".zip"],
- cmd = "zip -qjX $@ $$(echo $(SRCS) | sort)",
- visibility = ["//visibility:private"],
- )
- for java_version in JAVA_VERSIONS
+ "//src/java_tools/singlejar/java/com/google/devtools/build/singlejar:bazel-singlejar_deploy.jar",
]
-[
- genrule(
- name = "java_tools_dist_java" + java_version,
- srcs = [
- "//src/java_tools/buildjar:srcs",
- "//src/java_tools/junitrunner:srcs",
- "//src/java_tools/singlejar:srcs",
- "//src/tools/singlejar:embedded_java_tools",
- "//third_party/checker_framework_dataflow:srcs",
- "//third_party/checker_framework_javacutil:srcs",
- "//third_party/ijar:transitive_sources",
- "//third_party/java/jacoco:transitive_sources",
- "//third_party/java/proguard:srcs",
- "@java_tools_langtools_javac11//:srcs",
- ],
- outs = ["java_tools_dist_javac" + java_version + ".zip"],
- cmd = "zip -qXr $@ $$(echo $(SRCS) | sort)",
- output_to_bindir = 1,
- visibility = ["//src/test/shell/bazel:__pkg__"],
- )
- for java_version in JAVA_VERSIONS
-]
+genrule(
+ 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)",
+ visibility = ["//visibility:private"],
+)
-[
- # Targets used by the java_tools_binaries Buildkite pipeline to build the
- # java_tools_dist_java* zips and upload them to a tmp directory in GCS.
- sh_binary(
- name = "upload_java_tools_dist_java" + java_version,
- srcs = ["upload_java_tools.sh"],
- args = [
- "--java_tools_zip",
- "src/java_tools_dist_javac" + java_version + ".zip",
- "--gcs_java_tools_dir",
- "tmp/sources",
- "--java_version",
- java_version,
- "--platform",
- ] + select({
- "//src/conditions:darwin": ["darwin"],
- "//src/conditions:windows": ["windows"],
- "//src/conditions:linux": ["linux"],
- "//conditions:default": ["unknown"],
- }),
- data = [":java_tools_dist_java" + java_version],
- deps = ["@bazel_tools//tools/bash/runfiles"],
- )
- for java_version in JAVA_VERSIONS
-]
+genrule(
+ name = "java_tools_build_zip",
+ srcs = ["//tools/jdk:BUILD.java_tools"],
+ outs = ["java_tools_build.zip"],
+ cmd = "cat $(SRCS) > BUILD; zip -qjX $@ BUILD",
+)
-[
- # The java_tools releases can have BUILD files that vary depending on the
- # javac version they embed. Currently the only difference is in the
- # java_toolchain source version which has to be 14 for javac 14 to be able
- # to build new Java 14 features. This is not used atm, as the toolchain for
- # javac 14 was duplicated, but it might be used in future Bazel releases to
- # support new javac release, so that we preserve this step for now.
- [
- genrule(
- name = "create_java_tools_build_java" + java_version,
- srcs = ["//tools/jdk:BUILD.java_tools"],
- outs = ["remote_java_tools_java" + java_version + "/BUILD"],
- cmd = "sed 's/JAVA_LANGUAGE_LEVEL/" + java_version + "/g' $< > $@",
- ),
- genrule(
- name = "create_java_tools_default_java" + java_version,
- srcs = ["//tools/jdk:java_toolchain_default.bzl.java_tools"],
- outs = ["remote_java_tools_java" + java_version + "/java_toolchain_default.bzl"],
- cmd = "cp $< $@",
- ),
- ]
- for java_version in JAVA_VERSIONS
-]
+genrule(
+ name = "java_tools_no_build_zip",
+ srcs = [
+ ":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_java" + java_version + "_build_zip",
- srcs = [
- "remote_java_tools_java" + java_version + "/BUILD",
- "remote_java_tools_java" + java_version + "/java_toolchain_default.bzl",
- ],
- outs = ["java_tools_java_" + java_version + "_build.zip"],
- cmd = "zip -qjX $@ $(SRCS)",
- )
- for java_version in JAVA_VERSIONS
-]
+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"],
+ visibility = ["//src/test/shell/bazel:__pkg__"],
+)
-# Builds the remote Java tools archive. Not embedded or used in Bazel, but used
-# by the Java tools release process.
-[
- genrule(
- name = "java_tools_java" + java_version + "_no_build_zip",
- srcs = [
- ":jars_java_tools_java" + java_version + ".zip",
- "//src/tools/singlejar:singlejar_transitive_zip",
- "//third_party/ijar:ijar_transitive_zip",
- "//third_party/java/jacoco:jacoco_jars_zip",
- "//third_party/java/proguard:proguard_zip",
- ],
- outs = ["java_tools_java" + java_version + "_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__"],
- )
- for java_version in JAVA_VERSIONS
-]
+# 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_java" + java_version + "_zip",
- srcs = [
- "java_tools_java" + java_version + "_no_build.zip",
- "java_tools_java_" + java_version + "_build.zip",
- ],
- outs = ["java_tools_java" + java_version + ".zip"],
- cmd = "$(location //src:merge_zip_files) - $@ $(SRCS)",
- output_to_bindir = 1,
- tools = ["//src:merge_zip_files"],
- visibility = ["//src/test/shell/bazel:__pkg__"],
- )
- for java_version in JAVA_VERSIONS
-]
+genrule(
+ name = "java_tools_prebuilt_no_build_zip",
+ srcs = [
+ "//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__"],
+)
-[
- # Targets used by the java_tools_binaries Buildkite pipeline to build the
- # java_tools_java* zips and upload them to a tmp directory in GCS.
- sh_binary(
- name = "upload_java_tools_java" + java_version,
- srcs = ["upload_java_tools.sh"],
- args = [
- "--gcs_java_tools_dir",
- "tmp/build",
- "--java_version",
- java_version,
- "--platform",
- ] + select({
- "//src/conditions:darwin": ["darwin"],
- "//src/conditions:windows": ["windows"],
- "//src/conditions:linux": ["linux"],
- "//conditions:default": ["unknown"],
- }),
- data = [":java_tools_java" + java_version + "_zip"],
- deps = ["@bazel_tools//tools/bash/runfiles"],
- )
- for java_version in JAVA_VERSIONS
-]
+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
+# the java_tools_*.zip to either tmp/sources or tmp/build directories in GCS.
+sh_binary(
+ name = "upload_java_tools_dist",
+ srcs = ["upload_java_tools.sh"],
+ args = [
+ "--java_tools_zip",
+ "src/java_tools_dist.zip",
+ "--gcs_java_tools_dir",
+ "tmp/sources",
+ ],
+ data = [":java_tools_dist"],
+ deps = ["@bazel_tools//tools/bash/runfiles"],
+)
+
+sh_binary(
+ name = "upload_java_tools",
+ srcs = ["upload_java_tools.sh"],
+ args = [
+ "--java_tools_zip",
+ "src/java_tools.zip",
+ "--gcs_java_tools_dir",
+ "tmp/build",
+ ],
+ data = [":java_tools_zip"],
+ deps = ["@bazel_tools//tools/bash/runfiles"],
+)
+
+sh_binary(
+ name = "upload_java_tools_prebuilt",
+ srcs = ["upload_java_tools.sh"],
+ args = [
+ "--java_tools_zip",
+ "src/java_tools_prebuilt.zip",
+ "--gcs_java_tools_dir",
+ "tmp/build",
+ "--platform",
+ ] + select({
+ "//src/conditions:darwin": ["darwin"],
+ "//src/conditions:windows": ["windows"],
+ "//src/conditions:linux": ["linux"],
+ "//conditions:default": ["unknown"],
+ }),
+ data = [":java_tools_prebuilt_zip"],
+ deps = ["@bazel_tools//tools/bash/runfiles"],
+)
# Part of the Java tools remote archive. Not embedded or used in Bazel.
genrule(