Set the execution platform on a new SpawnAction based on the RuleContext.

Part of #4128.

Change-Id: Ic46d2db2017b6cf4c14a91653ab75b3381b80b5a
PiperOrigin-RevId: 179426362
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index eef1771..755ccd0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -49,6 +49,7 @@
 import com.google.devtools.build.lib.analysis.config.PatchTransition;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
 import com.google.devtools.build.lib.analysis.fileset.FilesetProvider;
+import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
 import com.google.devtools.build.lib.analysis.stringtemplate.TemplateContext;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
@@ -999,6 +1000,15 @@
     return toolchainContext;
   }
 
+  @Override
+  @Nullable
+  public PlatformInfo getExecutionPlatform() {
+    if (getToolchainContext() == null) {
+      return null;
+    }
+    return getToolchainContext().getExecutionPlatform();
+  }
+
   private void checkAttribute(String attributeName, Mode mode) {
     Attribute attributeDefinition = attributes.getAttributeDefinition(attributeName);
     if (attributeDefinition == null) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
index a38a08e..3b10c5a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
@@ -18,7 +18,9 @@
 import com.google.devtools.build.lib.actions.Root;
 import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
 import com.google.devtools.build.lib.vfs.PathFragment;
+import javax.annotation.Nullable;
 
 /**
  * A temporary interface to allow migration from RuleConfiguredTarget to RuleContext. It bundles
@@ -53,4 +55,8 @@
    * method.
    */
   Artifact getDerivedArtifact(PathFragment rootRelativePath, Root root);
+
+  /** Returns the {@link PlatformInfo} describing the execution platform this action should use. */
+  @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 7dd7312..edb6aab 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
@@ -673,6 +673,7 @@
      */
     @CheckReturnValue
     public Action[] build(ActionConstructionContext context) {
+      setExecutionPlatform(context.getExecutionPlatform());
       return build(context.getActionOwner(), context.getAnalysisEnvironment(),
           context.getConfiguration());
     }