summaryrefslogtreecommitdiffstatshomepage
path: root/scripts/build
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2016-03-30 20:38:44 +0200
committer Miodrag Milanovic <mmicko@gmail.com>2016-03-30 20:40:05 +0200
commit9353a1ccb3100a20a58c40f98d10e8a6e38230cc (patch)
tree65337ea475283a5103f3ea8fa50983423e4946b9 /scripts/build
parentc95d9c0ec3afb1952e51324125b6891be6a81a13 (diff)
Compressed internal layouts [David Haywood]
Diffstat (limited to 'scripts/build')
-rw-r--r--scripts/build/complay.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/scripts/build/complay.py b/scripts/build/complay.py
new file mode 100644
index 00000000000..68681c72fbf
--- /dev/null
+++ b/scripts/build/complay.py
@@ -0,0 +1,71 @@
+#!/usr/bin/python
+##
+## license:BSD-3-Clause
+## copyright-holders:Aaron Giles, Andrew Gardner
+
+from __future__ import with_statement
+
+import sys
+import os
+import zlib
+
+if len(sys.argv) < 4:
+ print('Usage:')
+ print(' complay <source.lay> <output.h> <varname>')
+ print('')
+ sys.exit(0)
+
+srcfile = sys.argv[1]
+dstfile = sys.argv[2]
+varname = sys.argv[3]
+type = 'UINT8'
+
+try:
+ myfile = open(srcfile, 'rb')
+except IOError:
+ sys.stderr.write("Unable to open source file '%s'\n" % srcfile)
+ sys.exit(-1)
+
+byteCount = os.path.getsize(srcfile)
+compsize = 0
+compressiontype = 1
+
+try:
+ dst = open(dstfile,'w')
+ dst.write('const %s %s_data[] =\n{\n\t' % ( type, varname))
+ offs = 0
+ with open(srcfile, "rb") as src:
+ while True:
+ chunk = src.read(byteCount)
+ if chunk:
+ compchunk = zlib.compress(chunk, 9)
+ compsize = len(compchunk)
+ for b in compchunk:
+ # For Python 2.x compatibility.
+ b = ord(b)
+ dst.write('%d' % b)
+ offs += 1
+ if offs != compsize:
+ dst.write(',')
+ else:
+ break
+ dst.write('\n\t')
+
+ dst.write('\n};\n')
+
+except IOError:
+ sys.stderr.write("Unable to open output file '%s'\n" % dstfile)
+ sys.exit(-1)
+
+try:
+ dst.write('extern const internal_layout %s;\n' % ( varname ))
+ dst.write('const internal_layout %s = { \n\t' % ( varname ))
+ dst.write('%d,%d,%d,%s_data\n' % ( byteCount, compsize, compressiontype, varname ))
+ dst.write('\n};\n')
+
+
+ dst.close()
+except IOError:
+ sys.stderr.write("Unable to open output file '%s'\n" % dstfile)
+ sys.exit(-1)
+