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