From 1f61c16799e37ee2b43d4de727364c3faa560756 Mon Sep 17 00:00:00 2001 From: Liam Miller-Cushon Date: Fri, 24 Aug 2018 16:31:18 -0700 Subject: [PATCH] Stop using --release in versioned java_toolchains Using --release to target versions that support modules and are not the latest supported version (e.g. --release 9 on JDK 10) doesn't work: https://bugs.openjdk.java.net/browse/JDK-8209865 Related: #5723 --- src/java_tools/buildjar/BUILD | 2 +- tools/android/BUILD.tools | 8 ++-- tools/jdk/BUILD | 57 +++++++++++++--------------- tools/jdk/DumpPlatformClassPath.java | 28 ++++++++++---- 4 files changed, 53 insertions(+), 42 deletions(-) diff --git a/src/java_tools/buildjar/BUILD b/src/java_tools/buildjar/BUILD index 2626c515bdec26..0f40201487d770 100644 --- a/src/java_tools/buildjar/BUILD +++ b/src/java_tools/buildjar/BUILD @@ -77,7 +77,7 @@ java_toolchain( # class path after -bootclasspath. For convenience, we currently have a # single jar that contains the contents of both the bootclasspath and # extdirs. - bootclasspath = ["//tools/jdk:platformclasspath.jar"], + bootclasspath = ["//tools/jdk:platformclasspath8.jar"], extclasspath = [], genclass = ["bootstrap_genclass_deploy.jar"], ijar = ["//third_party/ijar"], diff --git a/tools/android/BUILD.tools b/tools/android/BUILD.tools index 41961f4a72bc2f..bedb6cd0fe29b1 100644 --- a/tools/android/BUILD.tools +++ b/tools/android/BUILD.tools @@ -100,7 +100,7 @@ gen_java_lang_extras_jar_cmd = """ $(location %s) \ --exclude_build_data \ --dont_change_compression \ - --sources $(location @bazel_tools//tools/jdk:platformclasspath) \ + --sources $(location @bazel_tools//tools/jdk:platformclasspath8) \ --include_prefixes "java/lang/invoke/" \ --include_prefixes "java/lang/annotation/" \ --output $@ @@ -111,7 +111,7 @@ gen_java_lang_extras_jar_cmd = """ genrule( name = "gen_java_lang_extras_jar", srcs = [ - "@bazel_tools//tools/jdk:platformclasspath" + "@bazel_tools//tools/jdk:platformclasspath8" ], tools = select({ "//src/conditions:windows": [":singlejar_javabin"], @@ -176,7 +176,7 @@ genrule( $(location :desugar_java8) \ --input $< \ --output $@ \ - --classpath_entry "$(location @bazel_tools//tools/jdk:platformclasspath)" \ + --classpath_entry "$(location @bazel_tools//tools/jdk:platformclasspath8)" \ --core_library --allow_empty_bootclasspath \ --nobest_effort_tolerate_missing_deps \ --noemit_dependency_metadata_as_needed \ @@ -213,7 +213,7 @@ genrule( --dont_rewrite_core_library_invocation "java/util/Iterator#remove" """, tools = [ ":desugar_java8", - "@bazel_tools//tools/jdk:platformclasspath", + "@bazel_tools//tools/jdk:platformclasspath8", ], visibility = ["//visibility:private"], ) diff --git a/tools/jdk/BUILD b/tools/jdk/BUILD index 04eaee33d4cade..a836a35a314a0d 100644 --- a/tools/jdk/BUILD +++ b/tools/jdk/BUILD @@ -181,11 +181,14 @@ alias( actual = "@embedded_jdk//:jdk", ) -genrule( - name = "platformclasspath", - srcs = ["DumpPlatformClassPath.java"], - outs = ["platformclasspath.jar"], - cmd = """ +RELEASES = (8, 9, 10) + +[ + genrule( + name = "platformclasspath%d" % release, + srcs = ["DumpPlatformClassPath.java"], + outs = ["platformclasspath%d.jar" % release], + cmd = """ set -eu TMPDIR=$$(mktemp -d -t tmp.XXXXXXXX) $(JAVABASE)/bin/javac -source 8 -target 8 \ @@ -193,16 +196,18 @@ $(JAVABASE)/bin/javac -source 8 -target 8 \ -d $$TMPDIR $< $(JAVA) -XX:+IgnoreUnrecognizedVMOptions \ --add-exports=jdk.compiler/com.sun.tools.javac.platform=ALL-UNNAMED \ - -cp $$TMPDIR DumpPlatformClassPath $@ + -cp $$TMPDIR DumpPlatformClassPath %d $@ rm -rf $$TMPDIR -""", - toolchains = ["@bazel_tools//tools/jdk:current_host_java_runtime"], - tools = ["@bazel_tools//tools/jdk:current_host_java_runtime"], -) +""" % release, + toolchains = ["@bazel_tools//tools/jdk:current_host_java_runtime"], + tools = ["@bazel_tools//tools/jdk:current_host_java_runtime"], + ) + for release in RELEASES +] default_java_toolchain( name = "toolchain_hostjdk8", - bootclasspath = [":platformclasspath"], + bootclasspath = [":platformclasspath8"], forcibly_disable_header_compilation = True, javabuilder = [":vanillajavabuilder"], jvm_opts = [], @@ -210,28 +215,20 @@ default_java_toolchain( target_version = "8", ) -default_java_toolchain( +alias( name = "toolchain", - bootclasspath = [":platformclasspath"], - source_version = "8", - target_version = "8", -) - -default_java_toolchain( - name = "toolchain_java9", - misc = DEFAULT_JAVACOPTS + [ - "--release", - "9", - ], + actual = "toolchain_java8", ) -default_java_toolchain( - name = "toolchain_java10", - misc = DEFAULT_JAVACOPTS + [ - "--release", - "10", - ], -) +[ + default_java_toolchain( + name = "toolchain_java%d" % release, + bootclasspath = [":platformclasspath%d" % release], + source_version = "%s" % release, + target_version = "%s" % release, + ) + for release in RELEASES +] filegroup( name = "srcs", diff --git a/tools/jdk/DumpPlatformClassPath.java b/tools/jdk/DumpPlatformClassPath.java index c81ab5d50ca51a..7c6a5161c51e9f 100644 --- a/tools/jdk/DumpPlatformClassPath.java +++ b/tools/jdk/DumpPlatformClassPath.java @@ -46,18 +46,19 @@ import javax.tools.StandardLocation; /** - * Output a jar file containing all classes on the platform classpath of the current JDK. + * Output a jar file containing all classes on the platform classpath of the given JDK release. * - *

usage: DumpPlatformClassPath + *

usage: DumpPlatformClassPath */ public class DumpPlatformClassPath { public static void main(String[] args) throws Exception { - if (args.length != 1) { - System.err.println("usage: DumpPlatformClassPath "); + if (args.length != 2) { + System.err.println("usage: DumpPlatformClassPath "); System.exit(1); } - Path output = Paths.get(args[0]); + int release = Integer.parseInt(args[0]); + Path output = Paths.get(args[1]); Map entries = new HashMap<>(); @@ -85,13 +86,26 @@ public static void main(String[] args) throws Exception { } } - if (entries.isEmpty()) { + if (!entries.isEmpty()) { + if (release != 8) { + System.err.printf( + "warning: ignoring release %s on --host_javabase=%s\n", + release, System.getProperty("java.version")); + } + } else { // JDK > 8 bootclasspath handling // Set up a compilation with --release 8 to initialize a filemanager Context context = new Context(); JavacTool.create() - .getTask(null, null, null, Arrays.asList("--release", "8"), null, null, context); + .getTask( + /* out = */ null, + /* fileManager = */ null, + /* diagnosticListener = */ null, + /* options = */ Arrays.asList("--release", String.valueOf(release)), + /* classes = */ null, + /* compilationUnits = */ null, + context); JavaFileManager fileManager = context.get(JavaFileManager.class); for (JavaFileObject fileObject :