Skip to content

Commit e6a44f8

Browse files
katrecopybara-github
authored andcommitted
ConfigurationsForTargetsTest should test the exec transition.
The host transition is being removed. Unfortunately this requires a lot more setup to call ConfiguredTargetFunction.computeDependencies correctly. PiperOrigin-RevId: 428855026
1 parent d9fffba commit e6a44f8

File tree

5 files changed

+64
-26
lines changed

5 files changed

+64
-26
lines changed

src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ public UnloadedToolchainContext compute(SkyKey skyKey, Environment env)
6767
ToolchainContextKey key = (ToolchainContextKey) skyKey.argument();
6868

6969
try {
70-
UnloadedToolchainContextImpl.Builder builder =
71-
UnloadedToolchainContextImpl.builder().setKey(key);
70+
UnloadedToolchainContextImpl.Builder builder = UnloadedToolchainContextImpl.builder(key);
7271

7372
// Determine the configuration being used.
7473
BuildConfigurationValue configuration =

src/main/java/com/google/devtools/build/lib/skyframe/UnloadedToolchainContextImpl.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,13 @@
3030
@AutoValue
3131
public abstract class UnloadedToolchainContextImpl implements SkyValue, UnloadedToolchainContext {
3232

33-
public static Builder builder() {
34-
return new AutoValue_UnloadedToolchainContextImpl.Builder();
33+
public static Builder builder(ToolchainContextKey key) {
34+
return new AutoValue_UnloadedToolchainContextImpl.Builder()
35+
.setKey(key)
36+
.setRequiredToolchainTypes(ImmutableSet.of())
37+
.setRequestedLabelToToolchainType(ImmutableMap.of())
38+
.setToolchainTypeToResolved(
39+
ImmutableSetMultimap.<ToolchainTypeInfo, Label>builder().build());
3540
}
3641

3742
/** Builder class to help create the {@link UnloadedToolchainContextImpl}. */

src/test/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContextTest.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ public void load() throws Exception {
5454

5555
// Create a static UnloadedToolchainContext.
5656
UnloadedToolchainContext unloadedToolchainContext =
57-
UnloadedToolchainContextImpl.builder()
58-
.setKey(toolchainContextKey)
57+
UnloadedToolchainContextImpl.builder(toolchainContextKey)
5958
.setExecutionPlatform(linuxPlatform)
6059
.setTargetPlatform(linuxPlatform)
6160
.setRequiredToolchainTypes(ImmutableSet.of(testToolchainType))
@@ -107,8 +106,7 @@ public void load_aliasedToolchain() throws Exception {
107106

108107
// Create a static UnloadedToolchainContext.
109108
UnloadedToolchainContext unloadedToolchainContext =
110-
UnloadedToolchainContextImpl.builder()
111-
.setKey(toolchainContextKey)
109+
UnloadedToolchainContextImpl.builder(toolchainContextKey)
112110
.setExecutionPlatform(linuxPlatform)
113111
.setTargetPlatform(linuxPlatform)
114112
.setRequiredToolchainTypes(ImmutableSet.of(testToolchainType))
@@ -150,8 +148,7 @@ public void load_notToolchain() throws Exception {
150148

151149
// Create a static UnloadedToolchainContext.
152150
UnloadedToolchainContext unloadedToolchainContext =
153-
UnloadedToolchainContextImpl.builder()
154-
.setKey(toolchainContextKey)
151+
UnloadedToolchainContextImpl.builder(toolchainContextKey)
155152
.setExecutionPlatform(linuxPlatform)
156153
.setTargetPlatform(linuxPlatform)
157154
.setRequiredToolchainTypes(ImmutableSet.of(testToolchainType))
@@ -210,8 +207,7 @@ public void load_withTemplateVariables() throws Exception {
210207

211208
// Create a static UnloadedToolchainContext.
212209
UnloadedToolchainContext unloadedToolchainContext =
213-
UnloadedToolchainContextImpl.builder()
214-
.setKey(toolchainContextKey)
210+
UnloadedToolchainContextImpl.builder(toolchainContextKey)
215211
.setExecutionPlatform(linuxPlatform)
216212
.setTargetPlatform(linuxPlatform)
217213
.setRequiredToolchainTypes(ImmutableSet.of(variableToolchainType))

src/test/java/com/google/devtools/build/lib/skyframe/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ java_test(
258258
"//src/main/java/com/google/devtools/build/lib/skyframe:transitive_traversal_value",
259259
"//src/main/java/com/google/devtools/build/lib/skyframe:tree_artifact_value",
260260
"//src/main/java/com/google/devtools/build/lib/skyframe:unloaded_toolchain_context",
261+
"//src/main/java/com/google/devtools/build/lib/skyframe:unloaded_toolchain_context_impl",
261262
"//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_context_key",
262263
"//src/main/java/com/google/devtools/build/lib/skyframe:workspace_info",
263264
"//src/main/java/com/google/devtools/build/lib/skyframe:workspace_name_value",

src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.google.common.collect.Collections2;
2020
import com.google.common.collect.ImmutableList;
2121
import com.google.common.collect.ImmutableMap;
22+
import com.google.common.collect.ImmutableSet;
2223
import com.google.common.collect.Iterables;
2324
import com.google.common.collect.Multimap;
2425
import com.google.devtools.build.lib.analysis.AliasProvider;
@@ -27,12 +28,17 @@
2728
import com.google.devtools.build.lib.analysis.Dependency;
2829
import com.google.devtools.build.lib.analysis.DependencyKind;
2930
import com.google.devtools.build.lib.analysis.DependencyResolver;
31+
import com.google.devtools.build.lib.analysis.PlatformOptions;
3032
import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
33+
import com.google.devtools.build.lib.analysis.ToolchainCollection;
34+
import com.google.devtools.build.lib.analysis.ToolchainContext;
3135
import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
3236
import com.google.devtools.build.lib.analysis.config.CompilationMode;
3337
import com.google.devtools.build.lib.analysis.config.ConfigurationResolver;
38+
import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
3439
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
3540
import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
41+
import com.google.devtools.build.lib.cmdline.Label;
3642
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
3743
import com.google.devtools.build.lib.packages.Attribute;
3844
import com.google.devtools.build.lib.packages.RuleClassProvider;
@@ -47,7 +53,7 @@
4753
import com.google.devtools.build.skyframe.SkyKey;
4854
import com.google.devtools.build.skyframe.SkyValue;
4955
import java.util.List;
50-
import org.junit.Ignore;
56+
import org.junit.Before;
5157
import org.junit.Test;
5258
import org.junit.runner.RunWith;
5359
import org.junit.runners.JUnit4;
@@ -75,6 +81,10 @@
7581
@RunWith(JUnit4.class)
7682
public class ConfigurationsForTargetsTest extends AnalysisTestCase {
7783

84+
public static final Label TARGET_PLATFORM_LABEL =
85+
Label.parseAbsoluteUnchecked("//platform:target");
86+
public static final Label EXEC_PLATFORM_LABEL = Label.parseAbsoluteUnchecked("//platform:exec");
87+
7888
/**
7989
* A mock {@link SkyFunction} that just calls {@link ConfiguredTargetFunction#computeDependencies}
8090
* and returns its results.
@@ -118,18 +128,35 @@ static final class Value implements SkyValue {
118128
public SkyValue compute(SkyKey skyKey, Environment env)
119129
throws EvalException, InterruptedException {
120130
try {
131+
TargetAndConfiguration targetAndConfiguration = (TargetAndConfiguration) skyKey.argument();
132+
// Set up the toolchain context so that exec transitions resolve properly.
133+
ToolchainCollection<ToolchainContext> toolchainContexts =
134+
ToolchainCollection.builder()
135+
.addDefaultContext(
136+
UnloadedToolchainContextImpl.builder(
137+
ToolchainContextKey.key()
138+
.toolchainTypes(ImmutableSet.of())
139+
.configurationKey(
140+
targetAndConfiguration.getConfiguration().getKey())
141+
.build())
142+
.setTargetPlatform(
143+
PlatformInfo.builder().setLabel(TARGET_PLATFORM_LABEL).build())
144+
.setExecutionPlatform(
145+
PlatformInfo.builder().setLabel(EXEC_PLATFORM_LABEL).build())
146+
.build())
147+
.build();
121148
OrderedSetMultimap<DependencyKind, ConfiguredTargetAndData> depMap =
122149
ConfiguredTargetFunction.computeDependencies(
123150
new ConfiguredTargetFunction.ComputeDependenciesState(),
124151
/*transitivePackagesForPackageRootResolution=*/ null,
125152
/*transitiveRootCauses=*/ NestedSetBuilder.stableOrder(),
126153
env,
127154
new SkyframeDependencyResolver(env),
128-
(TargetAndConfiguration) skyKey.argument(),
155+
targetAndConfiguration,
129156
ImmutableList.of(),
130157
ImmutableMap.of(),
131-
/*toolchainContexts=*/ null,
132-
/*useToolchainTransition=*/ false,
158+
toolchainContexts,
159+
/*useToolchainTransition=*/ true,
133160
stateProvider.lateBoundRuleClassProvider(),
134161
stateProvider.lateBoundHostConfig());
135162
return env.valuesMissing() ? null : new Value(depMap);
@@ -243,6 +270,15 @@ protected List<ConfiguredTarget> getConfiguredDeps(ConfiguredTarget target, Stri
243270
String.format("Couldn't find attribute %s for label %s", attrName, targetLabel));
244271
}
245272

273+
@Before
274+
public void setUp() throws Exception {
275+
scratch.file(
276+
"platform/BUILD",
277+
// Add basic target and exec platforms for testing.
278+
"platform(name = 'target')",
279+
"platform(name = 'exec')");
280+
}
281+
246282
@Test
247283
public void nullConfiguredDepsHaveExpectedConfigs() throws Exception {
248284
scratch.file(
@@ -275,23 +311,24 @@ public void targetDeps() throws Exception {
275311
* contexts.
276312
*/
277313
@Test
278-
@Ignore("b/219749974")
279-
public void hostDeps() throws Exception {
314+
public void execDeps() throws Exception {
280315
scratch.file(
281-
"a/host_rule.bzl",
282-
"host_rule = rule(",
316+
"a/exec_rule.bzl",
317+
"exec_rule = rule(",
283318
" implementation = lambda ctx: [],",
284-
" attrs = {'tools': attr.label_list(cfg = 'host')},",
319+
" attrs = {'tools': attr.label_list(cfg = 'exec')},",
285320
")");
286321
scratch.file(
287322
"a/BUILD",
288-
"load('//a:host_rule.bzl', 'host_rule')",
289-
"cc_binary(name = 'host_tool', srcs = ['host_tool.cc'])",
290-
"host_rule(name = 'gen', tools = [':host_tool'])");
323+
"load('//a:exec_rule.bzl', 'exec_rule')",
324+
"sh_binary(name = 'exec_tool', srcs = ['exec_tool.sh'])",
325+
"exec_rule(name = 'gen', tools = [':exec_tool'])");
291326

292327
ConfiguredTarget toolDep = Iterables.getOnlyElement(getConfiguredDeps("//a:gen", "tools"));
293-
294-
assertThat(getConfiguration(toolDep).isHostConfiguration()).isTrue();
328+
BuildConfigurationValue toolConfiguration = getConfiguration(toolDep);
329+
assertThat(toolConfiguration.isToolConfiguration()).isTrue();
330+
assertThat(toolConfiguration.getOptions().get(PlatformOptions.class).platforms)
331+
.containsExactly(EXEC_PLATFORM_LABEL);
295332
}
296333

297334
@Test

0 commit comments

Comments
 (0)