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