diff options
author | 2017-02-22 23:27:47 +0000 | |
---|---|---|
committer | 2017-02-23 11:31:27 +0000 | |
commit | 766a581ac53f9a45207aabfc149cbc39c2539d3c (patch) | |
tree | a1093d21c3e7ad0dfc2c9ee6ccf8990eb58bdb76 /src/main/java/com/google | |
parent | 3611fb2d7c075604375258df7c260d3e41e4c42e (diff) |
APPLE_CROSSTOOL distinguisher is not applied if --apple_crosstool_transition is true.
--
PiperOrigin-RevId: 148277221
MOS_MIGRATED_REVID=148277221
Diffstat (limited to 'src/main/java/com/google')
4 files changed, 23 insertions, 13 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 f9268f84fa..696f581150 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 @@ -114,7 +114,8 @@ public class BazelConfigurationCollection implements ConfigurationCollectionFact @Override public BuildConfiguration toplevelConfigurationHook(Target toTarget) { ImmutableList<String> appleCrosstoolRuleClasses = - AppleCrosstoolTransition.shouldUseAppleCrosstoolTransition(configuration.getOptions()) + AppleCrosstoolTransition.appleCrosstoolTransitionIsAppliedForAllObjc( + configuration.getOptions()) ? AppleConfiguration.APPLE_CROSSTOOL_RULE_CLASSES : AppleConfiguration.APPLE_CROSSTOOL_RULE_CLASSES_FOR_STATIC_CONFIGS; 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 bba468d3a2..7438c3a52f 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 @@ -278,6 +278,14 @@ public class AppleCommandLineOptions extends FragmentOptions { ) public boolean enableAppleCrosstoolTransition; + @Option( + name = "target_uses_apple_crosstool", + defaultValue = "false", + category = "undocumented", + help = "If true, this target uses the apple crosstool. Do not set this flag manually." + ) + public boolean targetUsesAppleCrosstool; + 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/objc/AppleCrosstoolSplitTransition.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolSplitTransition.java index 8e919c088a..89df5b521f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolSplitTransition.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolSplitTransition.java @@ -48,8 +48,14 @@ public class AppleCrosstoolSplitTransition implements SplitTransition<BuildOptio @Override public List<BuildOptions> split(BuildOptions buildOptions) { BuildOptions result = buildOptions.clone(); - result.get(AppleCommandLineOptions.class).configurationDistinguisher = - ConfigurationDistinguisher.APPLE_CROSSTOOL; + + if (!AppleCrosstoolTransition.appleCrosstoolTransitionIsAppliedForAllObjc(buildOptions)) { + // If the apple crosstool is not applied universally, the apple crosstool distinguisher + // is required to prevent artifact collisions. Since AppleCrosstoolTransition is only applied + // when the crosstool is applied universally, the distinguisher only needs to be set here. + result.get(AppleCommandLineOptions.class).configurationDistinguisher = + ConfigurationDistinguisher.APPLE_CROSSTOOL; + } // TODO(b/29355778): Once ios_cpu is retired, introduce another top-level flag (perhaps // --apple_cpu) for toolchain selection in top-level consuming rules. 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 38c79dd84a..59cf36aa98 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 @@ -19,7 +19,6 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildOptions; 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; @@ -43,14 +42,10 @@ public class AppleCrosstoolTransition implements PatchTransition { public BuildOptions apply(BuildOptions buildOptions) { BuildOptions result = buildOptions.clone(); - if (!shouldUseAppleCrosstoolTransition(buildOptions)) { + if (!appleCrosstoolTransitionIsAppliedForAllObjc(buildOptions)) { return buildOptions; } - result.get(AppleCommandLineOptions.class).configurationDistinguisher = - ConfigurationDistinguisher.APPLE_CROSSTOOL; - - // TODO(b/29355778): Once ios_cpu is retired, introduce another top-level flag (perhaps // --apple_cpu) for toolchain selection in top-level consuming rules. String cpu = String.format("%s_%s", @@ -74,7 +69,8 @@ public class AppleCrosstoolTransition implements PatchTransition { BuildOptions to, String cpu) { to.get(BuildConfiguration.Options.class).cpu = cpu; to.get(CppOptions.class).crosstoolTop = - from.get(AppleCommandLineOptions.class).appleCrosstoolTop; + from.get(AppleCommandLineOptions.class).appleCrosstoolTop; + to.get(AppleCommandLineOptions.class).targetUsesAppleCrosstool = true; // --compiler = "compiler" for all OSX toolchains. We do not support asan/tsan, cfi, etc. on // darwin. @@ -90,10 +86,9 @@ public class AppleCrosstoolTransition implements PatchTransition { } /** - * Returns true if the given options imply use of AppleCrosstoolTransition for all apple - * targets. + * Returns true if the given options imply use of AppleCrosstoolTransition for all apple targets. */ - public static boolean shouldUseAppleCrosstoolTransition(BuildOptions options) { + public static boolean appleCrosstoolTransitionIsAppliedForAllObjc(BuildOptions options) { return (options.get(AppleCommandLineOptions.class).enableAppleCrosstoolTransition || options.get(ObjcCommandLineOptions.class).experimentalObjcLibrary || options.get(ObjcCommandLineOptions.class).objcCrosstoolMode != ObjcCrosstoolMode.OFF); |