diff options
author | 2017-03-06 12:17:20 +0000 | |
---|---|---|
committer | 2017-03-06 14:44:23 +0000 | |
commit | a812e0a5d188982397ee0a4ca69de7fa21a5088a (patch) | |
tree | db028db7273ead8357570e7dc6da6202761a8278 /src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java | |
parent | 2b01b5dd950bbd078a61f3451a5eb0383ea8f270 (diff) |
Drop CppLinkActionContext
Merge the functionality into CppLinkAction, which now simply creates and runs
a Spawn. Set PWD to /proc/self/cwd for Linux, and set execution info if the
action needs to run on MacOS.
--
PiperOrigin-RevId: 149285420
MOS_MIGRATED_REVID=149285420
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java index 0fbd2d05ec..26011cbcf5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java @@ -25,6 +25,7 @@ import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.AbstractAction; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionExecutionException; +import com.google.devtools.build.lib.actions.ActionInput; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.CommandAction; @@ -32,10 +33,13 @@ import com.google.devtools.build.lib.actions.ExecException; import com.google.devtools.build.lib.actions.ExecutionInfoSpecifier; import com.google.devtools.build.lib.actions.Executor; import com.google.devtools.build.lib.actions.ResourceSet; +import com.google.devtools.build.lib.actions.SimpleSpawn; +import com.google.devtools.build.lib.actions.Spawn; import com.google.devtools.build.lib.actions.extra.CppLinkInfo; import com.google.devtools.build.lib.actions.extra.ExtraActionInfo; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; +import com.google.devtools.build.lib.analysis.actions.ExecutionRequirements; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; @@ -52,6 +56,7 @@ import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; @@ -220,6 +225,12 @@ public final class CppLinkAction extends AbstractAction .getParentDirectory() .getPathString()); } + + if (!needsToRunOnMac()) { + // This prevents gcc from writing the unpredictable (and often irrelevant) + // value of getcwd() into the debug info. + result.put("PWD", "/proc/self/cwd"); + } return ImmutableMap.copyOf(result); } @@ -298,6 +309,10 @@ public final class CppLinkAction extends AbstractAction return allLTOBackendArtifacts; } + private boolean needsToRunOnMac() { + return getHostSystemName().equals(CppConfiguration.MAC_SYSTEM_NAME); + } + @Override @ThreadCompatible public void execute( @@ -307,10 +322,27 @@ public final class CppLinkAction extends AbstractAction executeFake(); } else { Executor executor = actionExecutionContext.getExecutor(); - try { - executor.getContext(CppLinkActionContext.class).exec( - this, actionExecutionContext); + // Collect input files + List<ActionInput> allInputs = new ArrayList<>(); + Artifact.addExpandedArtifacts( + getMandatoryInputs(), allInputs, actionExecutionContext.getArtifactExpander()); + + ImmutableMap<String, String> executionInfo = ImmutableMap.of(); + if (needsToRunOnMac()) { + executionInfo = ImmutableMap.of(ExecutionRequirements.REQUIRES_DARWIN, ""); + } + + Spawn spawn = new SimpleSpawn( + this, + ImmutableList.copyOf(getCommandLine()), + getEnvironment(), + executionInfo, + ImmutableList.copyOf(allInputs), + getOutputs().asList(), + estimateResourceConsumptionLocal()); + executor.getSpawnActionContext(getMnemonic()).exec( + spawn, actionExecutionContext); } catch (ExecException e) { throw e.toActionExecutionException("Linking of rule '" + getOwner().getLabel() + "'", executor.getVerboseFailures(), this); |