diff options
author | lberki <lberki@google.com> | 2018-07-26 07:44:33 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-26 07:45:49 -0700 |
commit | 74146fdbcc4eb0463e64588a764b22e253a405ac (patch) | |
tree | f37bc5ac2ae707274f1bd3fbb4a8f90682980c70 /src/main/java/com/google/devtools/build/lib/rules/objc | |
parent | 676e0cd86b51e37cfa710e456b22853914c1cf0a (diff) |
Add a flag to make Apple rules not share C++ compile actions.
This is accomplished by:
- Setting the APPLE_CROSSTOOL configuration distinguisher in AppleCrosstoolTransition
- Doing nothing in AppleCrosstoolTransition in case we are already in an Apple configuration so that funky use cases like a binary having a dependency on a swift_library both directly and through an objc_library work
- Adding the "apl-" prefix to the output directory name in APPLE_CROSSTOOL configurations
Plus a few minor cleanups:
- Removed some unused methods
- Nopped out --enable_apple_crosstool_transition if the new flag is set
- Nopped out --target_uses_apple_crosstool if the new flag is set
These latter reduce the possible space of Apple configurations, thus making the code a bit more comprehensible.
RELNOTES: None.
PiperOrigin-RevId: 206157413
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java | 22 |
1 files changed, 18 insertions, 4 deletions
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 3a2e636a13..7cd9cc986c 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.BuildOptions; import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition; import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; +import com.google.devtools.build.lib.rules.apple.AppleConfiguration.ConfigurationDistinguisher; import com.google.devtools.build.lib.rules.apple.ApplePlatform; import com.google.devtools.build.lib.rules.cpp.CppOptions; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; @@ -39,13 +40,22 @@ public class AppleCrosstoolTransition implements PatchTransition { public BuildOptions patch(BuildOptions buildOptions) { BuildOptions result = buildOptions.clone(); - if (!appleCrosstoolTransitionIsAppliedForAllObjc(buildOptions)) { - return buildOptions; - } - AppleCommandLineOptions appleOptions = buildOptions.get(AppleCommandLineOptions.class); BuildConfiguration.Options configOptions = buildOptions.get(BuildConfiguration.Options.class); + if (appleOptions.appleCrosstoolInOutputDirectoryName) { + if (appleOptions.configurationDistinguisher != ConfigurationDistinguisher.UNKNOWN) { + // The configuration distinguisher is only set by AppleCrosstoolTransition and + // AppleBinaryTransition, both of which also set the Crosstool and the CPU to Apple ones. + // So we are fine not doing anything. + return buildOptions; + } + } else { + if (!appleCrosstoolTransitionIsAppliedForAllObjc(buildOptions)) { + return buildOptions; + } + } + String cpu = ApplePlatform.cpuStringForTarget( appleOptions.applePlatformType, @@ -69,6 +79,10 @@ public class AppleCrosstoolTransition implements PatchTransition { to.get(CppOptions.class).crosstoolTop = from.get(AppleCommandLineOptions.class).appleCrosstoolTop; to.get(AppleCommandLineOptions.class).targetUsesAppleCrosstool = true; + if (from.get(AppleCommandLineOptions.class).appleCrosstoolInOutputDirectoryName) { + to.get(AppleCommandLineOptions.class).configurationDistinguisher = + ConfigurationDistinguisher.APPLE_CROSSTOOL; + } // --compiler = "compiler" for all OSX toolchains. We do not support asan/tsan, cfi, etc. on // darwin. |