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