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 | |
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')
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), |