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