Flutter Engine
The Flutter Engine
make_data_cpp.py
Go to the documentation of this file.
1#!/usr/bin/env python
2
3# Copyright 2019 Google LLC.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7'''
8Generate a source file containing the given binary data.
9
10Output type is C++.
11'''
12
13from __future__ import print_function
14
15import os
16import struct
17import sys
18import mmap
19
21 with open(path, 'rb') as f:
22 s = struct.Struct('@I')
23 assert s.size == 4
24 mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
25 assert (len(mm) % s.size) == 0
26 for offset in range(0, len(mm), s.size):
27 yield s.unpack_from(mm, offset)[0]
28 mm.close()
29
30
31def convert(fmt, name, src_path, dst_path):
32 header, line_begin, line_end, footer = fmt
33 assert os.path.exists(src_path)
34 src = iterate_as_uint32(src_path)
35 with open(dst_path, 'w') as o:
36 o.write(header.format(name))
37 while True:
38 line = ','.join('%d' % v for _, v in zip(range(8), src))
39 if not line:
40 break
41 o.write('%s%s%s\n' % (line_begin, line, line_end))
42 o.write(footer.format(name))
43
44
45cpp = ('#include <cstdint>\nextern "C" uint32_t {0}[] __attribute__((aligned(16))) = {{\n',
46 '', ',', '}};\n')
47
48if __name__ == '__main__':
49 print('\n'.join('>>> %r' % x for x in sys.argv))
50 convert(cpp, sys.argv[1], sys.argv[2], sys.argv[3])
def iterate_as_uint32(path)
def convert(fmt, name, src_path, dst_path)
def print(*args, **kwargs)
Definition: run_tests.py:49
Definition: zip.py:1
static SkString join(const CommandLineFlags::StringArray &)
Definition: skpbench.cpp:741