Added execution platform to the ActionExecutionMetadata. Part of #4128. Change-Id: Id822d3ae6f8daf7c92a75bd8bd28590d4f625845 PiperOrigin-RevId: 177905460
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 04f7458..0b272fb 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.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.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 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 ec94b6c..57ad70d 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 @@ */ @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 9b8d8bc..608ea70 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 @@ "//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 bc52055..437f4b1 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 @@ 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 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 fd548b6..eb09c6e 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 @@ 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 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 3857783..19cfedb 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 @@ 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 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 3a59d9f..7e51517 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 @@ 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 @@ * 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 74bd33a..7dd7312 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.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 @@ private final ExtraActionInfoSupplier<?> extraActionInfoSupplier; + @Nullable private final PlatformInfo executionPlatform; + /** * Constructs a SpawnAction using direct initialization arguments. * @@ -154,6 +157,7 @@ EmptyRunfilesSupplier.INSTANCE, mnemonic, false, + null, null); } @@ -195,7 +199,8 @@ 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 @@ this.mnemonic = mnemonic; this.executeUnconditionally = executeUnconditionally; this.extraActionInfoSupplier = extraActionInfoSupplier; + this.executionPlatform = executionPlatform; } @Override @@ -460,6 +466,12 @@ 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 @@ private String mnemonic = "Unknown"; protected ExtraActionInfoSupplier<?> extraActionInfoSupplier = null; private boolean disableSandboxing = false; + @Nullable private PlatformInfo executionPlatform; /** * Creates a SpawnAction builder. @@ -638,6 +651,7 @@ this.commandLines = Lists.newArrayList(other.commandLines); this.progressMessage = other.progressMessage; this.mnemonic = other.mnemonic; + this.executionPlatform = other.executionPlatform; } /** @@ -806,7 +820,8 @@ progressMessage, new CompositeRunfilesSupplier( Iterables.concat(this.inputRunfilesSuppliers, this.toolRunfilesSuppliers)), - mnemonic); + mnemonic, + executionPlatform); } /** @@ -837,7 +852,8 @@ ImmutableMap<String, String> executionInfo, CharSequence progressMessage, RunfilesSupplier runfilesSupplier, - String mnemonic) { + String mnemonic, + PlatformInfo executionPlatform) { return new SpawnAction( owner, tools, @@ -852,7 +868,8 @@ runfilesSupplier, mnemonic, executeUnconditionally, - extraActionInfoSupplier); + extraActionInfoSupplier, + executionPlatform); } private ImmutableList<String> buildExecutableArgs( @@ -1354,6 +1371,11 @@ 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 e29f0e5..6453482 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 @@ 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 70586b8..bb87356 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.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 @@ Map<String, String> executionInfo, CharSequence progressMessage, RunfilesSupplier runfilesSupplier, - String mnemonic) { + String mnemonic, + @Nullable PlatformInfo executionPlatform) { super( owner, ImmutableList.<Artifact>of(), @@ -89,7 +91,8 @@ runfilesSupplier, mnemonic, false, - null); + null, + executionPlatform); mandatoryInputs = inputs; Preconditions.checkState( (bitcodeFiles == null) == (imports == null), @@ -219,7 +222,8 @@ 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 @@ 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 7cf2380..728c07c 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 @@ 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 f9d6349..1dbd8b7 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 @@ runfiles, "Javac", false /*executeUnconditionally*/, - null /*extraActionInfoSupplier*/); + null /*extraActionInfoSupplier*/, + null /*executionPlatform*/); this.javaCompileCommandLine = javaCompileCommandLine; this.commandLine = commandLine;
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index c511698..53a3c6b 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -326,6 +326,7 @@ "//src/main/java/com/google/devtools/build/lib:packages", "//src/main/java/com/google/devtools/build/lib:util", "//src/main/java/com/google/devtools/build/lib/actions", + "//src/main/java/com/google/devtools/build/lib/analysis/platform", "//src/main/java/com/google/devtools/build/lib/clock", "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", @@ -382,6 +383,7 @@ "//src/main/java/com/google/devtools/build/lib:runtime", "//src/main/java/com/google/devtools/build/lib:util", "//src/main/java/com/google/devtools/build/lib/actions", + "//src/main/java/com/google/devtools/build/lib/analysis/platform", "//src/main/java/com/google/devtools/build/lib/clock", "//src/main/java/com/google/devtools/build/lib/collect", "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
diff --git a/src/test/java/com/google/devtools/build/lib/actions/ResourceManagerTest.java b/src/test/java/com/google/devtools/build/lib/actions/ResourceManagerTest.java index 947b557..fe47768 100644 --- a/src/test/java/com/google/devtools/build/lib/actions/ResourceManagerTest.java +++ b/src/test/java/com/google/devtools/build/lib/actions/ResourceManagerTest.java
@@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.ResourceManager.ResourceHandle; +import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.testutil.TestThread; import com.google.devtools.build.lib.testutil.TestUtils; import java.util.concurrent.CyclicBarrier; @@ -573,5 +574,11 @@ public MiddlemanType getActionType() { throw new IllegalStateException(); } + + @Nullable + @Override + public PlatformInfo getExecutionPlatform() { + throw new IllegalStateException(); + } } }
diff --git a/src/test/java/com/google/devtools/build/lib/exec/util/FakeOwner.java b/src/test/java/com/google/devtools/build/lib/exec/util/FakeOwner.java index 37e4515..caf7b51 100644 --- a/src/test/java/com/google/devtools/build/lib/exec/util/FakeOwner.java +++ b/src/test/java/com/google/devtools/build/lib/exec/util/FakeOwner.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.RunfilesSupplier; +import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.AspectDescriptor; import javax.annotation.Nullable; @@ -152,4 +153,10 @@ public boolean shouldReportPathPrefixConflict(ActionAnalysisMetadata action) { throw new UnsupportedOperationException(); } + + @Nullable + @Override + public PlatformInfo getExecutionPlatform() { + throw new IllegalStateException(); + } }