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