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)
28 if host_machine.system() == 'darwin'
29 add_languages('objc', required: false, native: false)
32 if 'SPARSE_CFLAGS' in config_host
34 command: [find_program('scripts/check_sparse.py'),
35 config_host['SPARSE_CFLAGS'].split(),
36 'compile_commands.json'])
39 configure_file(input: files('scripts/ninjatool.py'),
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)
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')]
79 glib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(),
80 link_args: config_host['GLIB_LIBS'].split())
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())
87 if 'CONFIG_TRACE_UST' in config_host
88 lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
91 if 'CONFIG_TRACE_UST' in config_host
92 urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split())
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())
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())
104 pixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(),
105 link_args: config_host['PIXMAN_LIBS'].split())
107 if 'CONFIG_ATTR' in config_host
108 libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split())
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())
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())
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())
124 rt = cc.find_library('rt', required: false)
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())
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())
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())
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())
146 if 'CONFIG_LIBUDEV' in config_host
147 libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
150 target_dirs = config_host['TARGET_DIRS'].split()
153 foreach target : target_dirs
154 have_user = have_user or target.endswith('-user')
155 have_system = have_system or target.endswith('-softmmu')
157 have_tools = 'CONFIG_TOOLS' in config_host
158 have_block = have_system or have_tools
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'
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,
197 build_by_default: true,
198 build_always_stale: true)
203 ['qemu-options.hx', 'qemu-options.def'],
204 ['qemu-img-cmds.hx', 'qemu-img-cmds.h'],
208 ['hmp-commands.hx', 'hmp-commands.h'],
209 ['hmp-commands-info.hx', 'hmp-commands-info.h'],
212 foreach d : hx_headers
217 build_by_default: true, # to be removed when added to a target
218 command: [hxtool, '-h', '@INPUT0@'])
222 # Collect sourcesets.
224 util_ss = ss.source_set()
225 stub_ss = ss.source_set()
226 trace_ss = ss.source_set()
232 trace_events_subdirs = [
239 trace_events_subdirs += [ 'linux-user' ]
242 trace_events_subdirs += [
251 trace_events_subdirs += [
262 'hw/block/dataplane',
307 trace_events_subdirs += [
328 subdir('storage-daemon')
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)
346 # Other build targets
347 if 'CONFIG_GUEST_AGENT' in config_host
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)
360 executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'),
361 dependencies: qemuutil,
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')
370 subdir('contrib/vhost-user-input')
371 subdir('contrib/vhost-user-scsi')
374 if targetos == 'linux'
375 executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
376 dependencies: [qemuutil, libcap_ng],
378 install_dir: get_option('libexecdir'))
381 if 'CONFIG_IVSHMEM' in config_host
382 subdir('contrib/ivshmem-client')
383 subdir('contrib/ivshmem-server')
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']}
405 summary_info += {'local state directory': 'queried at runtime'}
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]}
416 summary_info += {'C++ compiler': false}
418 if targetos == 'darwin'
419 summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
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']}
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')}
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')}
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')}
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')}
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')}
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']}
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')}
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>'}
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']}
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')}
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']}
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)
605 warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
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.')
616 if not supported_oses.contains(targetos)
618 warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
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.')