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",