diff --git a/src/main/starlark/builtins_bzl/common/java/java_common_internal_for_builtins.bzl b/src/main/starlark/builtins_bzl/common/java/java_common_internal_for_builtins.bzl index 05555aad51374f..d052c932ddb29d 100644 --- a/src/main/starlark/builtins_bzl/common/java/java_common_internal_for_builtins.bzl +++ b/src/main/starlark/builtins_bzl/common/java/java_common_internal_for_builtins.bzl @@ -134,9 +134,15 @@ def compile( ["-Abazel.repository=" + ctx.label.workspace_name], order = "preorder", )) + system_override = False for package_config in java_toolchain._package_configuration: if package_config.matches(ctx.label): all_javac_opts.append(package_config.javac_opts) + if package_config.system: + if system_override: + fail("Multiple system package configurations found for %s" % ctx.label) + bootclasspath = package_config.system + system_override = True all_javac_opts.append(depset( ["--add-exports=%s=ALL-UNNAMED" % x for x in add_exports], diff --git a/src/main/starlark/builtins_bzl/common/java/java_package_configuration.bzl b/src/main/starlark/builtins_bzl/common/java/java_package_configuration.bzl index 0a8d3b9620246f..7a7e5a09e56a5d 100644 --- a/src/main/starlark/builtins_bzl/common/java/java_package_configuration.bzl +++ b/src/main/starlark/builtins_bzl/common/java/java_package_configuration.bzl @@ -14,6 +14,7 @@ """Implementation for the java_package_configuration rule""" +load(":common/java/boot_class_path_info.bzl", "BootClassPathInfo") load(":common/java/java_helper.bzl", "helper") _java_common_internal = _builtins.internal.java_common_internal_do_not_use @@ -27,6 +28,7 @@ JavaPackageConfigurationInfo = provider( "javac_opts", "matches", "package_specs", + "system", ], ) @@ -40,6 +42,7 @@ def _rule_impl(ctx): javacopts = _java_common_internal.expand_java_opts(ctx, "javacopts", tokenize = True) javacopts_depset = helper.detokenize_javacopts(javacopts) package_specs = [package[PackageSpecificationInfo] for package in ctx.attr.packages] + system = ctx.attr.system[BootClassPathInfo] if ctx.attr.system else None return [ DefaultInfo(), JavaPackageConfigurationInfo( @@ -47,6 +50,7 @@ def _rule_impl(ctx): javac_opts = javacopts_depset, matches = lambda label: _matches(package_specs, label), package_specs = package_specs, + system = system, ), ] @@ -103,11 +107,18 @@ Java compiler flags. """, ), "data": attr.label_list( + cfg = "exec", allow_files = True, doc = """ The list of files needed by this configuration at runtime. """, ), + "system": attr.label( + providers = [BootClassPathInfo], + doc = """ +Corresponds to javac's --system flag. +""", + ), "output_licenses": attr.license() if hasattr(attr, "license") else attr.string_list(), }, ) diff --git a/src/main/starlark/builtins_bzl/common/java/java_toolchain.bzl b/src/main/starlark/builtins_bzl/common/java/java_toolchain.bzl index 9fc45b0b58052a..0be3f477ea0489 100644 --- a/src/main/starlark/builtins_bzl/common/java/java_toolchain.bzl +++ b/src/main/starlark/builtins_bzl/common/java/java_toolchain.bzl @@ -520,7 +520,7 @@ Label of the one-version allowlist for tests. """, ), "package_configuration": attr.label_list( - cfg = "exec", + cfg = "target", providers = [JavaPackageConfigurationInfo], doc = """ Configuration that should be applied to the specified package groups.