From 62358ef1cf2330b233d49502773a0e454bb442f0 Mon Sep 17 00:00:00 2001 From: John Cater Date: Mon, 27 Apr 2020 16:01:15 -0400 Subject: [PATCH] Add key() method to ToolchainContext. Cleanup leading to toolchain transitions, #10523. --- .../google/devtools/build/lib/analysis/BUILD | 2 ++ .../analysis/ResolvedToolchainContext.java | 1 + .../build/lib/analysis/ToolchainContext.java | 3 ++ .../skyframe/ToolchainResolutionFunction.java | 3 +- .../UnloadedToolchainContextImpl.java | 3 ++ .../ResolvedToolchainContextTest.java | 29 +++++++++++++++++++ 6 files changed, 40 insertions(+), 1 deletion(-) 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 a3a68e9103f8d5..ce9dff9ead485d 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD +++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD @@ -407,6 +407,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/skyframe:configured_value_creation_exception", "//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:toolchain_context_key", "//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_exception", "//src/main/java/com/google/devtools/build/lib/skyframe:transitive_target_key", "//src/main/java/com/google/devtools/build/lib/skyframe:transitive_target_value", @@ -1016,6 +1017,7 @@ java_library( deps = [ "//src/main/java/com/google/devtools/build/lib/analysis/platform", "//src/main/java/com/google/devtools/build/lib/cmdline", + "//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_context_key", "//third_party:guava", ], ) 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 e5c79c4bf42cfc..66bec0b64fb81d 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 @@ -90,6 +90,7 @@ public static ResolvedToolchainContext load( return new AutoValue_ResolvedToolchainContext( // super: + unloadedToolchainContext.key(), unloadedToolchainContext.executionPlatform(), unloadedToolchainContext.targetPlatform(), unloadedToolchainContext.requiredToolchainTypes(), diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java index 5753223b9e8d6e..a14c8e1f1408fb 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java @@ -17,9 +17,12 @@ import com.google.devtools.build.lib.analysis.platform.PlatformInfo; import com.google.devtools.build.lib.analysis.platform.ToolchainTypeInfo; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.skyframe.ToolchainContextKey; /** Represents the data needed for a specific target's use of toolchains and platforms. */ public interface ToolchainContext { + /** Returns the key that identifies this context. */ + ToolchainContextKey key(); /** Returns the selected execution platform that these toolchains use. */ PlatformInfo executionPlatform(); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java index 4db4eaf572c989..26f4ce5cecd711 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java @@ -65,7 +65,8 @@ public UnloadedToolchainContext compute(SkyKey skyKey, Environment env) ToolchainContextKey key = (ToolchainContextKey) skyKey.argument(); try { - UnloadedToolchainContextImpl.Builder builder = UnloadedToolchainContextImpl.builder(); + UnloadedToolchainContextImpl.Builder builder = + UnloadedToolchainContextImpl.builder().setKey(key); // Determine the configuration being used. BuildConfigurationValue value = diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/UnloadedToolchainContextImpl.java b/src/main/java/com/google/devtools/build/lib/skyframe/UnloadedToolchainContextImpl.java index 424d6423cfa847..67a547cc43c00e 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/UnloadedToolchainContextImpl.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/UnloadedToolchainContextImpl.java @@ -37,6 +37,9 @@ public static Builder builder() { /** Builder class to help create the {@link UnloadedToolchainContextImpl}. */ @AutoValue.Builder public interface Builder { + /** Sets the key that identifies this context. */ + Builder setKey(ToolchainContextKey key); + /** Sets the selected execution platform that these toolchains use. */ Builder setExecutionPlatform(PlatformInfo executionPlatform); 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 3ddbb8580ebcdb..44ff478c11e3ae 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 @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.rules.platform.ToolchainTestCase; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; +import com.google.devtools.build.lib.skyframe.ToolchainContextKey; import com.google.devtools.build.lib.skyframe.ToolchainException; import com.google.devtools.build.lib.skyframe.UnloadedToolchainContext; import com.google.devtools.build.lib.skyframe.UnloadedToolchainContextImpl; @@ -44,9 +45,16 @@ public void load() throws Exception { ImmutableList.of("//constraints:linux"), "baz"); + ToolchainContextKey toolchainContextKey = + ToolchainContextKey.key() + .configurationKey(targetConfigKey) + .requiredToolchainTypeLabels(testToolchainTypeLabel) + .build(); + // Create a static UnloadedToolchainContext. UnloadedToolchainContext unloadedToolchainContext = UnloadedToolchainContextImpl.builder() + .setKey(toolchainContextKey) .setExecutionPlatform(linuxPlatform) .setTargetPlatform(linuxPlatform) .setRequiredToolchainTypes(ImmutableSet.of(testToolchainType)) @@ -89,9 +97,16 @@ public void load_aliasedToolchain() throws Exception { ImmutableList.of("//constraints:linux"), "baz"); + ToolchainContextKey toolchainContextKey = + ToolchainContextKey.key() + .configurationKey(targetConfigKey) + .requiredToolchainTypeLabels(testToolchainTypeLabel) + .build(); + // Create a static UnloadedToolchainContext. UnloadedToolchainContext unloadedToolchainContext = UnloadedToolchainContextImpl.builder() + .setKey(toolchainContextKey) .setExecutionPlatform(linuxPlatform) .setTargetPlatform(linuxPlatform) .setRequiredToolchainTypes(ImmutableSet.of(testToolchainType)) @@ -124,9 +139,16 @@ public void load_aliasedToolchain() throws Exception { public void load_notToolchain() throws Exception { scratch.file("foo/BUILD", "filegroup(name = 'not_a_toolchain')"); + ToolchainContextKey toolchainContextKey = + ToolchainContextKey.key() + .configurationKey(targetConfigKey) + .requiredToolchainTypeLabels(testToolchainTypeLabel) + .build(); + // Create a static UnloadedToolchainContext. UnloadedToolchainContext unloadedToolchainContext = UnloadedToolchainContextImpl.builder() + .setKey(toolchainContextKey) .setExecutionPlatform(linuxPlatform) .setTargetPlatform(linuxPlatform) .setRequiredToolchainTypes(ImmutableSet.of(testToolchainType)) @@ -178,9 +200,16 @@ public void load_withTemplateVariables() throws Exception { " name='variable_toolchain_impl',", " value = 'foo')"); + ToolchainContextKey toolchainContextKey = + ToolchainContextKey.key() + .configurationKey(targetConfigKey) + .requiredToolchainTypeLabels(testToolchainTypeLabel) + .build(); + // Create a static UnloadedToolchainContext. UnloadedToolchainContext unloadedToolchainContext = UnloadedToolchainContextImpl.builder() + .setKey(toolchainContextKey) .setExecutionPlatform(linuxPlatform) .setTargetPlatform(linuxPlatform) .setRequiredToolchainTypes(ImmutableSet.of(variableToolchainType))