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