aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
diff options
context:
space:
mode:
authorGravatar Ulf Adams <ulfjack@google.com>2017-03-06 12:17:20 +0000
committerGravatar Vladimir Moskva <vladmos@google.com>2017-03-06 14:44:23 +0000
commita812e0a5d188982397ee0a4ca69de7fa21a5088a (patch)
treedb028db7273ead8357570e7dc6da6202761a8278 /src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
parent2b01b5dd950bbd078a61f3451a5eb0383ea8f270 (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.java38
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);