xref: /openbmc/qemu/tests/qemu-iotests/meson.build (revision f75e4f2234e7339c16c1dba048bf131a2a948f84)
1if not have_tools or targetos == 'windows' or get_option('gprof')
2  subdir_done()
3endif
4
5foreach cflag: config_host['QEMU_CFLAGS'].split()
6  if cflag.startswith('-fsanitize') and \
7     not cflag.contains('safe-stack') and not cflag.contains('cfi-icall')
8    message('Sanitizers are enabled ==> Disabled the qemu-iotests.')
9    subdir_done()
10  endif
11endforeach
12
13bash = find_program('bash', required: false, version: '>= 4.0')
14if not bash.found()
15  message('bash >= v4.0 not available ==> Disabled the qemu-iotests.')
16  subdir_done()
17endif
18
19qemu_iotests_binaries = [qemu_img, qemu_io, qemu_nbd, qsd]
20qemu_iotests_env = {'PYTHON': python.full_path()}
21qemu_iotests_formats = {
22  'qcow2': 'quick',
23  'raw': 'slow',
24  'qed': 'thorough',
25  'vmdk': 'thorough',
26  'vpc': 'thorough'
27}
28
29foreach k, v : emulators
30  if k.startswith('qemu-system-')
31    qemu_iotests_binaries += v
32  endif
33endforeach
34
35qemu_iotests_check_cmd = files('check')
36
37foreach format, speed: qemu_iotests_formats
38  if speed == 'quick'
39    suites = 'block'
40  else
41    suites = ['block-' + speed, speed]
42  endif
43
44  args = ['-tap', '-' + format]
45  if speed == 'quick'
46      args += ['-g', 'auto']
47  endif
48
49  rc = run_command(
50      [qemu_iotests_check_cmd] + args + ['-n'],
51      check: true,
52  )
53
54  foreach item: rc.stdout().strip().split()
55      args = ['-tap', '-' + format, item,
56              '--source-dir', meson.current_source_dir(),
57              '--build-dir', meson.current_build_dir()]
58      # Some individual tests take as long as 45 seconds
59      # Bump the timeout to 3 minutes for some headroom
60      # on slow machines to minimize spurious failures
61      test('io-' + format + '-' + item,
62           qemu_iotests_check_cmd,
63           args: args,
64           depends: qemu_iotests_binaries,
65           env: qemu_iotests_env,
66           protocol: 'tap',
67           timeout: 180,
68           suite: suites)
69  endforeach
70endforeach
71