| #!/usr/bin/env python3 |
| import argparse |
| import random |
| import os |
| import sys |
| import time |
| import subprocess |
| from pathlib import Path |
| from multiprocessing import Pool |
| from weakref import finalize |
| |
| |
| def print_carray(f, payload): |
| while len(payload) > 0: |
| f.write('\n ') |
| f.write(', '.join('0x{:02x}'.format(x) for x in payload[0:16])) |
| f.write(',') |
| payload = payload[16:] |
| f.write('\n') |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(description='Convert binary files to C array format') |
| parser.add_argument('files', nargs='+', help='Binary files to convert') |
| args = parser.parse_args() |
| |
| files = args.files |
| for fin_name in files: |
| if not os.path.isfile(fin_name): |
| print(f"File {fin_name} does not exist") |
| continue |
| |
| with open(fin_name, 'rb') as fin: |
| contents = fin.read() |
| fout_name = fin_name + '.h' |
| with open(fout_name, 'w') as fout: |
| print(f"Converting {fin_name} to {fout_name}") |
| fout.write(f'enum {{ BINDATA_LEN = {len(contents)} }};\n') |
| fout.write(f'const size_t bindata_len = BINDATA_LEN;\n') |
| fout.write(f'const uint8_t bindata[] __attribute__((aligned(16))) = {{') |
| print_carray(fout, contents) |
| fout.write('};\n') |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |