Add support for toolchain java 14
Closes #11017.
Test Plan:
1. Create java_tools from this commit:
```bash
$ bazel build src:java_tools_java14.zip
```
2. Switch to using the java_tools from the above step in WORKSPACE file:
```python
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "remote_java_tools_linux",
urls = [
"file:///<path to the java_tools_java14.zip>",
],
)
```
3. Add Zulu OpenJDK14 to use as javabase in WORKSPACE file:
```python
http_archive(
name = "openjdk14_linux_archive",
build_file_content = """
java_runtime(name = 'runtime', srcs = glob(['**']), visibility = ['//visibility:public'])
exports_files(["WORKSPACE"], visibility = ["//visibility:public"])
""",
sha256 = "48bb8947034cd079ad1ef83335e7634db4b12a26743a0dc314b6b861480777aa",
strip_prefix = "zulu14.28.21-ca-jdk14.0.1-linux_x64",
urls = ["https://cdn.azul.com/zulu/bin/zulu14.28.21-ca-jdk14.0.1-linux_x64.tar.gz"],
)
```
4. Activate custom java toolchain and javabase in .bazelrc file:
```bash
build --java_toolchain=@remote_java_tools_linux//:toolchain_jdk_14
build --host_java_toolchain=@remote_java_tools_linux//:toolchain_jdk_14
build --javabase=@openjdk14_linux_archive//:runtime
build --host_javabase=@openjdk14_linux_archive//:runtime
```
5. Create Java 14 example class file:
```java
public class Javac14Example {
record Point(int x, int y) {}
public static void main(String[] args) {
Point point = new Point(0, 1);
System.out.println(point.x);
}
}
```
6. Add Bazel file to build Java 14 syntax class with activated preview
features:
```python
java_binary(
name = "Javac14Example",
srcs = ["Javac14Example.java"],
javacopts = ["--enable-preview"],
jvm_flags = ["--enable-preview"],
main_class = "Javac14Example",
)
```
7. Test that it works as expected:
```
$ bazel run java:Javac14Example
INFO: Analyzed target //java:Javac14Example (1 packages loaded, 2 targets configured).
INFO: Found 1 target...
INFO: From Building java/Javac14Example.jar (1 source file):
Note: java/Javac14Example.java uses preview language features.
Note: Recompile with -Xlint:preview for details.
Target //java:Javac14Example up-to-date:
bazel-bin/java/Javac14Example.jar
bazel-bin/java/Javac14Example
INFO: Elapsed time: 1.502s, Critical Path: 1.30s
INFO: 1 process: 1 worker.
INFO: Build completed successfully, 2 total actions
INFO: Build completed successfully, 2 total actions
0
```
Closes #11514.
PiperOrigin-RevId: 322759522
diff --git a/src/BUILD b/src/BUILD
index 2b9f3cc..204dc18 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -567,15 +567,17 @@
"//conditions:default": [],
})
-JAVA_VERSIONS = ("11",)
+JAVA_VERSIONS = ("11", "14")
+
+# TODO(davido): Hard code the javac 11 for now; it is required for default toolchain.
[
genrule(
name = "jars_java_tools_java" + java_version + "_zip",
srcs = JAVA_TOOLS_DEPLOY_JARS + [
- "@java_tools_langtools_javac" + java_version + "//:jdk_compiler_jar",
- "@java_tools_langtools_javac" + java_version + "//:java_compiler_jar",
- "@java_tools_langtools_javac" + java_version + "//:javac_jar",
+ "@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)",
@@ -598,7 +600,7 @@
"//third_party/ijar:transitive_sources",
"//third_party/java/jacoco:transitive_sources",
"//third_party/java/proguard:srcs",
- "@java_tools_langtools_javac" + java_version + "//:srcs",
+ "@java_tools_langtools_javac11//:srcs",
],
outs = ["java_tools_dist_javac" + java_version + ".zip"],
cmd = "zip -qXr $@ $$(echo $(SRCS) | sort)",
@@ -638,8 +640,10 @@
[
# 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 12 for javac 12 to be able
- # to build new Java 12 features.
+ # 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"],
@@ -744,6 +748,9 @@
"@openjdk11_darwin_archive//:WORKSPACE",
"@openjdk11_linux_archive//:WORKSPACE",
"@openjdk11_windows_archive//:WORKSPACE",
+ "@openjdk14_darwin_archive//:WORKSPACE",
+ "@openjdk14_linux_archive//:WORKSPACE",
+ "@openjdk14_windows_archive//:WORKSPACE",
"@openjdk_linux_aarch64_minimal//file",
"@openjdk_linux_minimal//file",
"@openjdk_macos_minimal//file",
@@ -760,6 +767,9 @@
"@remotejdk11_linux_ppc64le_for_testing//:WORKSPACE",
"@remotejdk11_macos_for_testing//:WORKSPACE",
"@remotejdk11_win_for_testing//:WORKSPACE",
+ "@remotejdk14_linux_for_testing//:WORKSPACE",
+ "@remotejdk14_macos_for_testing//:WORKSPACE",
+ "@remotejdk14_win_for_testing//:WORKSPACE",
"@rules_cc//:WORKSPACE",
"@rules_java//:WORKSPACE",
"@rules_pkg//:WORKSPACE",