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