diff options
author | Ben Smith <binji@chromium.org> | 2016-11-08 12:25:58 -0800 |
---|---|---|
committer | Ben Smith <binji@chromium.org> | 2016-12-05 15:41:36 -0800 |
commit | 98355e73ef121b8c3e2a0433e31fc8bac7057c70 (patch) | |
tree | 55536508a775e31ea652bdf1f780c4a5b7643ba2 /test/run-gen-spec-js.py | |
parent | 538f5e61d10b19a0d7283e765589432bbeedcfa8 (diff) | |
download | wabt-98355e73ef121b8c3e2a0433e31fc8bac7057c70.tar.gz wabt-98355e73ef121b8c3e2a0433e31fc8bac7057c70.tar.bz2 wabt-98355e73ef121b8c3e2a0433e31fc8bac7057c70.zip |
Fix gen-spec-js.py
This now (mostly) matches the output from the spec interpreter.
Diffstat (limited to 'test/run-gen-spec-js.py')
-rwxr-xr-x | test/run-gen-spec-js.py | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/test/run-gen-spec-js.py b/test/run-gen-spec-js.py new file mode 100755 index 00000000..73daee12 --- /dev/null +++ b/test/run-gen-spec-js.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# +# Copyright 2016 WebAssembly Community Group participants +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import argparse +import os +import subprocess +import sys + +import find_exe +import utils +from utils import Error + +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +GEN_SPEC_JS_PY = os.path.join(SCRIPT_DIR, 'gen-spec-js.py') + + +def main(args): + parser = argparse.ArgumentParser() + parser.add_argument('-o', '--out-dir', metavar='PATH', + help='output directory for files.') + parser.add_argument('--wast2wasm', metavar='PATH', + help='override wast2wasm executable.') + parser.add_argument('--wasm2wast', metavar='PATH', + help='override wasm2wast executable.') + parser.add_argument('--js-engine', metavar='PATH', + help='the path to the JavaScript engine with which to run' + ' the generated JavaScript. If not specified, JavaScript' + ' output will be written to stdout.') + parser.add_argument('--js-engine-flags', metavar='FLAGS', + help='additional flags for JavaScript engine.', + action='append', default=[]) + parser.add_argument('--prefix-js', + help='Prefix JavaScript file to pass to gen-spec-js') + parser.add_argument('-v', '--verbose', help='print more diagnotic messages.', + action='store_true') + parser.add_argument('--no-error-cmdline', + help='don\'t display the subprocess\'s commandline when' + + ' an error occurs', dest='error_cmdline', + action='store_false') + parser.add_argument('-p', '--print-cmd', help='print the commands that are run.', + action='store_true') + parser.add_argument('--use-libc-allocator', action='store_true') + parser.add_argument('file', help='wast file.') + options = parser.parse_args(args) + + with utils.TempDirectory(options.out_dir, 'run-gen-spec-js-') as out_dir: + wast2wasm = utils.Executable( + find_exe.GetWast2WasmExecutable(options.wast2wasm), + '--spec', + '--no-check-assert-invalid', + error_cmdline=options.error_cmdline) + wast2wasm.AppendOptionalArgs({ + '-v': options.verbose, + '--use-libc-allocator': options.use_libc_allocator + }) + + gen_spec_js = utils.Executable( + sys.executable, GEN_SPEC_JS_PY, + '--temp-dir', out_dir, + error_cmdline=options.error_cmdline) + gen_spec_js.AppendOptionalArgs({ + '--wast2wasm': options.wast2wasm, + '--wasm2wast': options.wasm2wast, + '--prefix': options.prefix_js, + }) + gen_spec_js.verbose = options.print_cmd + + json_file = utils.ChangeDir(utils.ChangeExt(options.file, '.json'), out_dir) + js_file = utils.ChangeExt(json_file, '.js') + wast2wasm.RunWithArgs(options.file, '-o', json_file) + + if options.js_engine: + gen_spec_js.RunWithArgs(json_file, '-o', js_file) + js = utils.Executable(options.js_engine, *options.js_engine_flags) + js.RunWithArgs(js_file) + else: + # Write JavaScript output to stdout + gen_spec_js.RunWithArgs(json_file) + +if __name__ == '__main__': + try: + sys.exit(main(sys.argv[1:])) + except Error as e: + sys.stderr.write(str(e) + '\n') + sys.exit(1) |