| 55 | yield string[start:start + length] |
| 56 | |
| 57 | def main(): |
| 58 | arg_check() |
| 59 | |
| 60 | if sys.argv[1] == "--deflate": |
| 61 | sys.argv.pop(1) |
| 62 | arg_check() |
| 63 | compress = True |
| 64 | else: |
| 65 | compress = False |
| 66 | |
| 67 | dest = sys.argv[1] |
| 68 | label = sys.argv[2] |
| 69 | as_prolog = sys.argv[3] |
| 70 | section = sys.argv[4] |
| 71 | |
| 72 | timestamp = (1980, 1, 1, 0, 0, 0) |
| 73 | |
| 74 | header_ctx = [] |
| 75 | desc_ctx = [] |
| 76 | size_ctx = [] |
| 77 | data_ctx = [] |
| 78 | |
| 79 | src_cnt = 0 |
| 80 | |
| 81 | archive = zipfile.ZipFile("%s.zip" % dest, "w", zipfile.ZIP_STORED) |
| 82 | |
| 83 | for src in sys.argv[5:]: |
| 84 | basename = os.path.basename(src) |
| 85 | plainname = os.path.splitext(basename)[0] |
| 86 | symbol = basename.replace(".", "_") |
| 87 | |
| 88 | print("%s -> %s" % (src, symbol)) |
| 89 | |
| 90 | src_in = open(src, "rb") |
| 91 | src_data = src_in.read() |
| 92 | src_in.close() |
| 93 | |
| 94 | length = len(src_data) |
| 95 | |
| 96 | if compress: |
| 97 | src_data = deflate(src_data) |
| 98 | src_fname = os.path.basename("%s.deflate" % src) |
| 99 | zipinfo = zipfile.ZipInfo(src_fname, timestamp) |
| 100 | archive.writestr(zipinfo, src_data) |
| 101 | else: |
| 102 | src_fname = src |
| 103 | |
| 104 | if sys.version_info < (3,): |
| 105 | src_data = bytearray(src_data) |
| 106 | |
| 107 | length_out = len(src_data) |
| 108 | |
| 109 | header_ctx.append("extern uint8_t %s[];" % symbol) |
| 110 | header_ctx.append("extern size_t %s_size;" % symbol) |
| 111 | |
| 112 | data_ctx.append(".globl %s" % symbol) |
| 113 | data_ctx.append(".balign 8") |
| 114 | data_ctx.append(".size %s, %u" % (symbol, length_out)) |