Skip to content

Commit 563664e

Browse files
twiggcopybara-github
twigg
authored andcommitted
Add --incompatible_android_platforms_transition_updates_affected
This is essentially a quick followup to the `diffToAffected` mode of `--experimental_exec_configuration_distinguisher` and intended for use with that mode. This setting causes the AndroidPlatformsTransition to also update `affected by Starlark transition` with the changed options. PiperOrigin-RevId: 428868170
1 parent 3550a2a commit 563664e

File tree

4 files changed

+36
-2
lines changed

4 files changed

+36
-2
lines changed

src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ public static String computeOutputDirectoryNameFragment(BuildOptions toOptions)
467467
* Extend the global build config affectedByStarlarkTransition, by adding any new option names
468468
* from changedOptions
469469
*/
470-
private static void updateAffectedByStarlarkTransition(
470+
public static void updateAffectedByStarlarkTransition(
471471
CoreOptions buildConfigOptions, Set<String> changedOptions) {
472472
if (changedOptions.isEmpty()) {
473473
return;

src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -966,6 +966,17 @@ public static class Options extends FragmentOptions {
966966
+ " This will make the build nondeterministic.")
967967
public boolean includeProguardLocationReferences;
968968

969+
@Option(
970+
name = "incompatible_android_platforms_transition_updated_affected",
971+
defaultValue = "false",
972+
documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
973+
effectTags = OptionEffectTag.LOADING_AND_ANALYSIS,
974+
metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
975+
help =
976+
"If set to true, the AndroidPlatformsTransition will also update `affected by Starlark"
977+
+ " transition` with changed options to avoid potential action conflicts.")
978+
public boolean androidPlatformsTransitionsUpdateAffected;
979+
969980
@Override
970981
public FragmentOptions getHost() {
971982
Options host = (Options) super.getHost();
@@ -974,6 +985,7 @@ public FragmentOptions getHost() {
974985
host.sdk = sdk;
975986
host.fatApkCpus = ImmutableList.of(); // Fat APK archs don't apply to the host.
976987
host.incompatibleUseToolchainResolution = incompatibleUseToolchainResolution;
988+
host.androidPlatformsTransitionsUpdateAffected = androidPlatformsTransitionsUpdateAffected;
977989

978990
host.desugarJava8 = desugarJava8;
979991
host.desugarJava8Libs = desugarJava8Libs;

src/main/java/com/google/devtools/build/lib/rules/android/AndroidPlatformsTransition.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818
import com.google.devtools.build.lib.analysis.PlatformOptions;
1919
import com.google.devtools.build.lib.analysis.config.BuildOptions;
2020
import com.google.devtools.build.lib.analysis.config.BuildOptionsView;
21+
import com.google.devtools.build.lib.analysis.config.CoreOptions;
2122
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
2223
import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
2324
import com.google.devtools.build.lib.analysis.config.transitions.StarlarkExposedRuleTransitionFactory;
2425
import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory;
26+
import com.google.devtools.build.lib.analysis.starlark.FunctionTransitionUtil;
2527
import com.google.devtools.build.lib.events.EventHandler;
2628
import com.google.devtools.build.lib.packages.RuleTransitionData;
2729
import com.google.devtools.build.lib.rules.cpp.CppOptions;
@@ -51,7 +53,10 @@ public static TransitionFactory<RuleTransitionData> create() {
5153
@Override
5254
public ImmutableSet<Class<? extends FragmentOptions>> requiresOptionFragments() {
5355
return ImmutableSet.of(
54-
AndroidConfiguration.Options.class, PlatformOptions.class, CppOptions.class);
56+
AndroidConfiguration.Options.class,
57+
PlatformOptions.class,
58+
CoreOptions.class,
59+
CppOptions.class);
5560
}
5661

5762
@Override
@@ -74,6 +79,22 @@ public BuildOptions patch(BuildOptionsView options, EventHandler eventHandler) {
7479
newOptions.get(CppOptions.class).enableCcToolchainResolution = true;
7580
}
7681

82+
if (androidOptions.androidPlatformsTransitionsUpdateAffected) {
83+
ImmutableSet.Builder<String> affected = ImmutableSet.builder();
84+
if (!options
85+
.get(PlatformOptions.class)
86+
.platforms
87+
.equals(newOptions.get(PlatformOptions.class).platforms)) {
88+
affected.add("//command_line_option:platforms");
89+
}
90+
if (options.get(CppOptions.class).enableCcToolchainResolution
91+
!= newOptions.get(CppOptions.class).enableCcToolchainResolution) {
92+
affected.add("//command_line_option:incompatible_enable_cc_toolchain_resolution");
93+
}
94+
FunctionTransitionUtil.updateAffectedByStarlarkTransition(
95+
newOptions.get(CoreOptions.class), affected.build());
96+
}
97+
7798
return newOptions.underlying();
7899
}
79100

src/main/java/com/google/devtools/build/lib/rules/android/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ java_library(
6565
"//src/main/java/com/google/devtools/build/lib/analysis:required_config_fragments_provider",
6666
"//src/main/java/com/google/devtools/build/lib/analysis:resolved_toolchain_context",
6767
"//src/main/java/com/google/devtools/build/lib/analysis:rule_definition_environment",
68+
"//src/main/java/com/google/devtools/build/lib/analysis:starlark/function_transition_util",
6869
"//src/main/java/com/google/devtools/build/lib/analysis:starlark/starlark_api_provider",
6970
"//src/main/java/com/google/devtools/build/lib/analysis:starlark/starlark_error_reporter",
7071
"//src/main/java/com/google/devtools/build/lib/analysis:test/execution_info",

0 commit comments

Comments
 (0)