blob: 9d5cd00c894f56c9ede4015bc7180d2b1807187f [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
Paolo Bonzinice1c1e72020-01-28 16:41:44 +01009sh = find_program('sh')
Paolo Bonzinia81df1b2020-08-19 08:44:56 -040010cc = meson.get_compiler('c')
Paolo Bonzinia5665052019-06-10 12:05:14 +020011config_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
Marc-André Lureaufc929892019-07-13 01:47:54 +040022python = 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
Paolo Bonzinia5665052019-06-10 12:05:14 +020028if host_machine.system() == 'darwin'
29 add_languages('objc', required: false, native: false)
30endif
31
Paolo Bonzini968b4db2020-02-03 14:45:33 +010032if '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
Paolo Bonzinia5665052019-06-10 12:05:14 +020039configure_file(input: files('scripts/ninjatool.py'),
40 output: 'ninjatool',
41 configuration: config_host)
Paolo Bonzinif9332752020-02-03 13:28:38 +010042
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
Paolo Bonzinia81df1b2020-08-19 08:44:56 -040050m = cc.find_library('m', required: false)
51util = cc.find_library('util', required: false)
52socket = []
Marc-André Lureau04c6f1e2019-07-18 00:31:05 +040053version_res = []
Marc-André Lureaud92989a2019-08-20 19:48:59 +040054coref = []
55iokit = []
56cocoa = []
57hvf = []
Paolo Bonzinia81df1b2020-08-19 08:44:56 -040058if targetos == 'windows'
59 socket = cc.find_library('ws2_32')
Marc-André Lureau04c6f1e2019-07-18 00:31:05 +040060
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('.'))
Marc-André Lureaud92989a2019-08-20 19:48:59 +040065elif 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')
Paolo Bonzinicfad62f2020-08-09 23:47:45 +020070elif 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')]
Paolo Bonzinia81df1b2020-08-19 08:44:56 -040078endif
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
Marc-André Lureauea458962019-07-12 22:23:46 +0400104pixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(),
105 link_args: config_host['PIXMAN_LIBS'].split())
Marc-André Lureau5e7fbd22019-07-15 22:54:34 +0400106pam = not_found
107if 'CONFIG_AUTH_PAM' in config_host
108 pam = cc.find_library('pam')
109endif
Marc-André Lureauec0d5892019-07-15 15:04:49 +0400110libattr = not_found
111if 'CONFIG_ATTR' in config_host
112 libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split())
113endif
Paolo Bonzini3f99cf52020-02-05 09:45:39 +0100114seccomp = 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
Marc-André Lureauade60d42019-07-15 14:48:31 +0400123xkbcommon = 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
Marc-André Lureau5ee24e72019-07-12 23:16:54 +0400128rt = cc.find_library('rt', required: false)
Paolo Bonzini99650b62019-06-10 12:21:14 +0200129libiscsi = 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
Marc-André Lureauea458962019-07-12 22:23:46 +0400134gbm = 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
Marc-André Lureau1d7bb6a2019-07-12 23:47:06 +0400144curl = 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
Paolo Bonzinif15bff22019-07-18 13:19:02 +0200149libudev = not_found
150if 'CONFIG_LIBUDEV' in config_host
151 libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
152endif
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400153
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
Marc-André Lureau2c273f32019-07-15 17:10:19 +0400166genh = []
Marc-André Lureau3f885652019-07-15 18:06:04 +0400167hxtool = find_program('scripts/hxtool')
Marc-André Lureau650b5d52019-07-15 17:36:47 +0400168shaderinclude = find_program('scripts/shaderinclude.pl')
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400169qapi_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
Marc-André Lureau2c273f32019-07-15 17:10:19 +0400194qemu_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
Marc-André Lureau3f885652019-07-15 18:06:04 +0400205hxdep = []
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
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400226# 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
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400326subdir('qapi')
327subdir('qobject')
328subdir('stubs')
329subdir('trace')
330subdir('util')
Marc-André Lureau5582c582019-07-16 19:28:54 +0400331subdir('qom')
332subdir('authz')
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400333subdir('crypto')
334subdir('storage-daemon')
Marc-André Lureau2d78b562019-07-15 16:00:36 +0400335subdir('ui')
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400336
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,
Marc-André Lureau04c6f1e2019-07-18 00:31:05 +0400347 sources: genh + version_res)
Paolo Bonzinia81df1b2020-08-19 08:44:56 -0400348
Marc-André Lureauec0d5892019-07-15 15:04:49 +0400349subdir('fsdev')
350
Paolo Bonzini931049b2020-02-05 09:44:24 +0100351# Other build targets
Paolo Bonzinif15bff22019-07-18 13:19:02 +0200352if 'CONFIG_GUEST_AGENT' in config_host
353 subdir('qga')
354endif
355
Paolo Bonzini931049b2020-02-05 09:44:24 +0100356if have_tools
Paolo Bonzinia9c97272019-06-10 12:27:52 +0200357 subdir('contrib/rdmacm-mux')
Marc-André Lureau1d7bb6a2019-07-12 23:47:06 +0400358 subdir('contrib/elf2dmp')
Paolo Bonzinia9c97272019-06-10 12:27:52 +0200359
Marc-André Lureauade60d42019-07-15 14:48:31 +0400360 if 'CONFIG_XKBCOMMON' in config_host
361 executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'),
362 dependencies: [qemuutil, xkbcommon], install: true)
363 endif
364
Marc-André Lureau157e7b12019-07-15 14:50:58 +0400365 executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'),
366 dependencies: qemuutil,
367 install: true)
368
Paolo Bonzini931049b2020-02-05 09:44:24 +0100369 if 'CONFIG_VHOST_USER' in config_host
370 subdir('contrib/libvhost-user')
Paolo Bonzini2d7ac0a2019-06-10 12:18:02 +0200371 subdir('contrib/vhost-user-blk')
Marc-André Lureauea458962019-07-12 22:23:46 +0400372 if 'CONFIG_LINUX' in config_host
373 subdir('contrib/vhost-user-gpu')
374 endif
Marc-André Lureau32fcc622019-07-12 22:11:20 +0400375 subdir('contrib/vhost-user-input')
Paolo Bonzini99650b62019-06-10 12:21:14 +0200376 subdir('contrib/vhost-user-scsi')
Paolo Bonzini931049b2020-02-05 09:44:24 +0100377 endif
Marc-André Lureau8f51e012019-07-15 14:39:25 +0400378
379 if targetos == 'linux'
380 executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
381 dependencies: [qemuutil, libcap_ng],
382 install: true,
383 install_dir: get_option('libexecdir'))
384 endif
385
Marc-André Lureau5ee24e72019-07-12 23:16:54 +0400386 if 'CONFIG_IVSHMEM' in config_host
387 subdir('contrib/ivshmem-client')
388 subdir('contrib/ivshmem-server')
389 endif
Paolo Bonzini931049b2020-02-05 09:44:24 +0100390endif
391
Paolo Bonzini3f99cf52020-02-05 09:45:39 +0100392subdir('tools')
Marc-André Lureaubdcbea72019-07-15 21:22:31 +0400393subdir('pc-bios')
Paolo Bonzinice1c1e72020-01-28 16:41:44 +0100394subdir('tests')
Paolo Bonzini3f99cf52020-02-05 09:45:39 +0100395
Paolo Bonzinif9332752020-02-03 13:28:38 +0100396summary_info = {}
397summary_info += {'Install prefix': config_host['prefix']}
398summary_info += {'BIOS directory': config_host['qemu_datadir']}
399summary_info += {'firmware path': config_host['qemu_firmwarepath']}
400summary_info += {'binary directory': config_host['bindir']}
401summary_info += {'library directory': config_host['libdir']}
402summary_info += {'module directory': config_host['qemu_moddir']}
403summary_info += {'libexec directory': config_host['libexecdir']}
404summary_info += {'include directory': config_host['includedir']}
405summary_info += {'config directory': config_host['sysconfdir']}
406if targetos != 'windows'
407 summary_info += {'local state directory': config_host['qemu_localstatedir']}
408 summary_info += {'Manual directory': config_host['mandir']}
409else
410 summary_info += {'local state directory': 'queried at runtime'}
411endif
412summary_info += {'Build directory': meson.current_build_dir()}
413summary_info += {'Source path': meson.current_source_dir()}
414summary_info += {'GIT binary': config_host['GIT']}
415summary_info += {'GIT submodules': config_host['GIT_SUBMODULES']}
416summary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]}
417summary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]}
418if link_language == 'cpp'
419 summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]}
420else
421 summary_info += {'C++ compiler': false}
422endif
423if targetos == 'darwin'
424 summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
425endif
426summary_info += {'ARFLAGS': config_host['ARFLAGS']}
427summary_info += {'CFLAGS': config_host['CFLAGS']}
428summary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']}
429summary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']}
430summary_info += {'make': config_host['MAKE']}
431summary_info += {'install': config_host['INSTALL']}
432summary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
433summary_info += {'sphinx-build': config_host['SPHINX_BUILD']}
434summary_info += {'genisoimage': config_host['GENISOIMAGE']}
435# TODO: add back version
436summary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')}
437if config_host.has_key('CONFIG_SLIRP')
438 summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']}
439endif
440summary_info += {'module support': config_host.has_key('CONFIG_MODULES')}
441if config_host.has_key('CONFIG_MODULES')
442 summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
443endif
444summary_info += {'host CPU': cpu}
445summary_info += {'host endianness': build_machine.endian()}
446summary_info += {'target list': config_host['TARGET_DIRS']}
447summary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')}
448summary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')}
449summary_info += {'strip binaries': get_option('strip')}
450summary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')}
451summary_info += {'static build': config_host.has_key('CONFIG_TOOLS')}
452if targetos == 'darwin'
453 summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
454endif
455# TODO: add back version
456summary_info += {'SDL support': config_host.has_key('CONFIG_SDL')}
457summary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')}
458# TODO: add back version
459summary_info += {'GTK support': config_host.has_key('CONFIG_GTK')}
460summary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')}
461# TODO: add back version
462summary_info += {'VTE support': config_host.has_key('CONFIG_VTE')}
463summary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']}
464summary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')}
465# TODO: add back version
466summary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')}
467if config_host.has_key('CONFIG_GCRYPT')
468 summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')}
469 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
470endif
471# TODO: add back version
472summary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')}
473if config_host.has_key('CONFIG_NETTLE')
474 summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
475endif
476summary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')}
477summary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')}
478summary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')}
479summary_info += {'curses support': config_host.has_key('CONFIG_CURSES')}
480# TODO: add back version
481summary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')}
482summary_info += {'curl support': config_host.has_key('CONFIG_CURL')}
483summary_info += {'mingw32 support': targetos == 'windows'}
484summary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']}
485summary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
486summary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
487summary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')}
488summary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')}
489summary_info += {'VNC support': config_host.has_key('CONFIG_VNC')}
490if config_host.has_key('CONFIG_VNC')
491 summary_info += {'VNC SASL support': config_host.has_key('CONFIG_VNC_SASL')}
492 summary_info += {'VNC JPEG support': config_host.has_key('CONFIG_VNC_JPEG')}
493 summary_info += {'VNC PNG support': config_host.has_key('CONFIG_VNC_PNG')}
494endif
495summary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')}
496if config_host.has_key('CONFIG_XEN_BACKEND')
497 summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
498endif
499summary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')}
500summary_info += {'Documentation': config_host.has_key('BUILD_DOCS')}
501summary_info += {'PIE': get_option('b_pie')}
502summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
503summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
504summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
505summary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
506summary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
507summary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')}
508# TODO: add back KVM/HAX/HVF/WHPX/TCG
509#summary_info += {'KVM support': have_kvm'}
510#summary_info += {'HAX support': have_hax'}
511#summary_info += {'HVF support': have_hvf'}
512#summary_info += {'WHPX support': have_whpx'}
513#summary_info += {'TCG support': have_tcg'}
514#if get_option('tcg')
515# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
516# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')}
517#endif
518summary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
519summary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')}
520summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
521summary_info += {'fdt support': config_host.has_key('CONFIG_FDT')}
522summary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')}
523summary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')}
524summary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')}
525summary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')}
526summary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')}
527summary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')}
528summary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
529summary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
530summary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
531summary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
532summary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
533summary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
534summary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
535summary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
536summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
537if config_host['TRACE_BACKENDS'].split().contains('simple')
538 summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
539endif
540# TODO: add back protocol and server version
541summary_info += {'spice support': config_host.has_key('CONFIG_SPICE')}
542summary_info += {'rbd support': config_host.has_key('CONFIG_RBD')}
543summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
544summary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
545summary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')}
546summary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')}
547summary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')}
548summary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')}
549summary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')}
550summary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')}
551summary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
552if targetos == 'windows'
553 if 'WIN_SDK' in config_host
554 summary_info += {'Windows SDK': config_host['WIN_SDK']}
555 endif
556 summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')}
557 summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
558 summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')}
559endif
560summary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')}
561summary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
562summary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'}
563summary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
564summary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')}
565summary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')}
566summary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
Marc-André Lureaubf0e56a2019-10-04 17:35:16 +0400567summary_info += {'gcov': get_option('b_coverage')}
Paolo Bonzinif9332752020-02-03 13:28:38 +0100568summary_info += {'TPM support': config_host.has_key('CONFIG_TPM')}
569summary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')}
570summary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
571summary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
572summary_info += {'lzo support': config_host.has_key('CONFIG_LZO')}
573summary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')}
574summary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')}
575summary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')}
576summary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')}
577summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
578summary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')}
579summary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')}
580summary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')}
581summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
582summary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
583summary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
584summary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')}
585summary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')}
586summary_info += {'dmg support': config_host.has_key('CONFIG_DMG')}
587summary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')}
588summary_info += {'vdi support': config_host.has_key('CONFIG_VDI')}
589summary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')}
590summary_info += {'qed support': config_host.has_key('CONFIG_QED')}
591summary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
592summary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')}
593summary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')}
594summary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')}
595summary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
596summary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')}
597summary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
598summary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')}
599summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
600if config_host.has_key('HAVE_GDB_BIN')
601 summary_info += {'gdb': config_host['HAVE_GDB_BIN']}
602endif
603summary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')}
604summary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')}
605summary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')}
606summary(summary_info, bool_yn: true)
607
608if not supported_cpus.contains(cpu)
609 message()
610 warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
611 message()
612 message('CPU host architecture ' + cpu + ' support is not currently maintained.')
613 message('The QEMU project intends to remove support for this host CPU in')
614 message('a future release if nobody volunteers to maintain it and to')
615 message('provide a build host for our continuous integration setup.')
616 message('configure has succeeded and you can continue to build, but')
617 message('if you care about QEMU on this platform you should contact')
618 message('us upstream at qemu-devel@nongnu.org.')
619endif
620
621if not supported_oses.contains(targetos)
622 message()
623 warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
624 message()
625 message('Host OS ' + targetos + 'support is not currently maintained.')
626 message('The QEMU project intends to remove support for this host OS in')
627 message('a future release if nobody volunteers to maintain it and to')
628 message('provide a build host for our continuous integration setup.')
629 message('configure has succeeded and you can continue to build, but')
630 message('if you care about QEMU on this platform you should contact')
631 message('us upstream at qemu-devel@nongnu.org.')
632endif