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

Side by Side 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, 8 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 unified diff | Download patch
« no previous file with comments | « src/ports/SkFontHost_linux.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/python
2
3 '''
4 Copyright 2015 Google Inc.
5
6 Use of this source code is governed by a BSD-style license that can be
7 found in the LICENSE file.
8 '''
9
10 import argparse
11
12
13 def bytes_from_file(f, chunksize=8192):
14 while True:
15 chunk = f.read(chunksize)
16 if chunk:
17 for b in chunk:
18 yield ord(b)
19 else:
20 break
21
22
23 def main():
24 parser = argparse.ArgumentParser(
25 formatter_class=argparse.RawDescriptionHelpFormatter,
26 description='Convert resource files to embedded read only data.',
27 epilog='''The output (when compiled and linked) can be used as:
28 struct SkEmbeddedResource {const uint8_t* data; const size_t size;};
29 struct SkEmbeddedHeader {const SkEmbeddedResource* entries; const int count;};
30 extern "C" SkEmbeddedHeader const NAME;''')
31 parser.add_argument('--align', default=1, type=int,
32 help='minimum alignment (in bytes) of resource data')
33 parser.add_argument('--name', default='_resource', type=str,
34 help='the name of the c identifier to export')
35 parser.add_argument('--input', required=True, type=argparse.FileType('rb'),
36 nargs='+', help='list of resource files to embed')
37 parser.add_argument('--output', required=True, type=argparse.FileType('w'),
38 help='the name of the cpp file to output')
39 args = parser.parse_args()
40
41 out = args.output.write;
42 out('#include "SkTypes.h"\n')
43
44 # Write the resources.
45 index = 0
46 for f in args.input:
47 out('static const uint8_t resource{0:d}[] SK_STRUCT_ALIGN({1:d}) = {{\n'
48 .format(index, args.align))
49 bytes_written = 0
50 bytes_on_line = 0
51 for b in bytes_from_file(f):
52 out(hex(b) + ',')
53 bytes_written += 1
54 bytes_on_line += 1
55 if bytes_on_line >= 32:
56 out('\n')
57 bytes_on_line = 0
58 out('};\n')
59 out('static const size_t resource{0:d}_size = {1:d};\n'
60 .format(index, bytes_written))
61 index += 1
62
63 # Write the resource entries.
64 out('struct SkEmbeddedResource { const uint8_t* d; const size_t s; };\n')
65 out('static const SkEmbeddedResource header[] = {\n')
66 index = 0
67 for f in args.input:
68 out(' {{ resource{0:d}, resource{0:d}_size }},\n'.format(index))
69 index += 1
70 out('};\n')
71 out('static const int header_count = {0:d};\n'.format(index))
72
73 # Export the resource header.
74 out('struct SkEmbeddedHeader {const SkEmbeddedResource* e; const int c;};\n')
75 out('extern "C" const SkEmbeddedHeader {0:s} = {{ header, header_count }};\n'
76 .format(args.name))
77
78
79 if __name__ == "__main__":
80 main()
OLDNEW
« 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