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