diff options
author | 2017-02-24 11:30:04 +0000 | |
---|---|---|
committer | 2017-02-24 15:13:50 +0000 | |
commit | e98f50cb5739bfc5dd7fa3d730b47c38ce46b437 (patch) | |
tree | ae74d1e1e860a52ae08b750768ff87a0c8938b21 /src/main/java/com/google/devtools/build/lib/rules | |
parent | a28b54033227d930672ec7f2714de52e5e0a67eb (diff) |
Rollback of commit e716ae46f359dc1361574f44569811ff80a758ac.
--
PiperOrigin-RevId: 148445872
MOS_MIGRATED_REVID=148445872
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
3 files changed, 37 insertions, 21 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 7f433726c6..1814e2516c 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 @@ -438,8 +438,7 @@ public class CppCompileAction extends AbstractAction @Nullable @Override - public synchronized Iterable<Artifact> discoverInputs( - ActionExecutionContext actionExecutionContext) + public Iterable<Artifact> discoverInputs(ActionExecutionContext actionExecutionContext) throws ActionExecutionException, InterruptedException { Executor executor = actionExecutionContext.getExecutor(); Iterable<Artifact> initialResult; @@ -1266,6 +1265,32 @@ public class CppCompileAction extends AbstractAction } } + /** + * Provides list of include files needed for performing extra actions on this action when run + * remotely. The list of include files is created by performing a header scan on the known input + * files. + */ + @Override + public Iterable<Artifact> getInputFilesForExtraAction( + ActionExecutionContext actionExecutionContext) + throws ActionExecutionException, InterruptedException { + Iterable<Artifact> scannedIncludes; + try { + scannedIncludes = actionExecutionContext.getExecutor().getContext(actionContext) + .findAdditionalInputs(this, actionExecutionContext, cppSemantics.getIncludeProcessing()); + } catch (ExecException e) { + throw e.toActionExecutionException(this); + } + + if (scannedIncludes == null) { + return ImmutableList.of(); + } + + // Use a set to eliminate duplicates. + ImmutableSet.Builder<Artifact> result = ImmutableSet.builder(); + return result.addAll(getInputs()).addAll(scannedIncludes).build(); + } + @Override public String getMnemonic() { return "CppCompile"; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendAction.java index e6d35fe128..0b71041ceb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LTOBackendAction.java @@ -117,8 +117,7 @@ public final class LTOBackendAction extends SpawnAction { @Nullable @Override - public synchronized Iterable<Artifact> discoverInputs( - ActionExecutionContext actionExecutionContext) + public Iterable<Artifact> discoverInputs(ActionExecutionContext actionExecutionContext) throws ActionExecutionException, InterruptedException { // Build set of files this LTO backend artifact will import from. HashSet<PathFragment> importSet = new HashSet<>(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraAction.java b/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraAction.java index a135ff75d5..866e45e20a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/extra/ExtraAction.java @@ -18,7 +18,6 @@ import com.google.common.base.Function; 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.AbstractAction; import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.actions.ActionExecutionContext; @@ -52,7 +51,6 @@ public final class ExtraAction extends SpawnAction { private final boolean createDummyOutput; private final RunfilesSupplier runfilesSupplier; private final ImmutableSet<Artifact> extraActionInputs; - // This can be read/written from multiple threads, and so accesses should be synchronized. @GuardedBy("this") private boolean inputsKnown; @@ -84,7 +82,7 @@ public final class ExtraAction extends SpawnAction { super( shadowedAction.getOwner(), ImmutableList.<Artifact>of(), - createInputs(shadowedAction.getMandatoryInputs(), extraActionInputs, runfilesSupplier), + createInputs(shadowedAction.getInputs(), extraActionInputs, runfilesSupplier), outputs, AbstractAction.DEFAULT_RESOURCE_SET, argv, @@ -116,24 +114,18 @@ public final class ExtraAction extends SpawnAction { @Nullable @Override - public synchronized Iterable<Artifact> discoverInputs( - ActionExecutionContext actionExecutionContext) + public Iterable<Artifact> discoverInputs(ActionExecutionContext actionExecutionContext) throws ActionExecutionException, InterruptedException { - // Note that discoverInputsStage2() is neither implemented nor called on the shadowed action. - // This means that the input files of extra actions and shadowed actions can be different, but - // it doesn't seem to be a problem in practice and we hope that we can eventually replace this - // awkward hardwired two-stage mechanism with something more principled, for example, being able - // to declare arbitrary Skyframe dependencies on actions and extra actions waiting for shadowed - // actions that make use of this facility to finish. Preconditions.checkState(discoversInputs(), this); // We need to update our inputs to take account of any additional // inputs the shadowed action may need to do its work. - Iterable<Artifact> additionalInputs = shadowedAction.discoverInputs(actionExecutionContext); - updateInputs(createInputs( - Iterables.concat(shadowedAction.getMandatoryInputs(), additionalInputs), - extraActionInputs, - runfilesSupplier)); - return additionalInputs; + if (shadowedAction.discoversInputs() && shadowedAction instanceof AbstractAction) { + Iterable<Artifact> additionalInputs = + ((AbstractAction) shadowedAction).getInputFilesForExtraAction(actionExecutionContext); + updateInputs(createInputs(additionalInputs, extraActionInputs, runfilesSupplier)); + return ImmutableSet.copyOf(additionalInputs); + } + return null; } @Override |