Tie platform inference in linkMultiArchBinary to the presence of the shouldLipo argument. Allows for use of other transitions besides apple_common.multi_arch_split with apple_common,link_multi_arch_binary and should_lipo = False.
RELNOTES: None.
PiperOrigin-RevId: 372148110
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
index 1b86d18..ca4d909 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
@@ -171,16 +171,19 @@
boolean isStampingEnabled,
boolean shouldLipo)
throws InterruptedException, RuleErrorException, ActionConflictException {
- MultiArchSplitTransitionProvider.validateMinimumOs(ruleContext);
- PlatformType platformType = MultiArchSplitTransitionProvider.getPlatformType(ruleContext);
-
- AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
-
ApplePlatform platform = null;
- try {
- platform = appleConfiguration.getMultiArchPlatform(platformType);
- } catch (IllegalArgumentException e) {
- ruleContext.throwWithRuleError(e);
+
+ if (shouldLipo) {
+ MultiArchSplitTransitionProvider.validateMinimumOs(ruleContext);
+ PlatformType platformType = MultiArchSplitTransitionProvider.getPlatformType(ruleContext);
+
+ AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
+
+ try {
+ platform = appleConfiguration.getMultiArchPlatform(platformType);
+ } catch (IllegalArgumentException e) {
+ ruleContext.throwWithRuleError(e);
+ }
}
ImmutableListMultimap<String, TransitiveInfoCollection> cpuToDepsCollectionMap =
MultiArchBinarySupport.transformMap(ruleContext.getPrerequisitesByConfiguration("deps"));
@@ -220,8 +223,7 @@
allLinkInputs,
isStampingEnabled,
cpuToDepsCollectionMap,
- outputGroupCollector,
- platform);
+ outputGroupCollector);
if (shouldLipo) {
NestedSetBuilder<Artifact> binariesToLipo = NestedSetBuilder.stableOrder();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
index e9a557e..59d86a0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
@@ -128,8 +128,6 @@
* collections which are propagated from the dependencies of that configuration
* @param outputMapCollector a map to which output groups created by compile action generation are
* added
- * @param platform the current configuration from {@link
- * AppleConfiguration#getMultiArchPlatform(PlatformType)}
* @return a map containing all single-architecture binaries that are linked from this call
* @throws RuleErrorException if there are attribute errors in the current rule context
*/
@@ -139,8 +137,7 @@
Iterable<Artifact> extraLinkInputs,
boolean isStampingEnabled,
ListMultimap<String, TransitiveInfoCollection> cpuToDepsCollectionMap,
- Map<String, NestedSet<Artifact>> outputMapCollector,
- ApplePlatform platform)
+ Map<String, NestedSet<Artifact>> outputMapCollector)
throws RuleErrorException, InterruptedException {
ImmutableMap.Builder<String, Artifact> platformToBinariesMap = ImmutableMap.builder();
@@ -163,8 +160,11 @@
.map(CcInfo::getCcLinkingContext)
.collect(toImmutableList());
+ // TODO(b/177442911): Use the target platform from platform info coming from split
+ // transition outputs instead of inferring this based on the target CPU.
+ ApplePlatform cpuPlatform = ApplePlatform.forTargetCpu(configCpu);
platformToBinariesMap.put(
- platform.cpuStringWithTargetEnvironmentForTargetCpu(configCpu),
+ cpuPlatform.cpuStringWithTargetEnvironmentForTargetCpu(configCpu),
intermediateArtifacts.strippedSingleArchitectureBinary());
ObjcProvider objcProvider = dependencySpecificConfiguration.objcLinkProvider();