aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
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
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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelActionContextConsumer.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java38
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionContext.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/SpawnLinkStrategy.java49
-rw-r--r--src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java2
5 files changed, 35 insertions, 89 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelActionContextConsumer.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelActionContextConsumer.java
index 03bf7d471e..58c3640825 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelActionContextConsumer.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelActionContextConsumer.java
@@ -23,7 +23,6 @@ import com.google.devtools.build.lib.bazel.rules.BazelRulesModule.BazelExecution
import com.google.devtools.build.lib.exec.ActionContextConsumer;
import com.google.devtools.build.lib.rules.android.WriteAdbArgsActionContext;
import com.google.devtools.build.lib.rules.cpp.CppCompileActionContext;
-import com.google.devtools.build.lib.rules.cpp.CppLinkActionContext;
import com.google.devtools.build.lib.rules.cpp.IncludeScanningContext;
import java.util.Map;
import java.util.TreeMap;
@@ -73,7 +72,6 @@ public class BazelActionContextConsumer implements ActionContextConsumer {
public Multimap<Class<? extends ActionContext>, String> getActionContexts() {
return ImmutableMultimap.<Class<? extends ActionContext>, String>builder()
.put(CppCompileActionContext.class, "")
- .put(CppLinkActionContext.class, "")
.put(IncludeScanningContext.class, "")
.put(FileWriteActionContext.class, "")
.put(WriteAdbArgsActionContext.class, "")
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);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionContext.java
deleted file mode 100644
index bf0bd3e9e2..0000000000
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionContext.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.rules.cpp;
-
-import com.google.devtools.build.lib.actions.ActionContextMarker;
-import com.google.devtools.build.lib.actions.ActionExecutionContext;
-import com.google.devtools.build.lib.actions.ActionExecutionException;
-import com.google.devtools.build.lib.actions.ExecException;
-import com.google.devtools.build.lib.actions.Executor.ActionContext;
-
-/**
- * Context for executing {@link CppLinkAction}s.
- */
-@ActionContextMarker(name = "C++ link")
-public interface CppLinkActionContext extends ActionContext {
- /**
- * Executes the specified action.
- */
- void exec(CppLinkAction action,
- ActionExecutionContext actionExecutionContext)
- throws ExecException, ActionExecutionException, InterruptedException;
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/SpawnLinkStrategy.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/SpawnLinkStrategy.java
deleted file mode 100644
index 9360d2a185..0000000000
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/SpawnLinkStrategy.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2015 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.rules.cpp;
-
-import com.google.devtools.build.lib.actions.ActionExecutionContext;
-import com.google.devtools.build.lib.actions.ActionExecutionException;
-import com.google.devtools.build.lib.actions.BaseSpawn;
-import com.google.devtools.build.lib.actions.ExecException;
-import com.google.devtools.build.lib.actions.ExecutionStrategy;
-import com.google.devtools.build.lib.actions.Executor;
-import com.google.devtools.build.lib.actions.Spawn;
-import com.google.devtools.build.lib.actions.SpawnActionContext;
-
-/**
- * A link strategy that simply passes the everything through to the default spawn action strategy.
- */
-@ExecutionStrategy(
- contextType = CppLinkActionContext.class,
- name = {"spawn"}
-)
-public final class SpawnLinkStrategy implements CppLinkActionContext {
-
- @Override
- public void exec(CppLinkAction action, ActionExecutionContext actionExecutionContext)
- throws ExecException, ActionExecutionException, InterruptedException {
- Executor executor = actionExecutionContext.getExecutor();
- SpawnActionContext spawnActionContext = executor.getSpawnActionContext(action.getMnemonic());
- Spawn spawn =
- new BaseSpawn(
- action.getCommandLine(),
- action.getEnvironment(),
- action.getExecutionInfo(),
- action,
- action.estimateResourceConsumptionLocal());
- spawnActionContext.exec(spawn, actionExecutionContext);
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java
index 1e74c9b530..ff4ddbea4b 100644
--- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java
@@ -29,7 +29,6 @@ import com.google.devtools.build.lib.exec.StandaloneTestStrategy;
import com.google.devtools.build.lib.exec.TestStrategy;
import com.google.devtools.build.lib.rules.cpp.IncludeScanningContext;
import com.google.devtools.build.lib.rules.cpp.SpawnGccStrategy;
-import com.google.devtools.build.lib.rules.cpp.SpawnLinkStrategy;
import com.google.devtools.build.lib.rules.test.ExclusiveTestStrategy;
import com.google.devtools.build.lib.rules.test.TestActionContext;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
@@ -88,7 +87,6 @@ public class StandaloneActionContextProvider extends ActionContextProvider {
verboseFailures,
env.getRuntime().getProductName()),
new DummyIncludeScanningContext(),
- new SpawnLinkStrategy(),
new SpawnGccStrategy(),
testStrategy,
new ExclusiveTestStrategy(testStrategy),