Add the ToolchainContextKey to dependency chain classes.
TODOs mark where this will be set and used.
Part of work on toolchain transitions, #10523.
Closes #11575.
PiperOrigin-RevId: 315766282
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
index 796e733..dd89c11 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD
@@ -408,6 +408,7 @@
"//src/main/java/com/google/devtools/build/lib/skyframe:package_value",
"//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value",
"//src/main/java/com/google/devtools/build/lib/skyframe:sane_analysis_exception",
+ "//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_context_key",
"//src/main/java/com/google/devtools/build/lib/skyframe:transitive_target_key",
"//src/main/java/com/google/devtools/build/lib/skyframe:transitive_target_value",
"//src/main/java/com/google/devtools/build/lib/skyframe:workspace_status_value",
@@ -701,6 +702,7 @@
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/packages",
"//src/main/java/com/google/devtools/build/lib/skyframe:configured_target_key",
+ "//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_context_key",
"//third_party:auto_value",
"//third_party:guava",
"//third_party:jsr305",
@@ -715,7 +717,9 @@
":config/transitions/configuration_transition",
":dependency",
"//src/main/java/com/google/devtools/build/lib/cmdline",
+ "//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_context_key",
"//third_party:auto_value",
+ "//third_party:jsr305",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
index 449a425..0b07692 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
@@ -21,6 +21,7 @@
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.AspectDescriptor;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
+import com.google.devtools.build.lib.skyframe.ToolchainContextKey;
import javax.annotation.Nullable;
/**
@@ -68,6 +69,13 @@
/** Sets the keys of a configuration transition. */
public abstract Builder setTransitionKeys(ImmutableList<String> keys);
+ /**
+ * Sets the {@link ToolchainContextKey} that this dependency should use for toolchain
+ * resolution.
+ */
+ @Nullable
+ public abstract Builder setToolchainContextKey(ToolchainContextKey toolchainContextKey);
+
// Not public.
abstract Dependency autoBuild();
@@ -141,11 +149,20 @@
*/
public abstract ImmutableList<String> getTransitionKeys();
+ /**
+ * Returns the {@link ToolchainContextKey} that this dependency should use for toolchain
+ * resolution.
+ */
+ @Nullable
+ public abstract ToolchainContextKey getToolchainContextKey();
+
/** Returns the ConfiguredTargetKey needed to fetch this dependency. */
public ConfiguredTargetKey getConfiguredTargetKey() {
- return ConfiguredTargetKey.builder()
- .setLabel(getLabel())
- .setConfiguration(getConfiguration())
- .build();
+ ConfiguredTargetKey.Builder configuredTargetKeyBuilder =
+ ConfiguredTargetKey.builder().setLabel(getLabel()).setConfiguration(getConfiguration());
+ if (getToolchainContextKey() != null) {
+ configuredTargetKeyBuilder.setToolchainContextKey(getToolchainContextKey());
+ }
+ return configuredTargetKeyBuilder.build();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyKey.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyKey.java
index 61e7c12..7750772 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyKey.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyKey.java
@@ -16,6 +16,8 @@
import com.google.auto.value.AutoValue;
import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.skyframe.ToolchainContextKey;
+import javax.annotation.Nullable;
/**
* Information about a dependency, including the label and configuration transition. This will be
@@ -36,6 +38,13 @@
/** Sets the aspects that are propagating to the target this dependency points to. */
Builder setAspects(AspectCollection aspectCollection);
+ /**
+ * Sets the {@link ToolchainContextKey} that this dependency should use for toolchain
+ * resolution.
+ */
+ @Nullable
+ Builder setToolchainContextKey(ToolchainContextKey toolchainContextKey);
+
/** Returns the new instance. */
DependencyKey build();
}
@@ -54,7 +63,16 @@
/** Returns the aspects that are propagating to the target this dependency points to. */
public abstract AspectCollection getAspects();
+ /**
+ * Returns the {@link ToolchainContextKey} that this dependency should use for toolchain
+ * resolution.
+ */
+ @Nullable
+ public abstract ToolchainContextKey getToolchainContextKey();
+
public Dependency.Builder getDependencyBuilder() {
- return Dependency.builder().setLabel(getLabel());
+ return Dependency.builder()
+ .setLabel(getLabel())
+ .setToolchainContextKey(getToolchainContextKey());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
index 6137627..015aff9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
@@ -55,6 +55,7 @@
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.skyframe.ToolchainContextKey;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.OrderedSetMultimap;
import java.util.ArrayList;
@@ -83,6 +84,9 @@
abstract ImmutableList<Aspect> getPropagatingAspects();
+ @Nullable
+ abstract ToolchainContextKey getToolchainContextKey();
+
/** A Builder to create instances of PartiallyResolvedDependency. */
@AutoValue.Builder
abstract static class Builder {
@@ -92,6 +96,9 @@
abstract Builder setPropagatingAspects(List<Aspect> propagatingAspects);
+ @Nullable
+ abstract Builder setToolchainContextKey(ToolchainContextKey toolchainContextKey);
+
abstract PartiallyResolvedDependency build();
}
@@ -101,7 +108,9 @@
}
public DependencyKey.Builder getDependencyKeyBuilder() {
- return DependencyKey.builder().setLabel(getLabel());
+ return DependencyKey.builder()
+ .setLabel(getLabel())
+ .setToolchainContextKey(getToolchainContextKey());
}
}
@@ -273,8 +282,9 @@
TOOLCHAIN_DEPENDENCY,
PartiallyResolvedDependency.builder()
.setLabel(toLabel)
- // TODO(jcater): Replace this with a proper transition for the execution platform.
+ // TODO(#10523): Replace this with a proper transition for the execution platform.
.setTransition(HostTransition.INSTANCE)
+ // TODO(#10523): Set the toolchainContextKey from ToolchainCollection.
.setPropagatingAspects(ImmutableList.of())
.build());
continue;