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();