forked from stackb/rules_proto
-
Notifications
You must be signed in to change notification settings - Fork 0
/
plugin.bzl
55 lines (53 loc) · 1.98 KB
/
plugin.bzl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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,
),
},
)