blob: 07a3a332d1bb59a15d116fdd4d3e107592ea7cbc [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'),
Brian Silvermanb200c172017-01-02 17:35:35 -080026 cfg = 'host',
Brian Silverman049dcb62015-09-27 19:08:00 -040027 ),
28 },
29 outputs = {
30 'header': 'embedded.h',
31 },
32 output_to_genfiles = True,
33)
34
35'''Generates the header for Seasocks to load the embedded files.
36
37This always outputs a file named "embedded.h" in the current package, so there
38can be a maximum of one of these rules in each package.
39
40Attrs:
41 srcs: Files to allow loading.
42'''
43def gen_embedded(name, srcs, visibility = None):
44 _do_gen_embedded(
45 name = name + '__do_gen',
46 visibility = ['//visibility:private'],
47 srcs = srcs,
48 )
49 native.cc_library(
50 name = name,
51 visibiltity = visibility,
52 hdrs = [
53 ':%s__do_gen' % name,
54 ],
55 )