示例#1
0
def main(args):
  parser = argparse.ArgumentParser()
  parser.add_argument('-o', '--out-dir', metavar='PATH',
                      help='output directory for files.')
  parser.add_argument('--bindir', metavar='PATH',
                      default=find_exe.GetDefaultPath(),
                      help='directory to search for all executables.')
  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('--print-cmd', help='print the commands that are run.',
                      action='store_true')
  parser.add_argument('-c', '--cutoff', type=int, default=0)
  parser.add_argument('file', help='test file.')
  options = parser.parse_args(args)

  wat2wasm = utils.Executable(
      find_exe.GetWat2WasmExecutable(options.bindir),
      error_cmdline=options.error_cmdline)
  wat2wasm.AppendOptionalArgs({
      '-v': options.verbose,
  })

  wasm_opcodecnt = utils.Executable(
      find_exe.GetWasmOpcodeCntExecutable(options.bindir),
      error_cmdline=options.error_cmdline)

  wat2wasm.verbose = options.print_cmd
  wasm_opcodecnt.verbose = options.print_cmd

  with utils.TempDirectory(options.out_dir, 'run-opcodecnt-') as out_dir:
    out_file = utils.ChangeDir(utils.ChangeExt(options.file, '.wasm'), out_dir)
    wat2wasm.RunWithArgs(options.file, '-o', out_file)
    wasm_opcodecnt.RunWithArgs(out_file, '-c', str(options.cutoff))

  return 0
示例#2
0
def main(args):
    parser = argparse.ArgumentParser()
    parser.add_argument('-v',
                        '--verbose',
                        help='print more diagnotic messages.',
                        action='store_true')
    parser.add_argument('-o',
                        '--out-dir',
                        metavar='PATH',
                        help='output directory for files.')
    parser.add_argument('--bindir',
                        metavar='PATH',
                        default=find_exe.GetDefaultPath(),
                        help='directory to search for all executables.')
    parser.add_argument(
        '--stdout',
        action='store_true',
        help='do one roundtrip and write wast output to stdout')
    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('--no-check', action='store_true')
    parser.add_argument('--debug-names', action='store_true')
    parser.add_argument('--generate-names', action='store_true')
    parser.add_argument('--fold-exprs', action='store_true')
    parser.add_argument('--enable-exceptions', action='store_true')
    parser.add_argument('--enable-threads', action='store_true')
    parser.add_argument('--enable-simd', action='store_true')
    parser.add_argument('--inline-exports', action='store_true')
    parser.add_argument('--inline-imports', action='store_true')
    parser.add_argument('file', help='test file.')
    options = parser.parse_args(args)

    wat2wasm = utils.Executable(find_exe.GetWat2WasmExecutable(options.bindir),
                                error_cmdline=options.error_cmdline)
    wat2wasm.AppendOptionalArgs({
        '--debug-names': options.debug_names,
        '--enable-exceptions': options.enable_exceptions,
        '--enable-threads': options.enable_threads,
        '--enable-simd': options.enable_simd,
        '--no-check': options.no_check,
    })

    wasm2wat = utils.Executable(find_exe.GetWasm2WatExecutable(options.bindir),
                                error_cmdline=options.error_cmdline)
    wasm2wat.AppendOptionalArgs({
        '--fold-exprs': options.fold_exprs,
        '--enable-exceptions': options.enable_exceptions,
        '--enable-threads': options.enable_threads,
        '--enable-simd': options.enable_simd,
        '--inline-exports': options.inline_exports,
        '--inline-imports': options.inline_imports,
        '--no-debug-names': not options.debug_names,
        '--generate-names': options.generate_names,
        '--no-check': options.no_check,
    })

    wat2wasm.verbose = options.print_cmd
    wasm2wat.verbose = options.print_cmd

    filename = options.file
    if not os.path.exists(filename):
        sys.stderr.write('File not found: %s\n' % filename)
        return ERROR

    with utils.TempDirectory(options.out_dir, 'roundtrip-') as out_dir:
        if options.stdout:
            result, msg = OneRoundtripToStdout(wat2wasm, wasm2wat, out_dir,
                                               filename, options.verbose)
        else:
            result, msg = TwoRoundtrips(wat2wasm, wasm2wat, out_dir, filename,
                                        options.verbose)
        if result == ERROR:
            sys.stderr.write(msg)
        return result
示例#3
0
def main(args):
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('-o', '--output', metavar='PATH', help='output file.')
    parser.add_argument('-P',
                        '--prefix',
                        metavar='PATH',
                        help='prefix file.',
                        default=os.path.join(SCRIPT_DIR, 'gen-spec-prefix.js'))
    parser.add_argument('--bindir',
                        metavar='PATH',
                        default=find_exe.GetDefaultPath(),
                        help='directory to search for all executables.')
    parser.add_argument('--temp-dir',
                        metavar='PATH',
                        help='set the directory that temporary wasm/wat'
                        ' files are written.')
    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('file', help='spec json file.')
    options = parser.parse_args(args)

    wat2wasm = Executable(find_exe.GetWat2WasmExecutable(options.bindir),
                          error_cmdline=options.error_cmdline)
    wasm2wat = Executable(find_exe.GetWasm2WatExecutable(options.bindir),
                          error_cmdline=options.error_cmdline)

    wat2wasm.verbose = options.print_cmd
    wasm2wat.verbose = options.print_cmd

    with open(options.file) as json_file:
        json_dir = os.path.dirname(options.file)
        spec_json = json.load(json_file)
        all_commands = spec_json['commands']

    # modules is a list of pairs: [(module_command, [assert_command, ...]), ...]
    modules = CollectInvalidModuleCommands(all_commands)

    with utils.TempDirectory(options.temp_dir, 'gen-spec-js-') as temp_dir:
        extender = ModuleExtender(wat2wasm, wasm2wat, temp_dir)
        for module_command, assert_commands in modules:
            if assert_commands:
                wasm_path = os.path.join(json_dir, module_command['filename'])
                new_module_filename = extender.Extend(wasm_path,
                                                      assert_commands)
                module_command['filename'] = new_module_filename

        output = io.StringIO()
        if options.prefix:
            with open(options.prefix) as prefix_file:
                output.write(prefix_file.read())
                output.write('\n')

        JSWriter(json_dir, spec_json, output).Write()

    if options.output:
        out_file = open(options.output, 'w')
    else:
        out_file = sys.stdout

    try:
        out_file.write(output.getvalue())
    finally:
        out_file.close()

    return 0
示例#4
0
def main(args):
  parser = argparse.ArgumentParser()
  parser.add_argument('-v', '--verbose', help='print more diagnotic messages.',
                      action='store_true')
  parser.add_argument('-o', '--out-dir', metavar='PATH',
                      help='output directory for files.')
  parser.add_argument('--bindir', metavar='PATH',
                      default=find_exe.GetDefaultPath(),
                      help='directory to search for all executables.')
  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('--headers', action='store_true')
  parser.add_argument('--no-check', action='store_true')
  parser.add_argument('--dump-verbose', action='store_true')
  parser.add_argument('--dump-debug', action='store_true')
  parser.add_argument('--enable-exceptions', action='store_true')
  parser.add_argument('--enable-saturating-float-to-int', action='store_true')
  parser.add_argument('--enable-threads', action='store_true')
  parser.add_argument('--enable-simd', action='store_true')
  parser.add_argument('--gen-wasm', action='store_true',
                      help='parse with gen-wasm')
  parser.add_argument('--spec', action='store_true')
  parser.add_argument('-r', '--relocatable', action='store_true')
  parser.add_argument('--no-canonicalize-leb128s', action='store_true')
  parser.add_argument('--debug-names', action='store_true')
  parser.add_argument('file', help='test file.')
  options = parser.parse_args(args)

  if options.gen_wasm and options.spec:
    parser.error('Can\'t use both --gen-wasm and --spec')

  gen_wasm = utils.Executable(sys.executable, GEN_WASM_PY,
                              error_cmdline=options.error_cmdline)

  wat_tool = None
  if options.spec:
    wat_tool = utils.Executable(
        find_exe.GetWast2JsonExecutable(options.bindir),
        error_cmdline=options.error_cmdline)
  else:
    wat_tool = utils.Executable(
        find_exe.GetWat2WasmExecutable(options.bindir),
        error_cmdline=options.error_cmdline)

  wat_tool.AppendOptionalArgs({
      '--debug-names': options.debug_names,
      '--enable-exceptions': options.enable_exceptions,
      '--enable-saturating-float-to-int':
          options.enable_saturating_float_to_int,
      '--enable-threads': options.enable_threads,
      '--enable-simd': options.enable_simd,
      '--no-check': options.no_check,
      '--no-canonicalize-leb128s': options.no_canonicalize_leb128s,
      '-v': options.verbose,
      '-r': options.relocatable,
  })

  wasm_objdump = utils.Executable(
      find_exe.GetWasmdumpExecutable(options.bindir),
      error_cmdline=options.error_cmdline)
  wasm_objdump.AppendOptionalArgs({
      '-h': options.headers,
      '-x': options.dump_verbose,
      '--debug': options.dump_debug,
  })

  gen_wasm.verbose = options.print_cmd
  wat_tool.verbose = options.print_cmd
  wasm_objdump.verbose = options.print_cmd

  filename = options.file

  with utils.TempDirectory(options.out_dir, 'objdump-') as out_dir:
    basename = os.path.basename(filename)
    basename_noext = os.path.splitext(basename)[0]
    if options.gen_wasm:
      out_file = os.path.join(out_dir, basename_noext + '.wasm')
      gen_wasm.RunWithArgs('-o', out_file, filename)
    else:
      if options.spec:
        out_file = os.path.join(out_dir, basename_noext + '.json')
      else:
        out_file = os.path.join(out_dir, basename_noext + '.wasm')
      wat_tool.RunWithArgs('-o', out_file, filename)

    if options.spec:
      wasm_files = utils.GetModuleFilenamesFromSpecJSON(out_file)
      wasm_files = [utils.ChangeDir(f, out_dir) for f in wasm_files]
    else:
      wasm_files = [out_file]

    wasm_objdump.RunWithArgs('-r', '-d', *wasm_files)
示例#5
0
def main(args):
  parser = argparse.ArgumentParser()
  parser.add_argument('-o', '--out-dir', metavar='PATH',
                      help='output directory for files.')
  parser.add_argument('-v', '--verbose', help='print more diagnotic messages.',
                      action='store_true')
  parser.add_argument('--bindir', metavar='PATH',
                      default=find_exe.GetDefaultPath(),
                      help='directory to search for all executables.')
  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('--run-all-exports', action='store_true')
  parser.add_argument('--host-print', action='store_true')
  parser.add_argument('--spec', action='store_true')
  parser.add_argument('-t', '--trace', action='store_true')
  parser.add_argument('file', help='test file.')
  parser.add_argument('--enable-saturating-float-to-int', action='store_true')
  parser.add_argument('--enable-threads', action='store_true')
  parser.add_argument('--enable-simd', action='store_true')
  options = parser.parse_args(args)

  wast_tool = None
  interp_tool = None
  if options.spec:
    wast_tool = utils.Executable(
        find_exe.GetWast2JsonExecutable(options.bindir),
        error_cmdline=options.error_cmdline)
    interp_tool = utils.Executable(
        find_exe.GetSpectestInterpExecutable(options.bindir),
        error_cmdline=options.error_cmdline)
  else:
    wast_tool = utils.Executable(
        find_exe.GetWat2WasmExecutable(options.bindir),
        error_cmdline=options.error_cmdline)
    interp_tool = utils.Executable(
        find_exe.GetWasmInterpExecutable(options.bindir),
        error_cmdline=options.error_cmdline)
    interp_tool.AppendOptionalArgs({
        '--host-print': options.host_print,
        '--run-all-exports': options.run_all_exports,
    })

  wast_tool.AppendOptionalArgs({
      '-v': options.verbose,
      '--enable-saturating-float-to-int':
          options.enable_saturating_float_to_int,
      '--enable-threads': options.enable_threads,
      '--enable-simd': options.enable_simd,
  })

  interp_tool.AppendOptionalArgs({
      '-v': options.verbose,
      '--run-all-exports': options.run_all_exports,
      '--trace': options.trace,
      '--enable-saturating-float-to-int':
          options.enable_saturating_float_to_int,
      '--enable-threads': options.enable_threads,
      '--enable-simd': options.enable_simd,
  })

  wast_tool.verbose = options.print_cmd
  interp_tool.verbose = options.print_cmd

  with utils.TempDirectory(options.out_dir, 'run-interp-') as out_dir:
    new_ext = '.json' if options.spec else '.wasm'
    out_file = utils.ChangeDir(utils.ChangeExt(options.file, new_ext), out_dir)
    wast_tool.RunWithArgs(options.file, '-o', out_file)
    interp_tool.RunWithArgs(out_file)

  return 0
def main(args):
    parser = argparse.ArgumentParser()
    parser.add_argument('-o',
                        '--out-dir',
                        metavar='PATH',
                        help='output directory for files.')
    parser.add_argument('-v',
                        '--verbose',
                        help='print more diagnotic messages.',
                        action='store_true')
    parser.add_argument('--bindir',
                        metavar='PATH',
                        default=find_exe.GetDefaultPath(),
                        help='directory to search for all executables.')
    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('--run-all-exports', action='store_true')
    parser.add_argument('--host-print', action='store_true')
    parser.add_argument('-t', '--trace', action='store_true')
    parser.add_argument('file', help='test file.')
    parser.add_argument('--enable-saturating-float-to-int',
                        action='store_true')
    parser.add_argument('--enable-threads', action='store_true')
    parser.add_argument('--trap-on-failed-comp', action='store_true')
    options = parser.parse_args(args)

    wast_tool = None
    interp_tool = None
    interp_jit_tool = None
    wast_tool = utils.Executable(find_exe.GetWat2WasmExecutable(
        options.bindir),
                                 error_cmdline=options.error_cmdline)
    interp_tool = utils.Executable(find_exe.GetWasmInterpExecutable(
        options.bindir),
                                   error_cmdline=options.error_cmdline)
    interp_tool.AppendOptionalArgs({
        '--host-print':
        options.host_print,
        '--run-all-exports':
        options.run_all_exports,
    })

    interp_jit_tool = utils.Executable(find_exe.GetWasmInterpExecutable(
        options.bindir),
                                       error_cmdline=options.error_cmdline)
    interp_jit_tool.AppendOptionalArgs({
        '--host-print':
        options.host_print,
        '--run-all-exports':
        options.run_all_exports,
    })

    wast_tool.AppendOptionalArgs({
        '-v': options.verbose,
        '--enable-saturating-float-to-int':
        options.enable_saturating_float_to_int,
        '--enable-threads': options.enable_threads,
    })

    interp_tool.AppendOptionalArgs({
        '-v':
        options.verbose,
        '--run-all-exports':
        options.run_all_exports,
        '--trace':
        options.trace,
        '--enable-saturating-float-to-int':
        options.enable_saturating_float_to_int,
        '--enable-threads':
        options.enable_threads,
        '--disable-jit':
        True,
    })
    interp_jit_tool.AppendOptionalArgs({
        '-v':
        options.verbose,
        '--run-all-exports':
        options.run_all_exports,
        '--trace':
        options.trace,
        '--enable-saturating-float-to-int':
        options.enable_saturating_float_to_int,
        '--enable-threads':
        options.enable_threads,
        '--trap-on-failed-comp':
        options.trap_on_failed_comp,
    })

    wast_tool.verbose = options.print_cmd
    interp_tool.verbose = options.print_cmd
    interp_jit_tool.verbose = options.print_cmd

    with utils.TempDirectory(options.out_dir, 'run-jit-perform-') as out_dir:
        if not options.file.endswith('.wasm'):
            new_ext = '.wasm'
            out_file = utils.ChangeDir(utils.ChangeExt(options.file, new_ext),
                                       out_dir)
            wast_tool.RunWithArgs(options.file, '-o', out_file)
        else:
            out_file = options.file
        start = time.time()
        interp_out = interp_tool.RunWithArgsForStdout(out_file)
        interp_time = time.time() - start
        start = time.time()
        jit_out = interp_jit_tool.RunWithArgsForStdout(out_file)
        jit_time = time.time() - start
        print("Interpreter: {}\nJIT: {}".format(interp_time, jit_time))
        expected_lines = [line for line in interp_out.splitlines() if line]
        actual_lines = [line for line in jit_out.splitlines() if line]
        diff_lines = list(
            difflib.unified_diff(expected_lines,
                                 actual_lines,
                                 fromfile='expected',
                                 tofile='actual',
                                 lineterm=''))
        msg = ""
        if len(diff_lines) > 0:
            msg += 'STDOUT MISMATCH:\n' + '\n'.join(diff_lines) + '\n'

        if msg:
            raise Error(msg)

    return 0