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