12 # The meson version handles windows paths better, but if it's not available
15 from meson
.mesonlib
import split_args
17 from shlex
import split
as split_args
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',
26 help='name of the folder for the generation')
27 args
= parser
.parse_args()
29 wrapper
= os
.environ
.get('MESON_EXE_WRAPPER')
30 if wrapper
is not None:
31 i965_asm
= split_args(wrapper
) + [args
.i965_asm
]
33 i965_asm
= [args
.i965_asm
]
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()
43 command
= i965_asm
+ [
45 '--gen', args
.gen_name
,
46 '--output', out_path
.name
,
49 subprocess
.run(command
,
50 stdout
=subprocess
.DEVNULL
,
51 stderr
=subprocess
.STDOUT
)
53 if e
.errno
== errno
.ENOEXEC
:
54 print('Skipping due to inability to run host binaries.',
59 with expected_path
.open() as f
:
60 lines_before
= f
.readlines()
61 lines_after
= [line
.decode('ascii') for line
in out_path
]
63 diff
= ''.join(difflib
.unified_diff(lines_before
, lines_after
,
64 expected_file
, asm_file
.stem
+ '.out'))
67 print('Output comparison for {}:'.format(asm_file
.name
))
71 print('{} : PASS'.format(asm_file
.name
))