xref: /optee_os/scripts/gen_stmm_hex.py (revision 42471ecf25b73ae0b381a78385026f0a28c20e45)
1*42471ecfSJens Wiklander#!/usr/bin/env python3
2*42471ecfSJens Wiklander# SPDX-License-Identifier: BSD-2-Clause
3*42471ecfSJens Wiklander#
4*42471ecfSJens Wiklander# Copyright (c) 2019, Linaro Limited
5*42471ecfSJens Wiklander#
6*42471ecfSJens Wiklander
7*42471ecfSJens Wiklanderimport argparse
8*42471ecfSJens Wiklanderimport sys
9*42471ecfSJens Wiklanderimport zlib
10*42471ecfSJens Wiklander
11*42471ecfSJens Wiklander
12*42471ecfSJens Wiklanderdef get_args():
13*42471ecfSJens Wiklander    parser = argparse.ArgumentParser()
14*42471ecfSJens Wiklander
15*42471ecfSJens Wiklander    parser.add_argument('--input',
16*42471ecfSJens Wiklander                        required=True, type=argparse.FileType('rb'),
17*42471ecfSJens Wiklander                        help='The input StMM binary (BL32_AP_MM.fd)')
18*42471ecfSJens Wiklander
19*42471ecfSJens Wiklander    parser.add_argument('--output',
20*42471ecfSJens Wiklander                        required=True, type=argparse.FileType('w'),
21*42471ecfSJens Wiklander                        help='The output stmm_hex.c')
22*42471ecfSJens Wiklander
23*42471ecfSJens Wiklander    return parser.parse_args()
24*42471ecfSJens Wiklander
25*42471ecfSJens Wiklander
26*42471ecfSJens Wiklanderdef main():
27*42471ecfSJens Wiklander    args = get_args()
28*42471ecfSJens Wiklander    inf = args.input
29*42471ecfSJens Wiklander    outf = args.output
30*42471ecfSJens Wiklander
31*42471ecfSJens Wiklander    bytes = inf.read()
32*42471ecfSJens Wiklander    uncompressed_size = len(bytes)
33*42471ecfSJens Wiklander    bytes = zlib.compress(bytes)
34*42471ecfSJens Wiklander    size = len(bytes)
35*42471ecfSJens Wiklander
36*42471ecfSJens Wiklander    outf.write('/* Automatically generated, do no edit */\n')
37*42471ecfSJens Wiklander    outf.write('const unsigned char stmm_image[] = {\n')
38*42471ecfSJens Wiklander    i = 0
39*42471ecfSJens Wiklander    while i < size:
40*42471ecfSJens Wiklander        if i % 8 == 0:
41*42471ecfSJens Wiklander            outf.write('\t')
42*42471ecfSJens Wiklander        outf.write('0x{:02x},'.format(bytes[i]))
43*42471ecfSJens Wiklander        i = i + 1
44*42471ecfSJens Wiklander        if i % 8 == 0 or i == size:
45*42471ecfSJens Wiklander            outf.write('\n')
46*42471ecfSJens Wiklander        else:
47*42471ecfSJens Wiklander            outf.write(' ')
48*42471ecfSJens Wiklander    outf.write('};\n')
49*42471ecfSJens Wiklander
50*42471ecfSJens Wiklander    outf.write('const unsigned int stmm_image_size = sizeof(stmm_image);\n')
51*42471ecfSJens Wiklander    outf.write('const unsigned int stmm_image_uncompressed_size = '
52*42471ecfSJens Wiklander               '{:d};\n'.format(uncompressed_size))
53*42471ecfSJens Wiklander
54*42471ecfSJens Wiklander    inf.close()
55*42471ecfSJens Wiklander    outf.close()
56*42471ecfSJens Wiklander
57*42471ecfSJens Wiklander
58*42471ecfSJens Wiklanderif __name__ == "__main__":
59*42471ecfSJens Wiklander    main()
60