blob: c60ec5825b82d862bd1293f1bc20994238c7898c [file] [log] [blame]
Paolo Bonzinia5665052019-06-10 12:05:14 +02001project('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')
Paolo Bonzinia81df1b2020-08-19 08:44:56 -04007ss = import('sourceset')
8
9cc = meson.get_compiler('c')
Paolo Bonzinia5665052019-06-10 12:05:14 +020010config_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
Marc-André Lureaufc929892019-07-13 01:47:54 +040021python = 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
Paolo Bonzinia5665052019-06-10 12:05:14 +020027if host_machine.system() == 'darwin'
28 add_languages('objc', required: false, native: false)
29endif
30
Paolo Bonzini968b4db2020-02-03 14:45:33 +010031if '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
Paolo Bonzinia5665052019-06-10 12:05:14 +020038configure_file(input: files('scripts/ninjatool.py'),
39 output: 'ninjatool',
40 configuration: config_host)
Paolo Bonzinif9332752020-02-03 13:28:38 +010041
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
Paolo Bonzinia81df1b2020-08-19 08:44:56 -040049m = cc.find_library('m', required: false)
50util = cc.find_library('util', required: false)
51socket = []
Marc-André Lureau04c6f1e2019-07-18 00:31:05 +040052version_res = []
Paolo Bonzinia81df1b2020-08-19 08:44:56 -040053if targetos == 'windows'
54 socket = cc.find_library('ws2_32')
Marc-André Lureau04c6f1e2019-07-18 00:31:05 +040055
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('.'))
Paolo Bonzinia81df1b2020-08-19 08:44:56 -040060endif
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
Paolo Bonzini3f99cf52020-02-05 09:45:39 +010086seccomp = 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
Paolo Bonzini99650b62019-06-10 12:21:14 +020095libiscsi = 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
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400100
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,
Marc-André Lureau04c6f1e2019-07-18 00:31:05 +0400258 sources: genh + version_res)
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400259
Paolo Bonzini931049b2020-02-05 09:44:24 +0100260# Other build targets
261
262if have_tools
Paolo Bonzinia9c97272019-06-10 12:27:52 +0200263 subdir('contrib/rdmacm-mux')
264
Paolo Bonzini931049b2020-02-05 09:44:24 +0100265 if 'CONFIG_VHOST_USER' in config_host
266 subdir('contrib/libvhost-user')
Paolo Bonzini2d7ac0a2019-06-10 12:18:02 +0200267 subdir('contrib/vhost-user-blk')
Paolo Bonzini99650b62019-06-10 12:21:14 +0200268 subdir('contrib/vhost-user-scsi')
Paolo Bonzini931049b2020-02-05 09:44:24 +0100269 endif
270endif
271
Paolo Bonzini3f99cf52020-02-05 09:45:39 +0100272subdir('tools')
273
Paolo Bonzinif9332752020-02-03 13:28:38 +0100274summary_info = {}
275summary_info += {'Install prefix': config_host['prefix']}
276summary_info += {'BIOS directory': config_host['qemu_datadir']}
277summary_info += {'firmware path': config_host['qemu_firmwarepath']}
278summary_info += {'binary directory': config_host['bindir']}
279summary_info += {'library directory': config_host['libdir']}
280summary_info += {'module directory': config_host['qemu_moddir']}
281summary_info += {'libexec directory': config_host['libexecdir']}
282summary_info += {'include directory': config_host['includedir']}
283summary_info += {'config directory': config_host['sysconfdir']}
284if targetos != 'windows'
285 summary_info += {'local state directory': config_host['qemu_localstatedir']}
286 summary_info += {'Manual directory': config_host['mandir']}
287else
288 summary_info += {'local state directory': 'queried at runtime'}
289endif
290summary_info += {'Build directory': meson.current_build_dir()}
291summary_info += {'Source path': meson.current_source_dir()}
292summary_info += {'GIT binary': config_host['GIT']}
293summary_info += {'GIT submodules': config_host['GIT_SUBMODULES']}
294summary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]}
295summary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]}
296if link_language == 'cpp'
297 summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]}
298else
299 summary_info += {'C++ compiler': false}
300endif
301if targetos == 'darwin'
302 summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
303endif
304summary_info += {'ARFLAGS': config_host['ARFLAGS']}
305summary_info += {'CFLAGS': config_host['CFLAGS']}
306summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}
307summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}
308summary_info += {'make': config_host['MAKE']}
309summary_info += {'install': config_host['INSTALL']}
310summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
311summary_info += {'sphinx-build': config_host['SPHINX_BUILD']}
312summary_info += {'genisoimage': config_host['GENISOIMAGE']}
313# TODO: add back version
314summary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')}
315if config_host.has_key('CONFIG_SLIRP')
316 summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']}
317endif
318summary_info += {'module support': config_host.has_key('CONFIG_MODULES')}
319if config_host.has_key('CONFIG_MODULES')
320 summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
321endif
322summary_info += {'host CPU': cpu}
323summary_info += {'host endianness': build_machine.endian()}
324summary_info += {'target list': config_host['TARGET_DIRS']}
325summary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')}
326summary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')}
327summary_info += {'strip binaries': get_option('strip')}
328summary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')}
329summary_info += {'static build': config_host.has_key('CONFIG_TOOLS')}
330if targetos == 'darwin'
331 summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
332endif
333# TODO: add back version
334summary_info += {'SDL support': config_host.has_key('CONFIG_SDL')}
335summary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')}
336# TODO: add back version
337summary_info += {'GTK support': config_host.has_key('CONFIG_GTK')}
338summary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')}
339# TODO: add back version
340summary_info += {'VTE support': config_host.has_key('CONFIG_VTE')}
341summary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']}
342summary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')}
343# TODO: add back version
344summary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')}
345if config_host.has_key('CONFIG_GCRYPT')
346 summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')}
347 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
348endif
349# TODO: add back version
350summary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')}
351if config_host.has_key('CONFIG_NETTLE')
352 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
353endif
354summary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')}
355summary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')}
356summary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')}
357summary_info += {'curses support': config_host.has_key('CONFIG_CURSES')}
358# TODO: add back version
359summary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')}
360summary_info += {'curl support': config_host.has_key('CONFIG_CURL')}
361summary_info += {'mingw32 support': targetos == 'windows'}
362summary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']}
363summary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
364summary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
365summary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')}
366summary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')}
367summary_info += {'VNC support': config_host.has_key('CONFIG_VNC')}
368if config_host.has_key('CONFIG_VNC')
369 summary_info += {'VNC SASL support': config_host.has_key('CONFIG_VNC_SASL')}
370 summary_info += {'VNC JPEG support': config_host.has_key('CONFIG_VNC_JPEG')}
371 summary_info += {'VNC PNG support': config_host.has_key('CONFIG_VNC_PNG')}
372endif
373summary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')}
374if config_host.has_key('CONFIG_XEN_BACKEND')
375 summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
376endif
377summary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')}
378summary_info += {'Documentation': config_host.has_key('BUILD_DOCS')}
379summary_info += {'PIE': get_option('b_pie')}
380summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
381summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
382summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
383summary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
384summary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
385summary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')}
386# TODO: add back KVM/HAX/HVF/WHPX/TCG
387#summary_info += {'KVM support': have_kvm'}
388#summary_info += {'HAX support': have_hax'}
389#summary_info += {'HVF support': have_hvf'}
390#summary_info += {'WHPX support': have_whpx'}
391#summary_info += {'TCG support': have_tcg'}
392#if get_option('tcg')
393# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
394# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')}
395#endif
396summary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
397summary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')}
398summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
399summary_info += {'fdt support': config_host.has_key('CONFIG_FDT')}
400summary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')}
401summary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')}
402summary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')}
403summary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')}
404summary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')}
405summary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')}
406summary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
407summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
408summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
409summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
410summary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
411summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
412summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
413summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
414summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
415if config_host['TRACE_BACKENDS'].split().contains('simple')
416 summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
417endif
418# TODO: add back protocol and server version
419summary_info += {'spice support': config_host.has_key('CONFIG_SPICE')}
420summary_info += {'rbd support': config_host.has_key('CONFIG_RBD')}
421summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
422summary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
423summary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')}
424summary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')}
425summary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')}
426summary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')}
427summary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')}
428summary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')}
429summary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
430if targetos == 'windows'
431 if 'WIN_SDK' in config_host
432 summary_info += {'Windows SDK': config_host['WIN_SDK']}
433 endif
434 summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')}
435 summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
436 summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')}
437endif
438summary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')}
439summary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
440summary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'}
441summary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
442summary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')}
443summary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')}
444summary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
Marc-André Lureaubf0e56a2019-10-04 17:35:16 +0400445summary_info += {'gcov': get_option('b_coverage')}
Paolo Bonzinif9332752020-02-03 13:28:38 +0100446summary_info += {'TPM support': config_host.has_key('CONFIG_TPM')}
447summary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')}
448summary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
449summary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
450summary_info += {'lzo support': config_host.has_key('CONFIG_LZO')}
451summary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')}
452summary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')}
453summary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')}
454summary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')}
455summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
456summary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')}
457summary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')}
458summary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')}
459summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
460summary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
461summary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
462summary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')}
463summary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')}
464summary_info += {'dmg support': config_host.has_key('CONFIG_DMG')}
465summary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')}
466summary_info += {'vdi support': config_host.has_key('CONFIG_VDI')}
467summary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')}
468summary_info += {'qed support': config_host.has_key('CONFIG_QED')}
469summary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
470summary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')}
471summary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')}
472summary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')}
473summary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
474summary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')}
475summary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
476summary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')}
477summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
478if config_host.has_key('HAVE_GDB_BIN')
479 summary_info += {'gdb': config_host['HAVE_GDB_BIN']}
480endif
481summary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')}
482summary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')}
483summary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')}
484summary(summary_info, bool_yn: true)
485
486if not supported_cpus.contains(cpu)
487 message()
488 warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
489 message()
490 message('CPU host architecture ' + cpu + ' support is not currently maintained.')
491 message('The QEMU project intends to remove support for this host CPU in')
492 message('a future release if nobody volunteers to maintain it and to')
493 message('provide a build host for our continuous integration setup.')
494 message('configure has succeeded and you can continue to build, but')
495 message('if you care about QEMU on this platform you should contact')
496 message('us upstream at qemu-devel@nongnu.org.')
497endif
498
499if not supported_oses.contains(targetos)
500 message()
501 warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
502 message()
503 message('Host OS ' + targetos + 'support is not currently maintained.')
504 message('The QEMU project intends to remove support for this host OS in')
505 message('a future release if nobody volunteers to maintain it and to')
506 message('provide a build host for our continuous integration setup.')
507 message('configure has succeeded and you can continue to build, but')
508 message('if you care about QEMU on this platform you should contact')
509 message('us upstream at qemu-devel@nongnu.org.')
510endif