aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar gregce <gregce@google.com>2017-04-25 22:10:25 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-04-26 12:44:05 +0200
commit869533f94c951f823dcb8d65f59d05dab5c5f1a0 (patch)
treea1c1f29facde0bf23895723b48227de0294ed1b2 /src/main/java/com/google/devtools
parentec073fceca1e597a3b6735b434e72e595a5191f6 (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationCollection.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfigurationCollection.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java14
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(