// Copyright 2018 The Bazel Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package analysis; import "build/build.proto"; option java_package = "com.google.devtools.build.lib.analysis"; option java_outer_classname = "AnalysisProtosV2"; option go_package = "prebuilts/bazel/common/proto/analysis_v2"; // Container for the action graph properties. message ActionGraphContainer { repeated Artifact artifacts = 1; repeated Action actions = 2; repeated Target targets = 3; repeated DepSetOfFiles dep_set_of_files = 4; repeated Configuration configuration = 5; repeated AspectDescriptor aspect_descriptors = 6; repeated RuleClass rule_classes = 7; repeated PathFragment path_fragments = 8; } // Represents a single artifact, whether it's a source file or a derived output // file. message Artifact { // Identifier for this artifact; this is a uint32, only valid for this // particular dump of the analysis. uint32 id = 1; // The id of the PathFragment that represents the relative path of the file // within the execution root. uint32 path_fragment_id = 2; // True iff the artifact is a tree artifact, i.e. the above exec_path refers // a directory. bool is_tree_artifact = 3; } // Represents a single action, which is a function from Artifact(s) to // Artifact(s). message Action { // The target that was responsible for the creation of the action. uint32 target_id = 1; // The aspects that were responsible for the creation of the action (if any). // In the case of aspect-on-aspect, AspectDescriptors are listed in // topological order of the dependency graph. // e.g. [A, B] would imply that aspect A is applied on top of aspect B. repeated uint32 aspect_descriptor_ids = 2; // Encodes all significant behavior that might affect the output. The key // must change if the work performed by the execution of this action changes. // Note that the key doesn't include checksums of the input files. string action_key = 3; // The mnemonic for this kind of action. string mnemonic = 4; // The configuration under which this action is executed. uint32 configuration_id = 5; // The command line arguments of the action. This will be only set if // explicitly requested. repeated string arguments = 6; // The list of environment variables to be set before executing the command. repeated KeyValuePair environment_variables = 7; // The set of input dep sets that the action depends upon. If the action does // input discovery, the contents of this set might change during execution. repeated uint32 input_dep_set_ids = 8; // The list of Artifact IDs that represent the output files that this action // will generate. repeated uint32 output_ids = 9; // True iff the action does input discovery during execution. bool discovers_inputs = 10; // Execution info for the action. Remote execution services may use this // information to modify the execution environment, but actions will // generally not be aware of it. repeated KeyValuePair execution_info = 11; // The list of param files. This will be only set if explicitly requested. repeated ParamFile param_files = 12; // The id to an Artifact that is the primary output of this action. uint32 primary_output_id = 13; // The execution platform for this action. Empty if the action has no // execution platform. string execution_platform = 14; // The template content of the action, if it is TemplateExpand action. string template_content = 15; // The list of substitution should be performed on the template. The key is // the string to be substituted and the value is the string to be substituted // to. repeated KeyValuePair substitutions = 16; // The contents of the file for the actions.write() action // (guarded by the --include_file_write_contents flag). string file_contents = 17; // The target of the symlink created by UnresolvedSymlink actions. // For regular Symlink actions, the target is represented as an input. string unresolved_symlink_target = 18; // If FileWrite actions should make their output executable. // (ctx.actions.write(is_executable=True)) bool is_executable = 19; } // Represents a single target (without configuration information) that is // associated with an action. message Target { // Identifier for this target; this is a uint32, only valid for this // particular dump of the analysis. uint32 id = 1; // Label of the target, e.g. //foo:bar. string label = 2; // Class of the rule. uint32 rule_class_id = 3; } message RuleClass { // Identifier for this rule class; this is a uint32, only valid for // this particular dump of the analysis. uint32 id = 1; // Name of the rule class, e.g. cc_library. string name = 2; } // Represents an invocation specific descriptor of an aspect. message AspectDescriptor { // Identifier for this aspect descriptor; this is a uint32, only valid // for the particular dump of the analysis. uint32 id = 1; // The name of the corresponding aspect. For native aspects, it's the Java // class name, for Starlark aspects it's the bzl file followed by a % sign // followed by the name of the aspect. string name = 2; // The list of parameters bound to a particular invocation of that aspect on // a target. Note that aspects can be executed multiple times on the same // target in different order. repeated KeyValuePair parameters = 3; } message DepSetOfFiles { // Identifier for this named set of files; this is a uint32, only // valid for the particular dump of the analysis. uint32 id = 1; // Other transitively included named set of files. repeated uint32 transitive_dep_set_ids = 2; // The list of input artifact IDs that are immediately contained in this set. repeated uint32 direct_artifact_ids = 3; } message Configuration { // Identifier for this configuration; this is a uint32, only valid for // the particular dump of the analysis. uint32 id = 1; // The mnemonic representing the build configuration. string mnemonic = 2; // The platform string. string platform_name = 3; // The checksum representation of the configuration options; string checksum = 4; // Whether this configuration is used for building tools. bool is_tool = 5; } message KeyValuePair { // The variable name. string key = 1; // The variable value. string value = 2; } message ConfiguredTarget { // The target. We use blaze_query.Target defined in build.proto instead of // the Target defined in this file because blaze_query.Target is much heavier // and will output proto results similar to what users are familiar with from // regular blaze query. blaze_query.Target target = 1; // DEPRECATED. Use configuration_id instead. Configuration configuration = 2 [deprecated = true]; // The id of the configuration this target is configured for. The actual // Configuration message can be found in CqueryResults. If the target doesn't // have a configuration, the value will be 0. uint32 configuration_id = 3; } // Container for cquery results message CqueryResult { // All the configuredtargets returns by cquery repeated ConfiguredTarget results = 1; // All the Configurations referenced by results. repeated Configuration configurations = 2; } // Content of a param file. message ParamFile { // The exec path of the param file artifact. string exec_path = 1; // The arguments in the param file. // Each argument corresponds to a line in the param file. repeated string arguments = 2; } // The path fragment that makes up a full path. message PathFragment { // Identifier for this path fragment. uint32 id = 1; // The label of the section in the path. string label = 2; // The id of the parent path fragment. uint32 parent_id = 3; }