intel/tools: make test aware of the meson test wrapper
[mesa.git] / src / intel / tools / tests / run-test.py
1 #!/usr/bin/env python3
2
3 import argparse
4 import difflib
5 import errno
6 import os
7 import pathlib
8 import subprocess
9 import sys
10 import tempfile
11
12 # The meson version handles windows paths better, but if it's not available
13 # fall back to shlex
14 try:
15 from meson.mesonlib import split_args
16 except ImportError:
17 from shlex import split as split_args
18
19 parser = argparse.ArgumentParser()
20 parser.add_argument('--i965_asm',
21 help='path to i965_asm binary')
22 parser.add_argument('--gen_name',
23 help='name of the hardware generation (as understood by i965_asm)')
24 parser.add_argument('--gen_folder',
25 type=pathlib.Path,
26 help='name of the folder for the generation')
27 args = parser.parse_args()
28
29 wrapper = os.environ.get('MESON_EXE_WRAPPER')
30 if wrapper is not None:
31 i965_asm = split_args(wrapper) + [args.i965_asm]
32 else:
33 i965_asm = [args.i965_asm]
34
35 success = True
36
37 for asm_file in args.gen_folder.glob('*.asm'):
38 expected_file = asm_file.stem + '.expected'
39 expected_path = args.gen_folder / expected_file
40 out_path = tempfile.NamedTemporaryFile()
41
42 try:
43 command = i965_asm + [
44 '--type', 'hex',
45 '--gen', args.gen_name,
46 '--output', out_path.name,
47 asm_file
48 ]
49 subprocess.run(command,
50 stdout=subprocess.DEVNULL,
51 stderr=subprocess.STDOUT)
52 except OSError as e:
53 if e.errno == errno.ENOEXEC:
54 print('Skipping due to inability to run host binaries.',
55 file=sys.stderr)
56 exit(77)
57 raise
58
59 with expected_path.open() as f:
60 lines_before = f.readlines()
61 lines_after = [line.decode('ascii') for line in out_path]
62
63 diff = ''.join(difflib.unified_diff(lines_before, lines_after,
64 expected_file, asm_file.stem + '.out'))
65
66 if diff:
67 print('Output comparison for {}:'.format(asm_file.name))
68 print(diff)
69 success = False
70 else:
71 print('{} : PASS'.format(asm_file.name))
72
73 if not success:
74 exit(1)