aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2018-07-26 07:44:33 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-26 07:45:49 -0700
commit74146fdbcc4eb0463e64588a764b22e253a405ac (patch)
treef37bc5ac2ae707274f1bd3fbb4a8f90682980c70 /src/main/java/com/google/devtools/build/lib/rules/objc
parent676e0cd86b51e37cfa710e456b22853914c1cf0a (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.java22
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.