aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Ulf Adams <ulfjack@google.com>2017-02-10 09:15:59 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2017-02-10 15:35:56 +0000
commit500a805f53dd2b99406b7793df546967fe3ec6e2 (patch)
tree64a0db5e8edb7d885f946e0993c57472a2d92311 /src
parent29aa0eb17c85a96e3edae8362ba93fddeed4c1e0 (diff)
Change CppCompileAction to store execution info as a map
Update the builder to allow setting arbitrary execution info. -- PiperOrigin-RevId: 147130533 MOS_MIGRATED_REVID=147130533
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java6
3 files changed, 22 insertions, 18 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index 2e4b52f5be..6d73265772 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -195,7 +195,7 @@ public class CppCompileAction extends AbstractAction
// files--such as Clif--may use this mechanism.
private final ImmutableList<Artifact> additionalIncludeScannables;
@VisibleForTesting public final CppCompileCommandLine cppCompileCommandLine;
- private final ImmutableSet<String> executionRequirements;
+ private final ImmutableMap<String, String> executionInfo;
private final ImmutableMap<String, String> environment;
@VisibleForTesting final CppConfiguration cppConfiguration;
@@ -303,7 +303,7 @@ public class CppCompileAction extends AbstractAction
Iterable<IncludeScannable> lipoScannables,
ImmutableList<Artifact> additionalIncludeScannables,
UUID actionClassId,
- ImmutableSet<String> executionRequirements,
+ ImmutableMap<String, String> executionInfo,
ImmutableMap<String, String> environment,
String actionName,
RuleContext ruleContext,
@@ -344,7 +344,7 @@ public class CppCompileAction extends AbstractAction
this.actionContext = actionContext;
this.lipoScannables = lipoScannables;
this.actionClassId = actionClassId;
- this.executionRequirements = executionRequirements;
+ this.executionInfo = executionInfo;
this.environment = environment;
// We do not need to include the middleman artifact since it is a generated
@@ -847,11 +847,7 @@ public class CppCompileAction extends AbstractAction
@Override
public ImmutableMap<String, String> getExecutionInfo() {
- ImmutableMap.Builder<String, String> result = ImmutableMap.<String, String>builder();
- for (String requirement : executionRequirements) {
- result.put(requirement, "");
- }
- return result.build();
+ return executionInfo;
}
/**
@@ -1184,7 +1180,7 @@ public class CppCompileAction extends AbstractAction
Fingerprint f = new Fingerprint();
f.addUUID(actionClassId);
f.addStringMap(getEnvironment());
- f.addStrings(executionRequirements);
+ f.addStringMap(executionInfo);
// For the argv part of the cache key, ignore all compiler flags that explicitly denote module
// file (.pcm) inputs. Depending on input discovery, some of the unused ones are removed from
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
index decb598117..ee606bc14b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
@@ -19,7 +19,6 @@ import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
@@ -81,6 +80,7 @@ public class CppCompileActionBuilder {
new ImmutableList.Builder<>();
private RuleContext ruleContext = null;
private Boolean shouldScanIncludes;
+ private Map<String, String> executionInfo = new LinkedHashMap<>();
private Map<String, String> environment = new LinkedHashMap<>();
private CppSemantics cppSemantics;
private CcToolchainProvider ccToolchain;
@@ -155,6 +155,7 @@ public class CppCompileActionBuilder {
this.lipoScannableMap = other.lipoScannableMap;
this.ruleContext = other.ruleContext;
this.shouldScanIncludes = other.shouldScanIncludes;
+ this.executionInfo = new LinkedHashMap<>(other.executionInfo);
this.environment = new LinkedHashMap<>(other.environment);
this.cppSemantics = other.cppSemantics;
this.ccToolchain = other.ccToolchain;
@@ -277,10 +278,11 @@ public class CppCompileActionBuilder {
// If the crosstool uses action_configs to configure cc compilation, collect execution info
// from there, otherwise, use no execution info.
// TODO(b/27903698): Assert that the crosstool has an action_config for this action.
- ImmutableSet<String> executionRequirements = ImmutableSet.of();
if (featureConfiguration.actionIsConfigured(getActionName())) {
- executionRequirements =
- featureConfiguration.getToolForAction(getActionName()).getExecutionRequirements();
+ for (String executionRequirement :
+ featureConfiguration.getToolForAction(getActionName()).getExecutionRequirements()) {
+ executionInfo.put(executionRequirement, "");
+ }
}
NestedSet<Artifact> realMandatoryInputs = realMandatoryInputsBuilder.build();
@@ -317,7 +319,8 @@ public class CppCompileActionBuilder {
getNocoptPredicate(nocopts),
ruleContext,
cppSemantics,
- ccToolchain);
+ ccToolchain,
+ ImmutableMap.copyOf(executionInfo));
} else {
return new CppCompileAction(
owner,
@@ -348,7 +351,7 @@ public class CppCompileActionBuilder {
getLipoScannables(realMandatoryInputs),
additionalIncludeFiles.build(),
actionClassId,
- executionRequirements,
+ ImmutableMap.copyOf(executionInfo),
ImmutableMap.copyOf(environment),
getActionName(),
ruleContext,
@@ -379,6 +382,11 @@ public class CppCompileActionBuilder {
return this;
}
+ public CppCompileActionBuilder addExecutionInfo(Map<String, String> executionInfo) {
+ this.executionInfo.putAll(executionInfo);
+ return this;
+ }
+
public CppCompileActionBuilder setSpecialInputsHandler(
SpecialInputsHandler specialInputsHandler) {
this.specialInputsHandler = specialInputsHandler;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java
index 1e589edd80..dc42ddd235 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java
@@ -21,7 +21,6 @@ import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
@@ -84,7 +83,8 @@ public class FakeCppCompileAction extends CppCompileAction {
Predicate<String> nocopts,
RuleContext ruleContext,
CppSemantics cppSemantics,
- CcToolchainProvider ccToolchain) {
+ CcToolchainProvider ccToolchain,
+ ImmutableMap<String, String> executionInfo) {
super(
owner,
features,
@@ -121,7 +121,7 @@ public class FakeCppCompileAction extends CppCompileAction {
ImmutableList.<IncludeScannable>of(),
ImmutableList.<Artifact>of(),
GUID,
- ImmutableSet.<String>of(),
+ executionInfo,
ImmutableMap.<String, String>of(),
CppCompileAction.CPP_COMPILE,
ruleContext,