meson: convert target/s390x/gen-features.h
[qemu.git] / meson.build
1 project('qemu', ['c'], meson_version: '>=0.55.0',
2         default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 'b_lundef=false'],
3         version: run_command('head', meson.source_root() / 'VERSION').stdout().strip())
4
5 not_found = dependency('', required: false)
6 keyval = import('unstable-keyval')
7 ss = import('sourceset')
8
9 sh = find_program('sh')
10 cc = meson.get_compiler('c')
11 config_host = keyval.load(meson.current_build_dir() / 'config-host.mak')
12
13 add_project_arguments(config_host['QEMU_CFLAGS'].split(),
14                       native: false, language: ['c', 'objc'])
15 add_project_arguments(config_host['QEMU_CXXFLAGS'].split(),
16                       native: false, language: 'cpp')
17 add_project_link_arguments(config_host['QEMU_LDFLAGS'].split(),
18                            native: false, language: ['c', 'cpp', 'objc'])
19 add_project_arguments(config_host['QEMU_INCLUDES'].split(),
20                       language: ['c', 'cpp', 'objc'])
21
22 python = import('python').find_installation()
23
24 link_language = meson.get_external_property('link_language', 'cpp')
25 if link_language == 'cpp'
26   add_languages('cpp', required: true, native: false)
27 endif
28 if host_machine.system() == 'darwin'
29   add_languages('objc', required: false, native: false)
30 endif
31
32 if 'SPARSE_CFLAGS' in config_host
33   run_target('sparse',
34              command: [find_program('scripts/check_sparse.py'),
35                        config_host['SPARSE_CFLAGS'].split(),
36                        'compile_commands.json'])
37 endif
38
39 configure_file(input: files('scripts/ninjatool.py'),
40                output: 'ninjatool',
41                configuration: config_host)
42
43 supported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux']
44 supported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64',
45   'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64']
46
47 cpu = host_machine.cpu_family()
48 targetos = host_machine.system()
49
50 m = cc.find_library('m', required: false)
51 util = cc.find_library('util', required: false)
52 socket = []
53 version_res = []
54 coref = []
55 iokit = []
56 cocoa = []
57 hvf = []
58 if targetos == 'windows'
59   socket = cc.find_library('ws2_32')
60
61   win = import('windows')
62   version_res = win.compile_resources('version.rc',
63                                       depend_files: files('pc-bios/qemu-nsis.ico'),
64                                       include_directories: include_directories('.'))
65 elif targetos == 'darwin'
66   coref = dependency('appleframeworks', modules: 'CoreFoundation')
67   iokit = dependency('appleframeworks', modules: 'IOKit')
68   cocoa = dependency('appleframeworks', modules: 'Cocoa')
69   hvf = dependency('appleframeworks', modules: 'Hypervisor')
70 elif targetos == 'sunos'
71   socket = [cc.find_library('socket'),
72             cc.find_library('nsl'),
73             cc.find_library('resolv')]
74 elif targetos == 'haiku'
75   socket = [cc.find_library('posix_error_mapper'),
76             cc.find_library('network'),
77             cc.find_library('bsd')]
78 endif
79 glib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(),
80                           link_args: config_host['GLIB_LIBS'].split())
81 gio = not_found
82 if 'CONFIG_GIO' in config_host
83   gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
84                            link_args: config_host['GIO_LIBS'].split())
85 endif
86 lttng = not_found
87 if 'CONFIG_TRACE_UST' in config_host
88   lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
89 endif
90 urcubp = not_found
91 if 'CONFIG_TRACE_UST' in config_host
92   urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split())
93 endif
94 nettle = not_found
95 if 'CONFIG_NETTLE' in config_host
96   nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(),
97                               link_args: config_host['NETTLE_LIBS'].split())
98 endif
99 gnutls = not_found
100 if 'CONFIG_GNUTLS' in config_host
101   gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(),
102                               link_args: config_host['GNUTLS_LIBS'].split())
103 endif
104 pixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(),
105                             link_args: config_host['PIXMAN_LIBS'].split())
106 pam = not_found
107 if 'CONFIG_AUTH_PAM' in config_host
108   pam = cc.find_library('pam')
109 endif
110 libattr = not_found
111 if 'CONFIG_ATTR' in config_host
112   libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split())
113 endif
114 seccomp = not_found
115 if 'CONFIG_SECCOMP' in config_host
116   seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(),
117                                link_args: config_host['SECCOMP_LIBS'].split())
118 endif
119 libcap_ng = not_found
120 if 'CONFIG_LIBCAP_NG' in config_host
121   libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split())
122 endif
123 xkbcommon = not_found
124 if 'CONFIG_XKBCOMMON' in config_host
125   xkbcommon = declare_dependency(compile_args: config_host['XKBCOMMON_CFLAGS'].split(),
126                                  link_args: config_host['XKBCOMMON_LIBS'].split())
127 endif
128 rt = cc.find_library('rt', required: false)
129 libiscsi = not_found
130 if 'CONFIG_LIBISCSI' in config_host
131   libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(),
132                                 link_args: config_host['LIBISCSI_LIBS'].split())
133 endif
134 gbm = not_found
135 if 'CONFIG_GBM' in config_host
136   gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(),
137                            link_args: config_host['GBM_LIBS'].split())
138 endif
139 virgl = not_found
140 if 'CONFIG_VIRGL' in config_host
141   virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(),
142                              link_args: config_host['VIRGL_LIBS'].split())
143 endif
144 curl = not_found
145 if 'CONFIG_CURL' in config_host
146   curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(),
147                             link_args: config_host['CURL_LIBS'].split())
148 endif
149 libudev = not_found
150 if 'CONFIG_LIBUDEV' in config_host
151   libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
152 endif
153
154 target_dirs = config_host['TARGET_DIRS'].split()
155 have_user = false
156 have_system = false
157 foreach target : target_dirs
158   have_user = have_user or target.endswith('-user')
159   have_system = have_system or target.endswith('-softmmu')
160 endforeach
161 have_tools = 'CONFIG_TOOLS' in config_host
162 have_block = have_system or have_tools
163
164 # Generators
165
166 genh = []
167 hxtool = find_program('scripts/hxtool')
168 shaderinclude = find_program('scripts/shaderinclude.pl')
169 qapi_gen = find_program('scripts/qapi-gen.py')
170 qapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py',
171                      meson.source_root() / 'scripts/qapi/commands.py',
172                      meson.source_root() / 'scripts/qapi/common.py',
173                      meson.source_root() / 'scripts/qapi/doc.py',
174                      meson.source_root() / 'scripts/qapi/error.py',
175                      meson.source_root() / 'scripts/qapi/events.py',
176                      meson.source_root() / 'scripts/qapi/expr.py',
177                      meson.source_root() / 'scripts/qapi/gen.py',
178                      meson.source_root() / 'scripts/qapi/introspect.py',
179                      meson.source_root() / 'scripts/qapi/parser.py',
180                      meson.source_root() / 'scripts/qapi/schema.py',
181                      meson.source_root() / 'scripts/qapi/source.py',
182                      meson.source_root() / 'scripts/qapi/types.py',
183                      meson.source_root() / 'scripts/qapi/visit.py',
184                      meson.source_root() / 'scripts/qapi/common.py',
185                      meson.source_root() / 'scripts/qapi/doc.py',
186                      meson.source_root() / 'scripts/qapi-gen.py'
187 ]
188
189 tracetool = [
190   python, files('scripts/tracetool.py'),
191    '--backend=' + config_host['TRACE_BACKENDS']
192 ]
193
194 qemu_version_cmd = [find_program('scripts/qemu-version.sh'),
195                     meson.current_source_dir(),
196                     config_host['PKGVERSION'], config_host['VERSION']]
197 qemu_version = custom_target('qemu-version.h',
198                              output: 'qemu-version.h',
199                              command: qemu_version_cmd,
200                              capture: true,
201                              build_by_default: true,
202                              build_always_stale: true)
203 genh += qemu_version
204
205 hxdep = []
206 hx_headers = [
207   ['qemu-options.hx', 'qemu-options.def'],
208   ['qemu-img-cmds.hx', 'qemu-img-cmds.h'],
209 ]
210 if have_system
211   hx_headers += [
212     ['hmp-commands.hx', 'hmp-commands.h'],
213     ['hmp-commands-info.hx', 'hmp-commands-info.h'],
214   ]
215 endif
216 foreach d : hx_headers
217   custom_target(d[1],
218                 input: files(d[0]),
219                 output: d[1],
220                 capture: true,
221                 build_by_default: true, # to be removed when added to a target
222                 command: [hxtool, '-h', '@INPUT0@'])
223 endforeach
224 genh += hxdep
225
226 # Collect sourcesets.
227
228 util_ss = ss.source_set()
229 stub_ss = ss.source_set()
230 trace_ss = ss.source_set()
231
232 ###############
233 # Trace files #
234 ###############
235
236 trace_events_subdirs = [
237   'accel/kvm',
238   'accel/tcg',
239   'crypto',
240   'monitor',
241 ]
242 if have_user
243   trace_events_subdirs += [ 'linux-user' ]
244 endif
245 if have_block
246   trace_events_subdirs += [
247     'authz',
248     'block',
249     'io',
250     'nbd',
251     'scsi',
252   ]
253 endif
254 if have_system
255   trace_events_subdirs += [
256     'audio',
257     'backends',
258     'backends/tpm',
259     'chardev',
260     'hw/9pfs',
261     'hw/acpi',
262     'hw/alpha',
263     'hw/arm',
264     'hw/audio',
265     'hw/block',
266     'hw/block/dataplane',
267     'hw/char',
268     'hw/display',
269     'hw/dma',
270     'hw/hppa',
271     'hw/hyperv',
272     'hw/i2c',
273     'hw/i386',
274     'hw/i386/xen',
275     'hw/ide',
276     'hw/input',
277     'hw/intc',
278     'hw/isa',
279     'hw/mem',
280     'hw/mips',
281     'hw/misc',
282     'hw/misc/macio',
283     'hw/net',
284     'hw/nvram',
285     'hw/pci',
286     'hw/pci-host',
287     'hw/ppc',
288     'hw/rdma',
289     'hw/rdma/vmw',
290     'hw/rtc',
291     'hw/s390x',
292     'hw/scsi',
293     'hw/sd',
294     'hw/sparc',
295     'hw/sparc64',
296     'hw/ssi',
297     'hw/timer',
298     'hw/tpm',
299     'hw/usb',
300     'hw/vfio',
301     'hw/virtio',
302     'hw/watchdog',
303     'hw/xen',
304     'hw/gpio',
305     'hw/riscv',
306     'migration',
307     'net',
308     'ui',
309   ]
310 endif
311 trace_events_subdirs += [
312   'hw/core',
313   'qapi',
314   'qom',
315   'target/arm',
316   'target/hppa',
317   'target/i386',
318   'target/mips',
319   'target/ppc',
320   'target/riscv',
321   'target/s390x',
322   'target/sparc',
323   'util',
324 ]
325
326 subdir('qapi')
327 subdir('qobject')
328 subdir('stubs')
329 subdir('trace')
330 subdir('util')
331 subdir('qom')
332 subdir('authz')
333 subdir('crypto')
334 subdir('storage-daemon')
335 subdir('ui')
336
337 # Build targets from sourcesets
338
339 stub_ss = stub_ss.apply(config_host, strict: false)
340
341 util_ss.add_all(trace_ss)
342 util_ss = util_ss.apply(config_host, strict: false)
343 libqemuutil = static_library('qemuutil',
344                              sources: util_ss.sources() + stub_ss.sources() + genh,
345                              dependencies: [util_ss.dependencies(), m, glib, socket])
346 qemuutil = declare_dependency(link_with: libqemuutil,
347                               sources: genh + version_res)
348
349 subdir('io')
350 subdir('fsdev')
351 subdir('target')
352
353 # Other build targets
354 if 'CONFIG_GUEST_AGENT' in config_host
355   subdir('qga')
356 endif
357
358 if have_tools
359   subdir('contrib/rdmacm-mux')
360   subdir('contrib/elf2dmp')
361
362   if 'CONFIG_XKBCOMMON' in config_host
363     executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'),
364                dependencies: [qemuutil, xkbcommon], install: true)
365   endif
366
367   executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'),
368              dependencies: qemuutil,
369              install: true)
370
371   if 'CONFIG_VHOST_USER' in config_host
372     subdir('contrib/libvhost-user')
373     subdir('contrib/vhost-user-blk')
374     if 'CONFIG_LINUX' in config_host
375       subdir('contrib/vhost-user-gpu')
376     endif
377     subdir('contrib/vhost-user-input')
378     subdir('contrib/vhost-user-scsi')
379   endif
380
381   if targetos == 'linux'
382     executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
383                dependencies: [qemuutil, libcap_ng],
384                install: true,
385                install_dir: get_option('libexecdir'))
386   endif
387
388   if 'CONFIG_IVSHMEM' in config_host
389     subdir('contrib/ivshmem-client')
390     subdir('contrib/ivshmem-server')
391   endif
392 endif
393
394 subdir('tools')
395 subdir('pc-bios')
396 subdir('tests')
397
398 summary_info = {}
399 summary_info += {'Install prefix':    config_host['prefix']}
400 summary_info += {'BIOS directory':    config_host['qemu_datadir']}
401 summary_info += {'firmware path':     config_host['qemu_firmwarepath']}
402 summary_info += {'binary directory':  config_host['bindir']}
403 summary_info += {'library directory': config_host['libdir']}
404 summary_info += {'module directory':  config_host['qemu_moddir']}
405 summary_info += {'libexec directory': config_host['libexecdir']}
406 summary_info += {'include directory': config_host['includedir']}
407 summary_info += {'config directory':  config_host['sysconfdir']}
408 if targetos != 'windows'
409   summary_info += {'local state directory': config_host['qemu_localstatedir']}
410   summary_info += {'Manual directory':      config_host['mandir']}
411 else
412   summary_info += {'local state directory': 'queried at runtime'}
413 endif
414 summary_info += {'Build directory':   meson.current_build_dir()}
415 summary_info += {'Source path':       meson.current_source_dir()}
416 summary_info += {'GIT binary':        config_host['GIT']}
417 summary_info += {'GIT submodules':    config_host['GIT_SUBMODULES']}
418 summary_info += {'C compiler':        meson.get_compiler('c').cmd_array()[0]}
419 summary_info += {'Host C compiler':   meson.get_compiler('c', native: true).cmd_array()[0]}
420 if link_language == 'cpp'
421   summary_info += {'C++ compiler':      meson.get_compiler('cpp').cmd_array()[0]}
422 else
423   summary_info += {'C++ compiler':      false}
424 endif
425 if targetos == 'darwin'
426   summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
427 endif
428 summary_info += {'ARFLAGS':           config_host['ARFLAGS']}
429 summary_info += {'CFLAGS':            config_host['CFLAGS']}
430 summary_info += {'QEMU_CFLAGS':       config_host['QEMU_CFLAGS']}
431 summary_info += {'QEMU_LDFLAGS':      config_host['QEMU_LDFLAGS']}
432 summary_info += {'make':              config_host['MAKE']}
433 summary_info += {'install':           config_host['INSTALL']}
434 summary_info += {'python':            '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
435 summary_info += {'sphinx-build':      config_host['SPHINX_BUILD']}
436 summary_info += {'genisoimage':       config_host['GENISOIMAGE']}
437 # TODO: add back version
438 summary_info += {'slirp support':     config_host.has_key('CONFIG_SLIRP')}
439 if config_host.has_key('CONFIG_SLIRP')
440   summary_info += {'smbd':            config_host['CONFIG_SMBD_COMMAND']}
441 endif
442 summary_info += {'module support':    config_host.has_key('CONFIG_MODULES')}
443 if config_host.has_key('CONFIG_MODULES')
444   summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
445 endif
446 summary_info += {'host CPU':          cpu}
447 summary_info += {'host endianness':   build_machine.endian()}
448 summary_info += {'target list':       config_host['TARGET_DIRS']}
449 summary_info += {'gprof enabled':     config_host.has_key('CONFIG_GPROF')}
450 summary_info += {'sparse enabled':    meson.get_compiler('c').cmd_array().contains('cgcc')}
451 summary_info += {'strip binaries':    get_option('strip')}
452 summary_info += {'profiler':          config_host.has_key('CONFIG_PROFILER')}
453 summary_info += {'static build':      config_host.has_key('CONFIG_TOOLS')}
454 if targetos == 'darwin'
455   summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
456 endif
457 # TODO: add back version
458 summary_info += {'SDL support':       config_host.has_key('CONFIG_SDL')}
459 summary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')}
460 # TODO: add back version
461 summary_info += {'GTK support':       config_host.has_key('CONFIG_GTK')}
462 summary_info += {'GTK GL support':    config_host.has_key('CONFIG_GTK_GL')}
463 # TODO: add back version
464 summary_info += {'VTE support':       config_host.has_key('CONFIG_VTE')}
465 summary_info += {'TLS priority':      config_host['CONFIG_TLS_PRIORITY']}
466 summary_info += {'GNUTLS support':    config_host.has_key('CONFIG_GNUTLS')}
467 # TODO: add back version
468 summary_info += {'libgcrypt':         config_host.has_key('CONFIG_GCRYPT')}
469 if config_host.has_key('CONFIG_GCRYPT')
470    summary_info += {'  hmac':            config_host.has_key('CONFIG_GCRYPT_HMAC')}
471    summary_info += {'  XTS':             not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
472 endif
473 # TODO: add back version
474 summary_info += {'nettle':            config_host.has_key('CONFIG_NETTLE')}
475 if config_host.has_key('CONFIG_NETTLE')
476    summary_info += {'  XTS':             not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
477 endif
478 summary_info += {'libtasn1':          config_host.has_key('CONFIG_TASN1')}
479 summary_info += {'PAM':               config_host.has_key('CONFIG_AUTH_PAM')}
480 summary_info += {'iconv support':     config_host.has_key('CONFIG_ICONV')}
481 summary_info += {'curses support':    config_host.has_key('CONFIG_CURSES')}
482 # TODO: add back version
483 summary_info += {'virgl support':     config_host.has_key('CONFIG_VIRGL')}
484 summary_info += {'curl support':      config_host.has_key('CONFIG_CURL')}
485 summary_info += {'mingw32 support':   targetos == 'windows'}
486 summary_info += {'Audio drivers':     config_host['CONFIG_AUDIO_DRIVERS']}
487 summary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
488 summary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
489 summary_info += {'VirtFS support':    config_host.has_key('CONFIG_VIRTFS')}
490 summary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')}
491 summary_info += {'VNC support':       config_host.has_key('CONFIG_VNC')}
492 if config_host.has_key('CONFIG_VNC')
493   summary_info += {'VNC SASL support':  config_host.has_key('CONFIG_VNC_SASL')}
494   summary_info += {'VNC JPEG support':  config_host.has_key('CONFIG_VNC_JPEG')}
495   summary_info += {'VNC PNG support':   config_host.has_key('CONFIG_VNC_PNG')}
496 endif
497 summary_info += {'xen support':       config_host.has_key('CONFIG_XEN_BACKEND')}
498 if config_host.has_key('CONFIG_XEN_BACKEND')
499   summary_info += {'xen ctrl version':  config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
500 endif
501 summary_info += {'brlapi support':    config_host.has_key('CONFIG_BRLAPI')}
502 summary_info += {'Documentation':     config_host.has_key('BUILD_DOCS')}
503 summary_info += {'PIE':               get_option('b_pie')}
504 summary_info += {'vde support':       config_host.has_key('CONFIG_VDE')}
505 summary_info += {'netmap support':    config_host.has_key('CONFIG_NETMAP')}
506 summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
507 summary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
508 summary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
509 summary_info += {'Install blobs':     config_host.has_key('INSTALL_BLOBS')}
510 # TODO: add back KVM/HAX/HVF/WHPX/TCG
511 #summary_info += {'KVM support':       have_kvm'}
512 #summary_info += {'HAX support':       have_hax'}
513 #summary_info += {'HVF support':       have_hvf'}
514 #summary_info += {'WHPX support':      have_whpx'}
515 #summary_info += {'TCG support':       have_tcg'}
516 #if get_option('tcg')
517 #  summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
518 #  summary_info += {'TCG interpreter':   config_host.has_key('CONFIG_TCG_INTERPRETER')}
519 #endif
520 summary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
521 summary_info += {'RDMA support':      config_host.has_key('CONFIG_RDMA')}
522 summary_info += {'PVRDMA support':    config_host.has_key('CONFIG_PVRDMA')}
523 summary_info += {'fdt support':       config_host.has_key('CONFIG_FDT')}
524 summary_info += {'membarrier':        config_host.has_key('CONFIG_MEMBARRIER')}
525 summary_info += {'preadv support':    config_host.has_key('CONFIG_PREADV')}
526 summary_info += {'fdatasync':         config_host.has_key('CONFIG_FDATASYNC')}
527 summary_info += {'madvise':           config_host.has_key('CONFIG_MADVISE')}
528 summary_info += {'posix_madvise':     config_host.has_key('CONFIG_POSIX_MADVISE')}
529 summary_info += {'posix_memalign':    config_host.has_key('CONFIG_POSIX_MEMALIGN')}
530 summary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
531 summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
532 summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
533 summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
534 summary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
535 summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
536 summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
537 summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
538 summary_info += {'Trace backends':    config_host['TRACE_BACKENDS']}
539 if config_host['TRACE_BACKENDS'].split().contains('simple')
540   summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
541 endif
542 # TODO: add back protocol and server version
543 summary_info += {'spice support':     config_host.has_key('CONFIG_SPICE')}
544 summary_info += {'rbd support':       config_host.has_key('CONFIG_RBD')}
545 summary_info += {'xfsctl support':    config_host.has_key('CONFIG_XFS')}
546 summary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
547 summary_info += {'libusb':            config_host.has_key('CONFIG_USB_LIBUSB')}
548 summary_info += {'usb net redir':     config_host.has_key('CONFIG_USB_REDIR')}
549 summary_info += {'OpenGL support':    config_host.has_key('CONFIG_OPENGL')}
550 summary_info += {'OpenGL dmabufs':    config_host.has_key('CONFIG_OPENGL_DMABUF')}
551 summary_info += {'libiscsi support':  config_host.has_key('CONFIG_LIBISCSI')}
552 summary_info += {'libnfs support':    config_host.has_key('CONFIG_LIBNFS')}
553 summary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
554 if targetos == 'windows'
555   if 'WIN_SDK' in config_host
556     summary_info += {'Windows SDK':       config_host['WIN_SDK']}
557   endif
558   summary_info += {'QGA VSS support':   config_host.has_key('CONFIG_QGA_VSS')}
559   summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
560   summary_info += {'QGA MSI support':   config_host.has_key('CONFIG_QGA_MSI_ENABLED')}
561 endif
562 summary_info += {'seccomp support':   config_host.has_key('CONFIG_SECCOMP')}
563 summary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
564 summary_info += {'coroutine pool':    config_host['CONFIG_COROUTINE_POOL'] == '1'}
565 summary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
566 summary_info += {'mutex debugging':   config_host.has_key('CONFIG_DEBUG_MUTEX')}
567 summary_info += {'crypto afalg':      config_host.has_key('CONFIG_AF_ALG')}
568 summary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
569 summary_info += {'gcov':              get_option('b_coverage')}
570 summary_info += {'TPM support':       config_host.has_key('CONFIG_TPM')}
571 summary_info += {'libssh support':    config_host.has_key('CONFIG_LIBSSH')}
572 summary_info += {'QOM debugging':     config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
573 summary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
574 summary_info += {'lzo support':       config_host.has_key('CONFIG_LZO')}
575 summary_info += {'snappy support':    config_host.has_key('CONFIG_SNAPPY')}
576 summary_info += {'bzip2 support':     config_host.has_key('CONFIG_BZIP2')}
577 summary_info += {'lzfse support':     config_host.has_key('CONFIG_LZFSE')}
578 summary_info += {'zstd support':      config_host.has_key('CONFIG_ZSTD')}
579 summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
580 summary_info += {'libxml2':           config_host.has_key('CONFIG_LIBXML2')}
581 summary_info += {'tcmalloc support':  config_host.has_key('CONFIG_TCMALLOC')}
582 summary_info += {'jemalloc support':  config_host.has_key('CONFIG_JEMALLOC')}
583 summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
584 summary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
585 summary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
586 summary_info += {'bochs support':     config_host.has_key('CONFIG_BOCHS')}
587 summary_info += {'cloop support':     config_host.has_key('CONFIG_CLOOP')}
588 summary_info += {'dmg support':       config_host.has_key('CONFIG_DMG')}
589 summary_info += {'qcow v1 support':   config_host.has_key('CONFIG_QCOW1')}
590 summary_info += {'vdi support':       config_host.has_key('CONFIG_VDI')}
591 summary_info += {'vvfat support':     config_host.has_key('CONFIG_VVFAT')}
592 summary_info += {'qed support':       config_host.has_key('CONFIG_QED')}
593 summary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
594 summary_info += {'sheepdog support':  config_host.has_key('CONFIG_SHEEPDOG')}
595 summary_info += {'capstone':          config_host.has_key('CONFIG_CAPSTONE')}
596 summary_info += {'libpmem support':   config_host.has_key('CONFIG_LIBPMEM')}
597 summary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
598 summary_info += {'libudev':           config_host.has_key('CONFIG_LIBUDEV')}
599 summary_info += {'default devices':   config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
600 summary_info += {'plugin support':    config_host.has_key('CONFIG_PLUGIN')}
601 summary_info += {'fuzzing support':   config_host.has_key('CONFIG_FUZZ')}
602 if config_host.has_key('HAVE_GDB_BIN')
603   summary_info += {'gdb':             config_host['HAVE_GDB_BIN']}
604 endif
605 summary_info += {'thread sanitizer':  config_host.has_key('CONFIG_TSAN')}
606 summary_info += {'rng-none':          config_host.has_key('CONFIG_RNG_NONE')}
607 summary_info += {'Linux keyring':     config_host.has_key('CONFIG_SECRET_KEYRING')}
608 summary(summary_info, bool_yn: true)
609
610 if not supported_cpus.contains(cpu)
611   message()
612   warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
613   message()
614   message('CPU host architecture ' + cpu + ' support is not currently maintained.')
615   message('The QEMU project intends to remove support for this host CPU in')
616   message('a future release if nobody volunteers to maintain it and to')
617   message('provide a build host for our continuous integration setup.')
618   message('configure has succeeded and you can continue to build, but')
619   message('if you care about QEMU on this platform you should contact')
620   message('us upstream at qemu-devel@nongnu.org.')
621 endif
622
623 if not supported_oses.contains(targetos)
624   message()
625   warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
626   message()
627   message('Host OS ' + targetos + 'support is not currently maintained.')
628   message('The QEMU project intends to remove support for this host OS in')
629   message('a future release if nobody volunteers to maintain it and to')
630   message('provide a build host for our continuous integration setup.')
631   message('configure has succeeded and you can continue to build, but')
632   message('if you care about QEMU on this platform you should contact')
633   message('us upstream at qemu-devel@nongnu.org.')
634 endif