aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java19
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java3
3 files changed, 23 insertions, 12 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 0bab371346..568e773d81 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,22 +703,13 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
* Creates a BuildOptions class for the given options taken from an optionsProvider.
*/
public BuildOptions createBuildOptions(OptionsClassProvider 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;
+ return BuildOptions.applyStaticConfigOverride(
+ BuildOptions.of(configurationOptions, optionsProvider));
}
private Environment.Frame createGlobals(
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
index 4fdae568b1..f32977e69e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
@@ -149,6 +149,25 @@ public final class BuildOptions implements Cloneable, Serializable {
}
/**
+ * Returns a cloned instance that disables dynamic configurations if both
+ * {@link BuildConfiguration.Options.DynamicConfigsMode} is {@code NOTRIM_PARTIAL} and
+ * {@link #useStaticConfigurationsOverride()} is true. Otherwise it returns the input
+ * instance unchanged.
+ */
+ public static BuildOptions applyStaticConfigOverride(BuildOptions buildOptions) {
+ 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;
+ }
+
+ /**
* Returns the actual instance of a FragmentOptions class.
*/
public <T extends FragmentOptions> T get(Class<T> optionsClass) {
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
index a3ea604fab..719391be5d 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java
@@ -166,7 +166,8 @@ public abstract class ConfigurationTestCase extends FoundationTestCase {
ImmutableSortedSet<String> multiCpu = ImmutableSortedSet.copyOf(
parser.getOptions(TestOptions.class).multiCpus);
- BuildOptions buildOptions = BuildOptions.of(buildOptionClasses, parser);
+ BuildOptions buildOptions = BuildOptions.applyStaticConfigOverride(
+ BuildOptions.of(buildOptionClasses, parser));
skyframeExecutor.handleDiffs(reporter);
BuildConfigurationCollection collection = skyframeExecutor.createConfigurations(
reporter, configurationFactory, buildOptions, multiCpu, false);