blob: 361cc8499125c1e850fa4eb265d4decd84264957 [file] [log] [blame]
ProtoPluginInfo = provider(fields = {
"name": "proto plugin name",
"outputs": "outputs to be generated",
"tool": "plugin tool",
"executable": "plugin tool executable",
"options": "proto options",
"out": "aggregate proto output",
"outdir": "whether to use the package output dir",
"data": "additional data",
"transitivity": "transitivity properties",
})
def _proto_plugin_impl(ctx):
return [ProtoPluginInfo(
data = ctx.files.data,
executable = ctx.executable.tool,
name = ctx.label.name,
options = ctx.attr.options,
out = ctx.attr.out,
outdir = ctx.attr.outdir,
outputs = ctx.attr.outputs,
tool = ctx.attr.tool,
transitivity = ctx.attr.transitivity,
)]
proto_plugin = rule(
implementation = _proto_plugin_impl,
attrs = {
"options": attr.string_list(
doc = "An list of options to pass to the compiler.",
),
"outputs": attr.string_list(
doc = "Output filenames generated on a per-proto basis. Example: '{basename}_pb2.py'",
),
"out": attr.string(
doc = "Output filename generated on a per-plugin basis; to be used in the value for --NAME-out=OUT",
),
"outdir": attr.string(
doc = "If present, overrides the file.path from out; to be used in the value for --NAME-out=OUT",
),
"tool": attr.label(
doc = "The plugin binary. If absent, assume the plugin is a built-in to protoc itself",
cfg = "host",
allow_files = True,
executable = True,
),
"transitivity": attr.string_dict(
doc = "Transitive exclusions. When the compile.bzl 'transitive' property is enabled, this string_dict can be used to exclude protos from the compilation list",
),
"data": attr.label_list(
doc = "Additional files that should travel with the plugin",
allow_files = True,
),
},
)