blob: b99241456e6c0abdc65e19aeec7468c7b1ad0d7e [file] [edit]
#!/usr/bin/env python3
import argparse
import os
import re
def format_hex(data):
return ', '.join(['0x{:02x}'.format(x) for x in data])
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--base-path', action='append', type=str)
parser.add_argument('--inline-data', action='store_true', help='embed data as an array in assets.cpp')
parser.add_argument('files', nargs='+', type=str, help='input files')
args = parser.parse_args()
bin_out = open('assets.bin', 'wb')
cpp_out = open('assets.cpp', 'w')
hpp_out = open('assets.hpp', 'w')
hpp_out.write('#pragma once\n\n')
hpp_out.write('#include "engine/asset.hpp"\n\n')
cpp_out.write('#include <cstdint>\n\n')
cpp_out.write('#include "assets.hpp"\n\n')
cpp_out.write('extern const uint8_t _binary_assets_bin_start[];\n\n')
for file in args.files:
offset = bin_out.tell()
length = os.stat(file).st_size
# tidy up name
name = file
for base_path in args.base_path:
if file.startswith(base_path):
name = os.path.relpath(file, base_path)
name = os.path.splitext(name)[0]
name = name.replace('../', '')
name = re.sub('[^0-9A-Za-z_]', '_', name)
bin_out.write(open(file, 'rb').read())
hpp_out.write('extern const blit::Asset asset_{};\n'.format(name))
cpp_out.write('const blit::Asset asset_{}(_binary_assets_bin_start + {}, {});\n'.format(name, offset, length))
if args.inline_data:
bin_out.close()
bin_out = open('assets.bin', 'rb')
data = bin_out.read();
cpp_out.write('\nconst uint8_t _binary_assets_bin_start[] = {\n\t');
cpp_out.write(format_hex(data))
cpp_out.write('};\n');