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