diff options
author | Cal Peyser <cpeyser@google.com> | 2017-01-19 22:03:39 +0000 |
---|---|---|
committer | Vladimir Moskva <vladmos@google.com> | 2017-01-20 12:20:25 +0000 |
commit | 33989abc38d36dfd473dd6d3f58969b0f124fac3 (patch) | |
tree | b5d2e12169b46617b41192e56b8bf5f877783d40 | |
parent | 052f9cec58c74e9f854f1c98f03ecbe92f56e9a0 (diff) |
Introduces --apple_crosstool_transition, which turns controls the activation of
the AppleCrosstoolTransition.
--
PiperOrigin-RevId: 145006581
MOS_MIGRATED_REVID=145006581
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; |