blob: 3568b4816eed61cd1a4cd370f47a099f5d496a4c [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 = []
Marc-André Lureaud92989a2019-08-20 19:48:59 +040053coref = []
54iokit = []
55cocoa = []
56hvf = []
Paolo Bonzinia81df1b2020-08-19 08:44:56 -040057if targetos == 'windows'
58 socket = cc.find_library('ws2_32')
Marc-André Lureau04c6f1e2019-07-18 00:31:05 +040059
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('.'))
Marc-André Lureaud92989a2019-08-20 19:48:59 +040064elif 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')
Paolo Bonzinicfad62f2020-08-09 23:47:45 +020069elif 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')]
Paolo Bonzinia81df1b2020-08-19 08:44:56 -040077endif
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
Marc-André Lureauea458962019-07-12 22:23:46 +0400103pixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(),
104 link_args: config_host['PIXMAN_LIBS'].split())
Paolo Bonzini3f99cf52020-02-05 09:45:39 +0100105seccomp = 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
Marc-André Lureau5ee24e72019-07-12 23:16:54 +0400114rt = cc.find_library('rt', required: false)
Paolo Bonzini99650b62019-06-10 12:21:14 +0200115libiscsi = 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
Marc-André Lureauea458962019-07-12 22:23:46 +0400120gbm = 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
Marc-André Lureau1d7bb6a2019-07-12 23:47:06 +0400130curl = 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
Paolo Bonzinif15bff22019-07-18 13:19:02 +0200135libudev = not_found
136if 'CONFIG_LIBUDEV' in config_host
137 libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
138endif
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400139
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,
Marc-André Lureau04c6f1e2019-07-18 00:31:05 +0400297 sources: genh + version_res)
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400298
Paolo Bonzini931049b2020-02-05 09:44:24 +0100299# Other build targets
Paolo Bonzinif15bff22019-07-18 13:19:02 +0200300if 'CONFIG_GUEST_AGENT' in config_host
301 subdir('qga')
302endif
303
Paolo Bonzini931049b2020-02-05 09:44:24 +0100304if have_tools
Paolo Bonzinia9c97272019-06-10 12:27:52 +0200305 subdir('contrib/rdmacm-mux')
Marc-André Lureau1d7bb6a2019-07-12 23:47:06 +0400306 subdir('contrib/elf2dmp')
Paolo Bonzinia9c97272019-06-10 12:27:52 +0200307
Paolo Bonzini931049b2020-02-05 09:44:24 +0100308 if 'CONFIG_VHOST_USER' in config_host
309 subdir('contrib/libvhost-user')
Paolo Bonzini2d7ac0a2019-06-10 12:18:02 +0200310 subdir('contrib/vhost-user-blk')
Marc-André Lureauea458962019-07-12 22:23:46 +0400311 if 'CONFIG_LINUX' in config_host
312 subdir('contrib/vhost-user-gpu')
313 endif
Marc-André Lureau32fcc622019-07-12 22:11:20 +0400314 subdir('contrib/vhost-user-input')
Paolo Bonzini99650b62019-06-10 12:21:14 +0200315 subdir('contrib/vhost-user-scsi')
Paolo Bonzini931049b2020-02-05 09:44:24 +0100316 endif
Marc-André Lureau8f51e012019-07-15 14:39:25 +0400317
318 if targetos == 'linux'
319 executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
320 dependencies: [qemuutil, libcap_ng],
321 install: true,
322 install_dir: get_option('libexecdir'))
323 endif
324
Marc-André Lureau5ee24e72019-07-12 23:16:54 +0400325 if 'CONFIG_IVSHMEM' in config_host
326 subdir('contrib/ivshmem-client')
327 subdir('contrib/ivshmem-server')
328 endif
Paolo Bonzini931049b2020-02-05 09:44:24 +0100329endif
330
Paolo Bonzini3f99cf52020-02-05 09:45:39 +0100331subdir('tools')
332
Paolo Bonzinif9332752020-02-03 13:28:38 +0100333summary_info = {}
334summary_info += {'Install prefix': config_host['prefix']}
335summary_info += {'BIOS directory': config_host['qemu_datadir']}
336summary_info += {'firmware path': config_host['qemu_firmwarepath']}
337summary_info += {'binary directory': config_host['bindir']}
338summary_info += {'library directory': config_host['libdir']}
339summary_info += {'module directory': config_host['qemu_moddir']}
340summary_info += {'libexec directory': config_host['libexecdir']}
341summary_info += {'include directory': config_host['includedir']}
342summary_info += {'config directory': config_host['sysconfdir']}
343if targetos != 'windows'
344 summary_info += {'local state directory': config_host['qemu_localstatedir']}
345 summary_info += {'Manual directory': config_host['mandir']}
346else
347 summary_info += {'local state directory': 'queried at runtime'}
348endif
349summary_info += {'Build directory': meson.current_build_dir()}
350summary_info += {'Source path': meson.current_source_dir()}
351summary_info += {'GIT binary': config_host['GIT']}
352summary_info += {'GIT submodules': config_host['GIT_SUBMODULES']}
353summary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]}
354summary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]}
355if link_language == 'cpp'
356 summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]}
357else
358 summary_info += {'C++ compiler': false}
359endif
360if targetos == 'darwin'
361 summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
362endif
363summary_info += {'ARFLAGS': config_host['ARFLAGS']}
364summary_info += {'CFLAGS': config_host['CFLAGS']}
365summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}
366summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}
367summary_info += {'make': config_host['MAKE']}
368summary_info += {'install': config_host['INSTALL']}
369summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
370summary_info += {'sphinx-build': config_host['SPHINX_BUILD']}
371summary_info += {'genisoimage': config_host['GENISOIMAGE']}
372# TODO: add back version
373summary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')}
374if config_host.has_key('CONFIG_SLIRP')
375 summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']}
376endif
377summary_info += {'module support': config_host.has_key('CONFIG_MODULES')}
378if config_host.has_key('CONFIG_MODULES')
379 summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
380endif
381summary_info += {'host CPU': cpu}
382summary_info += {'host endianness': build_machine.endian()}
383summary_info += {'target list': config_host['TARGET_DIRS']}
384summary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')}
385summary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')}
386summary_info += {'strip binaries': get_option('strip')}
387summary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')}
388summary_info += {'static build': config_host.has_key('CONFIG_TOOLS')}
389if targetos == 'darwin'
390 summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
391endif
392# TODO: add back version
393summary_info += {'SDL support': config_host.has_key('CONFIG_SDL')}
394summary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')}
395# TODO: add back version
396summary_info += {'GTK support': config_host.has_key('CONFIG_GTK')}
397summary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')}
398# TODO: add back version
399summary_info += {'VTE support': config_host.has_key('CONFIG_VTE')}
400summary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']}
401summary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')}
402# TODO: add back version
403summary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')}
404if config_host.has_key('CONFIG_GCRYPT')
405 summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')}
406 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
407endif
408# TODO: add back version
409summary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')}
410if config_host.has_key('CONFIG_NETTLE')
411 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
412endif
413summary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')}
414summary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')}
415summary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')}
416summary_info += {'curses support': config_host.has_key('CONFIG_CURSES')}
417# TODO: add back version
418summary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')}
419summary_info += {'curl support': config_host.has_key('CONFIG_CURL')}
420summary_info += {'mingw32 support': targetos == 'windows'}
421summary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']}
422summary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
423summary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
424summary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')}
425summary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')}
426summary_info += {'VNC support': config_host.has_key('CONFIG_VNC')}
427if config_host.has_key('CONFIG_VNC')
428 summary_info += {'VNC SASL support': config_host.has_key('CONFIG_VNC_SASL')}
429 summary_info += {'VNC JPEG support': config_host.has_key('CONFIG_VNC_JPEG')}
430 summary_info += {'VNC PNG support': config_host.has_key('CONFIG_VNC_PNG')}
431endif
432summary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')}
433if config_host.has_key('CONFIG_XEN_BACKEND')
434 summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
435endif
436summary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')}
437summary_info += {'Documentation': config_host.has_key('BUILD_DOCS')}
438summary_info += {'PIE': get_option('b_pie')}
439summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
440summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
441summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
442summary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
443summary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
444summary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')}
445# TODO: add back KVM/HAX/HVF/WHPX/TCG
446#summary_info += {'KVM support': have_kvm'}
447#summary_info += {'HAX support': have_hax'}
448#summary_info += {'HVF support': have_hvf'}
449#summary_info += {'WHPX support': have_whpx'}
450#summary_info += {'TCG support': have_tcg'}
451#if get_option('tcg')
452# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
453# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')}
454#endif
455summary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
456summary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')}
457summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
458summary_info += {'fdt support': config_host.has_key('CONFIG_FDT')}
459summary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')}
460summary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')}
461summary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')}
462summary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')}
463summary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')}
464summary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')}
465summary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
466summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
467summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
468summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
469summary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
470summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
471summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
472summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
473summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
474if config_host['TRACE_BACKENDS'].split().contains('simple')
475 summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
476endif
477# TODO: add back protocol and server version
478summary_info += {'spice support': config_host.has_key('CONFIG_SPICE')}
479summary_info += {'rbd support': config_host.has_key('CONFIG_RBD')}
480summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
481summary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
482summary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')}
483summary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')}
484summary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')}
485summary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')}
486summary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')}
487summary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')}
488summary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
489if targetos == 'windows'
490 if 'WIN_SDK' in config_host
491 summary_info += {'Windows SDK': config_host['WIN_SDK']}
492 endif
493 summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')}
494 summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
495 summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')}
496endif
497summary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')}
498summary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
499summary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'}
500summary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
501summary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')}
502summary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')}
503summary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
Marc-André Lureaubf0e56a2019-10-04 17:35:16 +0400504summary_info += {'gcov': get_option('b_coverage')}
Paolo Bonzinif9332752020-02-03 13:28:38 +0100505summary_info += {'TPM support': config_host.has_key('CONFIG_TPM')}
506summary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')}
507summary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
508summary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
509summary_info += {'lzo support': config_host.has_key('CONFIG_LZO')}
510summary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')}
511summary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')}
512summary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')}
513summary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')}
514summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
515summary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')}
516summary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')}
517summary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')}
518summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
519summary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
520summary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
521summary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')}
522summary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')}
523summary_info += {'dmg support': config_host.has_key('CONFIG_DMG')}
524summary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')}
525summary_info += {'vdi support': config_host.has_key('CONFIG_VDI')}
526summary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')}
527summary_info += {'qed support': config_host.has_key('CONFIG_QED')}
528summary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
529summary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')}
530summary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')}
531summary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')}
532summary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
533summary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')}
534summary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
535summary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')}
536summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
537if config_host.has_key('HAVE_GDB_BIN')
538 summary_info += {'gdb': config_host['HAVE_GDB_BIN']}
539endif
540summary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')}
541summary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')}
542summary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')}
543summary(summary_info, bool_yn: true)
544
545if not supported_cpus.contains(cpu)
546 message()
547 warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
548 message()
549 message('CPU host architecture ' + cpu + ' support is not currently maintained.')
550 message('The QEMU project intends to remove support for this host CPU in')
551 message('a future release if nobody volunteers to maintain it and to')
552 message('provide a build host for our continuous integration setup.')
553 message('configure has succeeded and you can continue to build, but')
554 message('if you care about QEMU on this platform you should contact')
555 message('us upstream at qemu-devel@nongnu.org.')
556endif
557
558if not supported_oses.contains(targetos)
559 message()
560 warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
561 message()
562 message('Host OS ' + targetos + 'support is not currently maintained.')
563 message('The QEMU project intends to remove support for this host OS in')
564 message('a future release if nobody volunteers to maintain it and to')
565 message('provide a build host for our continuous integration setup.')
566 message('configure has succeeded and you can continue to build, but')
567 message('if you care about QEMU on this platform you should contact')
568 message('us upstream at qemu-devel@nongnu.org.')
569endif