xref: /openbmc/qemu/meson.build (revision 3e292c51)
1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0',
290756b2fSGerd Hoffmann        default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11',
33e0e5190SPaolo Bonzini                          'b_colorout=auto'],
4a5665051SPaolo Bonzini        version: run_command('head', meson.source_root() / 'VERSION').stdout().strip())
5a5665051SPaolo Bonzini
6a5665051SPaolo Bonzininot_found = dependency('', required: false)
7b29b40f4SPaolo Bonziniif meson.version().version_compare('>=0.56.0')
8b29b40f4SPaolo Bonzini  keyval = import('keyval')
9b29b40f4SPaolo Bonzinielse
10a5665051SPaolo Bonzini  keyval = import('unstable-keyval')
11b29b40f4SPaolo Bonziniendif
12a81df1b6SPaolo Bonziniss = import('sourceset')
13a81df1b6SPaolo Bonzini
14ce1c1e7aSPaolo Bonzinish = find_program('sh')
15a81df1b6SPaolo Bonzinicc = meson.get_compiler('c')
16a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak')
173154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host
1835be72baSPaolo Bonzinienable_static = 'CONFIG_STATIC' in config_host
19f8aa24eaSPaolo Bonzinibuild_docs = 'BUILD_DOCS' in config_host
20ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix')
21491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix')
22859aef02SPaolo Bonziniconfig_host_data = configuration_data()
23859aef02SPaolo Bonzinigenh = []
24a5665051SPaolo Bonzini
25760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split()
26760e4327SPaolo Bonzinihave_user = false
27760e4327SPaolo Bonzinihave_system = false
28760e4327SPaolo Bonziniforeach target : target_dirs
29760e4327SPaolo Bonzini  have_user = have_user or target.endswith('-user')
30760e4327SPaolo Bonzini  have_system = have_system or target.endswith('-softmmu')
31760e4327SPaolo Bonziniendforeach
32760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host
33760e4327SPaolo Bonzinihave_block = have_system or have_tools
34760e4327SPaolo Bonzini
35201e8ed7SPaolo Bonzinipython = import('python').find_installation()
36201e8ed7SPaolo Bonzini
37201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux']
38201e8ed7SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64',
39201e8ed7SPaolo Bonzini  'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64']
40201e8ed7SPaolo Bonzini
41201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family()
42201e8ed7SPaolo Bonzinitargetos = host_machine.system()
43201e8ed7SPaolo Bonzini
44201e8ed7SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'),
45201e8ed7SPaolo Bonzini               output: 'ninjatool',
46201e8ed7SPaolo Bonzini               configuration: config_host)
47201e8ed7SPaolo Bonzini
48201e8ed7SPaolo Bonzini##################
49201e8ed7SPaolo Bonzini# Compiler flags #
50201e8ed7SPaolo Bonzini##################
51201e8ed7SPaolo Bonzini
52a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(),
53a5665051SPaolo Bonzini                      native: false, language: ['c', 'objc'])
54a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(),
55a5665051SPaolo Bonzini                      native: false, language: 'cpp')
56a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(),
57a5665051SPaolo Bonzini                           native: false, language: ['c', 'cpp', 'objc'])
58a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(),
59a5665051SPaolo Bonzini                      language: ['c', 'cpp', 'objc'])
60a5665051SPaolo Bonzini
61c46f76d1SAlexander Bulekov# Specify linker-script with add_project_link_arguments so that it is not placed
62c46f76d1SAlexander Bulekov# within a linker --start-group/--end-group pair
63c46f76d1SAlexander Bulekovif 'CONFIG_FUZZ' in config_host
64c46f76d1SAlexander Bulekov   add_project_link_arguments(['-Wl,-T,',
65c46f76d1SAlexander Bulekov                               (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')],
66c46f76d1SAlexander Bulekov                              native: false, language: ['c', 'cpp', 'objc'])
67c46f76d1SAlexander Bulekovendif
68c46f76d1SAlexander Bulekov
69fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp')
70fc929892SMarc-André Lureauif link_language == 'cpp'
71fc929892SMarc-André Lureau  add_languages('cpp', required: true, native: false)
72fc929892SMarc-André Lureauendif
73a5665051SPaolo Bonziniif host_machine.system() == 'darwin'
74a5665051SPaolo Bonzini  add_languages('objc', required: false, native: false)
75a5665051SPaolo Bonziniendif
76a5665051SPaolo Bonzini
77968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host
78968b4db3SPaolo Bonzini  run_target('sparse',
79968b4db3SPaolo Bonzini             command: [find_program('scripts/check_sparse.py'),
80968b4db3SPaolo Bonzini                       config_host['SPARSE_CFLAGS'].split(),
81968b4db3SPaolo Bonzini                       'compile_commands.json'])
82968b4db3SPaolo Bonziniendif
83968b4db3SPaolo Bonzini
84a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false)
85a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false)
864a96337dSPaolo Bonziniwinmm = []
87a81df1b6SPaolo Bonzinisocket = []
8804c6f1e7SMarc-André Lureauversion_res = []
89d92989aaSMarc-André Lureaucoref = []
90d92989aaSMarc-André Lureauiokit = []
91d92989aaSMarc-André Lureaucocoa = []
92d92989aaSMarc-André Lureauhvf = []
93a81df1b6SPaolo Bonziniif targetos == 'windows'
94a81df1b6SPaolo Bonzini  socket = cc.find_library('ws2_32')
954a96337dSPaolo Bonzini  winmm = cc.find_library('winmm')
9604c6f1e7SMarc-André Lureau
9704c6f1e7SMarc-André Lureau  win = import('windows')
9804c6f1e7SMarc-André Lureau  version_res = win.compile_resources('version.rc',
9904c6f1e7SMarc-André Lureau                                      depend_files: files('pc-bios/qemu-nsis.ico'),
10004c6f1e7SMarc-André Lureau                                      include_directories: include_directories('.'))
101d92989aaSMarc-André Lureauelif targetos == 'darwin'
102d92989aaSMarc-André Lureau  coref = dependency('appleframeworks', modules: 'CoreFoundation')
103d92989aaSMarc-André Lureau  iokit = dependency('appleframeworks', modules: 'IOKit')
104d92989aaSMarc-André Lureau  cocoa = dependency('appleframeworks', modules: 'Cocoa')
105d92989aaSMarc-André Lureau  hvf = dependency('appleframeworks', modules: 'Hypervisor')
106cfad62f1SPaolo Bonzinielif targetos == 'sunos'
107cfad62f1SPaolo Bonzini  socket = [cc.find_library('socket'),
108cfad62f1SPaolo Bonzini            cc.find_library('nsl'),
109cfad62f1SPaolo Bonzini            cc.find_library('resolv')]
110cfad62f1SPaolo Bonzinielif targetos == 'haiku'
111cfad62f1SPaolo Bonzini  socket = [cc.find_library('posix_error_mapper'),
112cfad62f1SPaolo Bonzini            cc.find_library('network'),
113cfad62f1SPaolo Bonzini            cc.find_library('bsd')]
114a81df1b6SPaolo Bonziniendif
115215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands.  This was
116215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles.
117215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(),
118215b0c2fSPaolo Bonzini                      native: false, language: ['c', 'cpp', 'objc'])
119215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split())
120a81df1b6SPaolo Bonzinigio = not_found
121a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host
122a81df1b6SPaolo Bonzini  gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
123a81df1b6SPaolo Bonzini                           link_args: config_host['GIO_LIBS'].split())
124a81df1b6SPaolo Bonziniendif
125a81df1b6SPaolo Bonzinilttng = not_found
126a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host
127a81df1b6SPaolo Bonzini  lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
128a81df1b6SPaolo Bonziniendif
129a81df1b6SPaolo Bonziniurcubp = not_found
130a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host
131a81df1b6SPaolo Bonzini  urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split())
132a81df1b6SPaolo Bonziniendif
13346859d93SDaniel P. Berrangégcrypt = not_found
13446859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host
13546859d93SDaniel P. Berrangé  gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(),
13646859d93SDaniel P. Berrangé                              link_args: config_host['GCRYPT_LIBS'].split())
13746859d93SDaniel P. Berrangéendif
138a81df1b6SPaolo Bonzininettle = not_found
139a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host
140a81df1b6SPaolo Bonzini  nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(),
141a81df1b6SPaolo Bonzini                              link_args: config_host['NETTLE_LIBS'].split())
142a81df1b6SPaolo Bonziniendif
143a81df1b6SPaolo Bonzinignutls = not_found
144a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host
145a81df1b6SPaolo Bonzini  gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(),
146a81df1b6SPaolo Bonzini                              link_args: config_host['GNUTLS_LIBS'].split())
147a81df1b6SPaolo Bonziniendif
148b7612f45SPaolo Bonzinipixman = not_found
149b7612f45SPaolo Bonziniif have_system or have_tools
150b7612f45SPaolo Bonzini  pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8',
1511a94933fSPaolo Bonzini                      method: 'pkg-config', static: enable_static)
152b7612f45SPaolo Bonziniendif
1535e7fbd25SMarc-André Lureaupam = not_found
1545e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host
1555e7fbd25SMarc-André Lureau  pam = cc.find_library('pam')
1565e7fbd25SMarc-André Lureauendif
1575e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false)
1581ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static)
1595e5733e5SMarc-André Lureaulinux_io_uring = not_found
1605e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host
1615e5733e5SMarc-André Lureau  linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(),
1625e5733e5SMarc-André Lureau                                      link_args: config_host['LINUX_IO_URING_LIBS'].split())
1635e5733e5SMarc-André Lureauendif
1645e5733e5SMarc-André Lureaulibxml2 = not_found
1655e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host
1665e5733e5SMarc-André Lureau  libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(),
1675e5733e5SMarc-André Lureau                               link_args: config_host['LIBXML2_LIBS'].split())
1685e5733e5SMarc-André Lureauendif
1695e5733e5SMarc-André Lureaulibnfs = not_found
1705e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host
1715e5733e5SMarc-André Lureau  libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split())
1725e5733e5SMarc-André Lureauendif
173ec0d5893SMarc-André Lureaulibattr = not_found
174ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host
175ec0d5893SMarc-André Lureau  libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split())
176ec0d5893SMarc-André Lureauendif
1773f99cf57SPaolo Bonziniseccomp = not_found
1783f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host
1793f99cf57SPaolo Bonzini  seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(),
1803f99cf57SPaolo Bonzini                               link_args: config_host['SECCOMP_LIBS'].split())
1813f99cf57SPaolo Bonziniendif
1823f99cf57SPaolo Bonzinilibcap_ng = not_found
1833f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host
1843f99cf57SPaolo Bonzini  libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split())
1853f99cf57SPaolo Bonziniendif
1861917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools
1871917ec6dSPaolo Bonzini  xkbcommon = not_found
1881917ec6dSPaolo Bonzinielse
1891917ec6dSPaolo Bonzini  xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'),
1901a94933fSPaolo Bonzini                         method: 'pkg-config', static: enable_static)
191ade60d4fSMarc-André Lureauendif
192cdaf0722SMarc-André Lureauslirp = not_found
193cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP')
194cdaf0722SMarc-André Lureau  slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(),
195cdaf0722SMarc-André Lureau                             link_args: config_host['SLIRP_LIBS'].split())
196cdaf0722SMarc-André Lureauendif
197cdaf0722SMarc-André Lureauvde = not_found
198cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE')
199cdaf0722SMarc-André Lureau  vde = declare_dependency(link_args: config_host['VDE_LIBS'].split())
200cdaf0722SMarc-André Lureauendif
201478e943fSPaolo Bonzinipulse = not_found
202478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host
203478e943fSPaolo Bonzini  pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(),
204478e943fSPaolo Bonzini                             link_args: config_host['PULSE_LIBS'].split())
205478e943fSPaolo Bonziniendif
206478e943fSPaolo Bonzinialsa = not_found
207478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host
208478e943fSPaolo Bonzini  alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(),
209478e943fSPaolo Bonzini                            link_args: config_host['ALSA_LIBS'].split())
210478e943fSPaolo Bonziniendif
211478e943fSPaolo Bonzinijack = not_found
212478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host
213478e943fSPaolo Bonzini  jack = declare_dependency(link_args: config_host['JACK_LIBS'].split())
214478e943fSPaolo Bonziniendif
2152634733cSPaolo Bonzinispice = not_found
2162634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host
2172634733cSPaolo Bonzini  spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(),
2182634733cSPaolo Bonzini                             link_args: config_host['SPICE_LIBS'].split())
2192634733cSPaolo Bonziniendif
2205ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false)
221897b5afaSMarc-André Lureaulibmpathpersist = not_found
222897b5afaSMarc-André Lureauif config_host.has_key('CONFIG_MPATH')
223897b5afaSMarc-André Lureau  libmpathpersist = cc.find_library('mpathpersist')
224897b5afaSMarc-André Lureauendif
225ccf7afa5SPaolo Bonzinilibdl = not_found
226ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host
227ccf7afa5SPaolo Bonzini  libdl = cc.find_library('dl', required: true)
228ccf7afa5SPaolo Bonziniendif
22999650b62SPaolo Bonzinilibiscsi = not_found
23099650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host
23199650b62SPaolo Bonzini  libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(),
23299650b62SPaolo Bonzini                                link_args: config_host['LIBISCSI_LIBS'].split())
23399650b62SPaolo Bonziniendif
2345e5733e5SMarc-André Lureauzstd = not_found
2355e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host
2365e5733e5SMarc-André Lureau  zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(),
2375e5733e5SMarc-André Lureau                            link_args: config_host['ZSTD_LIBS'].split())
2385e5733e5SMarc-André Lureauendif
239ea458960SMarc-André Lureaugbm = not_found
240ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host
241ea458960SMarc-André Lureau  gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(),
242ea458960SMarc-André Lureau                           link_args: config_host['GBM_LIBS'].split())
243ea458960SMarc-André Lureauendif
244ea458960SMarc-André Lureauvirgl = not_found
245ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host
246ea458960SMarc-André Lureau  virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(),
247ea458960SMarc-André Lureau                             link_args: config_host['VIRGL_LIBS'].split())
248ea458960SMarc-André Lureauendif
2491d7bb6abSMarc-André Lureaucurl = not_found
2501d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host
2511d7bb6abSMarc-André Lureau  curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(),
2521d7bb6abSMarc-André Lureau                            link_args: config_host['CURL_LIBS'].split())
2531d7bb6abSMarc-André Lureauendif
254f15bff25SPaolo Bonzinilibudev = not_found
255f15bff25SPaolo Bonziniif 'CONFIG_LIBUDEV' in config_host
256f15bff25SPaolo Bonzini  libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
257f15bff25SPaolo Bonziniendif
2582634733cSPaolo Bonzinibrlapi = not_found
2592634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host
2602634733cSPaolo Bonzini  brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split())
2612634733cSPaolo Bonziniendif
26235be72baSPaolo Bonzini
263760e4327SPaolo Bonzinisdl = not_found
264760e4327SPaolo Bonziniif have_system
265363743daSYonggang Luo  sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static)
26635be72baSPaolo Bonzini  sdl_image = not_found
267760e4327SPaolo Bonziniendif
26835be72baSPaolo Bonziniif sdl.found()
26935be72baSPaolo Bonzini  # work around 2.0.8 bug
27035be72baSPaolo Bonzini  sdl = declare_dependency(compile_args: '-Wno-undef',
27135be72baSPaolo Bonzini                           dependencies: sdl)
2727161a433SVolker Rümelin  sdl_image = dependency('SDL2_image', required: get_option('sdl_image'),
2731a94933fSPaolo Bonzini                         method: 'pkg-config', static: enable_static)
27435be72baSPaolo Bonzinielse
27535be72baSPaolo Bonzini  if get_option('sdl_image').enabled()
276a8dc2aceSSergei Trofimovich    error('sdl-image required, but SDL was @0@'.format(
277a8dc2aceSSergei Trofimovich          get_option('sdl').disabled() ? 'disabled' : 'not found'))
2782634733cSPaolo Bonzini  endif
27935be72baSPaolo Bonzini  sdl_image = not_found
28035be72baSPaolo Bonziniendif
28135be72baSPaolo Bonzini
2825e5733e5SMarc-André Lureaurbd = not_found
2835e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host
2845e5733e5SMarc-André Lureau  rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split())
2855e5733e5SMarc-André Lureauendif
2865e5733e5SMarc-André Lureauglusterfs = not_found
2875e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host
2885e5733e5SMarc-André Lureau  glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(),
2895e5733e5SMarc-André Lureau                                 link_args: config_host['GLUSTERFS_LIBS'].split())
2905e5733e5SMarc-André Lureauendif
2915e5733e5SMarc-André Lureaulibssh = not_found
2925e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host
2935e5733e5SMarc-André Lureau  libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(),
2945e5733e5SMarc-André Lureau                              link_args: config_host['LIBSSH_LIBS'].split())
2955e5733e5SMarc-André Lureauendif
2965e5733e5SMarc-André Lureaulibbzip2 = not_found
2975e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host
2985e5733e5SMarc-André Lureau  libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split())
2995e5733e5SMarc-André Lureauendif
3005e5733e5SMarc-André Lureauliblzfse = not_found
3015e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host
3025e5733e5SMarc-André Lureau  liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split())
3035e5733e5SMarc-André Lureauendif
304478e943fSPaolo Bonzinioss = not_found
305478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host
306478e943fSPaolo Bonzini  oss = declare_dependency(link_args: config_host['OSS_LIBS'].split())
307478e943fSPaolo Bonziniendif
308478e943fSPaolo Bonzinidsound = not_found
309478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host
310478e943fSPaolo Bonzini  dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split())
311478e943fSPaolo Bonziniendif
312478e943fSPaolo Bonzinicoreaudio = not_found
313478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host
314478e943fSPaolo Bonzini  coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split())
315478e943fSPaolo Bonziniendif
3162b1ccdf4SMarc-André Lureauopengl = not_found
3172b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host
318de2d3005SPaolo Bonzini  opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(),
319de2d3005SPaolo Bonzini                              link_args: config_host['OPENGL_LIBS'].split())
3202b1ccdf4SMarc-André Lureauelse
3212b1ccdf4SMarc-André Lureauendif
3222b1ccdf4SMarc-André Lureaugtk = not_found
3232b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host
3242b1ccdf4SMarc-André Lureau  gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(),
3252b1ccdf4SMarc-André Lureau                              link_args: config_host['GTK_LIBS'].split())
3262b1ccdf4SMarc-André Lureauendif
3272b1ccdf4SMarc-André Lureauvte = not_found
3282b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host
3292b1ccdf4SMarc-André Lureau  vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(),
3302b1ccdf4SMarc-André Lureau                           link_args: config_host['VTE_LIBS'].split())
3312b1ccdf4SMarc-André Lureauendif
3322b1ccdf4SMarc-André Lureaux11 = not_found
3332b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host
3342b1ccdf4SMarc-André Lureau  x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(),
3352b1ccdf4SMarc-André Lureau                           link_args: config_host['X11_LIBS'].split())
3362b1ccdf4SMarc-André Lureauendif
3372b1ccdf4SMarc-André Lureaucurses = not_found
3382b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host
3392b1ccdf4SMarc-André Lureau  curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(),
3402b1ccdf4SMarc-André Lureau                              link_args: config_host['CURSES_LIBS'].split())
3412b1ccdf4SMarc-André Lureauendif
3422b1ccdf4SMarc-André Lureauiconv = not_found
3432b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host
3442b1ccdf4SMarc-André Lureau  iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(),
3452b1ccdf4SMarc-André Lureau                             link_args: config_host['ICONV_LIBS'].split())
3462b1ccdf4SMarc-André Lureauendif
3472b1ccdf4SMarc-André Lureaugio = not_found
3482b1ccdf4SMarc-André Lureauif 'CONFIG_GIO' in config_host
3492b1ccdf4SMarc-André Lureau  gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
3502b1ccdf4SMarc-André Lureau                           link_args: config_host['GIO_LIBS'].split())
3512b1ccdf4SMarc-André Lureauendif
352a0b93237SPaolo Bonzinivnc = not_found
3532b1ccdf4SMarc-André Lureaupng = not_found
3542b1ccdf4SMarc-André Lureaujpeg = not_found
3552b1ccdf4SMarc-André Lureausasl = not_found
356a0b93237SPaolo Bonziniif get_option('vnc').enabled()
357a0b93237SPaolo Bonzini  vnc = declare_dependency() # dummy dependency
358a0b93237SPaolo Bonzini  png = dependency('libpng', required: get_option('vnc_png'),
3591a94933fSPaolo Bonzini                   method: 'pkg-config', static: enable_static)
360a0b93237SPaolo Bonzini  jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'],
361a0b93237SPaolo Bonzini                         required: get_option('vnc_jpeg'),
362a0b93237SPaolo Bonzini                         static: enable_static)
363a0b93237SPaolo Bonzini  sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'],
364a0b93237SPaolo Bonzini                         required: get_option('vnc_sasl'),
365a0b93237SPaolo Bonzini                         static: enable_static)
366a0b93237SPaolo Bonzini  if sasl.found()
367a0b93237SPaolo Bonzini    sasl = declare_dependency(dependencies: sasl,
368a0b93237SPaolo Bonzini                              compile_args: '-DSTRUCT_IOVEC_DEFINED')
369a0b93237SPaolo Bonzini  endif
3702b1ccdf4SMarc-André Lureauendif
3714a96337dSPaolo Bonzinifdt = not_found
3724a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host
3734a96337dSPaolo Bonzini  fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(),
3744a96337dSPaolo Bonzini                           link_args: config_host['FDT_LIBS'].split())
3754a96337dSPaolo Bonziniendif
376708eab42SMarc-André Lureausnappy = not_found
377708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host
378708eab42SMarc-André Lureau  snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split())
379708eab42SMarc-André Lureauendif
380708eab42SMarc-André Lureaulzo = not_found
381708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host
382708eab42SMarc-André Lureau  lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split())
383708eab42SMarc-André Lureauendif
38455166230SMarc-André Lureaurdma = not_found
38555166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host
38655166230SMarc-André Lureau  rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split())
38755166230SMarc-André Lureauendif
388ab318051SMarc-André Lureaunuma = not_found
389ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host
390ab318051SMarc-André Lureau  numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split())
391ab318051SMarc-André Lureauendif
392582ea95fSMarc-André Lureauxen = not_found
393582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host
394582ea95fSMarc-André Lureau  xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(),
395582ea95fSMarc-André Lureau                           link_args: config_host['XEN_LIBS'].split())
396582ea95fSMarc-André Lureauendif
39706677ce1SPaolo Bonzinicacard = not_found
39806677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host
39906677ce1SPaolo Bonzini  cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(),
40006677ce1SPaolo Bonzini                              link_args: config_host['SMARTCARD_LIBS'].split())
40106677ce1SPaolo Bonziniendif
4020a40bcb7SCésar Belleyu2f = not_found
4030a40bcb7SCésar Belleyif have_system
4040a40bcb7SCésar Belley  u2f = dependency('u2f-emu', required: get_option('u2f'),
4050a40bcb7SCésar Belley                   method: 'pkg-config',
4060a40bcb7SCésar Belley                   static: enable_static)
4070a40bcb7SCésar Belleyendif
40806677ce1SPaolo Bonziniusbredir = not_found
40906677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host
41006677ce1SPaolo Bonzini  usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(),
41106677ce1SPaolo Bonzini                                link_args: config_host['USB_REDIR_LIBS'].split())
41206677ce1SPaolo Bonziniendif
41306677ce1SPaolo Bonzinilibusb = not_found
41406677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host
41506677ce1SPaolo Bonzini  libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(),
41606677ce1SPaolo Bonzini                              link_args: config_host['LIBUSB_LIBS'].split())
41706677ce1SPaolo Bonziniendif
418c9322ab5SMarc-André Lureaucapstone = not_found
419c9322ab5SMarc-André Lureauif 'CONFIG_CAPSTONE' in config_host
420c9322ab5SMarc-André Lureau  capstone = declare_dependency(compile_args: config_host['CAPSTONE_CFLAGS'].split(),
421c9322ab5SMarc-André Lureau                                link_args: config_host['CAPSTONE_LIBS'].split())
422c9322ab5SMarc-André Lureauendif
423c9322ab5SMarc-André Lureaulibpmem = not_found
424c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host
425c9322ab5SMarc-André Lureau  libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(),
426c9322ab5SMarc-André Lureau                               link_args: config_host['LIBPMEM_LIBS'].split())
427c9322ab5SMarc-André Lureauendif
428c7c91a74SBruce Rogerslibdaxctl = not_found
429c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host
430c7c91a74SBruce Rogers  libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split())
431c7c91a74SBruce Rogersendif
4328ce0a45fSMarc-André Lureautasn1 = not_found
4338ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host
4348ce0a45fSMarc-André Lureau  tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(),
4358ce0a45fSMarc-André Lureau                             link_args: config_host['TASN1_LIBS'].split())
4368ce0a45fSMarc-André Lureauendif
437af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false,
438af04e89dSMarc-André Lureau                      method: 'pkg-config', static: enable_static)
439a81df1b6SPaolo Bonzini
4403909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid')
4413909def8SMarc-André Lureau
442859aef02SPaolo Bonzini# Create config-host.h
443859aef02SPaolo Bonzini
44435be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found())
44535be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
446a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found())
447a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found())
448a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found())
449a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found())
4504113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found())
451af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found())
4523909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid)
453859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version()))
454859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0])
455859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1])
456859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2])
457859aef02SPaolo Bonzini
458859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
459859aef02SPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'qemu_confdir', 'qemu_datadir',
460859aef02SPaolo Bonzini           'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir',
461859aef02SPaolo Bonzini           'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath']
462859aef02SPaolo Bonziniforeach k, v: config_host
463859aef02SPaolo Bonzini  if arrays.contains(k)
464859aef02SPaolo Bonzini    if v != ''
465859aef02SPaolo Bonzini      v = '"' + '", "'.join(v.split()) + '", '
466859aef02SPaolo Bonzini    endif
467859aef02SPaolo Bonzini    config_host_data.set(k, v)
468859aef02SPaolo Bonzini  elif k == 'ARCH'
469859aef02SPaolo Bonzini    config_host_data.set('HOST_' + v.to_upper(), 1)
470859aef02SPaolo Bonzini  elif strings.contains(k)
471859aef02SPaolo Bonzini    if not k.startswith('CONFIG_')
472859aef02SPaolo Bonzini      k = 'CONFIG_' + k.to_upper()
473859aef02SPaolo Bonzini    endif
474859aef02SPaolo Bonzini    config_host_data.set_quoted(k, v)
475859aef02SPaolo Bonzini  elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_')
476859aef02SPaolo Bonzini    config_host_data.set(k, v == 'y' ? 1 : v)
477859aef02SPaolo Bonzini  endif
478859aef02SPaolo Bonziniendforeach
479859aef02SPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data)
480859aef02SPaolo Bonzini
4812becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py')
482a98006bcSPaolo Bonziniconfig_all_devices = {}
483ca0fc784SPaolo Bonziniconfig_all_disas = {}
4842becc36aSPaolo Bonziniconfig_devices_mak_list = []
4852becc36aSPaolo Bonziniconfig_devices_h = {}
486859aef02SPaolo Bonziniconfig_target_h = {}
4872becc36aSPaolo Bonziniconfig_target_mak = {}
488ca0fc784SPaolo Bonzini
489ca0fc784SPaolo Bonzinidisassemblers = {
490ca0fc784SPaolo Bonzini  'alpha' : ['CONFIG_ALPHA_DIS'],
491ca0fc784SPaolo Bonzini  'arm' : ['CONFIG_ARM_DIS'],
492ca0fc784SPaolo Bonzini  'avr' : ['CONFIG_AVR_DIS'],
493ca0fc784SPaolo Bonzini  'cris' : ['CONFIG_CRIS_DIS'],
494ca0fc784SPaolo Bonzini  'hppa' : ['CONFIG_HPPA_DIS'],
495ca0fc784SPaolo Bonzini  'i386' : ['CONFIG_I386_DIS'],
496ca0fc784SPaolo Bonzini  'x86_64' : ['CONFIG_I386_DIS'],
497ca0fc784SPaolo Bonzini  'x32' : ['CONFIG_I386_DIS'],
498ca0fc784SPaolo Bonzini  'lm32' : ['CONFIG_LM32_DIS'],
499ca0fc784SPaolo Bonzini  'm68k' : ['CONFIG_M68K_DIS'],
500ca0fc784SPaolo Bonzini  'microblaze' : ['CONFIG_MICROBLAZE_DIS'],
501ca0fc784SPaolo Bonzini  'mips' : ['CONFIG_MIPS_DIS'],
502ca0fc784SPaolo Bonzini  'moxie' : ['CONFIG_MOXIE_DIS'],
503ca0fc784SPaolo Bonzini  'nios2' : ['CONFIG_NIOS2_DIS'],
504ca0fc784SPaolo Bonzini  'or1k' : ['CONFIG_OPENRISC_DIS'],
505ca0fc784SPaolo Bonzini  'ppc' : ['CONFIG_PPC_DIS'],
506ca0fc784SPaolo Bonzini  'riscv' : ['CONFIG_RISCV_DIS'],
507ca0fc784SPaolo Bonzini  'rx' : ['CONFIG_RX_DIS'],
508ca0fc784SPaolo Bonzini  's390' : ['CONFIG_S390_DIS'],
509ca0fc784SPaolo Bonzini  'sh4' : ['CONFIG_SH4_DIS'],
510ca0fc784SPaolo Bonzini  'sparc' : ['CONFIG_SPARC_DIS'],
511ca0fc784SPaolo Bonzini  'xtensa' : ['CONFIG_XTENSA_DIS'],
512ca0fc784SPaolo Bonzini}
513ca0fc784SPaolo Bonziniif link_language == 'cpp'
514ca0fc784SPaolo Bonzini  disassemblers += {
515ca0fc784SPaolo Bonzini    'aarch64' : [ 'CONFIG_ARM_A64_DIS'],
516ca0fc784SPaolo Bonzini    'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'],
517ca0fc784SPaolo Bonzini    'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'],
518ca0fc784SPaolo Bonzini  }
519ca0fc784SPaolo Bonziniendif
520ca0fc784SPaolo Bonzini
5212becc36aSPaolo Bonzinikconfig_external_symbols = [
5222becc36aSPaolo Bonzini  'CONFIG_KVM',
5232becc36aSPaolo Bonzini  'CONFIG_XEN',
5242becc36aSPaolo Bonzini  'CONFIG_TPM',
5252becc36aSPaolo Bonzini  'CONFIG_SPICE',
5262becc36aSPaolo Bonzini  'CONFIG_IVSHMEM',
5272becc36aSPaolo Bonzini  'CONFIG_OPENGL',
5282becc36aSPaolo Bonzini  'CONFIG_X11',
5292becc36aSPaolo Bonzini  'CONFIG_VHOST_USER',
5302becc36aSPaolo Bonzini  'CONFIG_VHOST_KERNEL',
5312becc36aSPaolo Bonzini  'CONFIG_VIRTFS',
5322becc36aSPaolo Bonzini  'CONFIG_LINUX',
5332becc36aSPaolo Bonzini  'CONFIG_PVRDMA',
5342becc36aSPaolo Bonzini]
535859aef02SPaolo Bonziniignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS']
536ca0fc784SPaolo Bonzini
537a81df1b6SPaolo Bonziniforeach target : target_dirs
538859aef02SPaolo Bonzini  config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak')
539859aef02SPaolo Bonzini
540ca0fc784SPaolo Bonzini  foreach k, v: disassemblers
541ca0fc784SPaolo Bonzini    if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k)
542ca0fc784SPaolo Bonzini      foreach sym: v
543ca0fc784SPaolo Bonzini        config_target += { sym: 'y' }
544ca0fc784SPaolo Bonzini        config_all_disas += { sym: 'y' }
545ca0fc784SPaolo Bonzini      endforeach
546ca0fc784SPaolo Bonzini    endif
547ca0fc784SPaolo Bonzini  endforeach
548ca0fc784SPaolo Bonzini
549859aef02SPaolo Bonzini  config_target_data = configuration_data()
550859aef02SPaolo Bonzini  foreach k, v: config_target
551859aef02SPaolo Bonzini    if not k.startswith('TARGET_') and not k.startswith('CONFIG_')
552859aef02SPaolo Bonzini      # do nothing
553859aef02SPaolo Bonzini    elif ignored.contains(k)
554859aef02SPaolo Bonzini      # do nothing
555859aef02SPaolo Bonzini    elif k == 'TARGET_BASE_ARCH'
556859aef02SPaolo Bonzini      config_target_data.set('TARGET_' + v.to_upper(), 1)
557859aef02SPaolo Bonzini    elif k == 'TARGET_NAME'
558859aef02SPaolo Bonzini      config_target_data.set_quoted(k, v)
559859aef02SPaolo Bonzini    elif v == 'y'
560859aef02SPaolo Bonzini      config_target_data.set(k, 1)
561859aef02SPaolo Bonzini    else
562859aef02SPaolo Bonzini      config_target_data.set(k, v)
563859aef02SPaolo Bonzini    endif
564859aef02SPaolo Bonzini  endforeach
565859aef02SPaolo Bonzini  config_target_h += {target: configure_file(output: target + '-config-target.h',
566859aef02SPaolo Bonzini                                               configuration: config_target_data)}
5672becc36aSPaolo Bonzini
5682becc36aSPaolo Bonzini  if target.endswith('-softmmu')
5692becc36aSPaolo Bonzini    base_kconfig = []
5702becc36aSPaolo Bonzini    foreach sym : kconfig_external_symbols
571859aef02SPaolo Bonzini      if sym in config_target or sym in config_host
5722becc36aSPaolo Bonzini        base_kconfig += '@0@=y'.format(sym)
5732becc36aSPaolo Bonzini      endif
5742becc36aSPaolo Bonzini    endforeach
5752becc36aSPaolo Bonzini
5762becc36aSPaolo Bonzini    config_devices_mak = target + '-config-devices.mak'
5772becc36aSPaolo Bonzini    config_devices_mak = configure_file(
5782becc36aSPaolo Bonzini      input: ['default-configs' / target + '.mak', 'Kconfig'],
5792becc36aSPaolo Bonzini      output: config_devices_mak,
5802becc36aSPaolo Bonzini      depfile: config_devices_mak + '.d',
5812becc36aSPaolo Bonzini      capture: true,
5822becc36aSPaolo Bonzini      command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'],
5832becc36aSPaolo Bonzini                config_devices_mak, '@DEPFILE@', '@INPUT@',
5842becc36aSPaolo Bonzini                base_kconfig])
585859aef02SPaolo Bonzini
586859aef02SPaolo Bonzini    config_devices_data = configuration_data()
587859aef02SPaolo Bonzini    config_devices = keyval.load(config_devices_mak)
588859aef02SPaolo Bonzini    foreach k, v: config_devices
589859aef02SPaolo Bonzini      config_devices_data.set(k, 1)
590859aef02SPaolo Bonzini    endforeach
5912becc36aSPaolo Bonzini    config_devices_mak_list += config_devices_mak
592859aef02SPaolo Bonzini    config_devices_h += {target: configure_file(output: target + '-config-devices.h',
593859aef02SPaolo Bonzini                                                configuration: config_devices_data)}
594859aef02SPaolo Bonzini    config_target += config_devices
595a98006bcSPaolo Bonzini    config_all_devices += config_devices
5962becc36aSPaolo Bonzini  endif
5972becc36aSPaolo Bonzini  config_target_mak += {target: config_target}
598a81df1b6SPaolo Bonziniendforeach
599a81df1b6SPaolo Bonzini
6002becc36aSPaolo Bonzini# This configuration is used to build files that are shared by
6012becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common"
6022becc36aSPaolo Bonzini# static_library target.
6032becc36aSPaolo Bonzini#
6042becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would
6052becc36aSPaolo Bonzini# build literally all source files, including devices only used by
6062becc36aSPaolo Bonzini# targets that are not built for this compilation.  The CONFIG_ALL
6072becc36aSPaolo Bonzini# pseudo symbol replaces it.
6082becc36aSPaolo Bonzini
6092becc36aSPaolo Bonziniconfig_all = config_all_devices
6102becc36aSPaolo Bonziniconfig_all += config_host
6112becc36aSPaolo Bonziniconfig_all += config_all_disas
6122becc36aSPaolo Bonziniconfig_all += {
6132becc36aSPaolo Bonzini  'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'),
6142becc36aSPaolo Bonzini  'CONFIG_SOFTMMU': have_system,
6152becc36aSPaolo Bonzini  'CONFIG_USER_ONLY': have_user,
6162becc36aSPaolo Bonzini  'CONFIG_ALL': true,
6172becc36aSPaolo Bonzini}
6182becc36aSPaolo Bonzini
619a81df1b6SPaolo Bonzini# Generators
620a81df1b6SPaolo Bonzini
6213f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool')
622650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl')
623a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py')
624a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py',
625a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/commands.py',
626a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/common.py',
627a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/doc.py',
628a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/error.py',
629a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/events.py',
630a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/expr.py',
631a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/gen.py',
632a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/introspect.py',
633a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/parser.py',
634a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/schema.py',
635a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/source.py',
636a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/types.py',
637a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/visit.py',
638a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/common.py',
639a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/doc.py',
640a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi-gen.py'
641a81df1b6SPaolo Bonzini]
642a81df1b6SPaolo Bonzini
643a81df1b6SPaolo Bonzinitracetool = [
644a81df1b6SPaolo Bonzini  python, files('scripts/tracetool.py'),
645a81df1b6SPaolo Bonzini   '--backend=' + config_host['TRACE_BACKENDS']
646a81df1b6SPaolo Bonzini]
647a81df1b6SPaolo Bonzini
6482c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'),
6492c273f32SMarc-André Lureau                    meson.current_source_dir(),
650859aef02SPaolo Bonzini                    config_host['PKGVERSION'], meson.project_version()]
6512c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h',
6522c273f32SMarc-André Lureau                             output: 'qemu-version.h',
6532c273f32SMarc-André Lureau                             command: qemu_version_cmd,
6542c273f32SMarc-André Lureau                             capture: true,
6552c273f32SMarc-André Lureau                             build_by_default: true,
6562c273f32SMarc-André Lureau                             build_always_stale: true)
6572c273f32SMarc-André Lureaugenh += qemu_version
6582c273f32SMarc-André Lureau
6593f885659SMarc-André Lureauhxdep = []
6603f885659SMarc-André Lureauhx_headers = [
6613f885659SMarc-André Lureau  ['qemu-options.hx', 'qemu-options.def'],
6623f885659SMarc-André Lureau  ['qemu-img-cmds.hx', 'qemu-img-cmds.h'],
6633f885659SMarc-André Lureau]
6643f885659SMarc-André Lureauif have_system
6653f885659SMarc-André Lureau  hx_headers += [
6663f885659SMarc-André Lureau    ['hmp-commands.hx', 'hmp-commands.h'],
6673f885659SMarc-André Lureau    ['hmp-commands-info.hx', 'hmp-commands-info.h'],
6683f885659SMarc-André Lureau  ]
6693f885659SMarc-André Lureauendif
6703f885659SMarc-André Lureauforeach d : hx_headers
671b7c70bf2SMarc-André Lureau  hxdep += custom_target(d[1],
6723f885659SMarc-André Lureau                input: files(d[0]),
6733f885659SMarc-André Lureau                output: d[1],
6743f885659SMarc-André Lureau                capture: true,
6753f885659SMarc-André Lureau                build_by_default: true, # to be removed when added to a target
6763f885659SMarc-André Lureau                command: [hxtool, '-h', '@INPUT0@'])
6773f885659SMarc-André Lureauendforeach
6783f885659SMarc-André Lureaugenh += hxdep
6793f885659SMarc-André Lureau
680a81df1b6SPaolo Bonzini# Collect sourcesets.
681a81df1b6SPaolo Bonzini
682a81df1b6SPaolo Bonziniutil_ss = ss.source_set()
683a81df1b6SPaolo Bonzinistub_ss = ss.source_set()
684a81df1b6SPaolo Bonzinitrace_ss = ss.source_set()
6853154fee4SMarc-André Lureaublock_ss = ss.source_set()
6864a96337dSPaolo Bonziniblockdev_ss = ss.source_set()
687ff219dcaSPaolo Bonziniqmp_ss = ss.source_set()
6882becc36aSPaolo Bonzinicommon_ss = ss.source_set()
6892becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set()
6902becc36aSPaolo Bonziniuser_ss = ss.source_set()
6912becc36aSPaolo Bonzinibsd_user_ss = ss.source_set()
6922becc36aSPaolo Bonzinilinux_user_ss = ss.source_set()
6932becc36aSPaolo Bonzinispecific_ss = ss.source_set()
69464ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set()
6952becc36aSPaolo Bonzini
6963154fee4SMarc-André Lureaumodules = {}
6972becc36aSPaolo Bonzinihw_arch = {}
6982becc36aSPaolo Bonzinitarget_arch = {}
6992becc36aSPaolo Bonzinitarget_softmmu_arch = {}
700a81df1b6SPaolo Bonzini
701a81df1b6SPaolo Bonzini###############
702a81df1b6SPaolo Bonzini# Trace files #
703a81df1b6SPaolo Bonzini###############
704a81df1b6SPaolo Bonzini
705c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once
706c9322ab5SMarc-André Lureau# we have those
707a81df1b6SPaolo Bonzinitrace_events_subdirs = [
708a81df1b6SPaolo Bonzini  'accel/kvm',
709a81df1b6SPaolo Bonzini  'accel/tcg',
710a81df1b6SPaolo Bonzini  'crypto',
711a81df1b6SPaolo Bonzini  'monitor',
712a81df1b6SPaolo Bonzini]
713a81df1b6SPaolo Bonziniif have_user
714a81df1b6SPaolo Bonzini  trace_events_subdirs += [ 'linux-user' ]
715a81df1b6SPaolo Bonziniendif
716a81df1b6SPaolo Bonziniif have_block
717a81df1b6SPaolo Bonzini  trace_events_subdirs += [
718a81df1b6SPaolo Bonzini    'authz',
719a81df1b6SPaolo Bonzini    'block',
720a81df1b6SPaolo Bonzini    'io',
721a81df1b6SPaolo Bonzini    'nbd',
722a81df1b6SPaolo Bonzini    'scsi',
723a81df1b6SPaolo Bonzini  ]
724a81df1b6SPaolo Bonziniendif
725a81df1b6SPaolo Bonziniif have_system
726a81df1b6SPaolo Bonzini  trace_events_subdirs += [
727a81df1b6SPaolo Bonzini    'audio',
728a81df1b6SPaolo Bonzini    'backends',
729a81df1b6SPaolo Bonzini    'backends/tpm',
730a81df1b6SPaolo Bonzini    'chardev',
731a81df1b6SPaolo Bonzini    'hw/9pfs',
732a81df1b6SPaolo Bonzini    'hw/acpi',
733a81df1b6SPaolo Bonzini    'hw/alpha',
734a81df1b6SPaolo Bonzini    'hw/arm',
735a81df1b6SPaolo Bonzini    'hw/audio',
736a81df1b6SPaolo Bonzini    'hw/block',
737a81df1b6SPaolo Bonzini    'hw/block/dataplane',
738a81df1b6SPaolo Bonzini    'hw/char',
739a81df1b6SPaolo Bonzini    'hw/display',
740a81df1b6SPaolo Bonzini    'hw/dma',
741a81df1b6SPaolo Bonzini    'hw/hppa',
742a81df1b6SPaolo Bonzini    'hw/hyperv',
743a81df1b6SPaolo Bonzini    'hw/i2c',
744a81df1b6SPaolo Bonzini    'hw/i386',
745a81df1b6SPaolo Bonzini    'hw/i386/xen',
746a81df1b6SPaolo Bonzini    'hw/ide',
747a81df1b6SPaolo Bonzini    'hw/input',
748a81df1b6SPaolo Bonzini    'hw/intc',
749a81df1b6SPaolo Bonzini    'hw/isa',
750a81df1b6SPaolo Bonzini    'hw/mem',
751a81df1b6SPaolo Bonzini    'hw/mips',
752a81df1b6SPaolo Bonzini    'hw/misc',
753a81df1b6SPaolo Bonzini    'hw/misc/macio',
754a81df1b6SPaolo Bonzini    'hw/net',
755a81df1b6SPaolo Bonzini    'hw/nvram',
756a81df1b6SPaolo Bonzini    'hw/pci',
757a81df1b6SPaolo Bonzini    'hw/pci-host',
758a81df1b6SPaolo Bonzini    'hw/ppc',
759a81df1b6SPaolo Bonzini    'hw/rdma',
760a81df1b6SPaolo Bonzini    'hw/rdma/vmw',
761a81df1b6SPaolo Bonzini    'hw/rtc',
762a81df1b6SPaolo Bonzini    'hw/s390x',
763a81df1b6SPaolo Bonzini    'hw/scsi',
764a81df1b6SPaolo Bonzini    'hw/sd',
765a81df1b6SPaolo Bonzini    'hw/sparc',
766a81df1b6SPaolo Bonzini    'hw/sparc64',
767a81df1b6SPaolo Bonzini    'hw/ssi',
768a81df1b6SPaolo Bonzini    'hw/timer',
769a81df1b6SPaolo Bonzini    'hw/tpm',
770a81df1b6SPaolo Bonzini    'hw/usb',
771a81df1b6SPaolo Bonzini    'hw/vfio',
772a81df1b6SPaolo Bonzini    'hw/virtio',
773a81df1b6SPaolo Bonzini    'hw/watchdog',
774a81df1b6SPaolo Bonzini    'hw/xen',
775a81df1b6SPaolo Bonzini    'hw/gpio',
776a81df1b6SPaolo Bonzini    'migration',
777a81df1b6SPaolo Bonzini    'net',
7788b7a5507SPhilippe Mathieu-Daudé    'softmmu',
779a81df1b6SPaolo Bonzini    'ui',
780a81df1b6SPaolo Bonzini  ]
781a81df1b6SPaolo Bonziniendif
782a81df1b6SPaolo Bonzinitrace_events_subdirs += [
783a81df1b6SPaolo Bonzini  'hw/core',
784a81df1b6SPaolo Bonzini  'qapi',
785a81df1b6SPaolo Bonzini  'qom',
786a81df1b6SPaolo Bonzini  'target/arm',
787a81df1b6SPaolo Bonzini  'target/hppa',
788a81df1b6SPaolo Bonzini  'target/i386',
789a81df1b6SPaolo Bonzini  'target/mips',
790a81df1b6SPaolo Bonzini  'target/ppc',
791a81df1b6SPaolo Bonzini  'target/riscv',
792a81df1b6SPaolo Bonzini  'target/s390x',
793a81df1b6SPaolo Bonzini  'target/sparc',
794a81df1b6SPaolo Bonzini  'util',
795a81df1b6SPaolo Bonzini]
796a81df1b6SPaolo Bonzini
797a81df1b6SPaolo Bonzinisubdir('qapi')
798a81df1b6SPaolo Bonzinisubdir('qobject')
799a81df1b6SPaolo Bonzinisubdir('stubs')
800a81df1b6SPaolo Bonzinisubdir('trace')
801a81df1b6SPaolo Bonzinisubdir('util')
8025582c58fSMarc-André Lureausubdir('qom')
8035582c58fSMarc-André Lureausubdir('authz')
804a81df1b6SPaolo Bonzinisubdir('crypto')
8052d78b56eSMarc-André Lureausubdir('ui')
806a81df1b6SPaolo Bonzini
8073154fee4SMarc-André Lureau
8083154fee4SMarc-André Lureauif enable_modules
8093154fee4SMarc-André Lureau  libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO')
8103154fee4SMarc-André Lureau  modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO')
8113154fee4SMarc-André Lureauendif
8123154fee4SMarc-André Lureau
813a81df1b6SPaolo Bonzini# Build targets from sourcesets
814a81df1b6SPaolo Bonzini
8152becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false)
816a81df1b6SPaolo Bonzini
817a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss)
8182becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false)
819a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil',
820a81df1b6SPaolo Bonzini                             sources: util_ss.sources() + stub_ss.sources() + genh,
821a81df1b6SPaolo Bonzini                             dependencies: [util_ss.dependencies(), m, glib, socket])
822a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil,
82304c6f1e7SMarc-André Lureau                              sources: genh + version_res)
824a81df1b6SPaolo Bonzini
825abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'),
826abff1abfSPaolo Bonzini                       output: 'decode-@BASENAME@.c.inc',
827abff1abfSPaolo Bonzini                       arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@'])
828abff1abfSPaolo Bonzini
829478e943fSPaolo Bonzinisubdir('audio')
8307fcfd456SMarc-André Lureausubdir('io')
831848e8ff6SMarc-André Lureausubdir('chardev')
832ec0d5893SMarc-André Lureausubdir('fsdev')
833abff1abfSPaolo Bonzinisubdir('libdecnumber')
834d3b18480SMarc-André Lureausubdir('target')
835708eab42SMarc-André Lureausubdir('dump')
836ec0d5893SMarc-André Lureau
8375e5733e5SMarc-André Lureaublock_ss.add(files(
8385e5733e5SMarc-André Lureau  'block.c',
8395e5733e5SMarc-André Lureau  'blockjob.c',
8405e5733e5SMarc-André Lureau  'job.c',
8415e5733e5SMarc-André Lureau  'qemu-io-cmds.c',
8425e5733e5SMarc-André Lureau))
8435e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c'))
8445e5733e5SMarc-André Lureau
8455e5733e5SMarc-André Lureausubdir('nbd')
8465e5733e5SMarc-André Lureausubdir('scsi')
8475e5733e5SMarc-André Lureausubdir('block')
8485e5733e5SMarc-André Lureau
8494a96337dSPaolo Bonziniblockdev_ss.add(files(
8504a96337dSPaolo Bonzini  'blockdev.c',
8514a96337dSPaolo Bonzini  'blockdev-nbd.c',
8524a96337dSPaolo Bonzini  'iothread.c',
8534a96337dSPaolo Bonzini  'job-qmp.c',
8544a96337dSPaolo Bonzini))
8554a96337dSPaolo Bonzini
8564a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon,
8574a96337dSPaolo Bonzini# os-win32.c does not
8584a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c'))
8594a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')])
8604a96337dSPaolo Bonzini
8614a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss)
8624a96337dSPaolo Bonzinisoftmmu_ss.add(files(
8634a96337dSPaolo Bonzini  'bootdevice.c',
8644a96337dSPaolo Bonzini  'dma-helpers.c',
8654a96337dSPaolo Bonzini  'qdev-monitor.c',
8664a96337dSPaolo Bonzini), sdl)
8674a96337dSPaolo Bonzini
8684a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c'))
8694a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp])
8704a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt],  if_true: [files('device_tree.c')])
8714a96337dSPaolo Bonzini
8724a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c'))
8734a96337dSPaolo Bonzini
8745d3ea0e1SPaolo Bonzinisubdir('softmmu')
875c9322ab5SMarc-André Lureau
876c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl)
877c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c'))
878c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files(
879c9322ab5SMarc-André Lureau  'fpu/softfloat.c',
880c9322ab5SMarc-André Lureau  'tcg/optimize.c',
881c9322ab5SMarc-André Lureau  'tcg/tcg-common.c',
882c9322ab5SMarc-André Lureau  'tcg/tcg-op-gvec.c',
883c9322ab5SMarc-André Lureau  'tcg/tcg-op-vec.c',
884c9322ab5SMarc-André Lureau  'tcg/tcg-op.c',
885c9322ab5SMarc-André Lureau  'tcg/tcg.c',
886c9322ab5SMarc-André Lureau))
887c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c'))
888c9322ab5SMarc-André Lureau
889ab318051SMarc-André Lureausubdir('backends')
890c574e161SMarc-André Lureausubdir('disas')
89155166230SMarc-André Lureausubdir('migration')
892ff219dcaSPaolo Bonzinisubdir('monitor')
893cdaf0722SMarc-André Lureausubdir('net')
89417ef2af6SMarc-André Lureausubdir('replay')
895582ea95fSMarc-André Lureausubdir('hw')
8961a82878aSMarc-André Lureausubdir('accel')
897f556b4a1SPaolo Bonzinisubdir('plugins')
898b309c321SMarc-André Lureausubdir('bsd-user')
8993a30446aSMarc-André Lureausubdir('linux-user')
9003a30446aSMarc-André Lureau
901b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c'))
902b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss)
903b309c321SMarc-André Lureau
9043a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c'))
9053a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss)
9065d3ea0e1SPaolo Bonzini
907a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries
908a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos')
90964ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz')
910a2ce7dbdSPaolo Bonzini
9113154fee4SMarc-André Lureaublock_mods = []
9123154fee4SMarc-André Lureausoftmmu_mods = []
9133154fee4SMarc-André Lureauforeach d, list : modules
9143154fee4SMarc-André Lureau  foreach m, module_ss : list
9153154fee4SMarc-André Lureau    if enable_modules and targetos != 'windows'
916*3e292c51SGerd Hoffmann      module_ss = module_ss.apply(config_all, strict: false)
9173154fee4SMarc-André Lureau      sl = static_library(d + '-' + m, [genh, module_ss.sources()],
9183154fee4SMarc-André Lureau                          dependencies: [modulecommon, module_ss.dependencies()], pic: true)
9193154fee4SMarc-André Lureau      if d == 'block'
9203154fee4SMarc-André Lureau        block_mods += sl
9213154fee4SMarc-André Lureau      else
9223154fee4SMarc-André Lureau        softmmu_mods += sl
9233154fee4SMarc-André Lureau      endif
9243154fee4SMarc-André Lureau    else
9253154fee4SMarc-André Lureau      if d == 'block'
9263154fee4SMarc-André Lureau        block_ss.add_all(module_ss)
9273154fee4SMarc-André Lureau      else
9283154fee4SMarc-André Lureau        softmmu_ss.add_all(module_ss)
9293154fee4SMarc-André Lureau      endif
9303154fee4SMarc-André Lureau    endif
9313154fee4SMarc-André Lureau  endforeach
9323154fee4SMarc-André Lureauendforeach
9333154fee4SMarc-André Lureau
9343154fee4SMarc-André Lureaunm = find_program('nm')
935604f3e4eSYonggang Luoundefsym = find_program('scripts/undefsym.py')
9363154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms',
9373154fee4SMarc-André Lureau                             input: [libqemuutil, block_mods],
9383154fee4SMarc-André Lureau                             capture: true,
9393154fee4SMarc-André Lureau                             command: [undefsym, nm, '@INPUT@'])
9403154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms',
9413154fee4SMarc-André Lureau                             input: [libqemuutil, softmmu_mods],
9423154fee4SMarc-André Lureau                             capture: true,
9433154fee4SMarc-André Lureau                             command: [undefsym, nm, '@INPUT@'])
9443154fee4SMarc-André Lureau
9455e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false)
9465e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh,
9475e5733e5SMarc-André Lureau                          dependencies: block_ss.dependencies(),
9485e5733e5SMarc-André Lureau                          link_depends: block_syms,
9495e5733e5SMarc-André Lureau                          name_suffix: 'fa',
9505e5733e5SMarc-André Lureau                          build_by_default: false)
9515e5733e5SMarc-André Lureau
9525e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock],
953b7c70bf2SMarc-André Lureau                           link_args: '@block.syms',
954b7c70bf2SMarc-André Lureau                           dependencies: [crypto, io])
9555e5733e5SMarc-André Lureau
956ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false)
957ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh,
958ff219dcaSPaolo Bonzini                        dependencies: qmp_ss.dependencies(),
959ff219dcaSPaolo Bonzini                        name_suffix: 'fa',
960ff219dcaSPaolo Bonzini                        build_by_default: false)
961ff219dcaSPaolo Bonzini
962ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp])
963ff219dcaSPaolo Bonzini
9643154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods
9653154fee4SMarc-André Lureau  shared_module(m.name(),
9663154fee4SMarc-André Lureau                name_prefix: '',
9673154fee4SMarc-André Lureau                link_whole: m,
9683154fee4SMarc-André Lureau                install: true,
9693154fee4SMarc-André Lureau                install_dir: config_host['qemu_moddir'])
9703154fee4SMarc-André Lureauendforeach
9713154fee4SMarc-André Lureau
97264ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp)
97364ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil)
97464ed6f92SPaolo Bonzini
97564ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss])
9762becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss)
9772becc36aSPaolo Bonzini
9782becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false)
9792becc36aSPaolo Bonzinicommon_all = static_library('common',
9802becc36aSPaolo Bonzini                            build_by_default: false,
9812becc36aSPaolo Bonzini                            sources: common_all.sources() + genh,
9822becc36aSPaolo Bonzini                            dependencies: common_all.dependencies(),
9832becc36aSPaolo Bonzini                            name_suffix: 'fa')
9842becc36aSPaolo Bonzini
985c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh')
986c9322ab5SMarc-André Lureau
98764ed6f92SPaolo Bonziniemulators = []
9882becc36aSPaolo Bonziniforeach target : target_dirs
9892becc36aSPaolo Bonzini  config_target = config_target_mak[target]
9902becc36aSPaolo Bonzini  target_name = config_target['TARGET_NAME']
9912becc36aSPaolo Bonzini  arch = config_target['TARGET_BASE_ARCH']
992859aef02SPaolo Bonzini  arch_srcs = [config_target_h[target]]
99364ed6f92SPaolo Bonzini  arch_deps = []
99464ed6f92SPaolo Bonzini  c_args = ['-DNEED_CPU_H',
99564ed6f92SPaolo Bonzini            '-DCONFIG_TARGET="@0@-config-target.h"'.format(target),
99664ed6f92SPaolo Bonzini            '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)]
99764ed6f92SPaolo Bonzini  link_args = []
9982becc36aSPaolo Bonzini
999859aef02SPaolo Bonzini  config_target += config_host
10002becc36aSPaolo Bonzini  target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
10012becc36aSPaolo Bonzini  if targetos == 'linux'
10022becc36aSPaolo Bonzini    target_inc += include_directories('linux-headers', is_system: true)
10032becc36aSPaolo Bonzini  endif
10042becc36aSPaolo Bonzini  if target.endswith('-softmmu')
10052becc36aSPaolo Bonzini    qemu_target_name = 'qemu-system-' + target_name
10062becc36aSPaolo Bonzini    target_type='system'
1007abff1abfSPaolo Bonzini    t = target_softmmu_arch[arch].apply(config_target, strict: false)
1008abff1abfSPaolo Bonzini    arch_srcs += t.sources()
100964ed6f92SPaolo Bonzini    arch_deps += t.dependencies()
1010abff1abfSPaolo Bonzini
10112c44220dSMarc-André Lureau    hw_dir = target_name == 'sparc64' ? 'sparc64' : arch
10122c44220dSMarc-André Lureau    hw = hw_arch[hw_dir].apply(config_target, strict: false)
10132c44220dSMarc-André Lureau    arch_srcs += hw.sources()
101464ed6f92SPaolo Bonzini    arch_deps += hw.dependencies()
10152c44220dSMarc-André Lureau
10162becc36aSPaolo Bonzini    arch_srcs += config_devices_h[target]
101764ed6f92SPaolo Bonzini    link_args += ['@block.syms', '@qemu.syms']
10182becc36aSPaolo Bonzini  else
10193a30446aSMarc-André Lureau    abi = config_target['TARGET_ABI_DIR']
10202becc36aSPaolo Bonzini    target_type='user'
10212becc36aSPaolo Bonzini    qemu_target_name = 'qemu-' + target_name
10222becc36aSPaolo Bonzini    if 'CONFIG_LINUX_USER' in config_target
10232becc36aSPaolo Bonzini      base_dir = 'linux-user'
10242becc36aSPaolo Bonzini      target_inc += include_directories('linux-user/host/' / config_host['ARCH'])
10252becc36aSPaolo Bonzini    else
10262becc36aSPaolo Bonzini      base_dir = 'bsd-user'
10272becc36aSPaolo Bonzini    endif
10282becc36aSPaolo Bonzini    target_inc += include_directories(
10292becc36aSPaolo Bonzini      base_dir,
10303a30446aSMarc-André Lureau      base_dir / abi,
10312becc36aSPaolo Bonzini    )
10323a30446aSMarc-André Lureau    if 'CONFIG_LINUX_USER' in config_target
10333a30446aSMarc-André Lureau      dir = base_dir / abi
10343a30446aSMarc-André Lureau      arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c')
10353a30446aSMarc-André Lureau      if config_target.has_key('TARGET_SYSTBL_ABI')
10363a30446aSMarc-André Lureau        arch_srcs += \
10373a30446aSMarc-André Lureau          syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'],
10383a30446aSMarc-André Lureau                                             extra_args : config_target['TARGET_SYSTBL_ABI'])
10393a30446aSMarc-André Lureau      endif
10403a30446aSMarc-André Lureau    endif
10412becc36aSPaolo Bonzini  endif
10422becc36aSPaolo Bonzini
1043c9322ab5SMarc-André Lureau  if 'TARGET_XML_FILES' in config_target
1044c9322ab5SMarc-André Lureau    gdbstub_xml = custom_target(target + '-gdbstub-xml.c',
1045c9322ab5SMarc-André Lureau                                output: target + '-gdbstub-xml.c',
1046c9322ab5SMarc-André Lureau                                input: files(config_target['TARGET_XML_FILES'].split()),
1047c9322ab5SMarc-André Lureau                                command: [feature_to_c, '@INPUT@'],
1048c9322ab5SMarc-André Lureau                                capture: true)
1049c9322ab5SMarc-André Lureau    arch_srcs += gdbstub_xml
1050c9322ab5SMarc-André Lureau  endif
1051c9322ab5SMarc-André Lureau
1052abff1abfSPaolo Bonzini  t = target_arch[arch].apply(config_target, strict: false)
1053abff1abfSPaolo Bonzini  arch_srcs += t.sources()
105464ed6f92SPaolo Bonzini  arch_deps += t.dependencies()
1055abff1abfSPaolo Bonzini
10562becc36aSPaolo Bonzini  target_common = common_ss.apply(config_target, strict: false)
10572becc36aSPaolo Bonzini  objects = common_all.extract_objects(target_common.sources())
105864ed6f92SPaolo Bonzini  deps = target_common.dependencies()
10592becc36aSPaolo Bonzini
10602becc36aSPaolo Bonzini  target_specific = specific_ss.apply(config_target, strict: false)
10612becc36aSPaolo Bonzini  arch_srcs += target_specific.sources()
106264ed6f92SPaolo Bonzini  arch_deps += target_specific.dependencies()
10632becc36aSPaolo Bonzini
106464ed6f92SPaolo Bonzini  lib = static_library('qemu-' + target,
1065859aef02SPaolo Bonzini                 sources: arch_srcs + genh,
1066b7612f45SPaolo Bonzini                 dependencies: arch_deps,
10672becc36aSPaolo Bonzini                 objects: objects,
10682becc36aSPaolo Bonzini                 include_directories: target_inc,
106964ed6f92SPaolo Bonzini                 c_args: c_args,
107064ed6f92SPaolo Bonzini                 build_by_default: false,
10712becc36aSPaolo Bonzini                 name_suffix: 'fa')
107264ed6f92SPaolo Bonzini
107364ed6f92SPaolo Bonzini  if target.endswith('-softmmu')
107464ed6f92SPaolo Bonzini    execs = [{
107564ed6f92SPaolo Bonzini      'name': 'qemu-system-' + target_name,
107664ed6f92SPaolo Bonzini      'gui': false,
107764ed6f92SPaolo Bonzini      'sources': files('softmmu/main.c'),
107864ed6f92SPaolo Bonzini      'dependencies': []
107964ed6f92SPaolo Bonzini    }]
108035be72baSPaolo Bonzini    if targetos == 'windows' and (sdl.found() or gtk.found())
108164ed6f92SPaolo Bonzini      execs += [{
108264ed6f92SPaolo Bonzini        'name': 'qemu-system-' + target_name + 'w',
108364ed6f92SPaolo Bonzini        'gui': true,
108464ed6f92SPaolo Bonzini        'sources': files('softmmu/main.c'),
108564ed6f92SPaolo Bonzini        'dependencies': []
108664ed6f92SPaolo Bonzini      }]
108764ed6f92SPaolo Bonzini    endif
108864ed6f92SPaolo Bonzini    if config_host.has_key('CONFIG_FUZZ')
108964ed6f92SPaolo Bonzini      specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false)
109064ed6f92SPaolo Bonzini      execs += [{
109164ed6f92SPaolo Bonzini        'name': 'qemu-fuzz-' + target_name,
109264ed6f92SPaolo Bonzini        'gui': false,
109364ed6f92SPaolo Bonzini        'sources': specific_fuzz.sources(),
109464ed6f92SPaolo Bonzini        'dependencies': specific_fuzz.dependencies(),
109564ed6f92SPaolo Bonzini      }]
109664ed6f92SPaolo Bonzini    endif
109764ed6f92SPaolo Bonzini  else
109864ed6f92SPaolo Bonzini    execs = [{
109964ed6f92SPaolo Bonzini      'name': 'qemu-' + target_name,
110064ed6f92SPaolo Bonzini      'gui': false,
110164ed6f92SPaolo Bonzini      'sources': [],
110264ed6f92SPaolo Bonzini      'dependencies': []
110364ed6f92SPaolo Bonzini    }]
110464ed6f92SPaolo Bonzini  endif
110564ed6f92SPaolo Bonzini  foreach exe: execs
110664ed6f92SPaolo Bonzini    emulators += executable(exe['name'], exe['sources'],
110764ed6f92SPaolo Bonzini               install: true,
110864ed6f92SPaolo Bonzini               c_args: c_args,
110964ed6f92SPaolo Bonzini               dependencies: arch_deps + deps + exe['dependencies'],
111064ed6f92SPaolo Bonzini               objects: lib.extract_all_objects(recursive: true),
111164ed6f92SPaolo Bonzini               link_language: link_language,
111264ed6f92SPaolo Bonzini               link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []),
111364ed6f92SPaolo Bonzini               link_args: link_args,
111464ed6f92SPaolo Bonzini               gui_app: exe['gui'])
111510e1d263SMarc-André Lureau
111610e1d263SMarc-André Lureau    if 'CONFIG_TRACE_SYSTEMTAP' in config_host
111710e1d263SMarc-André Lureau      foreach stp: [
1118bd5f973aSStefan Hajnoczi        {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false},
1119bd5f973aSStefan Hajnoczi        {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true},
112010e1d263SMarc-André Lureau        {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true},
112110e1d263SMarc-André Lureau        {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true},
112210e1d263SMarc-André Lureau      ]
1123bd5f973aSStefan Hajnoczi        custom_target(exe['name'] + stp['ext'],
112410e1d263SMarc-André Lureau                      input: trace_events_all,
1125bd5f973aSStefan Hajnoczi                      output: exe['name'] + stp['ext'],
112610e1d263SMarc-André Lureau                      capture: true,
112710e1d263SMarc-André Lureau                      install: stp['install'],
1128ab4c0996SMarc-André Lureau                      install_dir: qemu_datadir / '../systemtap/tapset',
112910e1d263SMarc-André Lureau                      command: [
113010e1d263SMarc-André Lureau                        tracetool, '--group=all', '--format=' + stp['fmt'],
113110e1d263SMarc-André Lureau                        '--binary=' + stp['bin'],
113210e1d263SMarc-André Lureau                        '--target-name=' + target_name,
113310e1d263SMarc-André Lureau                        '--target-type=' + target_type,
113410e1d263SMarc-André Lureau                        '--probe-prefix=qemu.' + target_type + '.' + target_name,
113510e1d263SMarc-André Lureau                        '@INPUT@',
113610e1d263SMarc-André Lureau                      ])
113710e1d263SMarc-André Lureau      endforeach
113810e1d263SMarc-André Lureau    endif
113964ed6f92SPaolo Bonzini  endforeach
11402becc36aSPaolo Bonziniendforeach
11412becc36aSPaolo Bonzini
1142931049b4SPaolo Bonzini# Other build targets
1143897b5afaSMarc-André Lureau
1144f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host
1145f556b4a1SPaolo Bonzini  install_headers('include/qemu/qemu-plugin.h')
1146f556b4a1SPaolo Bonziniendif
1147f556b4a1SPaolo Bonzini
1148f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host
1149f15bff25SPaolo Bonzini  subdir('qga')
1150f15bff25SPaolo Bonziniendif
1151f15bff25SPaolo Bonzini
11529755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled
11539755c94aSLaurent Vivier# when we don't build tools or system
11544113f4cfSLaurent Vivierif xkbcommon.found()
115528742467SMarc-André Lureau  # used for the update-keymaps target, so include rules even if !have_tools
115628742467SMarc-André Lureau  qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh,
115728742467SMarc-André Lureau                           dependencies: [qemuutil, xkbcommon], install: have_tools)
115828742467SMarc-André Lureauendif
115928742467SMarc-André Lureau
11608855e8f0SPhilippe Mathieu-Daudéqemu_block_tools = []
1161931049b4SPaolo Bonziniif have_tools
1162b7c70bf2SMarc-André Lureau  qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep],
1163b7c70bf2SMarc-André Lureau             dependencies: [authz, block, crypto, io, qom, qemuutil], install: true)
1164b7c70bf2SMarc-André Lureau  qemu_io = executable('qemu-io', files('qemu-io.c'),
1165b7c70bf2SMarc-André Lureau             dependencies: [block, qemuutil], install: true)
1166b7c70bf2SMarc-André Lureau  qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'),
1167b7c70bf2SMarc-André Lureau               dependencies: [block, qemuutil], install: true)
1168b7c70bf2SMarc-André Lureau
11697c58bb76SPaolo Bonzini  subdir('storage-daemon')
1170a9c9727cSPaolo Bonzini  subdir('contrib/rdmacm-mux')
11711d7bb6abSMarc-André Lureau  subdir('contrib/elf2dmp')
1172a9c9727cSPaolo Bonzini
1173157e7b13SMarc-André Lureau  executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'),
1174157e7b13SMarc-André Lureau             dependencies: qemuutil,
1175157e7b13SMarc-André Lureau             install: true)
1176157e7b13SMarc-André Lureau
1177931049b4SPaolo Bonzini  if 'CONFIG_VHOST_USER' in config_host
1178931049b4SPaolo Bonzini    subdir('contrib/libvhost-user')
11792d7ac0afSPaolo Bonzini    subdir('contrib/vhost-user-blk')
1180ea458960SMarc-André Lureau    subdir('contrib/vhost-user-gpu')
118132fcc624SMarc-André Lureau    subdir('contrib/vhost-user-input')
118299650b62SPaolo Bonzini    subdir('contrib/vhost-user-scsi')
1183931049b4SPaolo Bonzini  endif
11848f51e01cSMarc-André Lureau
11858f51e01cSMarc-André Lureau  if targetos == 'linux'
11868f51e01cSMarc-André Lureau    executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
11878f51e01cSMarc-André Lureau               dependencies: [qemuutil, libcap_ng],
11888f51e01cSMarc-André Lureau               install: true,
11898f51e01cSMarc-André Lureau               install_dir: get_option('libexecdir'))
1190897b5afaSMarc-André Lureau
1191897b5afaSMarc-André Lureau    executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'),
1192897b5afaSMarc-André Lureau               dependencies: [authz, crypto, io, qom, qemuutil,
1193897b5afaSMarc-André Lureau                              libcap_ng, libudev, libmpathpersist],
1194897b5afaSMarc-André Lureau               install: true)
11958f51e01cSMarc-André Lureau  endif
11968f51e01cSMarc-André Lureau
11975ee24e78SMarc-André Lureau  if 'CONFIG_IVSHMEM' in config_host
11985ee24e78SMarc-André Lureau    subdir('contrib/ivshmem-client')
11995ee24e78SMarc-André Lureau    subdir('contrib/ivshmem-server')
12005ee24e78SMarc-André Lureau  endif
1201931049b4SPaolo Bonziniendif
1202931049b4SPaolo Bonzini
1203f5aa6320SMarc-André Lureausubdir('scripts')
12043f99cf57SPaolo Bonzinisubdir('tools')
1205bdcbea7aSMarc-André Lureausubdir('pc-bios')
1206ce1c1e7aSPaolo Bonzinisubdir('tests')
1207f8aa24eaSPaolo Bonzinisubdir('docs')
1208e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host
1209e8f3bd71SMarc-André Lureau  subdir('po')
1210e8f3bd71SMarc-André Lureauendif
12113f99cf57SPaolo Bonzini
1212acfdaac5SPaolo Bonziniif build_docs
1213acfdaac5SPaolo Bonzini  makeinfo = find_program('makeinfo', required: build_docs)
1214acfdaac5SPaolo Bonzini
1215acfdaac5SPaolo Bonzini  docs_inc = [
1216acfdaac5SPaolo Bonzini    '-I', meson.current_source_dir(),
1217acfdaac5SPaolo Bonzini    '-I', meson.current_build_dir() / 'docs',
1218acfdaac5SPaolo Bonzini    '-I', '@OUTDIR@',
1219acfdaac5SPaolo Bonzini  ]
1220acfdaac5SPaolo Bonzini
1221acfdaac5SPaolo Bonzini  version_texi = configure_file(output: 'version.texi',
1222acfdaac5SPaolo Bonzini                              input: 'version.texi.in',
1223acfdaac5SPaolo Bonzini                              configuration: {'VERSION': meson.project_version(),
1224acfdaac5SPaolo Bonzini                                              'qemu_confdir': config_host['qemu_confdir']})
1225acfdaac5SPaolo Bonzini
1226acfdaac5SPaolo Bonzini  texi = {
1227acfdaac5SPaolo Bonzini    'qemu-qmp-ref': ['docs/interop/qemu-qmp-ref.texi', qapi_doc_texi, version_texi],
1228acfdaac5SPaolo Bonzini  }
1229acfdaac5SPaolo Bonzini  if 'CONFIG_GUEST_AGENT' in config_host
1230acfdaac5SPaolo Bonzini    texi += {'qemu-ga-ref': ['docs/interop/qemu-ga-ref.texi', qga_qapi_doc_texi, version_texi]}
1231acfdaac5SPaolo Bonzini  endif
1232acfdaac5SPaolo Bonzini
1233acfdaac5SPaolo Bonzini  if makeinfo.found()
1234acfdaac5SPaolo Bonzini    cmd = [
1235acfdaac5SPaolo Bonzini      'env', 'LC_ALL=C', makeinfo, '--no-split', '--number-sections', docs_inc,
1236acfdaac5SPaolo Bonzini      '@INPUT0@', '-o', '@OUTPUT@',
1237acfdaac5SPaolo Bonzini    ]
1238acfdaac5SPaolo Bonzini    foreach ext, args: {
1239acfdaac5SPaolo Bonzini        'info': [],
1240acfdaac5SPaolo Bonzini        'html': ['--no-headers', '--html'],
1241acfdaac5SPaolo Bonzini        'txt': ['--no-headers', '--plaintext'],
1242acfdaac5SPaolo Bonzini    }
1243acfdaac5SPaolo Bonzini      t = []
1244acfdaac5SPaolo Bonzini      foreach doc, input: texi
1245acfdaac5SPaolo Bonzini        output = doc + '.' + ext
1246acfdaac5SPaolo Bonzini        t += custom_target(output,
1247acfdaac5SPaolo Bonzini                      input: input,
1248acfdaac5SPaolo Bonzini                      output: output,
1249acfdaac5SPaolo Bonzini                      install: true,
1250491e74c1SMarc-André Lureau                      install_dir: qemu_docdir / 'interop',
1251acfdaac5SPaolo Bonzini                      command: cmd + args)
1252acfdaac5SPaolo Bonzini      endforeach
1253acfdaac5SPaolo Bonzini      alias_target(ext, t)
1254acfdaac5SPaolo Bonzini    endforeach
1255acfdaac5SPaolo Bonzini  endif
1256acfdaac5SPaolo Bonzini
1257acfdaac5SPaolo Bonzini  texi2pdf = find_program('texi2pdf', required: false)
1258acfdaac5SPaolo Bonzini
1259acfdaac5SPaolo Bonzini  if texi2pdf.found()
1260acfdaac5SPaolo Bonzini    pdfs = []
1261acfdaac5SPaolo Bonzini    foreach doc, input: texi
1262acfdaac5SPaolo Bonzini      output = doc + '.pdf'
1263acfdaac5SPaolo Bonzini      pdfs += custom_target(output,
1264acfdaac5SPaolo Bonzini                    input: input,
1265acfdaac5SPaolo Bonzini                    output: output,
1266acfdaac5SPaolo Bonzini                    command: [texi2pdf, '-q', docs_inc, '@INPUT0@', '-o', '@OUTPUT@'],
1267acfdaac5SPaolo Bonzini                    build_by_default: false)
1268acfdaac5SPaolo Bonzini    endforeach
1269acfdaac5SPaolo Bonzini    alias_target('pdf', pdfs)
1270acfdaac5SPaolo Bonzini  endif
1271acfdaac5SPaolo Bonzini
1272acfdaac5SPaolo Bonzini  texi2pod = find_program('scripts/texi2pod.pl')
1273acfdaac5SPaolo Bonzini  pod2man = find_program('pod2man', required: build_docs)
1274acfdaac5SPaolo Bonzini
1275acfdaac5SPaolo Bonzini  if pod2man.found()
1276acfdaac5SPaolo Bonzini    foreach doc, input: texi
1277acfdaac5SPaolo Bonzini      man = doc + '.7'
1278acfdaac5SPaolo Bonzini      pod = custom_target(man + '.pod',
1279acfdaac5SPaolo Bonzini                          input: input,
1280acfdaac5SPaolo Bonzini                          output: man + '.pod',
1281acfdaac5SPaolo Bonzini                          command: [texi2pod,
1282acfdaac5SPaolo Bonzini                                    '-DVERSION="' + meson.project_version() + '"',
1283acfdaac5SPaolo Bonzini                                    '-DCONFDIR="' + config_host['qemu_confdir'] + '"',
1284acfdaac5SPaolo Bonzini                                    '@INPUT0@', '@OUTPUT@'])
1285acfdaac5SPaolo Bonzini      man = custom_target(man,
1286acfdaac5SPaolo Bonzini                          input: pod,
1287acfdaac5SPaolo Bonzini                          output: man,
1288acfdaac5SPaolo Bonzini                          capture: true,
1289acfdaac5SPaolo Bonzini                          install: true,
1290b81efab7SMarc-André Lureau                          install_dir: get_option('mandir') / 'man7',
1291acfdaac5SPaolo Bonzini                          command: [pod2man, '--utf8', '--section=7', '--center=" "',
1292acfdaac5SPaolo Bonzini                                    '--release=" "', '@INPUT@'])
1293acfdaac5SPaolo Bonzini    endforeach
1294acfdaac5SPaolo Bonzini  endif
1295acfdaac5SPaolo Bonziniendif
1296acfdaac5SPaolo Bonzini
12978adfeba9SMarc-André Lureauif host_machine.system() == 'windows'
12988adfeba9SMarc-André Lureau  nsis_cmd = [
12998adfeba9SMarc-André Lureau    find_program('scripts/nsis.py'),
13008adfeba9SMarc-André Lureau    '@OUTPUT@',
13018adfeba9SMarc-André Lureau    get_option('prefix'),
13028adfeba9SMarc-André Lureau    meson.current_source_dir(),
13038adfeba9SMarc-André Lureau    host_machine.cpu_family(),
13048adfeba9SMarc-André Lureau    '--',
13058adfeba9SMarc-André Lureau    '-DDISPLAYVERSION=' + meson.project_version(),
13068adfeba9SMarc-André Lureau  ]
13078adfeba9SMarc-André Lureau  if build_docs
13088adfeba9SMarc-André Lureau    nsis_cmd += '-DCONFIG_DOCUMENTATION=y'
13098adfeba9SMarc-André Lureau  endif
13108adfeba9SMarc-André Lureau  if 'CONFIG_GTK' in config_host
13118adfeba9SMarc-André Lureau    nsis_cmd += '-DCONFIG_GTK=y'
13128adfeba9SMarc-André Lureau  endif
13138adfeba9SMarc-André Lureau
13148adfeba9SMarc-André Lureau  nsis = custom_target('nsis',
13158adfeba9SMarc-André Lureau                       output: 'qemu-setup-' + meson.project_version() + '.exe',
13168adfeba9SMarc-André Lureau                       input: files('qemu.nsi'),
13178adfeba9SMarc-André Lureau                       build_always_stale: true,
13188adfeba9SMarc-André Lureau                       command: nsis_cmd + ['@INPUT@'])
13198adfeba9SMarc-André Lureau  alias_target('installer', nsis)
13208adfeba9SMarc-André Lureauendif
13218adfeba9SMarc-André Lureau
1322f9332757SPaolo Bonzinisummary_info = {}
1323f9332757SPaolo Bonzinisummary_info += {'Install prefix':    config_host['prefix']}
1324f9332757SPaolo Bonzinisummary_info += {'BIOS directory':    config_host['qemu_datadir']}
1325f9332757SPaolo Bonzinisummary_info += {'firmware path':     config_host['qemu_firmwarepath']}
1326f9332757SPaolo Bonzinisummary_info += {'binary directory':  config_host['bindir']}
1327f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']}
1328f9332757SPaolo Bonzinisummary_info += {'module directory':  config_host['qemu_moddir']}
1329f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']}
1330f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']}
1331f9332757SPaolo Bonzinisummary_info += {'config directory':  config_host['sysconfdir']}
1332f9332757SPaolo Bonziniif targetos != 'windows'
1333f9332757SPaolo Bonzini  summary_info += {'local state directory': config_host['qemu_localstatedir']}
1334b81efab7SMarc-André Lureau  summary_info += {'Manual directory':      get_option('mandir')}
1335f9332757SPaolo Bonzinielse
1336f9332757SPaolo Bonzini  summary_info += {'local state directory': 'queried at runtime'}
1337f9332757SPaolo Bonziniendif
1338491e74c1SMarc-André Lureausummary_info += {'Doc directory':     get_option('docdir')}
1339f9332757SPaolo Bonzinisummary_info += {'Build directory':   meson.current_build_dir()}
1340f9332757SPaolo Bonzinisummary_info += {'Source path':       meson.current_source_dir()}
1341f9332757SPaolo Bonzinisummary_info += {'GIT binary':        config_host['GIT']}
1342f9332757SPaolo Bonzinisummary_info += {'GIT submodules':    config_host['GIT_SUBMODULES']}
1343f9332757SPaolo Bonzinisummary_info += {'C compiler':        meson.get_compiler('c').cmd_array()[0]}
1344f9332757SPaolo Bonzinisummary_info += {'Host C compiler':   meson.get_compiler('c', native: true).cmd_array()[0]}
1345f9332757SPaolo Bonziniif link_language == 'cpp'
1346f9332757SPaolo Bonzini  summary_info += {'C++ compiler':      meson.get_compiler('cpp').cmd_array()[0]}
1347f9332757SPaolo Bonzinielse
1348f9332757SPaolo Bonzini  summary_info += {'C++ compiler':      false}
1349f9332757SPaolo Bonziniendif
1350f9332757SPaolo Bonziniif targetos == 'darwin'
1351f9332757SPaolo Bonzini  summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
1352f9332757SPaolo Bonziniendif
1353f9332757SPaolo Bonzinisummary_info += {'ARFLAGS':           config_host['ARFLAGS']}
1354f9332757SPaolo Bonzinisummary_info += {'CFLAGS':            config_host['CFLAGS']}
1355f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS':       config_host['QEMU_CFLAGS']}
1356f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS':      config_host['QEMU_LDFLAGS']}
1357f9332757SPaolo Bonzinisummary_info += {'make':              config_host['MAKE']}
1358f9332757SPaolo Bonzinisummary_info += {'python':            '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
1359f9332757SPaolo Bonzinisummary_info += {'sphinx-build':      config_host['SPHINX_BUILD']}
1360f9332757SPaolo Bonzinisummary_info += {'genisoimage':       config_host['GENISOIMAGE']}
1361f9332757SPaolo Bonzini# TODO: add back version
1362f9332757SPaolo Bonzinisummary_info += {'slirp support':     config_host.has_key('CONFIG_SLIRP')}
1363f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP')
1364f9332757SPaolo Bonzini  summary_info += {'smbd':            config_host['CONFIG_SMBD_COMMAND']}
1365f9332757SPaolo Bonziniendif
1366f9332757SPaolo Bonzinisummary_info += {'module support':    config_host.has_key('CONFIG_MODULES')}
1367f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES')
1368f9332757SPaolo Bonzini  summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
1369f9332757SPaolo Bonziniendif
1370f9332757SPaolo Bonzinisummary_info += {'host CPU':          cpu}
1371f9332757SPaolo Bonzinisummary_info += {'host endianness':   build_machine.endian()}
1372f9332757SPaolo Bonzinisummary_info += {'target list':       config_host['TARGET_DIRS']}
1373f9332757SPaolo Bonzinisummary_info += {'gprof enabled':     config_host.has_key('CONFIG_GPROF')}
1374f9332757SPaolo Bonzinisummary_info += {'sparse enabled':    meson.get_compiler('c').cmd_array().contains('cgcc')}
1375f9332757SPaolo Bonzinisummary_info += {'strip binaries':    get_option('strip')}
1376f9332757SPaolo Bonzinisummary_info += {'profiler':          config_host.has_key('CONFIG_PROFILER')}
1377f9332757SPaolo Bonzinisummary_info += {'static build':      config_host.has_key('CONFIG_TOOLS')}
1378f9332757SPaolo Bonziniif targetos == 'darwin'
1379f9332757SPaolo Bonzini  summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
1380f9332757SPaolo Bonziniendif
1381f9332757SPaolo Bonzini# TODO: add back version
138235be72baSPaolo Bonzinisummary_info += {'SDL support':       sdl.found()}
138335be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()}
1384f9332757SPaolo Bonzini# TODO: add back version
1385f9332757SPaolo Bonzinisummary_info += {'GTK support':       config_host.has_key('CONFIG_GTK')}
1386f9332757SPaolo Bonzinisummary_info += {'GTK GL support':    config_host.has_key('CONFIG_GTK_GL')}
1387b7612f45SPaolo Bonzinisummary_info += {'pixman':            pixman.found()}
1388f9332757SPaolo Bonzini# TODO: add back version
1389f9332757SPaolo Bonzinisummary_info += {'VTE support':       config_host.has_key('CONFIG_VTE')}
1390f9332757SPaolo Bonzinisummary_info += {'TLS priority':      config_host['CONFIG_TLS_PRIORITY']}
1391f9332757SPaolo Bonzinisummary_info += {'GNUTLS support':    config_host.has_key('CONFIG_GNUTLS')}
1392f9332757SPaolo Bonzini# TODO: add back version
1393f9332757SPaolo Bonzinisummary_info += {'libgcrypt':         config_host.has_key('CONFIG_GCRYPT')}
1394f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT')
1395f9332757SPaolo Bonzini   summary_info += {'  hmac':            config_host.has_key('CONFIG_GCRYPT_HMAC')}
1396f9332757SPaolo Bonzini   summary_info += {'  XTS':             not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
1397f9332757SPaolo Bonziniendif
1398f9332757SPaolo Bonzini# TODO: add back version
1399f9332757SPaolo Bonzinisummary_info += {'nettle':            config_host.has_key('CONFIG_NETTLE')}
1400f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE')
1401f9332757SPaolo Bonzini   summary_info += {'  XTS':             not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
1402f9332757SPaolo Bonziniendif
1403f9332757SPaolo Bonzinisummary_info += {'libtasn1':          config_host.has_key('CONFIG_TASN1')}
1404f9332757SPaolo Bonzinisummary_info += {'PAM':               config_host.has_key('CONFIG_AUTH_PAM')}
1405f9332757SPaolo Bonzinisummary_info += {'iconv support':     config_host.has_key('CONFIG_ICONV')}
1406f9332757SPaolo Bonzinisummary_info += {'curses support':    config_host.has_key('CONFIG_CURSES')}
1407f9332757SPaolo Bonzini# TODO: add back version
1408f9332757SPaolo Bonzinisummary_info += {'virgl support':     config_host.has_key('CONFIG_VIRGL')}
1409f9332757SPaolo Bonzinisummary_info += {'curl support':      config_host.has_key('CONFIG_CURL')}
1410f9332757SPaolo Bonzinisummary_info += {'mingw32 support':   targetos == 'windows'}
1411f9332757SPaolo Bonzinisummary_info += {'Audio drivers':     config_host['CONFIG_AUDIO_DRIVERS']}
1412f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
1413f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
1414f9332757SPaolo Bonzinisummary_info += {'VirtFS support':    config_host.has_key('CONFIG_VIRTFS')}
1415f9332757SPaolo Bonzinisummary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')}
1416a0b93237SPaolo Bonzinisummary_info += {'VNC support':       vnc.found()}
1417a0b93237SPaolo Bonziniif vnc.found()
1418a0b93237SPaolo Bonzini  summary_info += {'VNC SASL support':  sasl.found()}
1419a0b93237SPaolo Bonzini  summary_info += {'VNC JPEG support':  jpeg.found()}
1420a0b93237SPaolo Bonzini  summary_info += {'VNC PNG support':   png.found()}
1421f9332757SPaolo Bonziniendif
1422f9332757SPaolo Bonzinisummary_info += {'xen support':       config_host.has_key('CONFIG_XEN_BACKEND')}
1423f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND')
1424f9332757SPaolo Bonzini  summary_info += {'xen ctrl version':  config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
1425f9332757SPaolo Bonziniendif
1426f9332757SPaolo Bonzinisummary_info += {'brlapi support':    config_host.has_key('CONFIG_BRLAPI')}
1427f9332757SPaolo Bonzinisummary_info += {'Documentation':     config_host.has_key('BUILD_DOCS')}
1428f9332757SPaolo Bonzinisummary_info += {'PIE':               get_option('b_pie')}
1429f9332757SPaolo Bonzinisummary_info += {'vde support':       config_host.has_key('CONFIG_VDE')}
1430f9332757SPaolo Bonzinisummary_info += {'netmap support':    config_host.has_key('CONFIG_NETMAP')}
1431f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
1432f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
1433f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
1434f9332757SPaolo Bonzinisummary_info += {'Install blobs':     config_host.has_key('INSTALL_BLOBS')}
1435f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG
1436f9332757SPaolo Bonzini#summary_info += {'KVM support':       have_kvm'}
1437f9332757SPaolo Bonzini#summary_info += {'HAX support':       have_hax'}
1438f9332757SPaolo Bonzini#summary_info += {'HVF support':       have_hvf'}
1439f9332757SPaolo Bonzini#summary_info += {'WHPX support':      have_whpx'}
1440f9332757SPaolo Bonzini#summary_info += {'TCG support':       have_tcg'}
1441f9332757SPaolo Bonzini#if get_option('tcg')
1442f9332757SPaolo Bonzini#  summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
1443f9332757SPaolo Bonzini#  summary_info += {'TCG interpreter':   config_host.has_key('CONFIG_TCG_INTERPRETER')}
1444f9332757SPaolo Bonzini#endif
1445f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
1446f9332757SPaolo Bonzinisummary_info += {'RDMA support':      config_host.has_key('CONFIG_RDMA')}
1447f9332757SPaolo Bonzinisummary_info += {'PVRDMA support':    config_host.has_key('CONFIG_PVRDMA')}
1448f9332757SPaolo Bonzinisummary_info += {'fdt support':       config_host.has_key('CONFIG_FDT')}
1449f9332757SPaolo Bonzinisummary_info += {'membarrier':        config_host.has_key('CONFIG_MEMBARRIER')}
1450f9332757SPaolo Bonzinisummary_info += {'preadv support':    config_host.has_key('CONFIG_PREADV')}
1451f9332757SPaolo Bonzinisummary_info += {'fdatasync':         config_host.has_key('CONFIG_FDATASYNC')}
1452f9332757SPaolo Bonzinisummary_info += {'madvise':           config_host.has_key('CONFIG_MADVISE')}
1453f9332757SPaolo Bonzinisummary_info += {'posix_madvise':     config_host.has_key('CONFIG_POSIX_MADVISE')}
1454f9332757SPaolo Bonzinisummary_info += {'posix_memalign':    config_host.has_key('CONFIG_POSIX_MEMALIGN')}
1455f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
1456f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
1457f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
1458f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
1459f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
1460f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
1461f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
1462f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
1463f9332757SPaolo Bonzinisummary_info += {'Trace backends':    config_host['TRACE_BACKENDS']}
1464f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple')
1465f9332757SPaolo Bonzini  summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
1466f9332757SPaolo Bonziniendif
1467f9332757SPaolo Bonzini# TODO: add back protocol and server version
1468f9332757SPaolo Bonzinisummary_info += {'spice support':     config_host.has_key('CONFIG_SPICE')}
1469f9332757SPaolo Bonzinisummary_info += {'rbd support':       config_host.has_key('CONFIG_RBD')}
1470f9332757SPaolo Bonzinisummary_info += {'xfsctl support':    config_host.has_key('CONFIG_XFS')}
1471f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
14720a40bcb7SCésar Belleysummary_info += {'U2F support':       u2f.found()}
1473f9332757SPaolo Bonzinisummary_info += {'libusb':            config_host.has_key('CONFIG_USB_LIBUSB')}
1474f9332757SPaolo Bonzinisummary_info += {'usb net redir':     config_host.has_key('CONFIG_USB_REDIR')}
1475f9332757SPaolo Bonzinisummary_info += {'OpenGL support':    config_host.has_key('CONFIG_OPENGL')}
1476f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs':    config_host.has_key('CONFIG_OPENGL_DMABUF')}
1477f9332757SPaolo Bonzinisummary_info += {'libiscsi support':  config_host.has_key('CONFIG_LIBISCSI')}
1478f9332757SPaolo Bonzinisummary_info += {'libnfs support':    config_host.has_key('CONFIG_LIBNFS')}
1479f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
1480f9332757SPaolo Bonziniif targetos == 'windows'
1481f9332757SPaolo Bonzini  if 'WIN_SDK' in config_host
1482f9332757SPaolo Bonzini    summary_info += {'Windows SDK':       config_host['WIN_SDK']}
1483f9332757SPaolo Bonzini  endif
1484f9332757SPaolo Bonzini  summary_info += {'QGA VSS support':   config_host.has_key('CONFIG_QGA_VSS')}
1485f9332757SPaolo Bonzini  summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
1486f9332757SPaolo Bonzini  summary_info += {'QGA MSI support':   config_host.has_key('CONFIG_QGA_MSI_ENABLED')}
1487f9332757SPaolo Bonziniendif
1488f9332757SPaolo Bonzinisummary_info += {'seccomp support':   config_host.has_key('CONFIG_SECCOMP')}
1489f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
1490f9332757SPaolo Bonzinisummary_info += {'coroutine pool':    config_host['CONFIG_COROUTINE_POOL'] == '1'}
1491f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
1492f9332757SPaolo Bonzinisummary_info += {'mutex debugging':   config_host.has_key('CONFIG_DEBUG_MUTEX')}
1493f9332757SPaolo Bonzinisummary_info += {'crypto afalg':      config_host.has_key('CONFIG_AF_ALG')}
1494f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
1495bf0e56a3SMarc-André Lureausummary_info += {'gcov':              get_option('b_coverage')}
1496f9332757SPaolo Bonzinisummary_info += {'TPM support':       config_host.has_key('CONFIG_TPM')}
1497f9332757SPaolo Bonzinisummary_info += {'libssh support':    config_host.has_key('CONFIG_LIBSSH')}
1498f9332757SPaolo Bonzinisummary_info += {'QOM debugging':     config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
1499f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
1500f9332757SPaolo Bonzinisummary_info += {'lzo support':       config_host.has_key('CONFIG_LZO')}
1501f9332757SPaolo Bonzinisummary_info += {'snappy support':    config_host.has_key('CONFIG_SNAPPY')}
1502f9332757SPaolo Bonzinisummary_info += {'bzip2 support':     config_host.has_key('CONFIG_BZIP2')}
1503f9332757SPaolo Bonzinisummary_info += {'lzfse support':     config_host.has_key('CONFIG_LZFSE')}
1504f9332757SPaolo Bonzinisummary_info += {'zstd support':      config_host.has_key('CONFIG_ZSTD')}
1505f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
1506f9332757SPaolo Bonzinisummary_info += {'libxml2':           config_host.has_key('CONFIG_LIBXML2')}
1507f9332757SPaolo Bonzinisummary_info += {'tcmalloc support':  config_host.has_key('CONFIG_TCMALLOC')}
1508f9332757SPaolo Bonzinisummary_info += {'jemalloc support':  config_host.has_key('CONFIG_JEMALLOC')}
1509f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
1510f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
1511f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
1512f9332757SPaolo Bonzinisummary_info += {'bochs support':     config_host.has_key('CONFIG_BOCHS')}
1513f9332757SPaolo Bonzinisummary_info += {'cloop support':     config_host.has_key('CONFIG_CLOOP')}
1514f9332757SPaolo Bonzinisummary_info += {'dmg support':       config_host.has_key('CONFIG_DMG')}
1515f9332757SPaolo Bonzinisummary_info += {'qcow v1 support':   config_host.has_key('CONFIG_QCOW1')}
1516f9332757SPaolo Bonzinisummary_info += {'vdi support':       config_host.has_key('CONFIG_VDI')}
1517f9332757SPaolo Bonzinisummary_info += {'vvfat support':     config_host.has_key('CONFIG_VVFAT')}
1518f9332757SPaolo Bonzinisummary_info += {'qed support':       config_host.has_key('CONFIG_QED')}
1519f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
1520f9332757SPaolo Bonzinisummary_info += {'sheepdog support':  config_host.has_key('CONFIG_SHEEPDOG')}
1521f9332757SPaolo Bonzinisummary_info += {'capstone':          config_host.has_key('CONFIG_CAPSTONE')}
1522f9332757SPaolo Bonzinisummary_info += {'libpmem support':   config_host.has_key('CONFIG_LIBPMEM')}
1523f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
1524f9332757SPaolo Bonzinisummary_info += {'libudev':           config_host.has_key('CONFIG_LIBUDEV')}
1525f9332757SPaolo Bonzinisummary_info += {'default devices':   config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
1526f9332757SPaolo Bonzinisummary_info += {'plugin support':    config_host.has_key('CONFIG_PLUGIN')}
1527f9332757SPaolo Bonzinisummary_info += {'fuzzing support':   config_host.has_key('CONFIG_FUZZ')}
1528f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN')
1529f9332757SPaolo Bonzini  summary_info += {'gdb':             config_host['HAVE_GDB_BIN']}
1530f9332757SPaolo Bonziniendif
1531f9332757SPaolo Bonzinisummary_info += {'thread sanitizer':  config_host.has_key('CONFIG_TSAN')}
1532f9332757SPaolo Bonzinisummary_info += {'rng-none':          config_host.has_key('CONFIG_RNG_NONE')}
1533f9332757SPaolo Bonzinisummary_info += {'Linux keyring':     config_host.has_key('CONFIG_SECRET_KEYRING')}
1534f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true)
1535f9332757SPaolo Bonzini
1536f9332757SPaolo Bonziniif not supported_cpus.contains(cpu)
1537f9332757SPaolo Bonzini  message()
1538f9332757SPaolo Bonzini  warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
1539f9332757SPaolo Bonzini  message()
1540f9332757SPaolo Bonzini  message('CPU host architecture ' + cpu + ' support is not currently maintained.')
1541f9332757SPaolo Bonzini  message('The QEMU project intends to remove support for this host CPU in')
1542f9332757SPaolo Bonzini  message('a future release if nobody volunteers to maintain it and to')
1543f9332757SPaolo Bonzini  message('provide a build host for our continuous integration setup.')
1544f9332757SPaolo Bonzini  message('configure has succeeded and you can continue to build, but')
1545f9332757SPaolo Bonzini  message('if you care about QEMU on this platform you should contact')
1546f9332757SPaolo Bonzini  message('us upstream at qemu-devel@nongnu.org.')
1547f9332757SPaolo Bonziniendif
1548f9332757SPaolo Bonzini
1549f9332757SPaolo Bonziniif not supported_oses.contains(targetos)
1550f9332757SPaolo Bonzini  message()
1551f9332757SPaolo Bonzini  warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
1552f9332757SPaolo Bonzini  message()
1553f9332757SPaolo Bonzini  message('Host OS ' + targetos + 'support is not currently maintained.')
1554f9332757SPaolo Bonzini  message('The QEMU project intends to remove support for this host OS in')
1555f9332757SPaolo Bonzini  message('a future release if nobody volunteers to maintain it and to')
1556f9332757SPaolo Bonzini  message('provide a build host for our continuous integration setup.')
1557f9332757SPaolo Bonzini  message('configure has succeeded and you can continue to build, but')
1558f9332757SPaolo Bonzini  message('if you care about QEMU on this platform you should contact')
1559f9332757SPaolo Bonzini  message('us upstream at qemu-devel@nongnu.org.')
1560f9332757SPaolo Bonziniendif
1561