Add incompatible flags for using the remote Java tools for the default java_toolchain and host_java_toolchain. This PR introduces the flags: * `--incompatible_use_remote_host_java_toolchain` * `--incompatible_use_remote_java_toolchain` Progress on #6316 #7196 #7197 Closes #7156. PiperOrigin-RevId: 230209934
diff --git a/tools/jdk/default_java_toolchain.bzl b/tools/jdk/default_java_toolchain.bzl index 1197a57..c6a546b 100644 --- a/tools/jdk/default_java_toolchain.bzl +++ b/tools/jdk/default_java_toolchain.bzl
@@ -18,6 +18,10 @@ "-Xbootclasspath/p:$(location @bazel_tools//third_party/java/jdk/langtools:javac_jar)", ] +JDK8_JVM_OPTS_REMOTE_JAVAC = [ + "-Xbootclasspath/p:$(location @bazel_tools//tools/jdk:remote-javac_jar)", +] + JDK9_JVM_OPTS = [ # In JDK9 we have seen a ~30% slow down in JavaBuilder performance when using # G1 collector and having compact strings enabled. @@ -44,6 +48,32 @@ "--add-opens=java.base/java.lang=ALL-UNNAMED", ] +JDK9_REMOTE_JVM_OPTS = [ + # In JDK9 we have seen a ~30% slow down in JavaBuilder performance when using + # G1 collector and having compact strings enabled. + "-XX:+UseParallelOldGC", + "-XX:-CompactStrings", + # Allow JavaBuilder to access internal javac APIs. + "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", + "--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", + "--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED", + "--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", + "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED", + "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", + "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED", + "--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", + + # override the javac in the JDK. + "--patch-module=java.compiler=$(location @bazel_tools//tools/jdk:remote-java_compiler_jar)", + "--patch-module=jdk.compiler=$(location @bazel_tools//tools/jdk:remote-jdk_compiler_jar)", + + # quiet warnings from com.google.protobuf.UnsafeUtil, + # see: https://github.com/google/protobuf/issues/3781 + # and: https://github.com/bazelbuild/bazel/issues/5599 + "--add-opens=java.base/java.nio=ALL-UNNAMED", + "--add-opens=java.base/java.lang=ALL-UNNAMED", +] + DEFAULT_JAVACOPTS = [ "-XDskipDuplicateBridges=true", "-g", @@ -82,6 +112,37 @@ "bootclasspath": ["@bazel_tools//tools/jdk:platformclasspath"], } +DEFAULT_REMOTE_TOOLCHAIN_CONFIGURATION = { + "forcibly_disable_header_compilation": 0, + "genclass": ["@bazel_tools//tools/jdk:remote-genclass"], + "header_compiler": ["@bazel_tools//tools/jdk:remote-turbine"], + "header_compiler_direct": ["@bazel_tools//tools/jdk:remote-turbine_direct"], + "ijar": ["@bazel_tools//tools/jdk:ijar"], + "javabuilder": ["@bazel_tools//tools/jdk:remote-javabuilder"], + "javac": ["@bazel_tools//tools/jdk:remote-javac_jar"], + "tools": [ + "@bazel_tools//tools/jdk:remote-java_compiler_jar", + "@bazel_tools//tools/jdk:remote-jdk_compiler_jar", + ], + "javac_supports_workers": 1, + "jvm_opts": JDK9_REMOTE_JVM_OPTS, + "misc": DEFAULT_JAVACOPTS, + "compatible_javacopts": COMPATIBLE_JAVACOPTS, + "singlejar": ["@bazel_tools//tools/jdk:singlejar"], + "bootclasspath": ["@bazel_tools//tools/jdk:platformclasspath"], +} + +def default_remote_java_toolchain(name, **kwargs): + """Defines a remote java_toolchain with appropriate defaults for Bazel.""" + + toolchain_args = dict(DEFAULT_REMOTE_TOOLCHAIN_CONFIGURATION) + toolchain_args.update(kwargs) + + native.java_toolchain( + name = name, + **toolchain_args + ) + def default_java_toolchain(name, **kwargs): """Defines a java_toolchain with appropriate defaults for Bazel."""