| // 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 "src/main/protobuf/build.proto"; |
| |
| option java_package = "com.google.devtools.build.lib.analysis"; |
| option java_outer_classname = "AnalysisProtosV2"; |
| |
| // 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 and `--include_pruned_outputs` is disabled, the contents of |
| // this set might differ before and after 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 ctx.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; |
| |
| reserved 20; |
| } |
| |
| // 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; |
| |
| // The configuration fragments that are a part of this configuration. |
| repeated Fragment fragments = 6; |
| |
| // The union of all the FragmentOptions associated with the Fragments that are |
| // a part of this configuration. These are returned separately from the |
| // fragments field because a set of FragmentOptions can be referenced by more |
| // than one Fragment, and we wish to avoid returning the same FragmentOptions |
| // repeatedly. These are sorted by the FragmentOptions name field. |
| repeated FragmentOptions fragment_options = 7; |
| } |
| |
| // A configuration fragment |
| // (http://bazel.build/rules/lib/fragments). |
| message Fragment { |
| // The name of the Fragment. |
| string name = 1; |
| |
| // The names of the FragmentOptions associated with this fragment in sorted |
| // order. |
| repeated string fragment_option_names = 2; |
| } |
| |
| // A set of fragment options. |
| message FragmentOptions { |
| // The name of this set of fragment options. |
| string name = 1; |
| |
| // The options themselves, in sorted order by name. |
| repeated Option options = 2; |
| } |
| |
| // A fragment option. |
| message Option { |
| // The name of the option. |
| optional string name = 1; |
| |
| // The value of the option. |
| optional string value = 2; |
| } |
| |
| 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; |
| } |