diff options
author | gregce <gregce@google.com> | 2017-04-25 22:10:25 +0200 |
---|---|---|
committer | Vladimir Moskva <vladmos@google.com> | 2017-04-26 12:44:05 +0200 |
commit | 869533f94c951f823dcb8d65f59d05dab5c5f1a0 (patch) | |
tree | a1c1f29facde0bf23895723b48227de0294ed1b2 /src/main/java/com/google/devtools | |
parent | ec073fceca1e597a3b6735b434e72e595a5191f6 (diff) |
Dynamic configs: build the host config from data, not target options.
This guarantees host tools are always built without LIPO even for LIPO
builds.
PiperOrigin-RevId: 154210520
Diffstat (limited to 'src/main/java/com/google/devtools')
3 files changed, 14 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java index 3b6c338e71..935fb978cb 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java @@ -260,7 +260,7 @@ public final class BuildConfigurationCollection { * in which they must co-exist. Once dynamic configurations are production-ready, we'll remove * the static configuration code entirely. */ - protected Transition getDynamicTransition(Transition transition) { + public Transition getDynamicTransition(Transition transition) { Preconditions.checkState(configuration.useDynamicConfigurations()); if (transition == Attribute.ConfigurationTransition.NONE) { return transition; diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfigurationCollection.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfigurationCollection.java index 696f581150..d5b9522973 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfigurationCollection.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfigurationCollection.java @@ -103,7 +103,7 @@ public class BazelConfigurationCollection implements ConfigurationCollectionFact } @Override - protected Transition getDynamicTransition(Transition configurationTransition) { + public Transition getDynamicTransition(Transition configurationTransition) { if (configurationTransition == ConfigurationTransition.DATA) { return ConfigurationTransition.NONE; } else { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java index 7326fb1855..d69da90b60 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationFactory; import com.google.devtools.build.lib.analysis.config.HostTransition; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.analysis.config.PackageProviderForConfigurations; +import com.google.devtools.build.lib.analysis.config.PatchTransition; import com.google.devtools.build.lib.events.ErrorSensingEventHandler; import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.packages.Attribute; @@ -122,10 +123,19 @@ public class ConfigurationCollectionFunction implements SkyFunction { throws InvalidConfigurationException, InterruptedException { if (targetConfiguration.useDynamicConfigurations()) { BuildOptions targetOptions = targetConfiguration.getOptions(); + // The host configuration builds from the data, not the target options. This is done + // so that host tools are always built without LIPO. + BuildOptions dataOptions = targetOptions; + Attribute.Transition dataTransition = targetConfiguration.getTransitions() + .getDynamicTransition(Attribute.ConfigurationTransition.DATA); + if (dataTransition != Attribute.ConfigurationTransition.NONE) { + dataOptions = ((PatchTransition) dataTransition).apply(targetOptions); + } + BuildOptions hostOptions = targetOptions.get(BuildConfiguration.Options.class).useDistinctHostConfiguration - ? HostTransition.INSTANCE.apply(targetConfiguration.getOptions()) - : targetOptions; + ? HostTransition.INSTANCE.apply(dataOptions) + : dataOptions; SkyKey hostConfigKey = BuildConfigurationValue.key( |