Enable path mapping for additional ResourceProcessorBusyBox actions. Path mapping is enabled for the following actions (`LinkAndroidResources` already had it): * `StarlarkMergeCompiledAndroidResources` * `MergeManifests` * `StarlarkRClassGenerator` * `ResourceShrinker` * `ResourceConverter` * `Aapt2Optimize` PiperOrigin-RevId: 999698821 Change-Id: Iae09c39a660bd0033277d581f061633568ee9762
diff --git a/rules/busybox.bzl b/rules/busybox.bzl index ce57dc2..8311266 100644 --- a/rules/busybox.bzl +++ b/rules/busybox.bzl
@@ -132,16 +132,18 @@ ], ) +def _is_worker_mode_enabled(ctx): + return (read_possibly_native_flag(ctx, "internal_persistent_busybox_tools") or + read_possibly_native_flag(ctx, "internal_persistent_multiplex_busybox_tools")) + def _set_worker_mode_param_file(ctx, args): - if (read_possibly_native_flag(ctx, "internal_persistent_busybox_tools") or - read_possibly_native_flag(ctx, "internal_persistent_multiplex_busybox_tools")): + if _is_worker_mode_enabled(ctx): # Only sets param file mode when worker mode is enabled. args.use_param_file("@%s", use_always = True) args.set_param_file_format("multiline") def _set_warning_level(ctx, args): - if (read_possibly_native_flag(ctx, "internal_persistent_busybox_tools") or - read_possibly_native_flag(ctx, "internal_persistent_multiplex_busybox_tools")): + if _is_worker_mode_enabled(ctx): # Disable warnings - this are output to stdin/stderr which breaks worker mode args.add("--logWarnings=false") @@ -687,7 +689,7 @@ mnemonic = "LinkAndroidResources", progress_message = "Linking Android Resources in %{output}", jvm_flags = _C1_ONLY_FLAGS, - execution_requirements = {"supports-path-mapping": "1"}, + supports_path_mapping = True, ) def _compile( @@ -857,12 +859,21 @@ mnemonic = "StarlarkMergeCompiledAndroidResources", progress_message = "Merging compiled Android Resources in %{output}", jvm_flags = _C1_ONLY_FLAGS, + supports_path_mapping = True, ) -def _java_run(ctx, mnemonic = None, *args, **kwargs): +def _java_run(ctx, mnemonic = None, supports_path_mapping = False, *args, **kwargs): enable_workers = read_possibly_native_flag(ctx, "internal_persistent_busybox_tools") multiplex_workers = read_possibly_native_flag(ctx, "internal_persistent_multiplex_busybox_tools") + # Path mapped spawns must be sandboxed, which forces persistent workers to be sandboxed and + # multiplex workers to fall back to singleplex. Only enable path mapping when worker mode is + # disabled. + if supports_path_mapping and not _is_worker_mode_enabled(ctx): + execution_requirements = dict(kwargs.pop("execution_requirements", {})) + execution_requirements["supports-path-mapping"] = "1" + kwargs["execution_requirements"] = execution_requirements + _java.run(ctx, mnemonic = mnemonic, supports_workers = enable_workers, supports_multiplex_workers = multiplex_workers, *args, **kwargs) def _escape_mv(s): @@ -985,6 +996,7 @@ mnemonic = "MergeManifests", progress_message = "Merging Android Manifests in %{output}", jvm_flags = _C1_ONLY_FLAGS, + supports_path_mapping = True, ) def _process_databinding( @@ -1116,6 +1128,7 @@ outputs = [out_class_jar], mnemonic = "StarlarkRClassGenerator", progress_message = "Generating R classes for %{output}", + supports_path_mapping = True, ) def _make_aar( @@ -1279,6 +1292,7 @@ progress_message = "Shrinking resources for %{label}", host_javabase = host_javabase, use_default_shell_env = True, + supports_path_mapping = True, ) def _convert_resources_to_apk( @@ -1337,6 +1351,7 @@ progress_message = "Converting resources for %{label}", host_javabase = host_javabase, use_default_shell_env = True, + supports_path_mapping = True, ) def _optimize( @@ -1400,6 +1415,7 @@ mnemonic = "Aapt2Optimize", progress_message = "Optimizing Android resources for %{label}", use_default_shell_env = True, + supports_path_mapping = True, ) busybox = struct(