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