Mark configurations as tool or non-tool in cquery/aquery proto output 1. Add a field to the Configuration message in the BES indicating if a Configuration is a tool configuration. 2. In cquery and aquery proto output, add a field to the Configuration message indicating if it's a tool configuration. RELNOTES: In aquery and cquery proto output, indicate if a configuration is a tool or non-tool configuration. PiperOrigin-RevId: 429567132
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java index f604ceb..b2f673c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
@@ -861,6 +861,7 @@ .setPlatformName(getCpu()) .putAllMakeVariable(getMakeEnvironment()) .setCpu(getCpu()) + .setIsTool(isToolConfiguration()) .build()); return new BuildConfigurationEvent(eventId, builder.build()); }
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto index 52204a3..379645b 100644 --- a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto +++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto
@@ -410,6 +410,8 @@ string platform_name = 2; string cpu = 3; map<string, string> make_variable = 4; + // Whether this configuration is used for building tools. + bool is_tool = 5; } // Payload of the event indicating the expansion of a target pattern.
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java index ee74222..6844693 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java +++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallback.java
@@ -89,6 +89,7 @@ .setMnemonic(configProto.getMnemonic()) .setPlatformName(configProto.getPlatformName()) .setId(entry.getValue()) + .setIsTool(configProto.getIsTool()) .build(); }) .collect(toImmutableList());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java index fae3610..1158ac8 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java
@@ -33,6 +33,7 @@ .setChecksum(config.getEventId().getConfiguration().getId()) .setMnemonic(configProto.getMnemonic()) .setPlatformName(configProto.getPlatformName()) + .setIsTool(configProto.getIsTool()) .setId(id) .build(); }
diff --git a/src/main/protobuf/analysis_v2.proto b/src/main/protobuf/analysis_v2.proto index 28d72f0..d04916b 100644 --- a/src/main/protobuf/analysis_v2.proto +++ b/src/main/protobuf/analysis_v2.proto
@@ -179,6 +179,9 @@ // The checksum representation of the configuration options; string checksum = 4; + + // Whether this configuration is used for building tools. + bool is_tool = 5; } message KeyValuePair {
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD b/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD index 9048195..53d584a 100644 --- a/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD +++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/BUILD
@@ -122,7 +122,7 @@ deps = [ ":configured_target_query_helper", ":configured_target_query_test", - "//src/main/java/com/google/devtools/build/lib/analysis:config/transition_factories", + "//src/main/java/com/google/devtools/build/lib/analysis:config/execution_transition_factory", "//src/main/java/com/google/devtools/build/lib/events", "//src/main/java/com/google/devtools/build/lib/packages", "//src/main/java/com/google/devtools/build/lib/query2", @@ -132,7 +132,6 @@ "//src/main/protobuf:analysis_v2_java_proto", "//src/main/protobuf:build_java_proto", "//src/test/java/com/google/devtools/build/lib/analysis/util", - "//src/test/java/com/google/devtools/build/lib/query2/testutil", "//third_party:guava", "//third_party:junit4", "//third_party:truth",
diff --git a/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java b/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java index ca9ab11..3cfc52d 100644 --- a/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java +++ b/src/test/java/com/google/devtools/build/lib/query2/cquery/ProtoOutputFormatterCallbackTest.java
@@ -23,7 +23,7 @@ import com.google.devtools.build.lib.analysis.AnalysisProtosV2; import com.google.devtools.build.lib.analysis.AnalysisProtosV2.Configuration; import com.google.devtools.build.lib.analysis.AnalysisProtosV2.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.config.TransitionFactories; +import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory; import com.google.devtools.build.lib.analysis.util.MockRule; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.NullEventHandler; @@ -122,8 +122,6 @@ @Test public void testConfigurations() throws Exception { - FooPatchTransition attributePatchTransition = new FooPatchTransition("SET BY PATCH"); - MockRule ruleWithPatch = () -> MockRule.define( @@ -132,7 +130,7 @@ builder.add( attr("deps", LABEL_LIST) .allowedFileTypes(FileTypeSet.ANY_FILE) - .cfg(TransitionFactories.of(attributePatchTransition)))); + .cfg(ExecutionTransitionFactory.create()))); MockRule parentRuleClass = () -> MockRule.define( @@ -157,14 +155,6 @@ List<Configuration> configurations = cqueryResult.getConfigurationsList(); assertThat(configurations).hasSize(2); - assertThat(configurations) - .ignoringFieldDescriptors( - Configuration.getDescriptor().findFieldByName("checksum"), - Configuration.getDescriptor().findFieldByName("id")) - .containsExactly( - Configuration.newBuilder().setMnemonic("k8-fastbuild").setPlatformName("k8").build(), - Configuration.newBuilder().setMnemonic("k8-fastbuild").setPlatformName("k8").build()); - List<ConfiguredTarget> resultsList = cqueryResult.getResultsList(); ConfiguredTarget parentRuleProto = getRuleProtoByName(resultsList, "//test:parent_rule"); @@ -177,6 +167,16 @@ Configuration parentConfiguration = getConfigurationForId(configurations, parentRuleProto.getConfigurationId()); assertThat(parentConfiguration.getChecksum()).isEqualTo(parentRule.getConfigurationChecksum()); + assertThat(parentConfiguration) + .ignoringFieldDescriptors( + Configuration.getDescriptor().findFieldByName("checksum"), + Configuration.getDescriptor().findFieldByName("id")) + .isEqualTo( + Configuration.newBuilder() + .setMnemonic("k8-fastbuild") + .setPlatformName("k8") + .setIsTool(false) + .build()); ConfiguredTarget transitionRuleProto = getRuleProtoByName(resultsList, "//test:transition_rule"); @@ -193,6 +193,10 @@ ConfiguredTarget depRuleProto = getRuleProtoByName(resultsList, "//test:dep"); Configuration depRuleConfiguration = getConfigurationForId(configurations, depRuleProto.getConfigurationId()); + assertThat(depRuleConfiguration.getPlatformName()).isEqualTo("k8"); + assertThat(depRuleConfiguration.getMnemonic()).matches("k8-opt-exec-.*"); + assertThat(depRuleConfiguration.getIsTool()).isTrue(); + KeyedConfiguredTarget depRule = getKeyedTargetByLabel(keyedTargets, "//test:dep"); assertThat(depRuleProto.getConfiguration().getChecksum())