1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#!/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)
|