aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar Chris Parsons <cparsons@google.com>2017-02-08 00:02:46 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2017-02-08 15:52:02 +0000
commit78a914bb2873bee4c3bc7ad62ace9b68a464bdda (patch)
treeddc89a9e7c759446ebb7373802e94d0d8f0d9dc4 /src/main/java/com/google/devtools/build/lib/rules
parent386219306c6d2285fd1e4136eafc6806c50d5bd4 (diff)
Just symlink instead of running 'lipo' on a single-architecture binary
-- PiperOrigin-RevId: 146847283 MOS_MIGRATED_REVID=146847283
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java
index f6bb0456d5..cb0fb14a5f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java
@@ -14,9 +14,11 @@
package com.google.devtools.build.lib.rules.objc;
+import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
+import com.google.devtools.build.lib.analysis.actions.SymlinkAction;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.Platform;
@@ -36,24 +38,33 @@ public class LipoSupport {
* Registers an action to invoke "lipo" on all artifacts in {@code inputBinaries} to create the
* {@code outputBinary} multi-architecture artifact, built for platform {@code platform}.
*
+ * <p>If there is only one input binary given, since "lipo" is an expensive action, this will only
+ * symlink the output location to the input binary.
+ *
* @return this object
*/
public LipoSupport registerCombineArchitecturesAction(NestedSet<Artifact> inputBinaries,
Artifact outputBinary, Platform platform) {
-
- ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext.getFragment(AppleConfiguration.class), platform)
- .setMnemonic("ObjcCombiningArchitectures")
- .addTransitiveInputs(inputBinaries)
- .addOutput(outputBinary)
- .setExecutable(CompilationSupport.xcrunwrapper(ruleContext))
- .setCommandLine(CustomCommandLine.builder()
- .add(ObjcRuleClasses.LIPO)
- .addExecPaths("-create", inputBinaries)
- .addExecPath("-o", outputBinary)
- .build())
- .build(ruleContext));
-
+ if (inputBinaries.toList().size() > 1) {
+ ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ ruleContext.getFragment(AppleConfiguration.class), platform)
+ .setMnemonic("ObjcCombiningArchitectures")
+ .addTransitiveInputs(inputBinaries)
+ .addOutput(outputBinary)
+ .setExecutable(CompilationSupport.xcrunwrapper(ruleContext))
+ .setCommandLine(CustomCommandLine.builder()
+ .add(ObjcRuleClasses.LIPO)
+ .addExecPaths("-create", inputBinaries)
+ .addExecPath("-o", outputBinary)
+ .build())
+ .build(ruleContext));
+ } else {
+ ruleContext.registerAction(new SymlinkAction(
+ ruleContext.getActionOwner(),
+ Iterables.getOnlyElement(inputBinaries),
+ outputBinary,
+ "Symlinking single-architecture binary"));
+ }
return this;
}
}