Fix DependencyResolver to properly handle toolchain dependencies for output files.
Output files may have toolchains when an aspect is evaluated over the output file.
PiperOrigin-RevId: 448492867
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 b0bced2..eb7f09d 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
@@ -225,6 +225,7 @@
attributeMap,
node.getConfiguration());
}
+ addToolchainDeps(toolchainContexts, outgoingLabels);
} else if (target instanceof InputFile) {
visitTargetVisibility(node, outgoingLabels);
} else if (target instanceof EnvironmentGroup) {
@@ -525,6 +526,12 @@
rule.getPackage().getDefaultRestrictedTo());
}
+ addToolchainDeps(toolchainContexts, outgoingLabels);
+ }
+
+ private void addToolchainDeps(
+ ToolchainCollection<ToolchainContext> toolchainContexts,
+ OrderedSetMultimap<DependencyKind, Label> outgoingLabels) {
if (toolchainContexts != null) {
for (Map.Entry<String, ToolchainContext> entry :
toolchainContexts.getContextMap().entrySet()) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
index 3f1a64c..da6ecbd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java
@@ -86,8 +86,6 @@
ImmutableMap<ToolchainTypeInfo, ToolchainInfo> toolchains = toolchainsBuilder.buildOrThrow();
// Verify that all mandatory toolchain type requirements are present.
- // TODO(b/232128775): Re-enable once aspect toolchain merging is fixed.
- /*
for (ToolchainTypeRequirement toolchainTypeRequirement :
unloadedToolchainContext.toolchainTypes()) {
if (toolchainTypeRequirement.mandatory()) {
@@ -99,7 +97,6 @@
}
}
}
- */
return new AutoValue_ResolvedToolchainContext(
// super:
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContextTest.java b/src/test/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContextTest.java
index 8fddca5..b8197d2 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContextTest.java
@@ -30,7 +30,6 @@
import com.google.devtools.build.lib.skyframe.ToolchainException;
import com.google.devtools.build.lib.skyframe.UnloadedToolchainContext;
import com.google.devtools.build.lib.skyframe.UnloadedToolchainContextImpl;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -89,9 +88,7 @@
.isEqualTo("baz");
}
- // TODO(b/232128775): Re-enable once aspect toolchain merging is fixed.
@Test
- @Ignore("b/232128775")
public void load_mandatory_missing() throws Exception {
ToolchainContextKey toolchainContextKey =
ToolchainContextKey.key()
diff --git a/src/test/shell/integration/toolchain_test.sh b/src/test/shell/integration/toolchain_test.sh
index bf19337..fdd8737 100755
--- a/src/test/shell/integration/toolchain_test.sh
+++ b/src/test/shell/integration/toolchain_test.sh
@@ -143,6 +143,7 @@
implementation = _impl,
attrs = {},
toolchains = ['//${pkg}/toolchain:${toolchain_name}'],
+ apply_to_generating_rules = True,
)
EOF
}
@@ -727,8 +728,7 @@
bazel build \
--aspects //${pkg}/toolchain:aspect_use_toolchain.bzl%use_toolchain \
"//${pkg}/demo:use.log" &> $TEST_log || fail "Build failed"
- # TODO(b/232128775): Re-enable once aspect toolchain merging is fixed.
- #expect_log 'Using toolchain in aspect: rule message: "bar from demo", toolchain extra_str: "foo from test_toolchain"'
+ expect_log 'Using toolchain in aspect: rule message: "bar from demo", toolchain extra_str: "foo from test_toolchain"'
}
function test_toolchain_use_in_aspect_non_required_toolchain {