aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
diff options
context:
space:
mode:
authorGravatar Greg Estren <gregce@google.com>2016-12-02 18:18:18 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-12-02 19:09:13 +0000
commit7be6ec66422e23705a8d8345675ee4c15bad3882 (patch)
tree339746629468cd32102766df79e9165e540f51e0 /src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
parent8b5e2118719058d3784469d2312431dc44106dea (diff)
Add option to disable dynamic configs with LIPO.
New option --experimental_dynamic_configs=notrim_partial automatically switches to --experimental_dynamic_configs=off if any BuildOptions fragment sets useStaticConfigurationsOverride(). CppOptions implements this override for FDO/LIPO. -- PiperOrigin-RevId: 140864317 MOS_MIGRATED_REVID=140864317
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index 53db2a2aeb..0bab371346 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -703,7 +703,22 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
* Creates a BuildOptions class for the given options taken from an optionsProvider.
*/
public BuildOptions createBuildOptions(OptionsClassProvider optionsProvider) {
- return BuildOptions.of(configurationOptions, optionsProvider);
+ BuildOptions buildOptions = BuildOptions.of(configurationOptions, optionsProvider);
+ // Possibly disable dynamic configurations if they won't work with this build. It's
+ // best to do this as early in the build as possible, because as the build goes on the number
+ // of BuildOptions references grows and the more dangerous it becomes to modify them. We do
+ // this here instead of in BlazeRuntime because tests and production logic don't use
+ // BlazeRuntime the same way.
+ if (buildOptions.useStaticConfigurationsOverride()
+ && buildOptions.get(BuildConfiguration.Options.class).useDynamicConfigurations
+ == BuildConfiguration.Options.DynamicConfigsMode.NOTRIM_PARTIAL) {
+ // It's not, generally speaking, safe to mutate BuildOptions instances when the original
+ // reference might persist.
+ buildOptions = buildOptions.clone();
+ buildOptions.get(BuildConfiguration.Options.class).useDynamicConfigurations =
+ BuildConfiguration.Options.DynamicConfigsMode.OFF;
+ }
+ return buildOptions;
}
private Environment.Frame createGlobals(