blob: 4bba776c5a551c7c1007bfa9b4d4917a6fc03659 [file] [log] [blame]
Brian Silverman049dcb62015-09-27 19:08:00 -04001def _gen_embedded_impl(ctx):
2 ctx.action(
3 inputs = ctx.files.srcs,
4 outputs = [ ctx.outputs.header ],
5 executable = ctx.executable._gen_embedded,
6 arguments = [ ctx.outputs.header.path ] + [f.path for f in ctx.files.srcs],
7 progress_message = 'Generating %s' % ctx.outputs.header.short_path,
8 mnemonic = 'GenEmbedded',
9 )
10
11 return struct(
12 files = set([ ctx.outputs.header ]),
13 )
14
15_do_gen_embedded = rule(
16 implementation = _gen_embedded_impl,
17 attrs = {
18 'srcs': attr.label_list(
19 mandatory = True,
20 non_empty = True,
21 allow_files = True,
22 ),
23 '_gen_embedded': attr.label(
24 executable = True,
25 default = Label('//aos/externals/seasocks:gen_embedded'),
26 ),
27 },
28 outputs = {
29 'header': 'embedded.h',
30 },
31 output_to_genfiles = True,
32)
33
34'''Generates the header for Seasocks to load the embedded files.
35
36This always outputs a file named "embedded.h" in the current package, so there
37can be a maximum of one of these rules in each package.
38
39Attrs:
40 srcs: Files to allow loading.
41'''
42def gen_embedded(name, srcs, visibility = None):
43 _do_gen_embedded(
44 name = name + '__do_gen',
45 visibility = ['//visibility:private'],
46 srcs = srcs,
47 )
48 native.cc_library(
49 name = name,
50 visibiltity = visibility,
51 hdrs = [
52 ':%s__do_gen' % name,
53 ],
54 )