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_ATTR' in config_host
107 libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split())
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())
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())
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())
123 rt = cc.find_library('rt', required: false)
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())
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())
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())
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())
145 if 'CONFIG_LIBUDEV' in config_host
146 libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
149 target_dirs = config_host['TARGET_DIRS'].split()
152 foreach target : target_dirs
153 have_user = have_user or target.endswith('-user')
154 have_system = have_system or target.endswith('-softmmu')
156 have_tools = 'CONFIG_TOOLS' in config_host
157 have_block = have_system or have_tools
162 qapi_gen = find_program('scripts/qapi-gen.py')
163 qapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py',
164 meson.source_root() / 'scripts/qapi/commands.py',
165 meson.source_root() / 'scripts/qapi/common.py',
166 meson.source_root() / 'scripts/qapi/doc.py',
167 meson.source_root() / 'scripts/qapi/error.py',
168 meson.source_root() / 'scripts/qapi/events.py',
169 meson.source_root() / 'scripts/qapi/expr.py',
170 meson.source_root() / 'scripts/qapi/gen.py',
171 meson.source_root() / 'scripts/qapi/introspect.py',
172 meson.source_root() / 'scripts/qapi/parser.py',
173 meson.source_root() / 'scripts/qapi/schema.py',
174 meson.source_root() / 'scripts/qapi/source.py',
175 meson.source_root() / 'scripts/qapi/types.py',
176 meson.source_root() / 'scripts/qapi/visit.py',
177 meson.source_root() / 'scripts/qapi/common.py',
178 meson.source_root() / 'scripts/qapi/doc.py',
179 meson.source_root() / 'scripts/qapi-gen.py'
183 python, files('scripts/tracetool.py'),
184 '--backend=' + config_host['TRACE_BACKENDS']
187 qemu_version_cmd = [find_program('scripts/qemu-version.sh'),
188 meson.current_source_dir(),
189 config_host['PKGVERSION'], config_host['VERSION']]
190 qemu_version = custom_target('qemu-version.h',
191 output: 'qemu-version.h',
192 command: qemu_version_cmd,
194 build_by_default: true,
195 build_always_stale: true)
198 # Collect sourcesets.
200 util_ss = ss.source_set()
201 stub_ss = ss.source_set()
202 trace_ss = ss.source_set()
208 trace_events_subdirs = [
215 trace_events_subdirs += [ 'linux-user' ]
218 trace_events_subdirs += [
227 trace_events_subdirs += [
238 'hw/block/dataplane',
283 trace_events_subdirs += [
304 subdir('storage-daemon')
307 # Build targets from sourcesets
309 stub_ss = stub_ss.apply(config_host, strict: false)
311 util_ss.add_all(trace_ss)
312 util_ss = util_ss.apply(config_host, strict: false)
313 libqemuutil = static_library('qemuutil',
314 sources: util_ss.sources() + stub_ss.sources() + genh,
315 dependencies: [util_ss.dependencies(), m, glib, socket])
316 qemuutil = declare_dependency(link_with: libqemuutil,
317 sources: genh + version_res)
321 # Other build targets
322 if 'CONFIG_GUEST_AGENT' in config_host
327 subdir('contrib/rdmacm-mux')
328 subdir('contrib/elf2dmp')
330 if 'CONFIG_XKBCOMMON' in config_host
331 executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'),
332 dependencies: [qemuutil, xkbcommon], install: true)
335 executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'),
336 dependencies: qemuutil,
339 if 'CONFIG_VHOST_USER' in config_host
340 subdir('contrib/libvhost-user')
341 subdir('contrib/vhost-user-blk')
342 if 'CONFIG_LINUX' in config_host
343 subdir('contrib/vhost-user-gpu')
345 subdir('contrib/vhost-user-input')
346 subdir('contrib/vhost-user-scsi')
349 if targetos == 'linux'
350 executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
351 dependencies: [qemuutil, libcap_ng],
353 install_dir: get_option('libexecdir'))
356 if 'CONFIG_IVSHMEM' in config_host
357 subdir('contrib/ivshmem-client')
358 subdir('contrib/ivshmem-server')
365 summary_info += {'Install prefix': config_host['prefix']}
366 summary_info += {'BIOS directory': config_host['qemu_datadir']}
367 summary_info += {'firmware path': config_host['qemu_firmwarepath']}
368 summary_info += {'binary directory': config_host['bindir']}
369 summary_info += {'library directory': config_host['libdir']}
370 summary_info += {'module directory': config_host['qemu_moddir']}
371 summary_info += {'libexec directory': config_host['libexecdir']}
372 summary_info += {'include directory': config_host['includedir']}
373 summary_info += {'config directory': config_host['sysconfdir']}
374 if targetos != 'windows'
375 summary_info += {'local state directory': config_host['qemu_localstatedir']}
376 summary_info += {'Manual directory': config_host['mandir']}
378 summary_info += {'local state directory': 'queried at runtime'}
380 summary_info += {'Build directory': meson.current_build_dir()}
381 summary_info += {'Source path': meson.current_source_dir()}
382 summary_info += {'GIT binary': config_host['GIT']}
383 summary_info += {'GIT submodules': config_host['GIT_SUBMODULES']}
384 summary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]}
385 summary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]}
386 if link_language == 'cpp'
387 summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]}
389 summary_info += {'C++ compiler': false}
391 if targetos == 'darwin'
392 summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
394 summary_info += {'ARFLAGS': config_host['ARFLAGS']}
395 summary_info += {'CFLAGS': config_host['CFLAGS']}
396 summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}
397 summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}
398 summary_info += {'make': config_host['MAKE']}
399 summary_info += {'install': config_host['INSTALL']}
400 summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
401 summary_info += {'sphinx-build': config_host['SPHINX_BUILD']}
402 summary_info += {'genisoimage': config_host['GENISOIMAGE']}
403 # TODO: add back version
404 summary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')}
405 if config_host.has_key('CONFIG_SLIRP')
406 summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']}
408 summary_info += {'module support': config_host.has_key('CONFIG_MODULES')}
409 if config_host.has_key('CONFIG_MODULES')
410 summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
412 summary_info += {'host CPU': cpu}
413 summary_info += {'host endianness': build_machine.endian()}
414 summary_info += {'target list': config_host['TARGET_DIRS']}
415 summary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')}
416 summary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')}
417 summary_info += {'strip binaries': get_option('strip')}
418 summary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')}
419 summary_info += {'static build': config_host.has_key('CONFIG_TOOLS')}
420 if targetos == 'darwin'
421 summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
423 # TODO: add back version
424 summary_info += {'SDL support': config_host.has_key('CONFIG_SDL')}
425 summary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')}
426 # TODO: add back version
427 summary_info += {'GTK support': config_host.has_key('CONFIG_GTK')}
428 summary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')}
429 # TODO: add back version
430 summary_info += {'VTE support': config_host.has_key('CONFIG_VTE')}
431 summary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']}
432 summary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')}
433 # TODO: add back version
434 summary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')}
435 if config_host.has_key('CONFIG_GCRYPT')
436 summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')}
437 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
439 # TODO: add back version
440 summary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')}
441 if config_host.has_key('CONFIG_NETTLE')
442 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
444 summary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')}
445 summary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')}
446 summary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')}
447 summary_info += {'curses support': config_host.has_key('CONFIG_CURSES')}
448 # TODO: add back version
449 summary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')}
450 summary_info += {'curl support': config_host.has_key('CONFIG_CURL')}
451 summary_info += {'mingw32 support': targetos == 'windows'}
452 summary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']}
453 summary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
454 summary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
455 summary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')}
456 summary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')}
457 summary_info += {'VNC support': config_host.has_key('CONFIG_VNC')}
458 if config_host.has_key('CONFIG_VNC')
459 summary_info += {'VNC SASL support': config_host.has_key('CONFIG_VNC_SASL')}
460 summary_info += {'VNC JPEG support': config_host.has_key('CONFIG_VNC_JPEG')}
461 summary_info += {'VNC PNG support': config_host.has_key('CONFIG_VNC_PNG')}
463 summary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')}
464 if config_host.has_key('CONFIG_XEN_BACKEND')
465 summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
467 summary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')}
468 summary_info += {'Documentation': config_host.has_key('BUILD_DOCS')}
469 summary_info += {'PIE': get_option('b_pie')}
470 summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
471 summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
472 summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
473 summary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
474 summary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
475 summary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')}
476 # TODO: add back KVM/HAX/HVF/WHPX/TCG
477 #summary_info += {'KVM support': have_kvm'}
478 #summary_info += {'HAX support': have_hax'}
479 #summary_info += {'HVF support': have_hvf'}
480 #summary_info += {'WHPX support': have_whpx'}
481 #summary_info += {'TCG support': have_tcg'}
482 #if get_option('tcg')
483 # summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
484 # summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')}
486 summary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
487 summary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')}
488 summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
489 summary_info += {'fdt support': config_host.has_key('CONFIG_FDT')}
490 summary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')}
491 summary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')}
492 summary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')}
493 summary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')}
494 summary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')}
495 summary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')}
496 summary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
497 summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
498 summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
499 summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
500 summary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
501 summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
502 summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
503 summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
504 summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
505 if config_host['TRACE_BACKENDS'].split().contains('simple')
506 summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
508 # TODO: add back protocol and server version
509 summary_info += {'spice support': config_host.has_key('CONFIG_SPICE')}
510 summary_info += {'rbd support': config_host.has_key('CONFIG_RBD')}
511 summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
512 summary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
513 summary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')}
514 summary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')}
515 summary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')}
516 summary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')}
517 summary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')}
518 summary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')}
519 summary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
520 if targetos == 'windows'
521 if 'WIN_SDK' in config_host
522 summary_info += {'Windows SDK': config_host['WIN_SDK']}
524 summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')}
525 summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
526 summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')}
528 summary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')}
529 summary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
530 summary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'}
531 summary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
532 summary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')}
533 summary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')}
534 summary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
535 summary_info += {'gcov': get_option('b_coverage')}
536 summary_info += {'TPM support': config_host.has_key('CONFIG_TPM')}
537 summary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')}
538 summary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
539 summary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
540 summary_info += {'lzo support': config_host.has_key('CONFIG_LZO')}
541 summary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')}
542 summary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')}
543 summary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')}
544 summary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')}
545 summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
546 summary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')}
547 summary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')}
548 summary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')}
549 summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
550 summary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
551 summary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
552 summary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')}
553 summary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')}
554 summary_info += {'dmg support': config_host.has_key('CONFIG_DMG')}
555 summary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')}
556 summary_info += {'vdi support': config_host.has_key('CONFIG_VDI')}
557 summary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')}
558 summary_info += {'qed support': config_host.has_key('CONFIG_QED')}
559 summary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
560 summary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')}
561 summary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')}
562 summary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')}
563 summary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
564 summary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')}
565 summary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
566 summary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')}
567 summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
568 if config_host.has_key('HAVE_GDB_BIN')
569 summary_info += {'gdb': config_host['HAVE_GDB_BIN']}
571 summary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')}
572 summary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')}
573 summary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')}
574 summary(summary_info, bool_yn: true)
576 if not supported_cpus.contains(cpu)
578 warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
580 message('CPU host architecture ' + cpu + ' support is not currently maintained.')
581 message('The QEMU project intends to remove support for this host CPU in')
582 message('a future release if nobody volunteers to maintain it and to')
583 message('provide a build host for our continuous integration setup.')
584 message('configure has succeeded and you can continue to build, but')
585 message('if you care about QEMU on this platform you should contact')
586 message('us upstream at qemu-devel@nongnu.org.')
589 if not supported_oses.contains(targetos)
591 warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
593 message('Host OS ' + targetos + 'support is not currently maintained.')
594 message('The QEMU project intends to remove support for this host OS in')
595 message('a future release if nobody volunteers to maintain it and to')
596 message('provide a build host for our continuous integration setup.')
597 message('configure has succeeded and you can continue to build, but')
598 message('if you care about QEMU on this platform you should contact')
599 message('us upstream at qemu-devel@nongnu.org.')