aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2017-01-19 22:03:39 +0000
committerGravatar Vladimir Moskva <vladmos@google.com>2017-01-20 12:20:25 +0000
commit33989abc38d36dfd473dd6d3f58969b0f124fac3 (patch)
treeb5d2e12169b46617b41192e56b8bf5f877783d40
parent052f9cec58c74e9f854f1c98f03ecbe92f56e9a0 (diff)
Introduces --apple_crosstool_transition, which turns controls the activation of
the AppleCrosstoolTransition. -- PiperOrigin-RevId: 145006581 MOS_MIGRATED_REVID=145006581
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfigurationCollection.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java9
4 files changed, 32 insertions, 6 deletions
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 d474eedcc0..7afe5993b3 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
@@ -112,9 +112,10 @@ public class BazelConfigurationCollection implements ConfigurationCollectionFact
@Override
public BuildConfiguration toplevelConfigurationHook(Target toTarget) {
- ImmutableList<String> appleCrosstoolRuleClasses = configuration.useDynamicConfigurations()
- ? AppleConfiguration.APPLE_CROSSTOOL_RULE_CLASSES_FOR_DYNAMIC_CONFIGS
- : AppleConfiguration.APPLE_CROSSTOOL_RULE_CLASSES_FOR_STATIC_CONFIGS;
+ ImmutableList<String> appleCrosstoolRuleClasses =
+ configuration.getFragment(AppleConfiguration.class).isAppleCrosstoolEnabled()
+ ? AppleConfiguration.APPLE_CROSSTOOL_RULE_CLASSES
+ : AppleConfiguration.APPLE_CROSSTOOL_RULE_CLASSES_FOR_STATIC_CONFIGS;
return (appleCrosstoolRuleClasses.contains(toTarget.getAssociatedRule().getRuleClass()))
? Iterables.getOnlyElement(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
index 6724465d02..3f0c4c20c8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
@@ -248,6 +248,14 @@ public class AppleCommandLineOptions extends FragmentOptions {
+ "Values: 'none', 'embedded_markers', 'embedded'.")
public AppleBitcodeMode appleBitcodeMode;
+ @Option(
+ name = "apple_crosstool_transition",
+ defaultValue = "false",
+ category = "undocumented",
+ help = "If true, the apple crosstool is used for all apple rules."
+ )
+ public boolean enableAppleCrosstoolTransition;
+
private Platform getPlatform() {
for (String architecture : iosMultiCpus) {
if (Platform.forTarget(PlatformType.IOS, architecture) == Platform.IOS_DEVICE) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
index 44e6c90419..b7f4c59d6c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
@@ -79,10 +79,11 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
"experimental_objc_library");
/**
- * Rule classes that need a top level transition to the apple crosstool if dynamic configurations
- * are being used.
+ * Rule classes that need a top level transition to the apple crosstool. Dynamic configurations
+ * must be in place until these can be used - for static configurations, use
+ * {@code APPLE_CROSSTOOL_RULE_CLASSES_FOR_STATIC_CONFIGS}.
*/
- public static final ImmutableList<String> APPLE_CROSSTOOL_RULE_CLASSES_FOR_DYNAMIC_CONFIGS =
+ public static final ImmutableList<String> APPLE_CROSSTOOL_RULE_CLASSES =
ImmutableList.of(
"apple_binary",
"apple_dynamic_library",
@@ -113,6 +114,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
private final ImmutableList<String> tvosCpus;
private final AppleBitcodeMode bitcodeMode;
private final Label xcodeConfigLabel;
+ private final boolean enableAppleCrosstool;
@Nullable private final String xcodeToolchain;
@Nullable private final Label defaultProvisioningProfileLabel;
@@ -155,6 +157,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
this.bitcodeMode = appleOptions.appleBitcodeMode;
this.xcodeConfigLabel =
Preconditions.checkNotNull(appleOptions.xcodeVersionConfig, "xcodeConfigLabel");
+ this.enableAppleCrosstool = appleOptions.enableAppleCrosstoolTransition;
this.defaultProvisioningProfileLabel = appleOptions.defaultProvisioningProfile;
this.xcodeToolchain = appleOptions.xcodeToolchain;
}
@@ -558,6 +561,11 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
return xcodeToolchain;
}
+ /** Returns true if {@link AppleCrosstoolTransition} should be applied to every apple rule. */
+ public boolean isAppleCrosstoolEnabled() {
+ return enableAppleCrosstool;
+ }
+
/**
* Loads {@link AppleConfiguration} from build options.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java
index a1e468dcb3..9f93ca341b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java
@@ -21,6 +21,7 @@ import com.google.devtools.build.lib.analysis.config.PatchTransition;
import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration.ConfigurationDistinguisher;
import com.google.devtools.build.lib.rules.cpp.CppOptions;
+import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions.ObjcCrosstoolMode;
/**
* Transition that produces a configuration that causes c++ toolchain selection to use the
@@ -41,6 +42,14 @@ public class AppleCrosstoolTransition implements PatchTransition {
@Override
public BuildOptions apply(BuildOptions buildOptions) {
BuildOptions result = buildOptions.clone();
+
+ if (!(buildOptions.get(AppleCommandLineOptions.class).enableAppleCrosstoolTransition
+ || buildOptions.get(ObjcCommandLineOptions.class).experimentalObjcLibrary
+ || buildOptions.get(ObjcCommandLineOptions.class).objcCrosstoolMode
+ != ObjcCrosstoolMode.OFF)) {
+ return buildOptions;
+ }
+
result.get(AppleCommandLineOptions.class).configurationDistinguisher =
ConfigurationDistinguisher.APPLE_CROSSTOOL;