aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java39
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java31
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java22
3 files changed, 38 insertions, 54 deletions
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 5a2ff9d259..af55552e95 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
@@ -15,7 +15,6 @@
package com.google.devtools.build.lib.rules.apple;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.DefaultLabelConverter;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelConverter;
@@ -333,6 +332,16 @@ public class AppleCommandLineOptions extends FragmentOptions {
public boolean enableAppleCrosstoolTransition;
@Option(
+ name = "apple_crosstool_in_output_directory_name",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
+ metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
+ help = "If true, all Apple configurations have a different output directory than non-Apple "
+ + "ones")
+ public boolean appleCrosstoolInOutputDirectoryName;
+
+ @Option(
name = "target_uses_apple_crosstool",
defaultValue = "false",
documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
@@ -358,34 +367,6 @@ public class AppleCommandLineOptions extends FragmentOptions {
}
/**
- * Returns the architecture implied by these options.
- *
- * <p>In contexts in which a configuration instance is present, prefer {@link
- * AppleConfiguration#getSingleArchitecture}.
- */
- public String getSingleArchitecture() {
- if (!Strings.isNullOrEmpty(appleSplitCpu)) {
- return appleSplitCpu;
- }
- switch (applePlatformType) {
- case IOS:
- if (!iosMultiCpus.isEmpty()) {
- return iosMultiCpus.get(0);
- } else {
- return iosCpu;
- }
- case WATCHOS:
- return watchosCpus.get(0);
- case TVOS:
- return tvosCpus.get(0);
- case MACOS:
- return macosCpus.get(0);
- default:
- throw new IllegalArgumentException("Unhandled platform type " + applePlatformType);
- }
- }
-
- /**
* Represents the Apple Bitcode mode for compilation steps.
*
* <p>Bitcode is an intermediate representation of a compiled program. For many platforms, Apple
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 22333bb41a..530e62ad5c 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
@@ -383,24 +383,18 @@ public class AppleConfiguration extends BuildConfiguration.Fragment
return xcodeConfigLabel;
}
- /**
- * Returns the unique identifier distinguishing configurations that are otherwise the same.
- *
- * <p>Use this value for situations in which two configurations create two outputs that are the
- * same but are not collapsed due to their different configuration owners.
- */
- public ConfigurationDistinguisher getConfigurationDistinguisher() {
- return configurationDistinguisher;
- }
-
private boolean shouldDistinguishOutputDirectory() {
- if (configurationDistinguisher == ConfigurationDistinguisher.UNKNOWN) {
- return false;
- } else if (configurationDistinguisher == ConfigurationDistinguisher.APPLE_CROSSTOOL
- && isAppleCrosstoolEnabled()) {
- return false;
+ if (options.appleCrosstoolInOutputDirectoryName) {
+ return configurationDistinguisher != ConfigurationDistinguisher.UNKNOWN;
} else {
- return true;
+ if (configurationDistinguisher == ConfigurationDistinguisher.UNKNOWN) {
+ return false;
+ } else if (configurationDistinguisher == ConfigurationDistinguisher.APPLE_CROSSTOOL
+ && enableAppleCrosstool) {
+ return false;
+ } else {
+ return true;
+ }
}
}
@@ -439,11 +433,6 @@ public class AppleConfiguration extends BuildConfiguration.Fragment
return objcProviderFromLinked;
}
- /** Returns true if {@link AppleCrosstoolTransition} should be applied to every apple rule. */
- public boolean isAppleCrosstoolEnabled() {
- return enableAppleCrosstool;
- }
-
@Override
public boolean equals(Object obj) {
if (this == obj) {
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.