Flutter Engine
The Flutter Engine
third_party
skia
tools
embed_resources.py
Go to the documentation of this file.
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
if
isinstance(b, str):
19
# python 2
20
yield
ord(b)
21
else
:
22
# python 3
23
yield
b
24
else
:
25
break
26
27
28
def
main
():
29
parser = argparse.ArgumentParser(
30
formatter_class=argparse.RawDescriptionHelpFormatter,
31
description=
'Convert resource files to embedded read only data.'
,
32
epilog=
'''The output (when compiled and linked) can be used as:
33
struct SkEmbeddedResource {const uint8_t* data; const size_t size;};
34
struct SkEmbeddedHeader {const SkEmbeddedResource* entries; const int count;};
35
extern "C" SkEmbeddedHeader const NAME;'''
)
36
parser.add_argument(
'--align'
, default=1, type=int,
37
help=
'minimum alignment (in bytes) of resource data'
)
38
parser.add_argument(
'--name'
, default=
'_resource'
, type=str,
39
help=
'the name of the c identifier to export'
)
40
parser.add_argument(
'--input'
, required=
True
, type=argparse.FileType(
'rb'
),
41
nargs=
'+'
, help=
'list of resource files to embed'
)
42
parser.add_argument(
'--output'
, required=
True
, type=argparse.FileType(
'w'
),
43
help=
'the name of the cpp file to output'
)
44
args = parser.parse_args()
45
46
out = args.output.write;
47
out
(
'#include <stddef.h>\n'
)
48
out
(
'#include <stdint.h>\n'
)
49
50
# Write the resources.
51
index = 0
52
for
f
in
args.input:
53
out
(
'alignas({1:d}) static const uint8_t resource{0:d}[] = {{\n'
54
.
format
(index, args.align))
55
bytes_written = 0
56
bytes_on_line = 0
57
for
b
in
bytes_from_file
(f):
58
out
(hex(b) +
','
)
59
bytes_written += 1
60
bytes_on_line += 1
61
if
bytes_on_line >= 32:
62
out
(
'\n'
)
63
bytes_on_line = 0
64
out
(
'};\n'
)
65
out
(
'static const size_t resource{0:d}_size = {1:d};\n'
66
.
format
(index, bytes_written))
67
index += 1
68
69
# Write the resource entries.
70
out
(
'struct SkEmbeddedResource { const uint8_t* d; const size_t s; };\n'
)
71
out
(
'static const SkEmbeddedResource header[] = {\n'
)
72
index = 0
73
for
f
in
args.input:
74
out
(
' {{ resource{0:d}, resource{0:d}_size }},\n'
.
format
(index))
75
index += 1
76
out
(
'};\n'
)
77
out
(
'static const int header_count = {0:d};\n'
.
format
(index))
78
79
# Export the resource header.
80
out
(
'struct SkEmbeddedHeader {const SkEmbeddedResource* e; const int c;};\n'
)
81
out
(
'extern "C" const SkEmbeddedHeader {0:s} = {{ header, header_count }};\n'
82
.
format
(args.name))
83
84
85
if
__name__ ==
"__main__"
:
86
main
()
format
uint32_t uint32_t * format
Definition:
fl_texture_registrar_test.cc:41
dump_adb_log.out
out
Definition:
dump_adb_log.py:10
main
Definition:
main.py:1
tools.embed_resources.bytes_from_file
def bytes_from_file(f, chunksize=8192)
Definition:
embed_resources.py:13
tools.embed_resources.main
def main()
Definition:
embed_resources.py:28
Generated on Sun Jun 23 2024 21:56:49 for Flutter Engine by
1.9.4