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)
27 if host_machine.system() == 'darwin'
28 add_languages('objc', required: false, native: false)
31 if 'SPARSE_CFLAGS' in config_host
33 command: [find_program('scripts/check_sparse.py'),
34 config_host['SPARSE_CFLAGS'].split(),
35 'compile_commands.json'])
38 configure_file(input: files('scripts/ninjatool.py'),
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)
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')]
78 glib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(),
79 link_args: config_host['GLIB_LIBS'].split())
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())
86 if 'CONFIG_TRACE_UST' in config_host
87 lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
90 if 'CONFIG_TRACE_UST' in config_host
91 urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split())
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())
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())
103 pixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(),
104 link_args: config_host['PIXMAN_LIBS'].split())
106 if 'CONFIG_SECCOMP' in config_host
107 seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(),
108 link_args: config_host['SECCOMP_LIBS'].split())
110 libcap_ng = not_found
111 if 'CONFIG_LIBCAP_NG' in config_host
112 libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split())
114 xkbcommon = not_found
115 if 'CONFIG_XKBCOMMON' in config_host
116 xkbcommon = declare_dependency(compile_args: config_host['XKBCOMMON_CFLAGS'].split(),
117 link_args: config_host['XKBCOMMON_LIBS'].split())
119 rt = cc.find_library('rt', required: false)
121 if 'CONFIG_LIBISCSI' in config_host
122 libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(),
123 link_args: config_host['LIBISCSI_LIBS'].split())
126 if 'CONFIG_GBM' in config_host
127 gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(),
128 link_args: config_host['GBM_LIBS'].split())
131 if 'CONFIG_VIRGL' in config_host
132 virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(),
133 link_args: config_host['VIRGL_LIBS'].split())
136 if 'CONFIG_CURL' in config_host
137 curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(),
138 link_args: config_host['CURL_LIBS'].split())
141 if 'CONFIG_LIBUDEV' in config_host
142 libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
145 target_dirs = config_host['TARGET_DIRS'].split()
148 foreach target : target_dirs
149 have_user = have_user or target.endswith('-user')
150 have_system = have_system or target.endswith('-softmmu')
152 have_tools = 'CONFIG_TOOLS' in config_host
153 have_block = have_system or have_tools
157 qapi_gen = find_program('scripts/qapi-gen.py')
158 qapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py',
159 meson.source_root() / 'scripts/qapi/commands.py',
160 meson.source_root() / 'scripts/qapi/common.py',
161 meson.source_root() / 'scripts/qapi/doc.py',
162 meson.source_root() / 'scripts/qapi/error.py',
163 meson.source_root() / 'scripts/qapi/events.py',
164 meson.source_root() / 'scripts/qapi/expr.py',
165 meson.source_root() / 'scripts/qapi/gen.py',
166 meson.source_root() / 'scripts/qapi/introspect.py',
167 meson.source_root() / 'scripts/qapi/parser.py',
168 meson.source_root() / 'scripts/qapi/schema.py',
169 meson.source_root() / 'scripts/qapi/source.py',
170 meson.source_root() / 'scripts/qapi/types.py',
171 meson.source_root() / 'scripts/qapi/visit.py',
172 meson.source_root() / 'scripts/qapi/common.py',
173 meson.source_root() / 'scripts/qapi/doc.py',
174 meson.source_root() / 'scripts/qapi-gen.py'
178 python, files('scripts/tracetool.py'),
179 '--backend=' + config_host['TRACE_BACKENDS']
182 # Collect sourcesets.
184 util_ss = ss.source_set()
185 stub_ss = ss.source_set()
186 trace_ss = ss.source_set()
192 trace_events_subdirs = [
199 trace_events_subdirs += [ 'linux-user' ]
202 trace_events_subdirs += [
211 trace_events_subdirs += [
222 'hw/block/dataplane',
267 trace_events_subdirs += [
290 subdir('storage-daemon')
292 # Build targets from sourcesets
294 stub_ss = stub_ss.apply(config_host, strict: false)
296 util_ss.add_all(trace_ss)
297 util_ss = util_ss.apply(config_host, strict: false)
298 libqemuutil = static_library('qemuutil',
299 sources: util_ss.sources() + stub_ss.sources() + genh,
300 dependencies: [util_ss.dependencies(), m, glib, socket])
301 qemuutil = declare_dependency(link_with: libqemuutil,
302 sources: genh + version_res)
304 # Other build targets
305 if 'CONFIG_GUEST_AGENT' in config_host
310 subdir('contrib/rdmacm-mux')
311 subdir('contrib/elf2dmp')
313 if 'CONFIG_XKBCOMMON' in config_host
314 executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'),
315 dependencies: [qemuutil, xkbcommon], install: true)
318 if 'CONFIG_VHOST_USER' in config_host
319 subdir('contrib/libvhost-user')
320 subdir('contrib/vhost-user-blk')
321 if 'CONFIG_LINUX' in config_host
322 subdir('contrib/vhost-user-gpu')
324 subdir('contrib/vhost-user-input')
325 subdir('contrib/vhost-user-scsi')
328 if targetos == 'linux'
329 executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
330 dependencies: [qemuutil, libcap_ng],
332 install_dir: get_option('libexecdir'))
335 if 'CONFIG_IVSHMEM' in config_host
336 subdir('contrib/ivshmem-client')
337 subdir('contrib/ivshmem-server')
344 summary_info += {'Install prefix': config_host['prefix']}
345 summary_info += {'BIOS directory': config_host['qemu_datadir']}
346 summary_info += {'firmware path': config_host['qemu_firmwarepath']}
347 summary_info += {'binary directory': config_host['bindir']}
348 summary_info += {'library directory': config_host['libdir']}
349 summary_info += {'module directory': config_host['qemu_moddir']}
350 summary_info += {'libexec directory': config_host['libexecdir']}
351 summary_info += {'include directory': config_host['includedir']}
352 summary_info += {'config directory': config_host['sysconfdir']}
353 if targetos != 'windows'
354 summary_info += {'local state directory': config_host['qemu_localstatedir']}
355 summary_info += {'Manual directory': config_host['mandir']}
357 summary_info += {'local state directory': 'queried at runtime'}
359 summary_info += {'Build directory': meson.current_build_dir()}
360 summary_info += {'Source path': meson.current_source_dir()}
361 summary_info += {'GIT binary': config_host['GIT']}
362 summary_info += {'GIT submodules': config_host['GIT_SUBMODULES']}
363 summary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]}
364 summary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]}
365 if link_language == 'cpp'
366 summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]}
368 summary_info += {'C++ compiler': false}
370 if targetos == 'darwin'
371 summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
373 summary_info += {'ARFLAGS': config_host['ARFLAGS']}
374 summary_info += {'CFLAGS': config_host['CFLAGS']}
375 summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}
376 summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}
377 summary_info += {'make': config_host['MAKE']}
378 summary_info += {'install': config_host['INSTALL']}
379 summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
380 summary_info += {'sphinx-build': config_host['SPHINX_BUILD']}
381 summary_info += {'genisoimage': config_host['GENISOIMAGE']}
382 # TODO: add back version
383 summary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')}
384 if config_host.has_key('CONFIG_SLIRP')
385 summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']}
387 summary_info += {'module support': config_host.has_key('CONFIG_MODULES')}
388 if config_host.has_key('CONFIG_MODULES')
389 summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
391 summary_info += {'host CPU': cpu}
392 summary_info += {'host endianness': build_machine.endian()}
393 summary_info += {'target list': config_host['TARGET_DIRS']}
394 summary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')}
395 summary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')}
396 summary_info += {'strip binaries': get_option('strip')}
397 summary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')}
398 summary_info += {'static build': config_host.has_key('CONFIG_TOOLS')}
399 if targetos == 'darwin'
400 summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
402 # TODO: add back version
403 summary_info += {'SDL support': config_host.has_key('CONFIG_SDL')}
404 summary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')}
405 # TODO: add back version
406 summary_info += {'GTK support': config_host.has_key('CONFIG_GTK')}
407 summary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')}
408 # TODO: add back version
409 summary_info += {'VTE support': config_host.has_key('CONFIG_VTE')}
410 summary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']}
411 summary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')}
412 # TODO: add back version
413 summary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')}
414 if config_host.has_key('CONFIG_GCRYPT')
415 summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')}
416 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
418 # TODO: add back version
419 summary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')}
420 if config_host.has_key('CONFIG_NETTLE')
421 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
423 summary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')}
424 summary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')}
425 summary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')}
426 summary_info += {'curses support': config_host.has_key('CONFIG_CURSES')}
427 # TODO: add back version
428 summary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')}
429 summary_info += {'curl support': config_host.has_key('CONFIG_CURL')}
430 summary_info += {'mingw32 support': targetos == 'windows'}
431 summary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']}
432 summary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
433 summary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
434 summary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')}
435 summary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')}
436 summary_info += {'VNC support': config_host.has_key('CONFIG_VNC')}
437 if config_host.has_key('CONFIG_VNC')
438 summary_info += {'VNC SASL support': config_host.has_key('CONFIG_VNC_SASL')}
439 summary_info += {'VNC JPEG support': config_host.has_key('CONFIG_VNC_JPEG')}
440 summary_info += {'VNC PNG support': config_host.has_key('CONFIG_VNC_PNG')}
442 summary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')}
443 if config_host.has_key('CONFIG_XEN_BACKEND')
444 summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
446 summary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')}
447 summary_info += {'Documentation': config_host.has_key('BUILD_DOCS')}
448 summary_info += {'PIE': get_option('b_pie')}
449 summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
450 summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
451 summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
452 summary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
453 summary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
454 summary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')}
455 # TODO: add back KVM/HAX/HVF/WHPX/TCG
456 #summary_info += {'KVM support': have_kvm'}
457 #summary_info += {'HAX support': have_hax'}
458 #summary_info += {'HVF support': have_hvf'}
459 #summary_info += {'WHPX support': have_whpx'}
460 #summary_info += {'TCG support': have_tcg'}
461 #if get_option('tcg')
462 # summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
463 # summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')}
465 summary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
466 summary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')}
467 summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
468 summary_info += {'fdt support': config_host.has_key('CONFIG_FDT')}
469 summary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')}
470 summary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')}
471 summary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')}
472 summary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')}
473 summary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')}
474 summary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')}
475 summary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
476 summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
477 summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
478 summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
479 summary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
480 summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
481 summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
482 summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
483 summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
484 if config_host['TRACE_BACKENDS'].split().contains('simple')
485 summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
487 # TODO: add back protocol and server version
488 summary_info += {'spice support': config_host.has_key('CONFIG_SPICE')}
489 summary_info += {'rbd support': config_host.has_key('CONFIG_RBD')}
490 summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
491 summary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
492 summary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')}
493 summary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')}
494 summary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')}
495 summary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')}
496 summary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')}
497 summary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')}
498 summary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
499 if targetos == 'windows'
500 if 'WIN_SDK' in config_host
501 summary_info += {'Windows SDK': config_host['WIN_SDK']}
503 summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')}
504 summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
505 summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')}
507 summary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')}
508 summary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
509 summary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'}
510 summary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
511 summary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')}
512 summary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')}
513 summary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
514 summary_info += {'gcov': get_option('b_coverage')}
515 summary_info += {'TPM support': config_host.has_key('CONFIG_TPM')}
516 summary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')}
517 summary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
518 summary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
519 summary_info += {'lzo support': config_host.has_key('CONFIG_LZO')}
520 summary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')}
521 summary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')}
522 summary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')}
523 summary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')}
524 summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
525 summary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')}
526 summary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')}
527 summary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')}
528 summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
529 summary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
530 summary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
531 summary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')}
532 summary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')}
533 summary_info += {'dmg support': config_host.has_key('CONFIG_DMG')}
534 summary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')}
535 summary_info += {'vdi support': config_host.has_key('CONFIG_VDI')}
536 summary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')}
537 summary_info += {'qed support': config_host.has_key('CONFIG_QED')}
538 summary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
539 summary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')}
540 summary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')}
541 summary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')}
542 summary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
543 summary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')}
544 summary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
545 summary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')}
546 summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
547 if config_host.has_key('HAVE_GDB_BIN')
548 summary_info += {'gdb': config_host['HAVE_GDB_BIN']}
550 summary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')}
551 summary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')}
552 summary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')}
553 summary(summary_info, bool_yn: true)
555 if not supported_cpus.contains(cpu)
557 warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
559 message('CPU host architecture ' + cpu + ' support is not currently maintained.')
560 message('The QEMU project intends to remove support for this host CPU in')
561 message('a future release if nobody volunteers to maintain it and to')
562 message('provide a build host for our continuous integration setup.')
563 message('configure has succeeded and you can continue to build, but')
564 message('if you care about QEMU on this platform you should contact')
565 message('us upstream at qemu-devel@nongnu.org.')
568 if not supported_oses.contains(targetos)
570 warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
572 message('Host OS ' + targetos + 'support is not currently maintained.')
573 message('The QEMU project intends to remove support for this host OS in')
574 message('a future release if nobody volunteers to maintain it and to')
575 message('provide a build host for our continuous integration setup.')
576 message('configure has succeeded and you can continue to build, but')
577 message('if you care about QEMU on this platform you should contact')
578 message('us upstream at qemu-devel@nongnu.org.')