]> git.ipfire.org Git - thirdparty/qemu.git/blame - meson.build
meson: convert target/s390x/gen-features.h
[thirdparty/qemu.git] / meson.build
CommitLineData
a5665051
PB
1project('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')
a81df1b6
PB
7ss = import('sourceset')
8
ce1c1e7a 9sh = find_program('sh')
a81df1b6 10cc = meson.get_compiler('c')
a5665051
PB
11config_host = keyval.load(meson.current_build_dir() / 'config-host.mak')
12
13add_project_arguments(config_host['QEMU_CFLAGS'].split(),
14 native: false, language: ['c', 'objc'])
15add_project_arguments(config_host['QEMU_CXXFLAGS'].split(),
16 native: false, language: 'cpp')
17add_project_link_arguments(config_host['QEMU_LDFLAGS'].split(),
18 native: false, language: ['c', 'cpp', 'objc'])
19add_project_arguments(config_host['QEMU_INCLUDES'].split(),
20 language: ['c', 'cpp', 'objc'])
21
fc929892
MAL
22python = import('python').find_installation()
23
24link_language = meson.get_external_property('link_language', 'cpp')
25if link_language == 'cpp'
26 add_languages('cpp', required: true, native: false)
27endif
a5665051
PB
28if host_machine.system() == 'darwin'
29 add_languages('objc', required: false, native: false)
30endif
31
968b4db3
PB
32if 'SPARSE_CFLAGS' in config_host
33 run_target('sparse',
34 command: [find_program('scripts/check_sparse.py'),
35 config_host['SPARSE_CFLAGS'].split(),
36 'compile_commands.json'])
37endif
38
a5665051
PB
39configure_file(input: files('scripts/ninjatool.py'),
40 output: 'ninjatool',
41 configuration: config_host)
f9332757
PB
42
43supported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux']
44supported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64',
45 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64']
46
47cpu = host_machine.cpu_family()
48targetos = host_machine.system()
49
a81df1b6
PB
50m = cc.find_library('m', required: false)
51util = cc.find_library('util', required: false)
52socket = []
04c6f1e7 53version_res = []
d92989aa
MAL
54coref = []
55iokit = []
56cocoa = []
57hvf = []
a81df1b6
PB
58if targetos == 'windows'
59 socket = cc.find_library('ws2_32')
04c6f1e7
MAL
60
61 win = import('windows')
62 version_res = win.compile_resources('version.rc',
63 depend_files: files('pc-bios/qemu-nsis.ico'),
64 include_directories: include_directories('.'))
d92989aa
MAL
65elif targetos == 'darwin'
66 coref = dependency('appleframeworks', modules: 'CoreFoundation')
67 iokit = dependency('appleframeworks', modules: 'IOKit')
68 cocoa = dependency('appleframeworks', modules: 'Cocoa')
69 hvf = dependency('appleframeworks', modules: 'Hypervisor')
cfad62f1
PB
70elif targetos == 'sunos'
71 socket = [cc.find_library('socket'),
72 cc.find_library('nsl'),
73 cc.find_library('resolv')]
74elif targetos == 'haiku'
75 socket = [cc.find_library('posix_error_mapper'),
76 cc.find_library('network'),
77 cc.find_library('bsd')]
a81df1b6
PB
78endif
79glib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(),
80 link_args: config_host['GLIB_LIBS'].split())
81gio = not_found
82if 'CONFIG_GIO' in config_host
83 gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
84 link_args: config_host['GIO_LIBS'].split())
85endif
86lttng = not_found
87if 'CONFIG_TRACE_UST' in config_host
88 lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
89endif
90urcubp = not_found
91if 'CONFIG_TRACE_UST' in config_host
92 urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split())
93endif
94nettle = not_found
95if 'CONFIG_NETTLE' in config_host
96 nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(),
97 link_args: config_host['NETTLE_LIBS'].split())
98endif
99gnutls = not_found
100if 'CONFIG_GNUTLS' in config_host
101 gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(),
102 link_args: config_host['GNUTLS_LIBS'].split())
103endif
ea458960
MAL
104pixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(),
105 link_args: config_host['PIXMAN_LIBS'].split())
5e7fbd25
MAL
106pam = not_found
107if 'CONFIG_AUTH_PAM' in config_host
108 pam = cc.find_library('pam')
109endif
ec0d5893
MAL
110libattr = not_found
111if 'CONFIG_ATTR' in config_host
112 libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split())
113endif
3f99cf57
PB
114seccomp = not_found
115if 'CONFIG_SECCOMP' in config_host
116 seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(),
117 link_args: config_host['SECCOMP_LIBS'].split())
118endif
119libcap_ng = not_found
120if 'CONFIG_LIBCAP_NG' in config_host
121 libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split())
122endif
ade60d4f
MAL
123xkbcommon = not_found
124if 'CONFIG_XKBCOMMON' in config_host
125 xkbcommon = declare_dependency(compile_args: config_host['XKBCOMMON_CFLAGS'].split(),
126 link_args: config_host['XKBCOMMON_LIBS'].split())
127endif
5ee24e78 128rt = cc.find_library('rt', required: false)
99650b62
PB
129libiscsi = not_found
130if 'CONFIG_LIBISCSI' in config_host
131 libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(),
132 link_args: config_host['LIBISCSI_LIBS'].split())
133endif
ea458960
MAL
134gbm = not_found
135if 'CONFIG_GBM' in config_host
136 gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(),
137 link_args: config_host['GBM_LIBS'].split())
138endif
139virgl = not_found
140if 'CONFIG_VIRGL' in config_host
141 virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(),
142 link_args: config_host['VIRGL_LIBS'].split())
143endif
1d7bb6ab
MAL
144curl = not_found
145if 'CONFIG_CURL' in config_host
146 curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(),
147 link_args: config_host['CURL_LIBS'].split())
148endif
f15bff25
PB
149libudev = not_found
150if 'CONFIG_LIBUDEV' in config_host
151 libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
152endif
a81df1b6
PB
153
154target_dirs = config_host['TARGET_DIRS'].split()
155have_user = false
156have_system = false
157foreach target : target_dirs
158 have_user = have_user or target.endswith('-user')
159 have_system = have_system or target.endswith('-softmmu')
160endforeach
161have_tools = 'CONFIG_TOOLS' in config_host
162have_block = have_system or have_tools
163
164# Generators
165
2c273f32 166genh = []
3f885659 167hxtool = find_program('scripts/hxtool')
650b5d54 168shaderinclude = find_program('scripts/shaderinclude.pl')
a81df1b6
PB
169qapi_gen = find_program('scripts/qapi-gen.py')
170qapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py',
171 meson.source_root() / 'scripts/qapi/commands.py',
172 meson.source_root() / 'scripts/qapi/common.py',
173 meson.source_root() / 'scripts/qapi/doc.py',
174 meson.source_root() / 'scripts/qapi/error.py',
175 meson.source_root() / 'scripts/qapi/events.py',
176 meson.source_root() / 'scripts/qapi/expr.py',
177 meson.source_root() / 'scripts/qapi/gen.py',
178 meson.source_root() / 'scripts/qapi/introspect.py',
179 meson.source_root() / 'scripts/qapi/parser.py',
180 meson.source_root() / 'scripts/qapi/schema.py',
181 meson.source_root() / 'scripts/qapi/source.py',
182 meson.source_root() / 'scripts/qapi/types.py',
183 meson.source_root() / 'scripts/qapi/visit.py',
184 meson.source_root() / 'scripts/qapi/common.py',
185 meson.source_root() / 'scripts/qapi/doc.py',
186 meson.source_root() / 'scripts/qapi-gen.py'
187]
188
189tracetool = [
190 python, files('scripts/tracetool.py'),
191 '--backend=' + config_host['TRACE_BACKENDS']
192]
193
2c273f32
MAL
194qemu_version_cmd = [find_program('scripts/qemu-version.sh'),
195 meson.current_source_dir(),
196 config_host['PKGVERSION'], config_host['VERSION']]
197qemu_version = custom_target('qemu-version.h',
198 output: 'qemu-version.h',
199 command: qemu_version_cmd,
200 capture: true,
201 build_by_default: true,
202 build_always_stale: true)
203genh += qemu_version
204
3f885659
MAL
205hxdep = []
206hx_headers = [
207 ['qemu-options.hx', 'qemu-options.def'],
208 ['qemu-img-cmds.hx', 'qemu-img-cmds.h'],
209]
210if have_system
211 hx_headers += [
212 ['hmp-commands.hx', 'hmp-commands.h'],
213 ['hmp-commands-info.hx', 'hmp-commands-info.h'],
214 ]
215endif
216foreach d : hx_headers
217 custom_target(d[1],
218 input: files(d[0]),
219 output: d[1],
220 capture: true,
221 build_by_default: true, # to be removed when added to a target
222 command: [hxtool, '-h', '@INPUT0@'])
223endforeach
224genh += hxdep
225
a81df1b6
PB
226# Collect sourcesets.
227
228util_ss = ss.source_set()
229stub_ss = ss.source_set()
230trace_ss = ss.source_set()
231
232###############
233# Trace files #
234###############
235
236trace_events_subdirs = [
237 'accel/kvm',
238 'accel/tcg',
239 'crypto',
240 'monitor',
241]
242if have_user
243 trace_events_subdirs += [ 'linux-user' ]
244endif
245if have_block
246 trace_events_subdirs += [
247 'authz',
248 'block',
249 'io',
250 'nbd',
251 'scsi',
252 ]
253endif
254if have_system
255 trace_events_subdirs += [
256 'audio',
257 'backends',
258 'backends/tpm',
259 'chardev',
260 'hw/9pfs',
261 'hw/acpi',
262 'hw/alpha',
263 'hw/arm',
264 'hw/audio',
265 'hw/block',
266 'hw/block/dataplane',
267 'hw/char',
268 'hw/display',
269 'hw/dma',
270 'hw/hppa',
271 'hw/hyperv',
272 'hw/i2c',
273 'hw/i386',
274 'hw/i386/xen',
275 'hw/ide',
276 'hw/input',
277 'hw/intc',
278 'hw/isa',
279 'hw/mem',
280 'hw/mips',
281 'hw/misc',
282 'hw/misc/macio',
283 'hw/net',
284 'hw/nvram',
285 'hw/pci',
286 'hw/pci-host',
287 'hw/ppc',
288 'hw/rdma',
289 'hw/rdma/vmw',
290 'hw/rtc',
291 'hw/s390x',
292 'hw/scsi',
293 'hw/sd',
294 'hw/sparc',
295 'hw/sparc64',
296 'hw/ssi',
297 'hw/timer',
298 'hw/tpm',
299 'hw/usb',
300 'hw/vfio',
301 'hw/virtio',
302 'hw/watchdog',
303 'hw/xen',
304 'hw/gpio',
305 'hw/riscv',
306 'migration',
307 'net',
308 'ui',
309 ]
310endif
311trace_events_subdirs += [
312 'hw/core',
313 'qapi',
314 'qom',
315 'target/arm',
316 'target/hppa',
317 'target/i386',
318 'target/mips',
319 'target/ppc',
320 'target/riscv',
321 'target/s390x',
322 'target/sparc',
323 'util',
324]
325
a81df1b6
PB
326subdir('qapi')
327subdir('qobject')
328subdir('stubs')
329subdir('trace')
330subdir('util')
5582c58f
MAL
331subdir('qom')
332subdir('authz')
a81df1b6
PB
333subdir('crypto')
334subdir('storage-daemon')
2d78b56e 335subdir('ui')
a81df1b6
PB
336
337# Build targets from sourcesets
338
339stub_ss = stub_ss.apply(config_host, strict: false)
340
341util_ss.add_all(trace_ss)
342util_ss = util_ss.apply(config_host, strict: false)
343libqemuutil = static_library('qemuutil',
344 sources: util_ss.sources() + stub_ss.sources() + genh,
345 dependencies: [util_ss.dependencies(), m, glib, socket])
346qemuutil = declare_dependency(link_with: libqemuutil,
04c6f1e7 347 sources: genh + version_res)
a81df1b6 348
7fcfd456 349subdir('io')
ec0d5893 350subdir('fsdev')
d3b18480 351subdir('target')
ec0d5893 352
931049b4 353# Other build targets
f15bff25
PB
354if 'CONFIG_GUEST_AGENT' in config_host
355 subdir('qga')
356endif
357
931049b4 358if have_tools
a9c9727c 359 subdir('contrib/rdmacm-mux')
1d7bb6ab 360 subdir('contrib/elf2dmp')
a9c9727c 361
ade60d4f
MAL
362 if 'CONFIG_XKBCOMMON' in config_host
363 executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'),
364 dependencies: [qemuutil, xkbcommon], install: true)
365 endif
366
157e7b13
MAL
367 executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'),
368 dependencies: qemuutil,
369 install: true)
370
931049b4
PB
371 if 'CONFIG_VHOST_USER' in config_host
372 subdir('contrib/libvhost-user')
2d7ac0af 373 subdir('contrib/vhost-user-blk')
ea458960
MAL
374 if 'CONFIG_LINUX' in config_host
375 subdir('contrib/vhost-user-gpu')
376 endif
32fcc624 377 subdir('contrib/vhost-user-input')
99650b62 378 subdir('contrib/vhost-user-scsi')
931049b4 379 endif
8f51e01c
MAL
380
381 if targetos == 'linux'
382 executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
383 dependencies: [qemuutil, libcap_ng],
384 install: true,
385 install_dir: get_option('libexecdir'))
386 endif
387
5ee24e78
MAL
388 if 'CONFIG_IVSHMEM' in config_host
389 subdir('contrib/ivshmem-client')
390 subdir('contrib/ivshmem-server')
391 endif
931049b4
PB
392endif
393
3f99cf57 394subdir('tools')
bdcbea7a 395subdir('pc-bios')
ce1c1e7a 396subdir('tests')
3f99cf57 397
f9332757
PB
398summary_info = {}
399summary_info += {'Install prefix': config_host['prefix']}
400summary_info += {'BIOS directory': config_host['qemu_datadir']}
401summary_info += {'firmware path': config_host['qemu_firmwarepath']}
402summary_info += {'binary directory': config_host['bindir']}
403summary_info += {'library directory': config_host['libdir']}
404summary_info += {'module directory': config_host['qemu_moddir']}
405summary_info += {'libexec directory': config_host['libexecdir']}
406summary_info += {'include directory': config_host['includedir']}
407summary_info += {'config directory': config_host['sysconfdir']}
408if targetos != 'windows'
409 summary_info += {'local state directory': config_host['qemu_localstatedir']}
410 summary_info += {'Manual directory': config_host['mandir']}
411else
412 summary_info += {'local state directory': 'queried at runtime'}
413endif
414summary_info += {'Build directory': meson.current_build_dir()}
415summary_info += {'Source path': meson.current_source_dir()}
416summary_info += {'GIT binary': config_host['GIT']}
417summary_info += {'GIT submodules': config_host['GIT_SUBMODULES']}
418summary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]}
419summary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]}
420if link_language == 'cpp'
421 summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]}
422else
423 summary_info += {'C++ compiler': false}
424endif
425if targetos == 'darwin'
426 summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
427endif
428summary_info += {'ARFLAGS': config_host['ARFLAGS']}
429summary_info += {'CFLAGS': config_host['CFLAGS']}
430summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}
431summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}
432summary_info += {'make': config_host['MAKE']}
433summary_info += {'install': config_host['INSTALL']}
434summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
435summary_info += {'sphinx-build': config_host['SPHINX_BUILD']}
436summary_info += {'genisoimage': config_host['GENISOIMAGE']}
437# TODO: add back version
438summary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')}
439if config_host.has_key('CONFIG_SLIRP')
440 summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']}
441endif
442summary_info += {'module support': config_host.has_key('CONFIG_MODULES')}
443if config_host.has_key('CONFIG_MODULES')
444 summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
445endif
446summary_info += {'host CPU': cpu}
447summary_info += {'host endianness': build_machine.endian()}
448summary_info += {'target list': config_host['TARGET_DIRS']}
449summary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')}
450summary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')}
451summary_info += {'strip binaries': get_option('strip')}
452summary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')}
453summary_info += {'static build': config_host.has_key('CONFIG_TOOLS')}
454if targetos == 'darwin'
455 summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
456endif
457# TODO: add back version
458summary_info += {'SDL support': config_host.has_key('CONFIG_SDL')}
459summary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')}
460# TODO: add back version
461summary_info += {'GTK support': config_host.has_key('CONFIG_GTK')}
462summary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')}
463# TODO: add back version
464summary_info += {'VTE support': config_host.has_key('CONFIG_VTE')}
465summary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']}
466summary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')}
467# TODO: add back version
468summary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')}
469if config_host.has_key('CONFIG_GCRYPT')
470 summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')}
471 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
472endif
473# TODO: add back version
474summary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')}
475if config_host.has_key('CONFIG_NETTLE')
476 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
477endif
478summary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')}
479summary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')}
480summary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')}
481summary_info += {'curses support': config_host.has_key('CONFIG_CURSES')}
482# TODO: add back version
483summary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')}
484summary_info += {'curl support': config_host.has_key('CONFIG_CURL')}
485summary_info += {'mingw32 support': targetos == 'windows'}
486summary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']}
487summary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
488summary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
489summary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')}
490summary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')}
491summary_info += {'VNC support': config_host.has_key('CONFIG_VNC')}
492if config_host.has_key('CONFIG_VNC')
493 summary_info += {'VNC SASL support': config_host.has_key('CONFIG_VNC_SASL')}
494 summary_info += {'VNC JPEG support': config_host.has_key('CONFIG_VNC_JPEG')}
495 summary_info += {'VNC PNG support': config_host.has_key('CONFIG_VNC_PNG')}
496endif
497summary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')}
498if config_host.has_key('CONFIG_XEN_BACKEND')
499 summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
500endif
501summary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')}
502summary_info += {'Documentation': config_host.has_key('BUILD_DOCS')}
503summary_info += {'PIE': get_option('b_pie')}
504summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
505summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
506summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
507summary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
508summary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
509summary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')}
510# TODO: add back KVM/HAX/HVF/WHPX/TCG
511#summary_info += {'KVM support': have_kvm'}
512#summary_info += {'HAX support': have_hax'}
513#summary_info += {'HVF support': have_hvf'}
514#summary_info += {'WHPX support': have_whpx'}
515#summary_info += {'TCG support': have_tcg'}
516#if get_option('tcg')
517# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
518# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')}
519#endif
520summary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
521summary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')}
522summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
523summary_info += {'fdt support': config_host.has_key('CONFIG_FDT')}
524summary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')}
525summary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')}
526summary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')}
527summary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')}
528summary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')}
529summary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')}
530summary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
531summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
532summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
533summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
534summary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
535summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
536summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
537summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
538summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
539if config_host['TRACE_BACKENDS'].split().contains('simple')
540 summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
541endif
542# TODO: add back protocol and server version
543summary_info += {'spice support': config_host.has_key('CONFIG_SPICE')}
544summary_info += {'rbd support': config_host.has_key('CONFIG_RBD')}
545summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
546summary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
547summary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')}
548summary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')}
549summary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')}
550summary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')}
551summary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')}
552summary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')}
553summary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
554if targetos == 'windows'
555 if 'WIN_SDK' in config_host
556 summary_info += {'Windows SDK': config_host['WIN_SDK']}
557 endif
558 summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')}
559 summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
560 summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')}
561endif
562summary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')}
563summary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
564summary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'}
565summary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
566summary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')}
567summary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')}
568summary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
bf0e56a3 569summary_info += {'gcov': get_option('b_coverage')}
f9332757
PB
570summary_info += {'TPM support': config_host.has_key('CONFIG_TPM')}
571summary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')}
572summary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
573summary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
574summary_info += {'lzo support': config_host.has_key('CONFIG_LZO')}
575summary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')}
576summary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')}
577summary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')}
578summary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')}
579summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
580summary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')}
581summary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')}
582summary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')}
583summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
584summary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
585summary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
586summary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')}
587summary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')}
588summary_info += {'dmg support': config_host.has_key('CONFIG_DMG')}
589summary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')}
590summary_info += {'vdi support': config_host.has_key('CONFIG_VDI')}
591summary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')}
592summary_info += {'qed support': config_host.has_key('CONFIG_QED')}
593summary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
594summary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')}
595summary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')}
596summary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')}
597summary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
598summary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')}
599summary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
600summary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')}
601summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
602if config_host.has_key('HAVE_GDB_BIN')
603 summary_info += {'gdb': config_host['HAVE_GDB_BIN']}
604endif
605summary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')}
606summary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')}
607summary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')}
608summary(summary_info, bool_yn: true)
609
610if not supported_cpus.contains(cpu)
611 message()
612 warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
613 message()
614 message('CPU host architecture ' + cpu + ' support is not currently maintained.')
615 message('The QEMU project intends to remove support for this host CPU in')
616 message('a future release if nobody volunteers to maintain it and to')
617 message('provide a build host for our continuous integration setup.')
618 message('configure has succeeded and you can continue to build, but')
619 message('if you care about QEMU on this platform you should contact')
620 message('us upstream at qemu-devel@nongnu.org.')
621endif
622
623if not supported_oses.contains(targetos)
624 message()
625 warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
626 message()
627 message('Host OS ' + targetos + 'support is not currently maintained.')
628 message('The QEMU project intends to remove support for this host OS in')
629 message('a future release if nobody volunteers to maintain it and to')
630 message('provide a build host for our continuous integration setup.')
631 message('configure has succeeded and you can continue to build, but')
632 message('if you care about QEMU on this platform you should contact')
633 message('us upstream at qemu-devel@nongnu.org.')
634endif