3 # Copyright (c) 2011 Martin Decky
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
10 # - Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # - Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in the
14 # documentation and/or other materials provided with the distribution.
15 # - The name of the author may not be used to endorse or promote products
16 # derived from this software without specific prior written permission.
18 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 print("%s <DESTINATION> <LABEL> [SOURCE ...]" % prname
)
42 if (len(sys
.argv
) < 3):
51 for src
in sys
.argv
[3:]:
52 basename
= os
.path
.basename(src
)
53 symbol
= basename
.replace(".", "_")
55 print("%s -> %s" % (src
, symbol
))
57 src_in
= open(src
, "rb")
58 src_data
= src_in
.read()
61 header_rec
= "extern uint8_t %s[];" % symbol
62 header_ctx
.append(header_rec
)
64 data_rec
= "uint8_t %s[] = {\n\t" % symbol
67 item_size
= struct
.calcsize(fmt
)
71 while (len(src_data
[offset
:]) >= item_size
):
72 byte
= struct
.unpack_from(fmt
, src_data
, offset
)
80 data_rec
+= "0x%x" % byte
85 data_ctx
.append(data_rec
)
87 header_rec
= "extern size_t %s_size;" % symbol
88 header_ctx
.append(header_rec
)
90 data_rec
= "size_t %s_size = %u;\n" % (symbol
, offset
)
91 data_ctx
.append(data_rec
)
93 header
= open("%s.h" % dest
, "w")
95 header
.write('/***************************************\n')
96 header
.write(' * AUTO-GENERATED FILE, DO NOT EDIT!!! *\n')
97 header
.write(' * Generated by: tools/mkarray.py *\n')
98 header
.write(' ***************************************/\n\n')
99 header
.write("#ifndef %s_H_\n" % label
)
100 header
.write("#define %s_H_\n\n" % label
)
101 header
.write("#include <sys/types.h>\n\n")
102 header
.write("\n".join(header_ctx
))
104 header
.write("#endif\n")
108 data
= open("%s.c" % dest
, "w")
110 data
.write('/***************************************\n')
111 data
.write(' * AUTO-GENERATED FILE, DO NOT EDIT!!! *\n')
112 data
.write(' * Generated by: tools/mkarray.py *\n')
113 data
.write(' ***************************************/\n\n')
114 data
.write("#include \"%s.h\"\n\n" % dest
)
115 data
.write("\n".join(data_ctx
))
119 if __name__
== '__main__':