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