Generate the kernel buffers using bin_to_assembly rule

instead of dill_to_cc.
This should fix the clang tool errors we are seeing.

Change-Id: I9a17a8028bc4f3e2352793ffe41a7444ae06956b
Reviewed-on: https://dart-review.googlesource.com/61107
Commit-Queue: Siva Annamalai <asiva@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
asiva 2018-06-20 02:31:12 +00:00 committed by commit-bot@chromium.org
parent 8da46d35f5
commit 6dfa10d33d
3 changed files with 70 additions and 129 deletions

View file

@ -593,9 +593,7 @@ template("dart_io") {
deps += [ "//third_party/boringssl" ]
if (is_fuchsia) {
deps += [
"//garnet/public/lib/netstack/c",
]
deps += [ "//garnet/public/lib/netstack/c" ]
public_deps = [
"//zircon/public/lib/fdio",
]
@ -701,6 +699,14 @@ template("bin_to_assembly") {
"--target_os",
current_os,
]
if (defined(invoker.size_symbol)) {
args += [
"--size_symbol_name",
invoker.size_symbol,
"--target_arch",
current_cpu,
]
}
if (invoker.executable) {
args += [ "--executable" ]
}
@ -754,64 +760,37 @@ bin_to_assembly("isolate_snapshot_instructions_assembly") {
executable = true
}
template("dill_to_cc") {
assert(defined(invoker.dill_file), "Need dill_file in $target_name.")
assert(defined(invoker.data_symbol), "Need data_symbol in $target_name.")
assert(defined(invoker.size_symbol), "Need size_symbol in $target_name.")
assert(defined(invoker.output), "Need output in $target_name.")
extra_deps = []
if (defined(invoker.deps)) {
extra_deps += invoker.deps
}
action(target_name) {
deps = extra_deps
script = "../tools/dill_to_data_cc.py"
inputs = [
"../tools/dill_to_data_cc.py",
invoker.dill_file,
]
outputs = [
invoker.output,
]
args = [
"--dill_file=" + rebase_path(invoker.dill_file),
"--data_symbol=" + invoker.data_symbol,
"--size_symbol=" + invoker.size_symbol,
"--output=" + rebase_path(invoker.output),
]
}
}
dill_to_cc("kernel_service_dill_cc") {
bin_to_assembly("kernel_service_dill_S") {
deps = [
"../../utils/kernel-service:kernel_service_dill",
]
dill_file = "$root_gen_dir/kernel_service.dill"
data_symbol = "kKernelServiceDill"
input = "$root_gen_dir/kernel_service.dill"
output = "$root_gen_dir/kernel_service.dill.S"
symbol = "kKernelServiceDill"
size_symbol = "kKernelServiceDillSize"
output = "$root_gen_dir/kernel_service.dill.cc"
executable = false
}
dill_to_cc("platform_dill_cc") {
bin_to_assembly("platform_dill_S") {
deps = [
"../vm:vm_legacy_platform",
]
dill_file = "$root_out_dir/vm_platform.dill"
data_symbol = "kPlatformDill"
input = "$root_out_dir/vm_platform.dill"
output = "$target_gen_dir/vm_platform.dill.S"
symbol = "kPlatformDill"
size_symbol = "kPlatformDillSize"
output = "$target_gen_dir/vm_platform.dill.cc"
executable = false
}
dill_to_cc("platform_strong_dill_cc") {
bin_to_assembly("platform_strong_dill_S") {
deps = [
"../vm:vm_platform",
]
dill_file = "$root_out_dir/vm_platform_strong.dill"
data_symbol = "kPlatformStrongDill"
input = "$root_out_dir/vm_platform_strong.dill"
output = "$target_gen_dir/vm_platform_strong.dill.S"
symbol = "kPlatformStrongDill"
size_symbol = "kPlatformStrongDillSize"
output = "$target_gen_dir/vm_platform_strong.dill.cc"
executable = false
}
source_set("dart_snapshot_cc") {
@ -831,14 +810,14 @@ source_set("dart_snapshot_cc") {
source_set("dart_kernel_platform_cc") {
deps = [
":kernel_service_dill_cc",
":platform_dill_cc",
":platform_strong_dill_cc",
":kernel_service_dill_S",
":platform_dill_S",
":platform_strong_dill_S",
]
sources = [
"$root_gen_dir/kernel_service.dill.cc",
"$target_gen_dir/vm_platform.dill.cc",
"$target_gen_dir/vm_platform_strong.dill.cc",
"$root_gen_dir/kernel_service.dill.S",
"$target_gen_dir/vm_platform.dill.S",
"$target_gen_dir/vm_platform_strong.dill.S",
]
}

View file

@ -25,6 +25,10 @@ def Main():
action="store_true", default=False)
parser.add_option("--target_os",
action="store", type="string")
parser.add_option("--size_symbol_name",
action="store", type="string")
parser.add_option("--target_arch",
action="store", type="string")
(options, args) = parser.parse_args()
if not options.output:
@ -78,18 +82,53 @@ def Main():
output_file.write(".balign 32\n")
output_file.write("%s:\n" % options.symbol_name)
size = 0
with open(options.input, "rb") as input_file:
if options.target_os in ["win"]:
for byte in input_file.read():
output_file.write("byte %d\n" % ord(byte))
output_file.write("end\n")
size += 1
else:
for byte in input_file.read():
output_file.write(".byte %d\n" % ord(byte))
size += 1
if options.target_os not in ["mac", "ios", "win"]:
output_file.write(".size {0}, .-{0}\n".format(options.symbol_name))
if options.size_symbol_name:
if not options.target_arch:
sys.stderr.write("--target_arch not specified\n")
parser.print_help();
return -1
is64bit = 0
if options.target_arch:
if options.target_arch in ["arm64", "x64"]:
is64bit = 1
if options.target_os in ["win"]:
output_file.write("public %s\n" % options.size_symbol_name)
output_file.write("%s label byte\n" % options.size_symbol_name)
if (is64bit == 1):
output_file.write("qword %d\n" % size )
else:
output_file.write("dword %d\n" % size )
else:
if options.target_os in ["mac", "ios"]:
output_file.write(".global _%s\n" % options.size_symbol_name)
output_file.write("_%s:\n" % options.size_symbol_name)
else:
output_file.write(".global %s\n" % options.size_symbol_name)
output_file.write("%s:\n" % options.size_symbol_name)
if (is64bit == 1):
output_file.write(".quad %d\n" % size )
else:
output_file.write(".long %d\n" % size )
if options.target_os in ["win"]:
output_file.write("end\n")
return 0
if __name__ == "__main__":

View file

@ -1,77 +0,0 @@
#!/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())