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