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