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