Beispiel #1
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('--spec', action='store_true')
    parser.add_argument('-t', '--trace', action='store_true')
    parser.add_argument('file', help='test file.')
    options = parser.parse_args(args)

    wast2wasm = utils.Executable(find_exe.GetWast2WasmExecutable(
        options.bindir),
                                 error_cmdline=options.error_cmdline)
    wast2wasm.AppendOptionalArgs({
        '-v': options.verbose,
        '--spec': options.spec,
    })

    wasm_interp = utils.Executable(find_exe.GetWasmInterpExecutable(
        options.bindir),
                                   error_cmdline=options.error_cmdline)
    wasm_interp.AppendOptionalArgs({
        '-v': options.verbose,
        '--run-all-exports': options.run_all_exports,
        '--spec': options.spec,
        '--trace': options.trace,
    })

    wast2wasm.verbose = options.print_cmd
    wasm_interp.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)
        wast2wasm.RunWithArgs(options.file, '-o', out_file)
        wasm_interp.RunWithArgs(out_file)

    return 0
Beispiel #2
0
def main(args):
    parser = argparse.ArgumentParser()
    parser.add_argument('-o',
                        '--out-dir',
                        metavar='PATH',
                        help='output directory for files.')
    parser.add_argument('--wasm-interp-executable',
                        metavar='PATH',
                        help='override wasm-interp executable.')
    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('--run-all-exports', action='store_true')
    parser.add_argument('--spec', action='store_true')
    parser.add_argument('--use-libc-allocator', action='store_true')
    parser.add_argument('--print-cmd',
                        help='print the commands that are run.',
                        action='store_true')
    parser.add_argument('file', help='test file.')
    options = parser.parse_args(args)

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

    wasm_interp = utils.Executable(find_exe.GetWasmInterpExecutable(
        options.wasm_interp_executable),
                                   error_cmdline=options.error_cmdline)
    wasm_interp.AppendOptionalArgs({
        '--run-all-exports':
        options.run_all_exports,
        '--spec':
        options.spec,
        '--trace':
        options.verbose,
        '--use-libc-allocator':
        options.use_libc_allocator
    })

    gen_wasm.verbose = options.print_cmd
    wasm_interp.verbose = options.print_cmd

    with utils.TempDirectory(options.out_dir,
                             'run-gen-wasm-interp-') as out_dir:
        out_file = utils.ChangeDir(utils.ChangeExt(options.file, '.wasm'),
                                   out_dir)
        gen_wasm.RunWithArgs(options.file, '-o', out_file)
        wasm_interp.RunWithArgs(out_file)

    return 0
Beispiel #3
0
def main(args):
    parser = argparse.ArgumentParser()
    parser.add_argument('-v',
                        '--verbose',
                        help='print more diagnotic messages.',
                        action='store_true')
    parser.add_argument('-r',
                        '--relocatable',
                        action='store_true',
                        help='final output is relocatable')
    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('--incremental',
                        help='incremenatly link one object at' +
                        ' a time to produce the final linked binary.',
                        action='store_true')
    parser.add_argument('--debug-names', action='store_true')
    parser.add_argument('--dump-verbose', action='store_true')
    parser.add_argument('--spec', action='store_true')
    parser.add_argument('file', help='test file.')
    options = parser.parse_args(args)

    wast2wasm = utils.Executable(find_exe.GetWast2WasmExecutable(
        options.bindir),
                                 error_cmdline=options.error_cmdline)
    wast2wasm.AppendOptionalArgs({
        '--debug-names': options.debug_names,
        '-v': options.dump_verbose,
    })

    wasm_link = utils.Executable(find_exe.GetWasmlinkExecutable(
        options.bindir),
                                 error_cmdline=options.error_cmdline)
    wasm_link.AppendOptionalArgs({
        '-v': options.verbose,
        '-r': options.relocatable,
    })

    wasmdump = utils.Executable(find_exe.GetWasmdumpExecutable(options.bindir),
                                error_cmdline=options.error_cmdline)

    wasm_interp = utils.Executable(find_exe.GetWasmInterpExecutable(
        options.bindir),
                                   error_cmdline=options.error_cmdline)

    wast2wasm.verbose = options.print_cmd
    wasm_link.verbose = options.print_cmd
    wasmdump.verbose = options.print_cmd
    wasm_interp.verbose = options.print_cmd

    filename = options.file

    with utils.TempDirectory(options.out_dir, 'wasm-link-') as out_dir:
        basename = os.path.basename(filename)
        basename_noext = os.path.splitext(basename)[0]
        out_file = os.path.join(out_dir, basename_noext + '.json')
        wast2wasm.RunWithArgs('--spec', '--debug-names', '--no-check', '-r',
                              '-o', out_file, filename)

        wasm_files = utils.GetModuleFilenamesFromSpecJSON(out_file)
        wasm_files = [utils.ChangeDir(f, out_dir) for f in wasm_files]

        output = os.path.join(out_dir, 'linked.wasm')
        if options.incremental:
            partially_linked = output + '.partial'
            for i, f in enumerate(wasm_files):
                if i == 0:
                    wasm_link.RunWithArgs('-o', output, f)
                else:
                    if os.path.exists(partially_linked):
                        os.remove(partially_linked)
                    os.rename(output, partially_linked)
                    wasm_link.RunWithArgs('-r', '-o', output, partially_linked,
                                          f)
                #wasmdump.RunWithArgs('-d', '-h', output)
            wasmdump.RunWithArgs('-d', '-x', '-r', '-h', output)
        else:
            wasm_link.RunWithArgs('-o', output, *wasm_files)
            wasmdump.RunWithArgs('-d', '-x', '-r', '-h', output)

        if options.spec:
            with open(out_file) as json_file:
                spec = json.load(json_file, object_pairs_hook=OrderedDict)
                spec['commands'] = [
                    c for c in spec['commands'] if c['type'] != 'module'
                ]
                module = OrderedDict([
                    ('type', 'module'),
                    ('line', 0),
                    ('filename', os.path.basename(output)),
                ])
                spec['commands'].insert(0, module)

            with open(out_file, 'wb') as json_file:
                json.dump(spec, json_file, indent=4)

            wasm_interp.RunWithArgs('--spec', out_file)
def main(args):
    parser = argparse.ArgumentParser()
    parser.add_argument('-a',
                        '--arg',
                        help='additional args to pass to executable',
                        action='append')
    parser.add_argument('-o',
                        '--out-dir',
                        metavar='PATH',
                        help='output directory for files.')
    parser.add_argument('--exe-dir',
                        metavar='PATH',
                        help='directory to search for all executables. '
                        'This can be overridden by the other executable '
                        'flags.')
    parser.add_argument('-e',
                        '--sexpr-wasm-executable',
                        metavar='PATH',
                        help='override executable.')
    parser.add_argument('--js-executable',
                        metavar='PATH',
                        help='override js executable.')
    parser.add_argument('--wasm-wast-executable',
                        metavar='PATH',
                        help='override wasm-wast executable.')
    parser.add_argument('--wasm-interp-executable',
                        metavar='PATH',
                        help='override wasm-interp executable.')
    parser.add_argument('-v',
                        '--verbose',
                        help='print more diagnotic messages.',
                        action='store_true')
    parser.add_argument('-l',
                        '--list',
                        help='list all tests.',
                        action='store_true')
    parser.add_argument('-r',
                        '--rebase',
                        help='rebase a test to its current output.',
                        action='store_true')
    parser.add_argument('-j',
                        '--jobs',
                        help='number of jobs to use to run tests',
                        type=int,
                        default=multiprocessing.cpu_count())
    parser.add_argument('-t',
                        '--timeout',
                        type=float,
                        default=DEFAULT_TIMEOUT,
                        help='per test timeout in seconds')
    parser.add_argument('--no-roundtrip',
                        help='don\'t run roundtrip.py on all tests',
                        action='store_false',
                        default=True,
                        dest='roundtrip')
    parser.add_argument('patterns',
                        metavar='pattern',
                        nargs='*',
                        help='test patterns.')
    options = parser.parse_args(args)

    if options.patterns:
        pattern_re = '|'.join(
            fnmatch.translate('*%s*' % p) for p in options.patterns)
    else:
        pattern_re = '.*'

    test_names = findtests.FindTestFiles(SCRIPT_DIR, '.txt', pattern_re)

    if options.list:
        for test_name in test_names:
            print test_name
        return 0
    if not test_names:
        print 'no tests match that filter'
        return 1

    if options.exe_dir:
        if not options.sexpr_wasm_executable:
            options.sexpr_wasm_executable = os.path.join(
                options.exe_dir, 'sexpr-wasm')
        if not options.wasm_wast_executable:
            options.wasm_wast_executable = os.path.join(
                options.exe_dir, 'wasm-wast')
        if not options.wasm_interp_executable:
            options.wasm_interp_executable = os.path.join(
                options.exe_dir, 'wasm-interp')

    variables = {
        'sexpr-wasm':
        find_exe.GetSexprWasmExecutable(options.sexpr_wasm_executable),
        'js':
        find_exe.GetJSExecutable(options.js_executable),
        'wasm-wast':
        find_exe.GetWasmWastExecutable(options.wasm_wast_executable),
        'wasm-interp':
        find_exe.GetWasmInterpExecutable(options.wasm_interp_executable),
    }

    status = Status(options.verbose)
    infos = GetAllTestInfo(test_names, status)

    inq = multiprocessing.Queue()
    test_count = 0
    for info in infos:
        if info.skip:
            status.Skipped(info)
            continue
        inq.put(info)
        test_count += 1

        if options.roundtrip:
            if info.ShouldCreateRoundtrip():
                inq.put(info.CreateRoundtripInfo())
                test_count += 1

    outq = multiprocessing.Queue()
    num_proc = options.jobs
    status.Start(test_count)

    if options.out_dir:
        out_dir = options.out_dir
        out_dir_is_temp = False
        if not os.path.exists(out_dir):
            os.makedirs(out_dir)
    else:
        out_dir = tempfile.mkdtemp(prefix='sexpr-wasm-')
        out_dir_is_temp = True

    try:
        for i, p in enumerate(range(num_proc)):
            args = (i, options, variables, inq, outq, out_dir)
            proc = multiprocessing.Process(target=ProcessWorker, args=args)
            proc.start()

        finished_tests = 0
        while finished_tests < test_count:
            try:
                info, result = outq.get(True, 0.01)
            except Queue.Empty:
                status.UpdateTimer()
                continue

            finished_tests += 1
            HandleTestResult(status, info, result, options.rebase)
    except KeyboardInterrupt:
        while multiprocessing.active_children():
            time.sleep(0.1)
    finally:
        while multiprocessing.active_children():
            time.sleep(0.1)
        if out_dir_is_temp:
            shutil.rmtree(out_dir)

    status.Clear()

    ret = 0

    if status.failed:
        sys.stderr.write('**** FAILED %s\n' % ('*' * (80 - 14)))
        for info in status.failed_tests:
            sys.stderr.write('- %s\n' % info.name)
        ret = 1

    status.Print()
    return ret
Beispiel #5
0
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('--wasmdump',
                        metavar='PATH',
                        help='override wast2wasm executable.')
    parser.add_argument('--wasm-interp',
                        metavar='PATH',
                        help='override wasm-interp executable.')
    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('--run-all-exports', action='store_true')
    parser.add_argument('--spec', action='store_true')
    parser.add_argument('--use-libc-allocator', action='store_true')
    parser.add_argument('file', help='test file.')
    options = parser.parse_args(args)

    wast2wasm = utils.Executable(find_exe.GetWast2WasmExecutable(
        options.wast2wasm),
                                 error_cmdline=options.error_cmdline)
    wast2wasm.AppendOptionalArgs({
        '-v':
        options.verbose,
        '--spec':
        options.spec,
        '--use-libc-allocator':
        options.use_libc_allocator
    })

    wasmdump = utils.Executable(find_exe.GetWasmdumpExecutable(
        options.wasmdump),
                                error_cmdline=options.error_cmdline)

    wasm_interp = utils.Executable(find_exe.GetWasmInterpExecutable(
        options.wasm_interp),
                                   error_cmdline=options.error_cmdline)
    wasm_interp.AppendOptionalArgs({
        '--run-all-exports':
        options.run_all_exports,
        '--spec':
        options.spec,
        '--trace':
        options.verbose,
        '--use-libc-allocator':
        options.use_libc_allocator
    })

    wast2wasm.verbose = options.print_cmd
    wasm_interp.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)
        wast2wasm.RunWithArgs(options.file, '-o', out_file)
        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]
        for wasm_file in wasm_files:
            wasmdump.RunWithArgs(wasm_file)
        wasm_interp.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
Beispiel #7
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('--disable-jit', action='store_true')
    parser.add_argument('--trap-on-failed-comp', 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,
    })

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

    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