xref: /qemu/meson.build (revision 478e943f)
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
9ce1c1e7aSPaolo Bonzinish = find_program('sh')
10a81df1b6SPaolo Bonzinicc = meson.get_compiler('c')
11a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak')
122becc36aSPaolo Bonziniconfig_all_disas = keyval.load(meson.current_build_dir() / 'config-all-disas.mak')
133154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host
14a5665051SPaolo Bonzini
15a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(),
16a5665051SPaolo Bonzini                      native: false, language: ['c', 'objc'])
17a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(),
18a5665051SPaolo Bonzini                      native: false, language: 'cpp')
19a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(),
20a5665051SPaolo Bonzini                           native: false, language: ['c', 'cpp', 'objc'])
21a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(),
22a5665051SPaolo Bonzini                      language: ['c', 'cpp', 'objc'])
23a5665051SPaolo Bonzini
24fc929892SMarc-André Lureaupython = import('python').find_installation()
25fc929892SMarc-André Lureau
26fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp')
27fc929892SMarc-André Lureauif link_language == 'cpp'
28fc929892SMarc-André Lureau  add_languages('cpp', required: true, native: false)
29fc929892SMarc-André Lureauendif
30a5665051SPaolo Bonziniif host_machine.system() == 'darwin'
31a5665051SPaolo Bonzini  add_languages('objc', required: false, native: false)
32a5665051SPaolo Bonziniendif
33a5665051SPaolo Bonzini
34968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host
35968b4db3SPaolo Bonzini  run_target('sparse',
36968b4db3SPaolo Bonzini             command: [find_program('scripts/check_sparse.py'),
37968b4db3SPaolo Bonzini                       config_host['SPARSE_CFLAGS'].split(),
38968b4db3SPaolo Bonzini                       'compile_commands.json'])
39968b4db3SPaolo Bonziniendif
40968b4db3SPaolo Bonzini
41a5665051SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'),
42a5665051SPaolo Bonzini               output: 'ninjatool',
43a5665051SPaolo Bonzini               configuration: config_host)
44f9332757SPaolo Bonzini
45f9332757SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux']
46f9332757SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64',
47f9332757SPaolo Bonzini  'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64']
48f9332757SPaolo Bonzini
49f9332757SPaolo Bonzinicpu = host_machine.cpu_family()
50f9332757SPaolo Bonzinitargetos = host_machine.system()
51f9332757SPaolo Bonzini
52a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false)
53a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false)
54a81df1b6SPaolo Bonzinisocket = []
5504c6f1e7SMarc-André Lureauversion_res = []
56d92989aaSMarc-André Lureaucoref = []
57d92989aaSMarc-André Lureauiokit = []
58d92989aaSMarc-André Lureaucocoa = []
59d92989aaSMarc-André Lureauhvf = []
60a81df1b6SPaolo Bonziniif targetos == 'windows'
61a81df1b6SPaolo Bonzini  socket = cc.find_library('ws2_32')
6204c6f1e7SMarc-André Lureau
6304c6f1e7SMarc-André Lureau  win = import('windows')
6404c6f1e7SMarc-André Lureau  version_res = win.compile_resources('version.rc',
6504c6f1e7SMarc-André Lureau                                      depend_files: files('pc-bios/qemu-nsis.ico'),
6604c6f1e7SMarc-André Lureau                                      include_directories: include_directories('.'))
67d92989aaSMarc-André Lureauelif targetos == 'darwin'
68d92989aaSMarc-André Lureau  coref = dependency('appleframeworks', modules: 'CoreFoundation')
69d92989aaSMarc-André Lureau  iokit = dependency('appleframeworks', modules: 'IOKit')
70d92989aaSMarc-André Lureau  cocoa = dependency('appleframeworks', modules: 'Cocoa')
71d92989aaSMarc-André Lureau  hvf = dependency('appleframeworks', modules: 'Hypervisor')
72cfad62f1SPaolo Bonzinielif targetos == 'sunos'
73cfad62f1SPaolo Bonzini  socket = [cc.find_library('socket'),
74cfad62f1SPaolo Bonzini            cc.find_library('nsl'),
75cfad62f1SPaolo Bonzini            cc.find_library('resolv')]
76cfad62f1SPaolo Bonzinielif targetos == 'haiku'
77cfad62f1SPaolo Bonzini  socket = [cc.find_library('posix_error_mapper'),
78cfad62f1SPaolo Bonzini            cc.find_library('network'),
79cfad62f1SPaolo Bonzini            cc.find_library('bsd')]
80a81df1b6SPaolo Bonziniendif
81a81df1b6SPaolo Bonziniglib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(),
82a81df1b6SPaolo Bonzini                          link_args: config_host['GLIB_LIBS'].split())
83a81df1b6SPaolo Bonzinigio = not_found
84a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host
85a81df1b6SPaolo Bonzini  gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
86a81df1b6SPaolo Bonzini                           link_args: config_host['GIO_LIBS'].split())
87a81df1b6SPaolo Bonziniendif
88a81df1b6SPaolo Bonzinilttng = not_found
89a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host
90a81df1b6SPaolo Bonzini  lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
91a81df1b6SPaolo Bonziniendif
92a81df1b6SPaolo Bonziniurcubp = not_found
93a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host
94a81df1b6SPaolo Bonzini  urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split())
95a81df1b6SPaolo Bonziniendif
96a81df1b6SPaolo Bonzininettle = not_found
97a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host
98a81df1b6SPaolo Bonzini  nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(),
99a81df1b6SPaolo Bonzini                              link_args: config_host['NETTLE_LIBS'].split())
100a81df1b6SPaolo Bonziniendif
101a81df1b6SPaolo Bonzinignutls = not_found
102a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host
103a81df1b6SPaolo Bonzini  gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(),
104a81df1b6SPaolo Bonzini                              link_args: config_host['GNUTLS_LIBS'].split())
105a81df1b6SPaolo Bonziniendif
106ea458960SMarc-André Lureaupixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(),
107ea458960SMarc-André Lureau                            link_args: config_host['PIXMAN_LIBS'].split())
1085e7fbd25SMarc-André Lureaupam = not_found
1095e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host
1105e7fbd25SMarc-André Lureau  pam = cc.find_library('pam')
1115e7fbd25SMarc-André Lureauendif
1125e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false)
1135e5733e5SMarc-André Lureauzlib = not_found
1145e5733e5SMarc-André Lureauif 'CONFIG_ZLIB' in config_host
1155e5733e5SMarc-André Lureau  zlib = declare_dependency(compile_args: config_host['ZLIB_CFLAGS'].split(),
1165e5733e5SMarc-André Lureau                            link_args: config_host['ZLIB_LIBS'].split())
1175e5733e5SMarc-André Lureauendif
1185e5733e5SMarc-André Lureaulinux_io_uring = not_found
1195e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host
1205e5733e5SMarc-André Lureau  linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(),
1215e5733e5SMarc-André Lureau                                      link_args: config_host['LINUX_IO_URING_LIBS'].split())
1225e5733e5SMarc-André Lureauendif
1235e5733e5SMarc-André Lureaulibxml2 = not_found
1245e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host
1255e5733e5SMarc-André Lureau  libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(),
1265e5733e5SMarc-André Lureau                               link_args: config_host['LIBXML2_LIBS'].split())
1275e5733e5SMarc-André Lureauendif
1285e5733e5SMarc-André Lureaulibnfs = not_found
1295e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host
1305e5733e5SMarc-André Lureau  libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split())
1315e5733e5SMarc-André Lureauendif
132ec0d5893SMarc-André Lureaulibattr = not_found
133ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host
134ec0d5893SMarc-André Lureau  libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split())
135ec0d5893SMarc-André Lureauendif
1363f99cf57SPaolo Bonziniseccomp = not_found
1373f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host
1383f99cf57SPaolo Bonzini  seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(),
1393f99cf57SPaolo Bonzini                               link_args: config_host['SECCOMP_LIBS'].split())
1403f99cf57SPaolo Bonziniendif
1413f99cf57SPaolo Bonzinilibcap_ng = not_found
1423f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host
1433f99cf57SPaolo Bonzini  libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split())
1443f99cf57SPaolo Bonziniendif
145ade60d4fSMarc-André Lureauxkbcommon = not_found
146ade60d4fSMarc-André Lureauif 'CONFIG_XKBCOMMON' in config_host
147ade60d4fSMarc-André Lureau  xkbcommon = declare_dependency(compile_args: config_host['XKBCOMMON_CFLAGS'].split(),
148ade60d4fSMarc-André Lureau                                 link_args: config_host['XKBCOMMON_LIBS'].split())
149ade60d4fSMarc-André Lureauendif
150*478e943fSPaolo Bonzinipulse = not_found
151*478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host
152*478e943fSPaolo Bonzini  pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(),
153*478e943fSPaolo Bonzini                             link_args: config_host['PULSE_LIBS'].split())
154*478e943fSPaolo Bonziniendif
155*478e943fSPaolo Bonzinialsa = not_found
156*478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host
157*478e943fSPaolo Bonzini  alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(),
158*478e943fSPaolo Bonzini                            link_args: config_host['ALSA_LIBS'].split())
159*478e943fSPaolo Bonziniendif
160*478e943fSPaolo Bonzinijack = not_found
161*478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host
162*478e943fSPaolo Bonzini  jack = declare_dependency(link_args: config_host['JACK_LIBS'].split())
163*478e943fSPaolo Bonziniendif
1642634733cSPaolo Bonzinispice = not_found
1652634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host
1662634733cSPaolo Bonzini  spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(),
1672634733cSPaolo Bonzini                             link_args: config_host['SPICE_LIBS'].split())
1682634733cSPaolo Bonziniendif
1695ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false)
170897b5afaSMarc-André Lureaulibmpathpersist = not_found
171897b5afaSMarc-André Lureauif config_host.has_key('CONFIG_MPATH')
172897b5afaSMarc-André Lureau  libmpathpersist = cc.find_library('mpathpersist')
173897b5afaSMarc-André Lureauendif
17499650b62SPaolo Bonzinilibiscsi = not_found
17599650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host
17699650b62SPaolo Bonzini  libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(),
17799650b62SPaolo Bonzini                                link_args: config_host['LIBISCSI_LIBS'].split())
17899650b62SPaolo Bonziniendif
1795e5733e5SMarc-André Lureauzstd = not_found
1805e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host
1815e5733e5SMarc-André Lureau  zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(),
1825e5733e5SMarc-André Lureau                            link_args: config_host['ZSTD_LIBS'].split())
1835e5733e5SMarc-André Lureauendif
184ea458960SMarc-André Lureaugbm = not_found
185ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host
186ea458960SMarc-André Lureau  gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(),
187ea458960SMarc-André Lureau                           link_args: config_host['GBM_LIBS'].split())
188ea458960SMarc-André Lureauendif
189ea458960SMarc-André Lureauvirgl = not_found
190ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host
191ea458960SMarc-André Lureau  virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(),
192ea458960SMarc-André Lureau                             link_args: config_host['VIRGL_LIBS'].split())
193ea458960SMarc-André Lureauendif
1941d7bb6abSMarc-André Lureaucurl = not_found
1951d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host
1961d7bb6abSMarc-André Lureau  curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(),
1971d7bb6abSMarc-André Lureau                            link_args: config_host['CURL_LIBS'].split())
1981d7bb6abSMarc-André Lureauendif
199f15bff25SPaolo Bonzinilibudev = not_found
200f15bff25SPaolo Bonziniif 'CONFIG_LIBUDEV' in config_host
201f15bff25SPaolo Bonzini  libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
202f15bff25SPaolo Bonziniendif
2032634733cSPaolo Bonzinibrlapi = not_found
2042634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host
2052634733cSPaolo Bonzini  brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split())
2062634733cSPaolo Bonziniendif
2072634733cSPaolo Bonzinisdl = not_found
2082634733cSPaolo Bonziniif 'CONFIG_SDL' in config_host
2092634733cSPaolo Bonzini  sdl = declare_dependency(compile_args: config_host['SDL_CFLAGS'].split(),
2102634733cSPaolo Bonzini                           link_args: config_host['SDL_LIBS'].split())
2112634733cSPaolo Bonziniendif
2125e5733e5SMarc-André Lureaurbd = not_found
2135e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host
2145e5733e5SMarc-André Lureau  rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split())
2155e5733e5SMarc-André Lureauendif
2165e5733e5SMarc-André Lureauglusterfs = not_found
2175e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host
2185e5733e5SMarc-André Lureau  glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(),
2195e5733e5SMarc-André Lureau                                 link_args: config_host['GLUSTERFS_LIBS'].split())
2205e5733e5SMarc-André Lureauendif
2215e5733e5SMarc-André Lureaulibssh = not_found
2225e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host
2235e5733e5SMarc-André Lureau  libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(),
2245e5733e5SMarc-André Lureau                              link_args: config_host['LIBSSH_LIBS'].split())
2255e5733e5SMarc-André Lureauendif
2265e5733e5SMarc-André Lureaulibbzip2 = not_found
2275e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host
2285e5733e5SMarc-André Lureau  libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split())
2295e5733e5SMarc-André Lureauendif
2305e5733e5SMarc-André Lureauliblzfse = not_found
2315e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host
2325e5733e5SMarc-André Lureau  liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split())
2335e5733e5SMarc-André Lureauendif
234*478e943fSPaolo Bonzinioss = not_found
235*478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host
236*478e943fSPaolo Bonzini  oss = declare_dependency(link_args: config_host['OSS_LIBS'].split())
237*478e943fSPaolo Bonziniendif
238*478e943fSPaolo Bonzinidsound = not_found
239*478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host
240*478e943fSPaolo Bonzini  dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split())
241*478e943fSPaolo Bonziniendif
242*478e943fSPaolo Bonzinicoreaudio = not_found
243*478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host
244*478e943fSPaolo Bonzini  coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split())
245*478e943fSPaolo Bonziniendif
246a81df1b6SPaolo Bonzini
2472becc36aSPaolo Bonzinicreate_config = find_program('scripts/create_config')
2482becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py')
249a81df1b6SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split()
250a81df1b6SPaolo Bonzinihave_user = false
251a81df1b6SPaolo Bonzinihave_system = false
2522becc36aSPaolo Bonziniconfig_devices_mak_list = []
2532becc36aSPaolo Bonziniconfig_devices_h = {}
2542becc36aSPaolo Bonziniconfig_target_mak = {}
2552becc36aSPaolo Bonzinikconfig_external_symbols = [
2562becc36aSPaolo Bonzini  'CONFIG_KVM',
2572becc36aSPaolo Bonzini  'CONFIG_XEN',
2582becc36aSPaolo Bonzini  'CONFIG_TPM',
2592becc36aSPaolo Bonzini  'CONFIG_SPICE',
2602becc36aSPaolo Bonzini  'CONFIG_IVSHMEM',
2612becc36aSPaolo Bonzini  'CONFIG_OPENGL',
2622becc36aSPaolo Bonzini  'CONFIG_X11',
2632becc36aSPaolo Bonzini  'CONFIG_VHOST_USER',
2642becc36aSPaolo Bonzini  'CONFIG_VHOST_KERNEL',
2652becc36aSPaolo Bonzini  'CONFIG_VIRTFS',
2662becc36aSPaolo Bonzini  'CONFIG_LINUX',
2672becc36aSPaolo Bonzini  'CONFIG_PVRDMA',
2682becc36aSPaolo Bonzini]
269a81df1b6SPaolo Bonziniforeach target : target_dirs
270a81df1b6SPaolo Bonzini  have_user = have_user or target.endswith('-user')
2712becc36aSPaolo Bonzini  config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') + config_host
2722becc36aSPaolo Bonzini
2732becc36aSPaolo Bonzini  if target.endswith('-softmmu')
2742becc36aSPaolo Bonzini    have_system = true
2752becc36aSPaolo Bonzini
2762becc36aSPaolo Bonzini    base_kconfig = []
2772becc36aSPaolo Bonzini    foreach sym : kconfig_external_symbols
2782becc36aSPaolo Bonzini      if sym in config_target
2792becc36aSPaolo Bonzini        base_kconfig += '@0@=y'.format(sym)
2802becc36aSPaolo Bonzini      endif
2812becc36aSPaolo Bonzini    endforeach
2822becc36aSPaolo Bonzini
2832becc36aSPaolo Bonzini    config_devices_mak = target + '-config-devices.mak'
2842becc36aSPaolo Bonzini    config_devices_mak = configure_file(
2852becc36aSPaolo Bonzini      input: ['default-configs' / target + '.mak', 'Kconfig'],
2862becc36aSPaolo Bonzini      output: config_devices_mak,
2872becc36aSPaolo Bonzini      depfile: config_devices_mak + '.d',
2882becc36aSPaolo Bonzini      capture: true,
2892becc36aSPaolo Bonzini      command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'],
2902becc36aSPaolo Bonzini                config_devices_mak, '@DEPFILE@', '@INPUT@',
2912becc36aSPaolo Bonzini                base_kconfig])
2922becc36aSPaolo Bonzini    config_devices_h += {target: custom_target(
2932becc36aSPaolo Bonzini      target + '-config-devices.h',
2942becc36aSPaolo Bonzini      input: config_devices_mak,
2952becc36aSPaolo Bonzini      output: target + '-config-devices.h',
2962becc36aSPaolo Bonzini      capture: true,
2972becc36aSPaolo Bonzini      command: [create_config, '@INPUT@'])}
2982becc36aSPaolo Bonzini    config_devices_mak_list += config_devices_mak
2992becc36aSPaolo Bonzini    config_target += keyval.load(config_devices_mak)
3002becc36aSPaolo Bonzini  endif
3012becc36aSPaolo Bonzini  config_target_mak += {target: config_target}
302a81df1b6SPaolo Bonziniendforeach
303a81df1b6SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host
304a81df1b6SPaolo Bonzinihave_block = have_system or have_tools
305a81df1b6SPaolo Bonzini
3062becc36aSPaolo Bonzinigrepy = find_program('scripts/grepy.sh')
3072becc36aSPaolo Bonzini# This configuration is used to build files that are shared by
3082becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common"
3092becc36aSPaolo Bonzini# static_library target.
3102becc36aSPaolo Bonzini#
3112becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would
3122becc36aSPaolo Bonzini# build literally all source files, including devices only used by
3132becc36aSPaolo Bonzini# targets that are not built for this compilation.  The CONFIG_ALL
3142becc36aSPaolo Bonzini# pseudo symbol replaces it.
3152becc36aSPaolo Bonzini
3162becc36aSPaolo Bonziniif have_system
3172becc36aSPaolo Bonzini  config_all_devices_mak = configure_file(
3182becc36aSPaolo Bonzini    output: 'config-all-devices.mak',
3192becc36aSPaolo Bonzini    input: config_devices_mak_list,
3202becc36aSPaolo Bonzini    capture: true,
3212becc36aSPaolo Bonzini    command: [grepy, '@INPUT@'],
3222becc36aSPaolo Bonzini  )
3232becc36aSPaolo Bonzini  config_all_devices = keyval.load(config_all_devices_mak)
3242becc36aSPaolo Bonzinielse
3252becc36aSPaolo Bonzini  config_all_devices = {}
3262becc36aSPaolo Bonziniendif
3272becc36aSPaolo Bonziniconfig_all = config_all_devices
3282becc36aSPaolo Bonziniconfig_all += config_host
3292becc36aSPaolo Bonziniconfig_all += config_all_disas
3302becc36aSPaolo Bonziniconfig_all += {
3312becc36aSPaolo Bonzini  'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'),
3322becc36aSPaolo Bonzini  'CONFIG_SOFTMMU': have_system,
3332becc36aSPaolo Bonzini  'CONFIG_USER_ONLY': have_user,
3342becc36aSPaolo Bonzini  'CONFIG_ALL': true,
3352becc36aSPaolo Bonzini}
3362becc36aSPaolo Bonzini
337a81df1b6SPaolo Bonzini# Generators
338a81df1b6SPaolo Bonzini
3392c273f32SMarc-André Lureaugenh = []
3403f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool')
341650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl')
342a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py')
343a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py',
344a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/commands.py',
345a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/common.py',
346a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/doc.py',
347a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/error.py',
348a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/events.py',
349a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/expr.py',
350a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/gen.py',
351a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/introspect.py',
352a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/parser.py',
353a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/schema.py',
354a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/source.py',
355a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/types.py',
356a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/visit.py',
357a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/common.py',
358a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/doc.py',
359a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi-gen.py'
360a81df1b6SPaolo Bonzini]
361a81df1b6SPaolo Bonzini
362a81df1b6SPaolo Bonzinitracetool = [
363a81df1b6SPaolo Bonzini  python, files('scripts/tracetool.py'),
364a81df1b6SPaolo Bonzini   '--backend=' + config_host['TRACE_BACKENDS']
365a81df1b6SPaolo Bonzini]
366a81df1b6SPaolo Bonzini
3672c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'),
3682c273f32SMarc-André Lureau                    meson.current_source_dir(),
3692c273f32SMarc-André Lureau                    config_host['PKGVERSION'], config_host['VERSION']]
3702c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h',
3712c273f32SMarc-André Lureau                             output: 'qemu-version.h',
3722c273f32SMarc-André Lureau                             command: qemu_version_cmd,
3732c273f32SMarc-André Lureau                             capture: true,
3742c273f32SMarc-André Lureau                             build_by_default: true,
3752c273f32SMarc-André Lureau                             build_always_stale: true)
3762c273f32SMarc-André Lureaugenh += qemu_version
3772c273f32SMarc-André Lureau
3782becc36aSPaolo Bonziniconfig_host_h = custom_target('config-host.h',
3792becc36aSPaolo Bonzini                              input: meson.current_build_dir() / 'config-host.mak',
3802becc36aSPaolo Bonzini                              output: 'config-host.h',
3812becc36aSPaolo Bonzini                              capture: true,
3822becc36aSPaolo Bonzini                              command: [create_config, '@INPUT@'])
3832becc36aSPaolo Bonzinigenh += config_host_h
3842becc36aSPaolo Bonzini
3853f885659SMarc-André Lureauhxdep = []
3863f885659SMarc-André Lureauhx_headers = [
3873f885659SMarc-André Lureau  ['qemu-options.hx', 'qemu-options.def'],
3883f885659SMarc-André Lureau  ['qemu-img-cmds.hx', 'qemu-img-cmds.h'],
3893f885659SMarc-André Lureau]
3903f885659SMarc-André Lureauif have_system
3913f885659SMarc-André Lureau  hx_headers += [
3923f885659SMarc-André Lureau    ['hmp-commands.hx', 'hmp-commands.h'],
3933f885659SMarc-André Lureau    ['hmp-commands-info.hx', 'hmp-commands-info.h'],
3943f885659SMarc-André Lureau  ]
3953f885659SMarc-André Lureauendif
3963f885659SMarc-André Lureauforeach d : hx_headers
397b7c70bf2SMarc-André Lureau  hxdep += custom_target(d[1],
3983f885659SMarc-André Lureau                input: files(d[0]),
3993f885659SMarc-André Lureau                output: d[1],
4003f885659SMarc-André Lureau                capture: true,
4013f885659SMarc-André Lureau                build_by_default: true, # to be removed when added to a target
4023f885659SMarc-André Lureau                command: [hxtool, '-h', '@INPUT0@'])
4033f885659SMarc-André Lureauendforeach
4043f885659SMarc-André Lureaugenh += hxdep
4053f885659SMarc-André Lureau
406a81df1b6SPaolo Bonzini# Collect sourcesets.
407a81df1b6SPaolo Bonzini
408a81df1b6SPaolo Bonziniutil_ss = ss.source_set()
409a81df1b6SPaolo Bonzinistub_ss = ss.source_set()
410a81df1b6SPaolo Bonzinitrace_ss = ss.source_set()
4113154fee4SMarc-André Lureaublock_ss = ss.source_set()
4122becc36aSPaolo Bonzinicommon_ss = ss.source_set()
4132becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set()
4142becc36aSPaolo Bonziniuser_ss = ss.source_set()
4152becc36aSPaolo Bonzinibsd_user_ss = ss.source_set()
4162becc36aSPaolo Bonzinilinux_user_ss = ss.source_set()
4172becc36aSPaolo Bonzinispecific_ss = ss.source_set()
4182becc36aSPaolo Bonzini
4193154fee4SMarc-André Lureaumodules = {}
4202becc36aSPaolo Bonzinihw_arch = {}
4212becc36aSPaolo Bonzinitarget_arch = {}
4222becc36aSPaolo Bonzinitarget_softmmu_arch = {}
423a81df1b6SPaolo Bonzini
424a81df1b6SPaolo Bonzini###############
425a81df1b6SPaolo Bonzini# Trace files #
426a81df1b6SPaolo Bonzini###############
427a81df1b6SPaolo Bonzini
428a81df1b6SPaolo Bonzinitrace_events_subdirs = [
429a81df1b6SPaolo Bonzini  'accel/kvm',
430a81df1b6SPaolo Bonzini  'accel/tcg',
431a81df1b6SPaolo Bonzini  'crypto',
432a81df1b6SPaolo Bonzini  'monitor',
433a81df1b6SPaolo Bonzini]
434a81df1b6SPaolo Bonziniif have_user
435a81df1b6SPaolo Bonzini  trace_events_subdirs += [ 'linux-user' ]
436a81df1b6SPaolo Bonziniendif
437a81df1b6SPaolo Bonziniif have_block
438a81df1b6SPaolo Bonzini  trace_events_subdirs += [
439a81df1b6SPaolo Bonzini    'authz',
440a81df1b6SPaolo Bonzini    'block',
441a81df1b6SPaolo Bonzini    'io',
442a81df1b6SPaolo Bonzini    'nbd',
443a81df1b6SPaolo Bonzini    'scsi',
444a81df1b6SPaolo Bonzini  ]
445a81df1b6SPaolo Bonziniendif
446a81df1b6SPaolo Bonziniif have_system
447a81df1b6SPaolo Bonzini  trace_events_subdirs += [
448a81df1b6SPaolo Bonzini    'audio',
449a81df1b6SPaolo Bonzini    'backends',
450a81df1b6SPaolo Bonzini    'backends/tpm',
451a81df1b6SPaolo Bonzini    'chardev',
452a81df1b6SPaolo Bonzini    'hw/9pfs',
453a81df1b6SPaolo Bonzini    'hw/acpi',
454a81df1b6SPaolo Bonzini    'hw/alpha',
455a81df1b6SPaolo Bonzini    'hw/arm',
456a81df1b6SPaolo Bonzini    'hw/audio',
457a81df1b6SPaolo Bonzini    'hw/block',
458a81df1b6SPaolo Bonzini    'hw/block/dataplane',
459a81df1b6SPaolo Bonzini    'hw/char',
460a81df1b6SPaolo Bonzini    'hw/display',
461a81df1b6SPaolo Bonzini    'hw/dma',
462a81df1b6SPaolo Bonzini    'hw/hppa',
463a81df1b6SPaolo Bonzini    'hw/hyperv',
464a81df1b6SPaolo Bonzini    'hw/i2c',
465a81df1b6SPaolo Bonzini    'hw/i386',
466a81df1b6SPaolo Bonzini    'hw/i386/xen',
467a81df1b6SPaolo Bonzini    'hw/ide',
468a81df1b6SPaolo Bonzini    'hw/input',
469a81df1b6SPaolo Bonzini    'hw/intc',
470a81df1b6SPaolo Bonzini    'hw/isa',
471a81df1b6SPaolo Bonzini    'hw/mem',
472a81df1b6SPaolo Bonzini    'hw/mips',
473a81df1b6SPaolo Bonzini    'hw/misc',
474a81df1b6SPaolo Bonzini    'hw/misc/macio',
475a81df1b6SPaolo Bonzini    'hw/net',
476a81df1b6SPaolo Bonzini    'hw/nvram',
477a81df1b6SPaolo Bonzini    'hw/pci',
478a81df1b6SPaolo Bonzini    'hw/pci-host',
479a81df1b6SPaolo Bonzini    'hw/ppc',
480a81df1b6SPaolo Bonzini    'hw/rdma',
481a81df1b6SPaolo Bonzini    'hw/rdma/vmw',
482a81df1b6SPaolo Bonzini    'hw/rtc',
483a81df1b6SPaolo Bonzini    'hw/s390x',
484a81df1b6SPaolo Bonzini    'hw/scsi',
485a81df1b6SPaolo Bonzini    'hw/sd',
486a81df1b6SPaolo Bonzini    'hw/sparc',
487a81df1b6SPaolo Bonzini    'hw/sparc64',
488a81df1b6SPaolo Bonzini    'hw/ssi',
489a81df1b6SPaolo Bonzini    'hw/timer',
490a81df1b6SPaolo Bonzini    'hw/tpm',
491a81df1b6SPaolo Bonzini    'hw/usb',
492a81df1b6SPaolo Bonzini    'hw/vfio',
493a81df1b6SPaolo Bonzini    'hw/virtio',
494a81df1b6SPaolo Bonzini    'hw/watchdog',
495a81df1b6SPaolo Bonzini    'hw/xen',
496a81df1b6SPaolo Bonzini    'hw/gpio',
497a81df1b6SPaolo Bonzini    'hw/riscv',
498a81df1b6SPaolo Bonzini    'migration',
499a81df1b6SPaolo Bonzini    'net',
500a81df1b6SPaolo Bonzini    'ui',
501a81df1b6SPaolo Bonzini  ]
502a81df1b6SPaolo Bonziniendif
503a81df1b6SPaolo Bonzinitrace_events_subdirs += [
504a81df1b6SPaolo Bonzini  'hw/core',
505a81df1b6SPaolo Bonzini  'qapi',
506a81df1b6SPaolo Bonzini  'qom',
507a81df1b6SPaolo Bonzini  'target/arm',
508a81df1b6SPaolo Bonzini  'target/hppa',
509a81df1b6SPaolo Bonzini  'target/i386',
510a81df1b6SPaolo Bonzini  'target/mips',
511a81df1b6SPaolo Bonzini  'target/ppc',
512a81df1b6SPaolo Bonzini  'target/riscv',
513a81df1b6SPaolo Bonzini  'target/s390x',
514a81df1b6SPaolo Bonzini  'target/sparc',
515a81df1b6SPaolo Bonzini  'util',
516a81df1b6SPaolo Bonzini]
517a81df1b6SPaolo Bonzini
518a81df1b6SPaolo Bonzinisubdir('qapi')
519a81df1b6SPaolo Bonzinisubdir('qobject')
520a81df1b6SPaolo Bonzinisubdir('stubs')
521a81df1b6SPaolo Bonzinisubdir('trace')
522a81df1b6SPaolo Bonzinisubdir('util')
5235582c58fSMarc-André Lureausubdir('qom')
5245582c58fSMarc-André Lureausubdir('authz')
525a81df1b6SPaolo Bonzinisubdir('crypto')
526a81df1b6SPaolo Bonzinisubdir('storage-daemon')
5272d78b56eSMarc-André Lureausubdir('ui')
528a81df1b6SPaolo Bonzini
5293154fee4SMarc-André Lureau
5303154fee4SMarc-André Lureauif enable_modules
5313154fee4SMarc-André Lureau  libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO')
5323154fee4SMarc-André Lureau  modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO')
5333154fee4SMarc-André Lureauendif
5343154fee4SMarc-André Lureau
535a81df1b6SPaolo Bonzini# Build targets from sourcesets
536a81df1b6SPaolo Bonzini
5372becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false)
538a81df1b6SPaolo Bonzini
539a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss)
5402becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false)
541a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil',
542a81df1b6SPaolo Bonzini                             sources: util_ss.sources() + stub_ss.sources() + genh,
543a81df1b6SPaolo Bonzini                             dependencies: [util_ss.dependencies(), m, glib, socket])
544a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil,
54504c6f1e7SMarc-André Lureau                              sources: genh + version_res)
546a81df1b6SPaolo Bonzini
547*478e943fSPaolo Bonzinisubdir('audio')
5487fcfd456SMarc-André Lureausubdir('io')
549848e8ff6SMarc-André Lureausubdir('chardev')
550ec0d5893SMarc-André Lureausubdir('fsdev')
551d3b18480SMarc-André Lureausubdir('target')
552ec0d5893SMarc-André Lureau
5535e5733e5SMarc-André Lureaublock_ss.add(files(
5545e5733e5SMarc-André Lureau  'block.c',
5555e5733e5SMarc-André Lureau  'blockjob.c',
5565e5733e5SMarc-André Lureau  'job.c',
5575e5733e5SMarc-André Lureau  'qemu-io-cmds.c',
5585e5733e5SMarc-André Lureau))
5595e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c'))
5605e5733e5SMarc-André Lureau
5615e5733e5SMarc-André Lureausubdir('nbd')
5625e5733e5SMarc-André Lureausubdir('scsi')
5635e5733e5SMarc-André Lureausubdir('block')
5645e5733e5SMarc-André Lureau
565a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries
566a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos')
567a2ce7dbdSPaolo Bonzini
5683154fee4SMarc-André Lureaublock_mods = []
5693154fee4SMarc-André Lureausoftmmu_mods = []
5703154fee4SMarc-André Lureauforeach d, list : modules
5713154fee4SMarc-André Lureau  foreach m, module_ss : list
5723154fee4SMarc-André Lureau    if enable_modules and targetos != 'windows'
5733154fee4SMarc-André Lureau      module_ss = module_ss.apply(config_host, strict: false)
5743154fee4SMarc-André Lureau      sl = static_library(d + '-' + m, [genh, module_ss.sources()],
5753154fee4SMarc-André Lureau                          dependencies: [modulecommon, module_ss.dependencies()], pic: true)
5763154fee4SMarc-André Lureau      if d == 'block'
5773154fee4SMarc-André Lureau        block_mods += sl
5783154fee4SMarc-André Lureau      else
5793154fee4SMarc-André Lureau        softmmu_mods += sl
5803154fee4SMarc-André Lureau      endif
5813154fee4SMarc-André Lureau    else
5823154fee4SMarc-André Lureau      if d == 'block'
5833154fee4SMarc-André Lureau        block_ss.add_all(module_ss)
5843154fee4SMarc-André Lureau      else
5853154fee4SMarc-André Lureau        softmmu_ss.add_all(module_ss)
5863154fee4SMarc-André Lureau      endif
5873154fee4SMarc-André Lureau    endif
5883154fee4SMarc-André Lureau  endforeach
5893154fee4SMarc-André Lureauendforeach
5903154fee4SMarc-André Lureau
5913154fee4SMarc-André Lureaunm = find_program('nm')
5923154fee4SMarc-André Lureauundefsym = find_program('scripts/undefsym.sh')
5933154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms',
5943154fee4SMarc-André Lureau                             input: [libqemuutil, block_mods],
5953154fee4SMarc-André Lureau                             capture: true,
5963154fee4SMarc-André Lureau                             command: [undefsym, nm, '@INPUT@'])
5973154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms',
5983154fee4SMarc-André Lureau                             input: [libqemuutil, softmmu_mods],
5993154fee4SMarc-André Lureau                             capture: true,
6003154fee4SMarc-André Lureau                             command: [undefsym, nm, '@INPUT@'])
6013154fee4SMarc-André Lureau
6025e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false)
6035e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh,
6045e5733e5SMarc-André Lureau                          dependencies: block_ss.dependencies(),
6055e5733e5SMarc-André Lureau                          link_depends: block_syms,
6065e5733e5SMarc-André Lureau                          name_suffix: 'fa',
6075e5733e5SMarc-André Lureau                          build_by_default: false)
6085e5733e5SMarc-André Lureau
6095e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock],
610b7c70bf2SMarc-André Lureau                           link_args: '@block.syms',
611b7c70bf2SMarc-André Lureau                           dependencies: [crypto, io])
6125e5733e5SMarc-André Lureau
6133154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods
6143154fee4SMarc-André Lureau  shared_module(m.name(),
6153154fee4SMarc-André Lureau                name_prefix: '',
6163154fee4SMarc-André Lureau                link_whole: m,
6173154fee4SMarc-André Lureau                install: true,
6183154fee4SMarc-André Lureau                install_dir: config_host['qemu_moddir'])
6193154fee4SMarc-André Lureauendforeach
6203154fee4SMarc-André Lureau
6212becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: softmmu_ss)
6222becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss)
6232becc36aSPaolo Bonzini
6242becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false)
6252becc36aSPaolo Bonzinicommon_all = static_library('common',
6262becc36aSPaolo Bonzini                            build_by_default: false,
6272becc36aSPaolo Bonzini                            sources: common_all.sources() + genh,
6282becc36aSPaolo Bonzini                            dependencies: common_all.dependencies(),
6292becc36aSPaolo Bonzini                            name_suffix: 'fa')
6302becc36aSPaolo Bonzini
6312becc36aSPaolo Bonziniforeach target : target_dirs
6322becc36aSPaolo Bonzini  config_target = config_target_mak[target]
6332becc36aSPaolo Bonzini  target_name = config_target['TARGET_NAME']
6342becc36aSPaolo Bonzini  arch = config_target['TARGET_BASE_ARCH']
6352becc36aSPaolo Bonzini  arch_srcs = []
6362becc36aSPaolo Bonzini
6372becc36aSPaolo Bonzini  target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
6382becc36aSPaolo Bonzini  if targetos == 'linux'
6392becc36aSPaolo Bonzini    target_inc += include_directories('linux-headers', is_system: true)
6402becc36aSPaolo Bonzini  endif
6412becc36aSPaolo Bonzini  if target.endswith('-softmmu')
6422becc36aSPaolo Bonzini    qemu_target_name = 'qemu-system-' + target_name
6432becc36aSPaolo Bonzini    target_type='system'
6442becc36aSPaolo Bonzini    arch_srcs += config_devices_h[target]
6452becc36aSPaolo Bonzini  else
6462becc36aSPaolo Bonzini    target_type='user'
6472becc36aSPaolo Bonzini    qemu_target_name = 'qemu-' + target_name
6482becc36aSPaolo Bonzini    if 'CONFIG_LINUX_USER' in config_target
6492becc36aSPaolo Bonzini      base_dir = 'linux-user'
6502becc36aSPaolo Bonzini      target_inc += include_directories('linux-user/host/' / config_host['ARCH'])
6512becc36aSPaolo Bonzini    else
6522becc36aSPaolo Bonzini      base_dir = 'bsd-user'
6532becc36aSPaolo Bonzini    endif
6542becc36aSPaolo Bonzini    target_inc += include_directories(
6552becc36aSPaolo Bonzini      base_dir,
6562becc36aSPaolo Bonzini      base_dir / config_target['TARGET_ABI_DIR'],
6572becc36aSPaolo Bonzini    )
6582becc36aSPaolo Bonzini  endif
6592becc36aSPaolo Bonzini
6602becc36aSPaolo Bonzini  target_common = common_ss.apply(config_target, strict: false)
6612becc36aSPaolo Bonzini  objects = common_all.extract_objects(target_common.sources())
6622becc36aSPaolo Bonzini
6632becc36aSPaolo Bonzini  # TODO: Change to generator once obj-y goes away
6642becc36aSPaolo Bonzini  config_target_h = custom_target(target + '-config-target.h',
6652becc36aSPaolo Bonzini                              input: meson.current_build_dir() / target / 'config-target.mak',
6662becc36aSPaolo Bonzini                              output: target + '-config-target.h',
6672becc36aSPaolo Bonzini                              capture: true,
6682becc36aSPaolo Bonzini                              command: [create_config, '@INPUT@'])
6692becc36aSPaolo Bonzini
6702becc36aSPaolo Bonzini  target_specific = specific_ss.apply(config_target, strict: false)
6712becc36aSPaolo Bonzini  arch_srcs += target_specific.sources()
6722becc36aSPaolo Bonzini
6732becc36aSPaolo Bonzini  static_library('qemu-' + target,
6742becc36aSPaolo Bonzini                 sources: arch_srcs + [config_target_h] + genh,
6752becc36aSPaolo Bonzini                 objects: objects,
6762becc36aSPaolo Bonzini                 include_directories: target_inc,
6772becc36aSPaolo Bonzini                 c_args: ['-DNEED_CPU_H',
6782becc36aSPaolo Bonzini                          '-DCONFIG_TARGET="@0@-config-target.h"'.format(target),
6792becc36aSPaolo Bonzini                          '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)],
6802becc36aSPaolo Bonzini                 name_suffix: 'fa')
6812becc36aSPaolo Bonziniendforeach
6822becc36aSPaolo Bonzini
683931049b4SPaolo Bonzini# Other build targets
684897b5afaSMarc-André Lureau
685f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host
686f15bff25SPaolo Bonzini  subdir('qga')
687f15bff25SPaolo Bonziniendif
688f15bff25SPaolo Bonzini
689931049b4SPaolo Bonziniif have_tools
690b7c70bf2SMarc-André Lureau  qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep],
691b7c70bf2SMarc-André Lureau             dependencies: [authz, block, crypto, io, qom, qemuutil], install: true)
692b7c70bf2SMarc-André Lureau  qemu_io = executable('qemu-io', files('qemu-io.c'),
693b7c70bf2SMarc-André Lureau             dependencies: [block, qemuutil], install: true)
694b7c70bf2SMarc-André Lureau  if targetos == 'linux' or targetos == 'sunos' or targetos.endswith('bsd')
695b7c70bf2SMarc-André Lureau    qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'),
696b7c70bf2SMarc-André Lureau               dependencies: [block, qemuutil], install: true)
697b7c70bf2SMarc-André Lureau  endif
698b7c70bf2SMarc-André Lureau
699a9c9727cSPaolo Bonzini  subdir('contrib/rdmacm-mux')
7001d7bb6abSMarc-André Lureau  subdir('contrib/elf2dmp')
701a9c9727cSPaolo Bonzini
702ade60d4fSMarc-André Lureau  if 'CONFIG_XKBCOMMON' in config_host
703ade60d4fSMarc-André Lureau    executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'),
704ade60d4fSMarc-André Lureau               dependencies: [qemuutil, xkbcommon], install: true)
705ade60d4fSMarc-André Lureau  endif
706ade60d4fSMarc-André Lureau
707157e7b13SMarc-André Lureau  executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'),
708157e7b13SMarc-André Lureau             dependencies: qemuutil,
709157e7b13SMarc-André Lureau             install: true)
710157e7b13SMarc-André Lureau
711931049b4SPaolo Bonzini  if 'CONFIG_VHOST_USER' in config_host
712931049b4SPaolo Bonzini    subdir('contrib/libvhost-user')
7132d7ac0afSPaolo Bonzini    subdir('contrib/vhost-user-blk')
714ea458960SMarc-André Lureau    if 'CONFIG_LINUX' in config_host
715ea458960SMarc-André Lureau      subdir('contrib/vhost-user-gpu')
716ea458960SMarc-André Lureau    endif
71732fcc624SMarc-André Lureau    subdir('contrib/vhost-user-input')
71899650b62SPaolo Bonzini    subdir('contrib/vhost-user-scsi')
719931049b4SPaolo Bonzini  endif
7208f51e01cSMarc-André Lureau
7218f51e01cSMarc-André Lureau  if targetos == 'linux'
7228f51e01cSMarc-André Lureau    executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
7238f51e01cSMarc-André Lureau               dependencies: [qemuutil, libcap_ng],
7248f51e01cSMarc-André Lureau               install: true,
7258f51e01cSMarc-André Lureau               install_dir: get_option('libexecdir'))
726897b5afaSMarc-André Lureau
727897b5afaSMarc-André Lureau    executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'),
728897b5afaSMarc-André Lureau               dependencies: [authz, crypto, io, qom, qemuutil,
729897b5afaSMarc-André Lureau                              libcap_ng, libudev, libmpathpersist],
730897b5afaSMarc-André Lureau               install: true)
7318f51e01cSMarc-André Lureau  endif
7328f51e01cSMarc-André Lureau
7335ee24e78SMarc-André Lureau  if 'CONFIG_IVSHMEM' in config_host
7345ee24e78SMarc-André Lureau    subdir('contrib/ivshmem-client')
7355ee24e78SMarc-André Lureau    subdir('contrib/ivshmem-server')
7365ee24e78SMarc-André Lureau  endif
737931049b4SPaolo Bonziniendif
738931049b4SPaolo Bonzini
7393f99cf57SPaolo Bonzinisubdir('tools')
740bdcbea7aSMarc-André Lureausubdir('pc-bios')
741ce1c1e7aSPaolo Bonzinisubdir('tests')
7423f99cf57SPaolo Bonzini
743f9332757SPaolo Bonzinisummary_info = {}
744f9332757SPaolo Bonzinisummary_info += {'Install prefix':    config_host['prefix']}
745f9332757SPaolo Bonzinisummary_info += {'BIOS directory':    config_host['qemu_datadir']}
746f9332757SPaolo Bonzinisummary_info += {'firmware path':     config_host['qemu_firmwarepath']}
747f9332757SPaolo Bonzinisummary_info += {'binary directory':  config_host['bindir']}
748f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']}
749f9332757SPaolo Bonzinisummary_info += {'module directory':  config_host['qemu_moddir']}
750f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']}
751f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']}
752f9332757SPaolo Bonzinisummary_info += {'config directory':  config_host['sysconfdir']}
753f9332757SPaolo Bonziniif targetos != 'windows'
754f9332757SPaolo Bonzini  summary_info += {'local state directory': config_host['qemu_localstatedir']}
755f9332757SPaolo Bonzini  summary_info += {'Manual directory':      config_host['mandir']}
756f9332757SPaolo Bonzinielse
757f9332757SPaolo Bonzini  summary_info += {'local state directory': 'queried at runtime'}
758f9332757SPaolo Bonziniendif
759f9332757SPaolo Bonzinisummary_info += {'Build directory':   meson.current_build_dir()}
760f9332757SPaolo Bonzinisummary_info += {'Source path':       meson.current_source_dir()}
761f9332757SPaolo Bonzinisummary_info += {'GIT binary':        config_host['GIT']}
762f9332757SPaolo Bonzinisummary_info += {'GIT submodules':    config_host['GIT_SUBMODULES']}
763f9332757SPaolo Bonzinisummary_info += {'C compiler':        meson.get_compiler('c').cmd_array()[0]}
764f9332757SPaolo Bonzinisummary_info += {'Host C compiler':   meson.get_compiler('c', native: true).cmd_array()[0]}
765f9332757SPaolo Bonziniif link_language == 'cpp'
766f9332757SPaolo Bonzini  summary_info += {'C++ compiler':      meson.get_compiler('cpp').cmd_array()[0]}
767f9332757SPaolo Bonzinielse
768f9332757SPaolo Bonzini  summary_info += {'C++ compiler':      false}
769f9332757SPaolo Bonziniendif
770f9332757SPaolo Bonziniif targetos == 'darwin'
771f9332757SPaolo Bonzini  summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
772f9332757SPaolo Bonziniendif
773f9332757SPaolo Bonzinisummary_info += {'ARFLAGS':           config_host['ARFLAGS']}
774f9332757SPaolo Bonzinisummary_info += {'CFLAGS':            config_host['CFLAGS']}
775f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS':       config_host['QEMU_CFLAGS']}
776f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS':      config_host['QEMU_LDFLAGS']}
777f9332757SPaolo Bonzinisummary_info += {'make':              config_host['MAKE']}
778f9332757SPaolo Bonzinisummary_info += {'install':           config_host['INSTALL']}
779f9332757SPaolo Bonzinisummary_info += {'python':            '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
780f9332757SPaolo Bonzinisummary_info += {'sphinx-build':      config_host['SPHINX_BUILD']}
781f9332757SPaolo Bonzinisummary_info += {'genisoimage':       config_host['GENISOIMAGE']}
782f9332757SPaolo Bonzini# TODO: add back version
783f9332757SPaolo Bonzinisummary_info += {'slirp support':     config_host.has_key('CONFIG_SLIRP')}
784f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP')
785f9332757SPaolo Bonzini  summary_info += {'smbd':            config_host['CONFIG_SMBD_COMMAND']}
786f9332757SPaolo Bonziniendif
787f9332757SPaolo Bonzinisummary_info += {'module support':    config_host.has_key('CONFIG_MODULES')}
788f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES')
789f9332757SPaolo Bonzini  summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
790f9332757SPaolo Bonziniendif
791f9332757SPaolo Bonzinisummary_info += {'host CPU':          cpu}
792f9332757SPaolo Bonzinisummary_info += {'host endianness':   build_machine.endian()}
793f9332757SPaolo Bonzinisummary_info += {'target list':       config_host['TARGET_DIRS']}
794f9332757SPaolo Bonzinisummary_info += {'gprof enabled':     config_host.has_key('CONFIG_GPROF')}
795f9332757SPaolo Bonzinisummary_info += {'sparse enabled':    meson.get_compiler('c').cmd_array().contains('cgcc')}
796f9332757SPaolo Bonzinisummary_info += {'strip binaries':    get_option('strip')}
797f9332757SPaolo Bonzinisummary_info += {'profiler':          config_host.has_key('CONFIG_PROFILER')}
798f9332757SPaolo Bonzinisummary_info += {'static build':      config_host.has_key('CONFIG_TOOLS')}
799f9332757SPaolo Bonziniif targetos == 'darwin'
800f9332757SPaolo Bonzini  summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
801f9332757SPaolo Bonziniendif
802f9332757SPaolo Bonzini# TODO: add back version
803f9332757SPaolo Bonzinisummary_info += {'SDL support':       config_host.has_key('CONFIG_SDL')}
804f9332757SPaolo Bonzinisummary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')}
805f9332757SPaolo Bonzini# TODO: add back version
806f9332757SPaolo Bonzinisummary_info += {'GTK support':       config_host.has_key('CONFIG_GTK')}
807f9332757SPaolo Bonzinisummary_info += {'GTK GL support':    config_host.has_key('CONFIG_GTK_GL')}
808f9332757SPaolo Bonzini# TODO: add back version
809f9332757SPaolo Bonzinisummary_info += {'VTE support':       config_host.has_key('CONFIG_VTE')}
810f9332757SPaolo Bonzinisummary_info += {'TLS priority':      config_host['CONFIG_TLS_PRIORITY']}
811f9332757SPaolo Bonzinisummary_info += {'GNUTLS support':    config_host.has_key('CONFIG_GNUTLS')}
812f9332757SPaolo Bonzini# TODO: add back version
813f9332757SPaolo Bonzinisummary_info += {'libgcrypt':         config_host.has_key('CONFIG_GCRYPT')}
814f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT')
815f9332757SPaolo Bonzini   summary_info += {'  hmac':            config_host.has_key('CONFIG_GCRYPT_HMAC')}
816f9332757SPaolo Bonzini   summary_info += {'  XTS':             not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
817f9332757SPaolo Bonziniendif
818f9332757SPaolo Bonzini# TODO: add back version
819f9332757SPaolo Bonzinisummary_info += {'nettle':            config_host.has_key('CONFIG_NETTLE')}
820f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE')
821f9332757SPaolo Bonzini   summary_info += {'  XTS':             not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
822f9332757SPaolo Bonziniendif
823f9332757SPaolo Bonzinisummary_info += {'libtasn1':          config_host.has_key('CONFIG_TASN1')}
824f9332757SPaolo Bonzinisummary_info += {'PAM':               config_host.has_key('CONFIG_AUTH_PAM')}
825f9332757SPaolo Bonzinisummary_info += {'iconv support':     config_host.has_key('CONFIG_ICONV')}
826f9332757SPaolo Bonzinisummary_info += {'curses support':    config_host.has_key('CONFIG_CURSES')}
827f9332757SPaolo Bonzini# TODO: add back version
828f9332757SPaolo Bonzinisummary_info += {'virgl support':     config_host.has_key('CONFIG_VIRGL')}
829f9332757SPaolo Bonzinisummary_info += {'curl support':      config_host.has_key('CONFIG_CURL')}
830f9332757SPaolo Bonzinisummary_info += {'mingw32 support':   targetos == 'windows'}
831f9332757SPaolo Bonzinisummary_info += {'Audio drivers':     config_host['CONFIG_AUDIO_DRIVERS']}
832f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
833f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
834f9332757SPaolo Bonzinisummary_info += {'VirtFS support':    config_host.has_key('CONFIG_VIRTFS')}
835f9332757SPaolo Bonzinisummary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')}
836f9332757SPaolo Bonzinisummary_info += {'VNC support':       config_host.has_key('CONFIG_VNC')}
837f9332757SPaolo Bonziniif config_host.has_key('CONFIG_VNC')
838f9332757SPaolo Bonzini  summary_info += {'VNC SASL support':  config_host.has_key('CONFIG_VNC_SASL')}
839f9332757SPaolo Bonzini  summary_info += {'VNC JPEG support':  config_host.has_key('CONFIG_VNC_JPEG')}
840f9332757SPaolo Bonzini  summary_info += {'VNC PNG support':   config_host.has_key('CONFIG_VNC_PNG')}
841f9332757SPaolo Bonziniendif
842f9332757SPaolo Bonzinisummary_info += {'xen support':       config_host.has_key('CONFIG_XEN_BACKEND')}
843f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND')
844f9332757SPaolo Bonzini  summary_info += {'xen ctrl version':  config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
845f9332757SPaolo Bonziniendif
846f9332757SPaolo Bonzinisummary_info += {'brlapi support':    config_host.has_key('CONFIG_BRLAPI')}
847f9332757SPaolo Bonzinisummary_info += {'Documentation':     config_host.has_key('BUILD_DOCS')}
848f9332757SPaolo Bonzinisummary_info += {'PIE':               get_option('b_pie')}
849f9332757SPaolo Bonzinisummary_info += {'vde support':       config_host.has_key('CONFIG_VDE')}
850f9332757SPaolo Bonzinisummary_info += {'netmap support':    config_host.has_key('CONFIG_NETMAP')}
851f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
852f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
853f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
854f9332757SPaolo Bonzinisummary_info += {'Install blobs':     config_host.has_key('INSTALL_BLOBS')}
855f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG
856f9332757SPaolo Bonzini#summary_info += {'KVM support':       have_kvm'}
857f9332757SPaolo Bonzini#summary_info += {'HAX support':       have_hax'}
858f9332757SPaolo Bonzini#summary_info += {'HVF support':       have_hvf'}
859f9332757SPaolo Bonzini#summary_info += {'WHPX support':      have_whpx'}
860f9332757SPaolo Bonzini#summary_info += {'TCG support':       have_tcg'}
861f9332757SPaolo Bonzini#if get_option('tcg')
862f9332757SPaolo Bonzini#  summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
863f9332757SPaolo Bonzini#  summary_info += {'TCG interpreter':   config_host.has_key('CONFIG_TCG_INTERPRETER')}
864f9332757SPaolo Bonzini#endif
865f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
866f9332757SPaolo Bonzinisummary_info += {'RDMA support':      config_host.has_key('CONFIG_RDMA')}
867f9332757SPaolo Bonzinisummary_info += {'PVRDMA support':    config_host.has_key('CONFIG_PVRDMA')}
868f9332757SPaolo Bonzinisummary_info += {'fdt support':       config_host.has_key('CONFIG_FDT')}
869f9332757SPaolo Bonzinisummary_info += {'membarrier':        config_host.has_key('CONFIG_MEMBARRIER')}
870f9332757SPaolo Bonzinisummary_info += {'preadv support':    config_host.has_key('CONFIG_PREADV')}
871f9332757SPaolo Bonzinisummary_info += {'fdatasync':         config_host.has_key('CONFIG_FDATASYNC')}
872f9332757SPaolo Bonzinisummary_info += {'madvise':           config_host.has_key('CONFIG_MADVISE')}
873f9332757SPaolo Bonzinisummary_info += {'posix_madvise':     config_host.has_key('CONFIG_POSIX_MADVISE')}
874f9332757SPaolo Bonzinisummary_info += {'posix_memalign':    config_host.has_key('CONFIG_POSIX_MEMALIGN')}
875f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
876f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
877f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
878f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
879f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
880f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
881f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
882f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
883f9332757SPaolo Bonzinisummary_info += {'Trace backends':    config_host['TRACE_BACKENDS']}
884f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple')
885f9332757SPaolo Bonzini  summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
886f9332757SPaolo Bonziniendif
887f9332757SPaolo Bonzini# TODO: add back protocol and server version
888f9332757SPaolo Bonzinisummary_info += {'spice support':     config_host.has_key('CONFIG_SPICE')}
889f9332757SPaolo Bonzinisummary_info += {'rbd support':       config_host.has_key('CONFIG_RBD')}
890f9332757SPaolo Bonzinisummary_info += {'xfsctl support':    config_host.has_key('CONFIG_XFS')}
891f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
892f9332757SPaolo Bonzinisummary_info += {'libusb':            config_host.has_key('CONFIG_USB_LIBUSB')}
893f9332757SPaolo Bonzinisummary_info += {'usb net redir':     config_host.has_key('CONFIG_USB_REDIR')}
894f9332757SPaolo Bonzinisummary_info += {'OpenGL support':    config_host.has_key('CONFIG_OPENGL')}
895f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs':    config_host.has_key('CONFIG_OPENGL_DMABUF')}
896f9332757SPaolo Bonzinisummary_info += {'libiscsi support':  config_host.has_key('CONFIG_LIBISCSI')}
897f9332757SPaolo Bonzinisummary_info += {'libnfs support':    config_host.has_key('CONFIG_LIBNFS')}
898f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
899f9332757SPaolo Bonziniif targetos == 'windows'
900f9332757SPaolo Bonzini  if 'WIN_SDK' in config_host
901f9332757SPaolo Bonzini    summary_info += {'Windows SDK':       config_host['WIN_SDK']}
902f9332757SPaolo Bonzini  endif
903f9332757SPaolo Bonzini  summary_info += {'QGA VSS support':   config_host.has_key('CONFIG_QGA_VSS')}
904f9332757SPaolo Bonzini  summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
905f9332757SPaolo Bonzini  summary_info += {'QGA MSI support':   config_host.has_key('CONFIG_QGA_MSI_ENABLED')}
906f9332757SPaolo Bonziniendif
907f9332757SPaolo Bonzinisummary_info += {'seccomp support':   config_host.has_key('CONFIG_SECCOMP')}
908f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
909f9332757SPaolo Bonzinisummary_info += {'coroutine pool':    config_host['CONFIG_COROUTINE_POOL'] == '1'}
910f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
911f9332757SPaolo Bonzinisummary_info += {'mutex debugging':   config_host.has_key('CONFIG_DEBUG_MUTEX')}
912f9332757SPaolo Bonzinisummary_info += {'crypto afalg':      config_host.has_key('CONFIG_AF_ALG')}
913f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
914bf0e56a3SMarc-André Lureausummary_info += {'gcov':              get_option('b_coverage')}
915f9332757SPaolo Bonzinisummary_info += {'TPM support':       config_host.has_key('CONFIG_TPM')}
916f9332757SPaolo Bonzinisummary_info += {'libssh support':    config_host.has_key('CONFIG_LIBSSH')}
917f9332757SPaolo Bonzinisummary_info += {'QOM debugging':     config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
918f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
919f9332757SPaolo Bonzinisummary_info += {'lzo support':       config_host.has_key('CONFIG_LZO')}
920f9332757SPaolo Bonzinisummary_info += {'snappy support':    config_host.has_key('CONFIG_SNAPPY')}
921f9332757SPaolo Bonzinisummary_info += {'bzip2 support':     config_host.has_key('CONFIG_BZIP2')}
922f9332757SPaolo Bonzinisummary_info += {'lzfse support':     config_host.has_key('CONFIG_LZFSE')}
923f9332757SPaolo Bonzinisummary_info += {'zstd support':      config_host.has_key('CONFIG_ZSTD')}
924f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
925f9332757SPaolo Bonzinisummary_info += {'libxml2':           config_host.has_key('CONFIG_LIBXML2')}
926f9332757SPaolo Bonzinisummary_info += {'tcmalloc support':  config_host.has_key('CONFIG_TCMALLOC')}
927f9332757SPaolo Bonzinisummary_info += {'jemalloc support':  config_host.has_key('CONFIG_JEMALLOC')}
928f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
929f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
930f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
931f9332757SPaolo Bonzinisummary_info += {'bochs support':     config_host.has_key('CONFIG_BOCHS')}
932f9332757SPaolo Bonzinisummary_info += {'cloop support':     config_host.has_key('CONFIG_CLOOP')}
933f9332757SPaolo Bonzinisummary_info += {'dmg support':       config_host.has_key('CONFIG_DMG')}
934f9332757SPaolo Bonzinisummary_info += {'qcow v1 support':   config_host.has_key('CONFIG_QCOW1')}
935f9332757SPaolo Bonzinisummary_info += {'vdi support':       config_host.has_key('CONFIG_VDI')}
936f9332757SPaolo Bonzinisummary_info += {'vvfat support':     config_host.has_key('CONFIG_VVFAT')}
937f9332757SPaolo Bonzinisummary_info += {'qed support':       config_host.has_key('CONFIG_QED')}
938f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
939f9332757SPaolo Bonzinisummary_info += {'sheepdog support':  config_host.has_key('CONFIG_SHEEPDOG')}
940f9332757SPaolo Bonzinisummary_info += {'capstone':          config_host.has_key('CONFIG_CAPSTONE')}
941f9332757SPaolo Bonzinisummary_info += {'libpmem support':   config_host.has_key('CONFIG_LIBPMEM')}
942f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
943f9332757SPaolo Bonzinisummary_info += {'libudev':           config_host.has_key('CONFIG_LIBUDEV')}
944f9332757SPaolo Bonzinisummary_info += {'default devices':   config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
945f9332757SPaolo Bonzinisummary_info += {'plugin support':    config_host.has_key('CONFIG_PLUGIN')}
946f9332757SPaolo Bonzinisummary_info += {'fuzzing support':   config_host.has_key('CONFIG_FUZZ')}
947f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN')
948f9332757SPaolo Bonzini  summary_info += {'gdb':             config_host['HAVE_GDB_BIN']}
949f9332757SPaolo Bonziniendif
950f9332757SPaolo Bonzinisummary_info += {'thread sanitizer':  config_host.has_key('CONFIG_TSAN')}
951f9332757SPaolo Bonzinisummary_info += {'rng-none':          config_host.has_key('CONFIG_RNG_NONE')}
952f9332757SPaolo Bonzinisummary_info += {'Linux keyring':     config_host.has_key('CONFIG_SECRET_KEYRING')}
953f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true)
954f9332757SPaolo Bonzini
955f9332757SPaolo Bonziniif not supported_cpus.contains(cpu)
956f9332757SPaolo Bonzini  message()
957f9332757SPaolo Bonzini  warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
958f9332757SPaolo Bonzini  message()
959f9332757SPaolo Bonzini  message('CPU host architecture ' + cpu + ' support is not currently maintained.')
960f9332757SPaolo Bonzini  message('The QEMU project intends to remove support for this host CPU in')
961f9332757SPaolo Bonzini  message('a future release if nobody volunteers to maintain it and to')
962f9332757SPaolo Bonzini  message('provide a build host for our continuous integration setup.')
963f9332757SPaolo Bonzini  message('configure has succeeded and you can continue to build, but')
964f9332757SPaolo Bonzini  message('if you care about QEMU on this platform you should contact')
965f9332757SPaolo Bonzini  message('us upstream at qemu-devel@nongnu.org.')
966f9332757SPaolo Bonziniendif
967f9332757SPaolo Bonzini
968f9332757SPaolo Bonziniif not supported_oses.contains(targetos)
969f9332757SPaolo Bonzini  message()
970f9332757SPaolo Bonzini  warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
971f9332757SPaolo Bonzini  message()
972f9332757SPaolo Bonzini  message('Host OS ' + targetos + 'support is not currently maintained.')
973f9332757SPaolo Bonzini  message('The QEMU project intends to remove support for this host OS in')
974f9332757SPaolo Bonzini  message('a future release if nobody volunteers to maintain it and to')
975f9332757SPaolo Bonzini  message('provide a build host for our continuous integration setup.')
976f9332757SPaolo Bonzini  message('configure has succeeded and you can continue to build, but')
977f9332757SPaolo Bonzini  message('if you care about QEMU on this platform you should contact')
978f9332757SPaolo Bonzini  message('us upstream at qemu-devel@nongnu.org.')
979f9332757SPaolo Bonziniendif
980