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