blob: 3f784220e2359f2a9738428b8f1f47f6f6188c5d [file] [log] [blame]
Alex Perrycb7da4b2019-08-28 19:35:56 -07001load("//tools/build_rules:label.bzl", "expand_label")
2
3AosConfigInfo = provider(fields = ["transitive_flatbuffers", "transitive_src"])
4
5def aos_config(name, src, flatbuffers, deps = [], visibility = None):
6 _aos_config(
7 name = name,
8 src = src,
9 deps = deps,
10 flatbuffers = [expand_label(flatbuffer) + "_reflection_out" for flatbuffer in flatbuffers],
11 visibility = visibility,
12 )
13
14def _aos_config_impl(ctx):
15 flatbuffers_depset = depset(
16 ctx.files.flatbuffers,
17 transitive = [dep[AosConfigInfo].transitive_flatbuffers for dep in ctx.attr.deps],
18 )
19
20 src_depset = depset(
21 ctx.files.src,
22 transitive = [dep[AosConfigInfo].transitive_src for dep in ctx.attr.deps],
23 )
24
25 all_files = flatbuffers_depset.to_list() + src_depset.to_list()
26 ctx.actions.run(
27 outputs = [ctx.outputs.config],
28 inputs = all_files,
29 arguments = [ctx.outputs.config.path, ctx.files.src[0].path] + [f.path for f in flatbuffers_depset.to_list()],
30 progress_message = "Flattening config",
31 executable = ctx.executable._config_flattener,
32 )
33 return AosConfigInfo(
34 transitive_flatbuffers = flatbuffers_depset,
35 transitive_src = src_depset,
36 )
37
38_aos_config = rule(
39 attrs = {
40 "_config_flattener": attr.label(
41 executable = True,
42 cfg = "host",
43 default = Label("//aos:config_flattener"),
44 ),
45 "src": attr.label(
46 mandatory = True,
47 allow_files = True,
48 ),
49 "deps": attr.label_list(
50 providers = [AosConfigInfo],
51 ),
52 "flatbuffers": attr.label_list(
53 mandatory = False,
54 ),
55 },
56 outputs = {
57 "config": "%{name}.json",
58 },
59 implementation = _aos_config_impl,
60)