Create a real ToolchainContext for PostConfiguredTargetFunction.

Part of work on execution transitions, #7935.

Closes #8142.

PiperOrigin-RevId: 245268176
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
index 1c66edd..dddc151 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
@@ -107,6 +107,38 @@
       return null;
     }
 
+    // Determine what toolchains are needed by this target.
+    UnloadedToolchainContext unloadedToolchainContext = null;
+    try {
+      if (configuredTargetAndData.getTarget() instanceof Rule) {
+        Rule rule = ((Rule) configuredTargetAndData.getTarget());
+        if (rule.getRuleClassObject().supportsPlatforms()) {
+          ImmutableSet<Label> requiredToolchains =
+              rule.getRuleClassObject().getRequiredToolchains();
+
+          // Collect local (target, rule) constraints for filtering out execution platforms.
+          ImmutableSet<Label> execConstraintLabels =
+              ConfiguredTargetFunction.getExecutionPlatformConstraints(rule);
+          unloadedToolchainContext =
+              (UnloadedToolchainContext)
+                  env.getValueOrThrow(
+                      UnloadedToolchainContext.key()
+                          .configurationKey(
+                              BuildConfigurationValue.key(
+                                  configuredTargetAndData.getConfiguration()))
+                          .requiredToolchainTypeLabels(requiredToolchains)
+                          .execConstraintLabels(execConstraintLabels)
+                          .build(),
+                      ToolchainException.class);
+          if (env.valuesMissing()) {
+            return null;
+          }
+        }
+      }
+    } catch (ToolchainException e) {
+      throw new PostConfiguredTargetFunctionException(e.asConfiguredValueCreationException());
+    }
+
     OrderedSetMultimap<DependencyKind, Dependency> deps;
     try {
       BuildConfiguration hostConfiguration =
@@ -124,7 +156,9 @@
               hostConfiguration,
               /*aspect=*/ null,
               configConditions,
-              /*toolchainLabels=*/ ImmutableSet.of(),
+              unloadedToolchainContext == null
+                  ? ImmutableSet.of()
+                  : unloadedToolchainContext.resolvedToolchainLabels(),
               ruleClassProvider.getTrimmingTransitionFactory());
       deps =
           ConfigurationResolver.resolveConfigurations(