diff options
author | 2017-02-10 09:15:59 +0000 | |
---|---|---|
committer | 2017-02-10 15:35:56 +0000 | |
commit | 500a805f53dd2b99406b7793df546967fe3ec6e2 (patch) | |
tree | 64a0db5e8edb7d885f946e0993c57472a2d92311 /src | |
parent | 29aa0eb17c85a96e3edae8362ba93fddeed4c1e0 (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')
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, |