Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Unified Diff: tools/embed_resources.py

Issue 1015723004: Add option to embed font data into executable. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Clean up. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/ports/SkFontHost_linux.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/embed_resources.py
diff --git a/tools/embed_resources.py b/tools/embed_resources.py
new file mode 100644
index 0000000000000000000000000000000000000000..56d59822025c64181ed2d0ae8051f4a8e3732d50
--- /dev/null
+++ b/tools/embed_resources.py
@@ -0,0 +1,80 @@
+#!/usr/bin/python
+
+'''
+Copyright 2015 Google Inc.
+
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+'''
+
+import argparse
+
+
+def bytes_from_file(f, chunksize=8192):
+ while True:
+ chunk = f.read(chunksize)
+ if chunk:
+ for b in chunk:
+ yield ord(b)
+ else:
+ break
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ formatter_class=argparse.RawDescriptionHelpFormatter,
+ description='Convert resource files to embedded read only data.',
+ epilog='''The output (when compiled and linked) can be used as:
+struct SkEmbeddedResource {const uint8_t* data; const size_t size;};
+struct SkEmbeddedHeader {const SkEmbeddedResource* entries; const int count;};
+extern "C" SkEmbeddedHeader const NAME;''')
+ parser.add_argument('--align', default=1, type=int,
+ help='minimum alignment (in bytes) of resource data')
+ parser.add_argument('--name', default='_resource', type=str,
+ help='the name of the c identifier to export')
+ parser.add_argument('--input', required=True, type=argparse.FileType('rb'),
+ nargs='+', help='list of resource files to embed')
+ parser.add_argument('--output', required=True, type=argparse.FileType('w'),
+ help='the name of the cpp file to output')
+ args = parser.parse_args()
+
+ out = args.output.write;
+ out('#include "SkTypes.h"\n')
+
+ # Write the resources.
+ index = 0
+ for f in args.input:
+ out('static const uint8_t resource{0:d}[] SK_STRUCT_ALIGN({1:d}) = {{\n'
+ .format(index, args.align))
+ bytes_written = 0
+ bytes_on_line = 0
+ for b in bytes_from_file(f):
+ out(hex(b) + ',')
+ bytes_written += 1
+ bytes_on_line += 1
+ if bytes_on_line >= 32:
+ out('\n')
+ bytes_on_line = 0
+ out('};\n')
+ out('static const size_t resource{0:d}_size = {1:d};\n'
+ .format(index, bytes_written))
+ index += 1
+
+ # Write the resource entries.
+ out('struct SkEmbeddedResource { const uint8_t* d; const size_t s; };\n')
+ out('static const SkEmbeddedResource header[] = {\n')
+ index = 0
+ for f in args.input:
+ out(' {{ resource{0:d}, resource{0:d}_size }},\n'.format(index))
+ index += 1
+ out('};\n')
+ out('static const int header_count = {0:d};\n'.format(index))
+
+ # Export the resource header.
+ out('struct SkEmbeddedHeader {const SkEmbeddedResource* e; const int c;};\n')
+ out('extern "C" const SkEmbeddedHeader {0:s} = {{ header, header_count }};\n'
+ .format(args.name))
+
+
+if __name__ == "__main__":
+ main()
« no previous file with comments | « src/ports/SkFontHost_linux.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698