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