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