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