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