diff options
Diffstat (limited to 'src/main/java')
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. |