mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-26 18:58:13 +02:00
Instead of using tempfiles to communicate between child & parent
process. The latter sometimes resulted in hitting the meson timeout if
there was high filesystem pressure.
Fixes: ccaa5b034f "intel/tools: rewrite run-test.sh in python"
Reviewed-by: Dylan Baker <dylan.c.baker@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9528>
71 lines
2 KiB
Python
Executable file
71 lines
2 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import difflib
|
|
import errno
|
|
import os
|
|
import pathlib
|
|
import subprocess
|
|
import sys
|
|
|
|
# The meson version handles windows paths better, but if it's not available
|
|
# fall back to shlex
|
|
try:
|
|
from meson.mesonlib import split_args
|
|
except ImportError:
|
|
from shlex import split as split_args
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--i965_asm',
|
|
help='path to i965_asm binary')
|
|
parser.add_argument('--gen_name',
|
|
help='name of the hardware generation (as understood by i965_asm)')
|
|
parser.add_argument('--gen_folder',
|
|
type=pathlib.Path,
|
|
help='name of the folder for the generation')
|
|
args = parser.parse_args()
|
|
|
|
wrapper = os.environ.get('MESON_EXE_WRAPPER')
|
|
if wrapper is not None:
|
|
i965_asm = split_args(wrapper) + [args.i965_asm]
|
|
else:
|
|
i965_asm = [args.i965_asm]
|
|
|
|
success = True
|
|
|
|
for asm_file in args.gen_folder.glob('*.asm'):
|
|
expected_file = asm_file.stem + '.expected'
|
|
expected_path = args.gen_folder / expected_file
|
|
|
|
try:
|
|
command = i965_asm + [
|
|
'--type', 'hex',
|
|
'--gen', args.gen_name,
|
|
asm_file
|
|
]
|
|
with subprocess.Popen(command,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.DEVNULL) as cmd:
|
|
lines_after = [line.decode('ascii') for line in cmd.stdout.readlines()]
|
|
except OSError as e:
|
|
if e.errno == errno.ENOEXEC:
|
|
print('Skipping due to inability to run host binaries.',
|
|
file=sys.stderr)
|
|
exit(77)
|
|
raise
|
|
|
|
with expected_path.open() as f:
|
|
lines_before = f.readlines()
|
|
|
|
diff = ''.join(difflib.unified_diff(lines_before, lines_after,
|
|
expected_file, asm_file.stem + '.out'))
|
|
|
|
if diff:
|
|
print('Output comparison for {}:'.format(asm_file.name))
|
|
print(diff)
|
|
success = False
|
|
else:
|
|
print('{} : PASS'.format(asm_file.name))
|
|
|
|
if not success:
|
|
exit(1)
|