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