diff options
author | John Cater <jcater@google.com> | 2017-12-04 19:34:53 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2017-12-04 19:37:08 -0800 |
commit | 9ac1f287eab0ce2fa0e3c685cd218832091f19e9 (patch) | |
tree | c58bbb5df9a84f53cae62f18450cf1c10ba8010e /src/main/java | |
parent | ddd5ac16aeffa6c4693c348f73e7365240b1abc5 (diff) |
Added execution platform to the ActionExecutionMetadata.
Part of #4128.
Change-Id: Id822d3ae6f8daf7c92a75bd8bd28590d4f625845
PiperOrigin-RevId: 177905460
Diffstat (limited to 'src/main/java')
12 files changed, 85 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java index 04f74585c2..0b272fbbcb 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java +++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java @@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.extra.ExtraActionInfo; +import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.CollectionUtils; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; @@ -45,6 +46,7 @@ import java.io.IOException; import java.util.Collection; import java.util.Map; import java.util.Map.Entry; +import javax.annotation.Nullable; import javax.annotation.concurrent.GuardedBy; /** @@ -600,4 +602,10 @@ public abstract class AbstractAction implements Action, SkylarkValue { public SkylarkDict<String, String> getSkylarkSubstitutions() { return null; } + + @Nullable + @Override + public PlatformInfo getExecutionPlatform() { + return null; + } } diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionMetadata.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionMetadata.java index ec94b6c72a..57ad70d90d 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionMetadata.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionMetadata.java @@ -13,6 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.actions; +import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import javax.annotation.Nullable; @@ -126,4 +127,11 @@ public interface ActionExecutionMetadata extends ActionAnalysisMetadata { */ @ThreadSafe boolean discoversInputs(); + + /** + * Returns the {@link PlatformInfo} platform this action should be executed on. If the execution + * platform is {@code null}, then the host platform is assumed. + */ + @Nullable + PlatformInfo getExecutionPlatform(); } diff --git a/src/main/java/com/google/devtools/build/lib/actions/BUILD b/src/main/java/com/google/devtools/build/lib/actions/BUILD index 9b8d8bc600..608ea70b8d 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/BUILD +++ b/src/main/java/com/google/devtools/build/lib/actions/BUILD @@ -23,6 +23,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib:unix", "//src/main/java/com/google/devtools/build/lib:util", + "//src/main/java/com/google/devtools/build/lib/analysis/platform", "//src/main/java/com/google/devtools/build/lib/buildeventstream", "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto", "//src/main/java/com/google/devtools/build/lib/causes", diff --git a/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java b/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java index bc52055207..437f4b1773 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java +++ b/src/main/java/com/google/devtools/build/lib/actions/BaseSpawn.java @@ -17,11 +17,13 @@ package com.google.devtools.build.lib.actions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; +import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; /** Base implementation of a Spawn. */ @@ -147,4 +149,10 @@ public class BaseSpawn implements Spawn { public String getMnemonic() { return action.getMnemonic(); } + + @Override + @Nullable + public PlatformInfo getExecutionPlatform() { + return action.getExecutionPlatform(); + } } diff --git a/src/main/java/com/google/devtools/build/lib/actions/DelegateSpawn.java b/src/main/java/com/google/devtools/build/lib/actions/DelegateSpawn.java index fd548b66cd..eb09c6ee8e 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/DelegateSpawn.java +++ b/src/main/java/com/google/devtools/build/lib/actions/DelegateSpawn.java @@ -16,7 +16,9 @@ package com.google.devtools.build.lib.actions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import java.util.Collection; +import javax.annotation.Nullable; /** * A delegating spawn that allow us to overwrite certain methods while maintaining the original @@ -84,4 +86,10 @@ public class DelegateSpawn implements Spawn { public String getMnemonic() { return spawn.getMnemonic(); } + + @Override + @Nullable + public PlatformInfo getExecutionPlatform() { + return spawn.getExecutionPlatform(); + } } diff --git a/src/main/java/com/google/devtools/build/lib/actions/SimpleSpawn.java b/src/main/java/com/google/devtools/build/lib/actions/SimpleSpawn.java index 3857783cb5..19cfedb81e 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/SimpleSpawn.java +++ b/src/main/java/com/google/devtools/build/lib/actions/SimpleSpawn.java @@ -17,6 +17,8 @@ package com.google.devtools.build.lib.actions; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.analysis.platform.PlatformInfo; +import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; /** @@ -135,4 +137,10 @@ public final class SimpleSpawn implements Spawn { public String getMnemonic() { return owner.getMnemonic(); } + + @Override + @Nullable + public PlatformInfo getExecutionPlatform() { + return null; + } } diff --git a/src/main/java/com/google/devtools/build/lib/actions/Spawn.java b/src/main/java/com/google/devtools/build/lib/actions/Spawn.java index 3a59d9ffb3..7e51517483 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/Spawn.java +++ b/src/main/java/com/google/devtools/build/lib/actions/Spawn.java @@ -16,7 +16,9 @@ package com.google.devtools.build.lib.actions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import java.util.Collection; +import javax.annotation.Nullable; /** * An object representing a subprocess to be invoked, including its command and @@ -107,4 +109,7 @@ public interface Spawn { * Returns a mnemonic (string constant) for this kind of spawn. */ String getMnemonic(); + + @Nullable + PlatformInfo getExecutionPlatform(); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java index 74bd33a0d6..7dd7312e6e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java @@ -55,6 +55,7 @@ import com.google.devtools.build.lib.analysis.AnalysisEnvironment; import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.NestedSetView; @@ -109,6 +110,8 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie private final ExtraActionInfoSupplier<?> extraActionInfoSupplier; + @Nullable private final PlatformInfo executionPlatform; + /** * Constructs a SpawnAction using direct initialization arguments. * @@ -154,6 +157,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie EmptyRunfilesSupplier.INSTANCE, mnemonic, false, + null, null); } @@ -195,7 +199,8 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie RunfilesSupplier runfilesSupplier, String mnemonic, boolean executeUnconditionally, - ExtraActionInfoSupplier<?> extraActionInfoSupplier) { + ExtraActionInfoSupplier<?> extraActionInfoSupplier, + @Nullable PlatformInfo executionPlatform) { super(owner, tools, inputs, runfilesSupplier, outputs, env); this.resourceSet = resourceSet; this.executionInfo = executionInfo; @@ -205,6 +210,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie this.mnemonic = mnemonic; this.executeUnconditionally = executeUnconditionally; this.extraActionInfoSupplier = extraActionInfoSupplier; + this.executionPlatform = executionPlatform; } @Override @@ -460,6 +466,12 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie return actionExecutionContext.getSpawnActionContext(getMnemonic()); } + @Override + @Nullable + public PlatformInfo getExecutionPlatform() { + return executionPlatform; + } + /** * A spawn instance that is tied to a specific SpawnAction. */ @@ -611,6 +623,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie private String mnemonic = "Unknown"; protected ExtraActionInfoSupplier<?> extraActionInfoSupplier = null; private boolean disableSandboxing = false; + @Nullable private PlatformInfo executionPlatform; /** * Creates a SpawnAction builder. @@ -638,6 +651,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie this.commandLines = Lists.newArrayList(other.commandLines); this.progressMessage = other.progressMessage; this.mnemonic = other.mnemonic; + this.executionPlatform = other.executionPlatform; } /** @@ -806,7 +820,8 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie progressMessage, new CompositeRunfilesSupplier( Iterables.concat(this.inputRunfilesSuppliers, this.toolRunfilesSuppliers)), - mnemonic); + mnemonic, + executionPlatform); } /** @@ -837,7 +852,8 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie ImmutableMap<String, String> executionInfo, CharSequence progressMessage, RunfilesSupplier runfilesSupplier, - String mnemonic) { + String mnemonic, + PlatformInfo executionPlatform) { return new SpawnAction( owner, tools, @@ -852,7 +868,8 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie runfilesSupplier, mnemonic, executeUnconditionally, - extraActionInfoSupplier); + extraActionInfoSupplier, + executionPlatform); } private ImmutableList<String> buildExecutableArgs( @@ -1354,6 +1371,11 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie this.disableSandboxing = true; return this; } + + public Builder setExecutionPlatform(@Nullable PlatformInfo executionPlatform) { + this.executionPlatform = executionPlatform; + return this; + } } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java index e29f0e546a..645348264f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java @@ -87,6 +87,7 @@ public final class ExtraAction extends SpawnAction { new CompositeRunfilesSupplier(shadowedAction.getRunfilesSupplier(), runfilesSupplier), mnemonic, false, + null, null); this.shadowedAction = shadowedAction; this.createDummyOutput = createDummyOutput; 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 70586b8efb..bb87356728 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 @@ -29,6 +29,7 @@ import com.google.devtools.build.lib.actions.ResourceSet; import com.google.devtools.build.lib.actions.RunfilesSupplier; import com.google.devtools.build.lib.analysis.actions.CommandLine; import com.google.devtools.build.lib.analysis.actions.SpawnAction; +import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -74,7 +75,8 @@ public final class LtoBackendAction extends SpawnAction { Map<String, String> executionInfo, CharSequence progressMessage, RunfilesSupplier runfilesSupplier, - String mnemonic) { + String mnemonic, + @Nullable PlatformInfo executionPlatform) { super( owner, ImmutableList.<Artifact>of(), @@ -89,7 +91,8 @@ public final class LtoBackendAction extends SpawnAction { runfilesSupplier, mnemonic, false, - null); + null, + executionPlatform); mandatoryInputs = inputs; Preconditions.checkState( (bitcodeFiles == null) == (imports == null), @@ -219,7 +222,8 @@ public final class LtoBackendAction extends SpawnAction { ImmutableMap<String, String> executionInfo, CharSequence progressMessage, RunfilesSupplier runfilesSupplier, - String mnemonic) { + String mnemonic, + @Nullable PlatformInfo executionPlatform) { return new LtoBackendAction( inputsAndTools.toCollection(), bitcodeFiles, @@ -232,7 +236,8 @@ public final class LtoBackendAction extends SpawnAction { executionInfo, progressMessage, runfilesSupplier, - mnemonic); + mnemonic, + executionPlatform); } } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleAction.java b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleAction.java index 7cf23808ec..728c07cbe8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleAction.java @@ -64,6 +64,7 @@ public class GenRuleAction extends SpawnAction { runfilesSupplier, "Genrule", false, + null, null); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java index f9d634980b..1dbd8b73c4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java @@ -210,7 +210,8 @@ public final class JavaCompileAction extends SpawnAction { runfiles, "Javac", false /*executeUnconditionally*/, - null /*extraActionInfoSupplier*/); + null /*extraActionInfoSupplier*/, + null /*executionPlatform*/); this.javaCompileCommandLine = javaCompileCommandLine; this.commandLine = commandLine; |