diff options
author | 2017-02-08 00:02:46 +0000 | |
---|---|---|
committer | 2017-02-08 15:52:02 +0000 | |
commit | 78a914bb2873bee4c3bc7ad62ace9b68a464bdda (patch) | |
tree | ddc89a9e7c759446ebb7373802e94d0d8f0d9dc4 /src/main/java/com/google/devtools/build/lib/rules | |
parent | 386219306c6d2285fd1e4136eafc6806c50d5bd4 (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.java | 39 |
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; } } |