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> <AS_PROLOG> [SOURCE ...]" % prname
)
42 if (len(sys
.argv
) < 4):
48 as_prolog
= sys
.argv
[3]
53 for src
in sys
.argv
[4:]:
54 basename
= os
.path
.basename(src
)
55 symbol
= basename
.replace(".", "_")
57 print("%s -> %s" % (src
, symbol
))
59 src_in
= open(src
, "rb")
60 src_data
= src_in
.read()
66 item_size
= struct
.calcsize(fmt
)
70 while (len(src_data
[offset
:]) >= item_size
):
71 byte
= struct
.unpack_from(fmt
, src_data
, offset
)
75 data_rec
+= "\n\t.byte "
79 data_rec
+= "0x%x" % byte
85 header_ctx
.append("extern uint64_t %s_size;" % symbol
)
86 header_ctx
.append("extern uint8_t %s[];" % symbol
)
88 data_ctx
.append(".globl %s_size" % symbol
)
89 data_ctx
.append(".balign 8");
90 data_ctx
.append(".size %s_size, 8" % symbol
)
91 data_ctx
.append("%s_size:" % symbol
)
92 data_ctx
.append("\t.quad %u\n" % offset
)
94 data_ctx
.append(".globl %s" % symbol
)
95 data_ctx
.append(".balign 8")
96 data_ctx
.append(".size %s, %u" % (symbol
, offset
))
97 data_ctx
.append("%s:" % symbol
)
98 data_ctx
.append(data_rec
)
100 header
= open("%s.h" % dest
, "w")
102 header
.write('/***************************************\n')
103 header
.write(' * AUTO-GENERATED FILE, DO NOT EDIT!!! *\n')
104 header
.write(' * Generated by: tools/mkarray.py *\n')
105 header
.write(' ***************************************/\n\n')
106 header
.write("#ifndef %s_H_\n" % label
)
107 header
.write("#define %s_H_\n\n" % label
)
108 header
.write("#include <stddef.h>\n")
109 header
.write("#include <stdint.h>\n\n")
110 header
.write("\n".join(header_ctx
))
112 header
.write("#endif\n")
116 data
= open("%s.s" % dest
, "w")
118 data
.write('/***************************************\n')
119 data
.write(' * AUTO-GENERATED FILE, DO NOT EDIT!!! *\n')
120 data
.write(' * Generated by: tools/mkarray.py *\n')
121 data
.write(' ***************************************/\n\n')
122 data
.write(as_prolog
)
123 data
.write('.data\n\n')
124 data
.write("\n".join(data_ctx
))
128 if __name__
== '__main__':