Run the bootclasspath through ijar (#324)
This reduces disk space and cache usage and should speed up Turbine actions.
```
ls -lah bazel-out/darwin_arm64-fastbuild/bin/external/rules_java+/toolchains/platformclasspath*.jar
-r-xr-xr-x@ 1 fmeum 24M Sep 25 11:36 bazel-out/darwin_arm64-fastbuild/bin/external/rules_java+/toolchains/platformclasspath.jar
-r-xr-xr-x@ 1 fmeum 133M Sep 25 11:36 bazel-out/darwin_arm64-fastbuild/bin/external/rules_java+/toolchains/platformclasspath_unstripped.jar
```
Closes #324
COPYBARA_INTEGRATE_REVIEW=https://github.com/bazelbuild/rules_java/pull/324 from fmeum:ijar-bootclasspath 25b0af0de4cc8464f6fc24dd3fd46475e65bdc1e
PiperOrigin-RevId: 816643474
Change-Id: I27082108be70825ca691c17a0d1eedc7342ad064
diff --git a/test/toolchains/bootclasspath_tests.bzl b/test/toolchains/bootclasspath_tests.bzl
index 5eb436a..e7ad1ca 100644
--- a/test/toolchains/bootclasspath_tests.bzl
+++ b/test/toolchains/bootclasspath_tests.bzl
@@ -13,6 +13,9 @@
def _test_utf_8_environment_impl(env, target):
for action in target.actions:
+ if action.mnemonic == "Ijar":
+ # ijar isn't sensitive to locales
+ continue
env_subject = env.expect.where(action = action).that_dict(action.env)
env_subject.keys().contains("LC_CTYPE")
env_subject.get("LC_CTYPE", factory = subjects.str).contains("UTF-8")
diff --git a/toolchains/bootclasspath.bzl b/toolchains/bootclasspath.bzl
index d89aa17..5b4187c 100644
--- a/toolchains/bootclasspath.bzl
+++ b/toolchains/bootclasspath.bzl
@@ -101,6 +101,21 @@
],
)
+def _run_ijar(*, actions, label, ijar, input, output):
+ args = actions.args()
+ args.add(input)
+ args.add(output)
+ args.add("--target_label", label)
+ actions.run(
+ inputs = [input],
+ outputs = [output],
+ executable = ijar,
+ arguments = [args],
+ progress_message = "Extracting interfaces from %{input}",
+ execution_requirements = _SUPPORTS_PATH_MAPPING,
+ mnemonic = "Ijar",
+ )
+
_JAVA_BOOTSTRAP_RUNTIME_TOOLCHAIN_TYPE = Label("@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type")
# Opt the Java bootstrap actions into path mapping:
@@ -138,7 +153,7 @@
use_default_shell_env = True,
)
- bootclasspath = ctx.outputs.output_jar
+ unstripped_bootclasspath = ctx.actions.declare_file("%s_unstripped.jar" % ctx.label.name)
args = ctx.actions.args()
args.add("-XX:+IgnoreUnrecognizedVMOptions")
@@ -148,7 +163,7 @@
args.add("--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED")
args.add_all("-cp", [class_dir], expand_directories = False)
args.add("DumpPlatformClassPath")
- args.add(bootclasspath)
+ args.add(unstripped_bootclasspath)
if ctx.attr.language_version_bootstrap_runtime:
# The attribute is subject to a split transition.
@@ -201,12 +216,22 @@
executable = str(exec_javabase.java_executable_exec_path),
mnemonic = "JavaToolchainCompileBootClasspath",
inputs = inputs,
- outputs = [bootclasspath],
+ outputs = [unstripped_bootclasspath],
arguments = [args],
env = env,
execution_requirements = _SUPPORTS_PATH_MAPPING,
use_default_shell_env = True,
)
+
+ bootclasspath = ctx.outputs.output_jar
+ _run_ijar(
+ actions = ctx.actions,
+ label = ctx.label,
+ ijar = ctx.executable._ijar,
+ input = unstripped_bootclasspath,
+ output = bootclasspath,
+ )
+
return [
DefaultInfo(files = depset([bootclasspath])),
java_common.BootClassPathInfo(
@@ -234,6 +259,11 @@
"_allowlist_function_transition": attr.label(
default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
),
+ "_ijar": attr.label(
+ default = "//toolchains:ijar",
+ cfg = "exec",
+ executable = True,
+ ),
"_utf8_environment": attr.label(
default = ":utf8_environment",
cfg = "exec",