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