blob: b3b121113d92b6d2ee534b69be9115c87c2a7dfe [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
# Script to create a cc file with uint8 array of bytes corresponding to the
# content of given a dill file.
import optparse
import sys
# Option => Help mapping.
OPTION_MAP = {
'dill_file': 'Path to the input dill file.',
'data_symbol': 'The C name for the data array.',
'size_symbol': 'The C name for the data size variable.',
'output': 'Path to the generated cc file.',
}
def BuildOptionParser():
parser = optparse.OptionParser()
for opt, help_text in OPTION_MAP.iteritems():
parser.add_option('--%s' % opt, type='string', help=help_text)
return parser
def ValidateOptions(options):
for opt in OPTION_MAP.keys():
if getattr(options, opt) is None:
sys.stderr.write('--%s option not specified.\n' % opt)
return False
return True
def WriteData(input_filename, data_symbol, output_file):
output_file.write('uint8_t %s[] = {\n' % data_symbol)
with open(input_filename, 'rb') as f:
first = True
size = 0
for byte in f.read():
if first:
output_file.write(' %d' % ord(byte))
first = False
else:
output_file.write(',\n %d' % ord(byte))
size += 1
output_file.write('\n};\n')
return size
def WriteSize(size_symbol, size, output_file):
output_file.write('intptr_t %s = %d;\n' % (size_symbol, size))
def Main():
opt_parser = BuildOptionParser()
(options, args) = opt_parser.parse_args()
if not ValidateOptions(options):
opt_parser.print_help()
return 1
if args:
sys.stderr.write('Unknown args: "%s"\n' % str(args))
parser.print_help()
return 1
with open(options.output, 'w') as output_file:
output_file.write('#include <stdint.h>\n')
output_file.write('extern "C" {\n')
size = WriteData(options.dill_file, options.data_symbol, output_file)
WriteSize(options.size_symbol, size, output_file)
output_file.write("}")
if __name__ == '__main__':
sys.exit(Main())