xref: /qemu/meson.build (revision 6ec0e15d)
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
208fe11232SMarc-André Lureau
218fe11232SMarc-André Lureauif get_option('qemu_suffix').startswith('/')
228fe11232SMarc-André Lureau  error('qemu_suffix cannot start with a /')
238fe11232SMarc-André Lureauendif
248fe11232SMarc-André Lureau
25ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix')
26491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix')
27859aef02SPaolo Bonziniconfig_host_data = configuration_data()
28859aef02SPaolo Bonzinigenh = []
29a5665051SPaolo Bonzini
30760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split()
31760e4327SPaolo Bonzinihave_user = false
32760e4327SPaolo Bonzinihave_system = false
33760e4327SPaolo Bonziniforeach target : target_dirs
34760e4327SPaolo Bonzini  have_user = have_user or target.endswith('-user')
35760e4327SPaolo Bonzini  have_system = have_system or target.endswith('-softmmu')
36760e4327SPaolo Bonziniendforeach
37760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host
38760e4327SPaolo Bonzinihave_block = have_system or have_tools
39760e4327SPaolo Bonzini
40201e8ed7SPaolo Bonzinipython = import('python').find_installation()
41201e8ed7SPaolo Bonzini
42201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux']
43201e8ed7SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64',
44201e8ed7SPaolo Bonzini  'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64']
45201e8ed7SPaolo Bonzini
46201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family()
47201e8ed7SPaolo Bonzinitargetos = host_machine.system()
48201e8ed7SPaolo Bonzini
49201e8ed7SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'),
50201e8ed7SPaolo Bonzini               output: 'ninjatool',
51201e8ed7SPaolo Bonzini               configuration: config_host)
52201e8ed7SPaolo Bonzini
53201e8ed7SPaolo Bonzini##################
54201e8ed7SPaolo Bonzini# Compiler flags #
55201e8ed7SPaolo Bonzini##################
56201e8ed7SPaolo Bonzini
57a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(),
58a5665051SPaolo Bonzini                      native: false, language: ['c', 'objc'])
59a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(),
60a5665051SPaolo Bonzini                      native: false, language: 'cpp')
61a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(),
62a5665051SPaolo Bonzini                           native: false, language: ['c', 'cpp', 'objc'])
63a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(),
64a5665051SPaolo Bonzini                      language: ['c', 'cpp', 'objc'])
65a5665051SPaolo Bonzini
66c46f76d1SAlexander Bulekov# Specify linker-script with add_project_link_arguments so that it is not placed
67c46f76d1SAlexander Bulekov# within a linker --start-group/--end-group pair
68c46f76d1SAlexander Bulekovif 'CONFIG_FUZZ' in config_host
69c46f76d1SAlexander Bulekov   add_project_link_arguments(['-Wl,-T,',
70c46f76d1SAlexander Bulekov                               (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')],
71c46f76d1SAlexander Bulekov                              native: false, language: ['c', 'cpp', 'objc'])
72c46f76d1SAlexander Bulekovendif
73c46f76d1SAlexander Bulekov
74fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp')
75fc929892SMarc-André Lureauif link_language == 'cpp'
76fc929892SMarc-André Lureau  add_languages('cpp', required: true, native: false)
77fc929892SMarc-André Lureauendif
78a5665051SPaolo Bonziniif host_machine.system() == 'darwin'
79a5665051SPaolo Bonzini  add_languages('objc', required: false, native: false)
80a5665051SPaolo Bonziniendif
81a5665051SPaolo Bonzini
82968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host
83968b4db3SPaolo Bonzini  run_target('sparse',
84968b4db3SPaolo Bonzini             command: [find_program('scripts/check_sparse.py'),
85968b4db3SPaolo Bonzini                       config_host['SPARSE_CFLAGS'].split(),
86968b4db3SPaolo Bonzini                       'compile_commands.json'])
87968b4db3SPaolo Bonziniendif
88968b4db3SPaolo Bonzini
89*6ec0e15dSPaolo Bonzini###########################################
90*6ec0e15dSPaolo Bonzini# Target-specific checks and dependencies #
91*6ec0e15dSPaolo Bonzini###########################################
92*6ec0e15dSPaolo Bonzini
93*6ec0e15dSPaolo Bonziniif targetos != 'linux' and get_option('mpath').enabled()
94*6ec0e15dSPaolo Bonzini  error('Multipath is supported only on Linux')
95*6ec0e15dSPaolo Bonziniendif
96*6ec0e15dSPaolo Bonzini
97a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false)
98a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false)
994a96337dSPaolo Bonziniwinmm = []
100a81df1b6SPaolo Bonzinisocket = []
10104c6f1e7SMarc-André Lureauversion_res = []
102d92989aaSMarc-André Lureaucoref = []
103d92989aaSMarc-André Lureauiokit = []
104d92989aaSMarc-André Lureaucocoa = []
105d92989aaSMarc-André Lureauhvf = []
106a81df1b6SPaolo Bonziniif targetos == 'windows'
107a81df1b6SPaolo Bonzini  socket = cc.find_library('ws2_32')
1084a96337dSPaolo Bonzini  winmm = cc.find_library('winmm')
10904c6f1e7SMarc-André Lureau
11004c6f1e7SMarc-André Lureau  win = import('windows')
11104c6f1e7SMarc-André Lureau  version_res = win.compile_resources('version.rc',
11204c6f1e7SMarc-André Lureau                                      depend_files: files('pc-bios/qemu-nsis.ico'),
11304c6f1e7SMarc-André Lureau                                      include_directories: include_directories('.'))
114d92989aaSMarc-André Lureauelif targetos == 'darwin'
115d92989aaSMarc-André Lureau  coref = dependency('appleframeworks', modules: 'CoreFoundation')
116d92989aaSMarc-André Lureau  iokit = dependency('appleframeworks', modules: 'IOKit')
117d92989aaSMarc-André Lureau  cocoa = dependency('appleframeworks', modules: 'Cocoa')
118d92989aaSMarc-André Lureau  hvf = dependency('appleframeworks', modules: 'Hypervisor')
119cfad62f1SPaolo Bonzinielif targetos == 'sunos'
120cfad62f1SPaolo Bonzini  socket = [cc.find_library('socket'),
121cfad62f1SPaolo Bonzini            cc.find_library('nsl'),
122cfad62f1SPaolo Bonzini            cc.find_library('resolv')]
123cfad62f1SPaolo Bonzinielif targetos == 'haiku'
124cfad62f1SPaolo Bonzini  socket = [cc.find_library('posix_error_mapper'),
125cfad62f1SPaolo Bonzini            cc.find_library('network'),
126cfad62f1SPaolo Bonzini            cc.find_library('bsd')]
127a81df1b6SPaolo Bonziniendif
128*6ec0e15dSPaolo Bonzini
129*6ec0e15dSPaolo Bonzini################
130*6ec0e15dSPaolo Bonzini# Dependencies #
131*6ec0e15dSPaolo Bonzini################
132*6ec0e15dSPaolo Bonzini
133215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands.  This was
134215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles.
135215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(),
136215b0c2fSPaolo Bonzini                      native: false, language: ['c', 'cpp', 'objc'])
137215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split())
138a81df1b6SPaolo Bonzinigio = not_found
139a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host
140a81df1b6SPaolo Bonzini  gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
141a81df1b6SPaolo Bonzini                           link_args: config_host['GIO_LIBS'].split())
142a81df1b6SPaolo Bonziniendif
143a81df1b6SPaolo Bonzinilttng = not_found
144a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host
145a81df1b6SPaolo Bonzini  lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
146a81df1b6SPaolo Bonziniendif
147a81df1b6SPaolo Bonziniurcubp = not_found
148a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host
149a81df1b6SPaolo Bonzini  urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split())
150a81df1b6SPaolo Bonziniendif
15146859d93SDaniel P. Berrangégcrypt = not_found
15246859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host
15346859d93SDaniel P. Berrangé  gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(),
15446859d93SDaniel P. Berrangé                              link_args: config_host['GCRYPT_LIBS'].split())
15546859d93SDaniel P. Berrangéendif
156a81df1b6SPaolo Bonzininettle = not_found
157a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host
158a81df1b6SPaolo Bonzini  nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(),
159a81df1b6SPaolo Bonzini                              link_args: config_host['NETTLE_LIBS'].split())
160a81df1b6SPaolo Bonziniendif
161a81df1b6SPaolo Bonzinignutls = not_found
162a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host
163a81df1b6SPaolo Bonzini  gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(),
164a81df1b6SPaolo Bonzini                              link_args: config_host['GNUTLS_LIBS'].split())
165a81df1b6SPaolo Bonziniendif
166b7612f45SPaolo Bonzinipixman = not_found
167b7612f45SPaolo Bonziniif have_system or have_tools
168b7612f45SPaolo Bonzini  pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8',
1691a94933fSPaolo Bonzini                      method: 'pkg-config', static: enable_static)
170b7612f45SPaolo Bonziniendif
1715e7fbd25SMarc-André Lureaupam = not_found
1725e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host
1735e7fbd25SMarc-André Lureau  pam = cc.find_library('pam')
1745e7fbd25SMarc-André Lureauendif
1755e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false)
1761ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static)
1775e5733e5SMarc-André Lureaulinux_io_uring = not_found
1785e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host
1795e5733e5SMarc-André Lureau  linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(),
1805e5733e5SMarc-André Lureau                                      link_args: config_host['LINUX_IO_URING_LIBS'].split())
1815e5733e5SMarc-André Lureauendif
1825e5733e5SMarc-André Lureaulibxml2 = not_found
1835e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host
1845e5733e5SMarc-André Lureau  libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(),
1855e5733e5SMarc-André Lureau                               link_args: config_host['LIBXML2_LIBS'].split())
1865e5733e5SMarc-André Lureauendif
1875e5733e5SMarc-André Lureaulibnfs = not_found
1885e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host
1895e5733e5SMarc-André Lureau  libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split())
1905e5733e5SMarc-André Lureauendif
191ec0d5893SMarc-André Lureaulibattr = not_found
192ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host
193ec0d5893SMarc-André Lureau  libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split())
194ec0d5893SMarc-André Lureauendif
1953f99cf57SPaolo Bonziniseccomp = not_found
1963f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host
1973f99cf57SPaolo Bonzini  seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(),
1983f99cf57SPaolo Bonzini                               link_args: config_host['SECCOMP_LIBS'].split())
1993f99cf57SPaolo Bonziniendif
2003f99cf57SPaolo Bonzinilibcap_ng = not_found
2013f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host
2023f99cf57SPaolo Bonzini  libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split())
2033f99cf57SPaolo Bonziniendif
2041917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools
2051917ec6dSPaolo Bonzini  xkbcommon = not_found
2061917ec6dSPaolo Bonzinielse
2071917ec6dSPaolo Bonzini  xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'),
2081a94933fSPaolo Bonzini                         method: 'pkg-config', static: enable_static)
209ade60d4fSMarc-André Lureauendif
210cdaf0722SMarc-André Lureauslirp = not_found
211cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP')
212cdaf0722SMarc-André Lureau  slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(),
213cdaf0722SMarc-André Lureau                             link_args: config_host['SLIRP_LIBS'].split())
214cdaf0722SMarc-André Lureauendif
215cdaf0722SMarc-André Lureauvde = not_found
216cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE')
217cdaf0722SMarc-André Lureau  vde = declare_dependency(link_args: config_host['VDE_LIBS'].split())
218cdaf0722SMarc-André Lureauendif
219478e943fSPaolo Bonzinipulse = not_found
220478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host
221478e943fSPaolo Bonzini  pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(),
222478e943fSPaolo Bonzini                             link_args: config_host['PULSE_LIBS'].split())
223478e943fSPaolo Bonziniendif
224478e943fSPaolo Bonzinialsa = not_found
225478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host
226478e943fSPaolo Bonzini  alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(),
227478e943fSPaolo Bonzini                            link_args: config_host['ALSA_LIBS'].split())
228478e943fSPaolo Bonziniendif
229478e943fSPaolo Bonzinijack = not_found
230478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host
231478e943fSPaolo Bonzini  jack = declare_dependency(link_args: config_host['JACK_LIBS'].split())
232478e943fSPaolo Bonziniendif
2332634733cSPaolo Bonzinispice = not_found
2342634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host
2352634733cSPaolo Bonzini  spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(),
2362634733cSPaolo Bonzini                             link_args: config_host['SPICE_LIBS'].split())
2372634733cSPaolo Bonziniendif
2385ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false)
239ccf7afa5SPaolo Bonzinilibdl = not_found
240ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host
241ccf7afa5SPaolo Bonzini  libdl = cc.find_library('dl', required: true)
242ccf7afa5SPaolo Bonziniendif
24399650b62SPaolo Bonzinilibiscsi = not_found
24499650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host
24599650b62SPaolo Bonzini  libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(),
24699650b62SPaolo Bonzini                                link_args: config_host['LIBISCSI_LIBS'].split())
24799650b62SPaolo Bonziniendif
2485e5733e5SMarc-André Lureauzstd = not_found
2495e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host
2505e5733e5SMarc-André Lureau  zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(),
2515e5733e5SMarc-André Lureau                            link_args: config_host['ZSTD_LIBS'].split())
2525e5733e5SMarc-André Lureauendif
253ea458960SMarc-André Lureaugbm = not_found
254ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host
255ea458960SMarc-André Lureau  gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(),
256ea458960SMarc-André Lureau                           link_args: config_host['GBM_LIBS'].split())
257ea458960SMarc-André Lureauendif
258ea458960SMarc-André Lureauvirgl = not_found
259ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host
260ea458960SMarc-André Lureau  virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(),
261ea458960SMarc-André Lureau                             link_args: config_host['VIRGL_LIBS'].split())
262ea458960SMarc-André Lureauendif
2631d7bb6abSMarc-André Lureaucurl = not_found
2641d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host
2651d7bb6abSMarc-André Lureau  curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(),
2661d7bb6abSMarc-André Lureau                            link_args: config_host['CURL_LIBS'].split())
2671d7bb6abSMarc-André Lureauendif
268f15bff25SPaolo Bonzinilibudev = not_found
269f01496a3SPaolo Bonziniif targetos == 'linux' and (have_system or have_tools)
270*6ec0e15dSPaolo Bonzini  libudev = dependency('libudev',
271*6ec0e15dSPaolo Bonzini                       required: get_option('mpath').enabled(),
272*6ec0e15dSPaolo Bonzini                       static: enable_static)
273f15bff25SPaolo Bonziniendif
274*6ec0e15dSPaolo Bonzini
275*6ec0e15dSPaolo Bonzinimpathpersist = not_found
276*6ec0e15dSPaolo Bonzinimpathpersist_new_api = false
277*6ec0e15dSPaolo Bonziniif targetos == 'linux' and have_tools and not get_option('mpath').disabled()
278*6ec0e15dSPaolo Bonzini  mpath_test_source_new = '''
279*6ec0e15dSPaolo Bonzini    #include <libudev.h>
280*6ec0e15dSPaolo Bonzini    #include <mpath_persist.h>
281*6ec0e15dSPaolo Bonzini    unsigned mpath_mx_alloc_len = 1024;
282*6ec0e15dSPaolo Bonzini    int logsink;
283*6ec0e15dSPaolo Bonzini    static struct config *multipath_conf;
284*6ec0e15dSPaolo Bonzini    extern struct udev *udev;
285*6ec0e15dSPaolo Bonzini    extern struct config *get_multipath_config(void);
286*6ec0e15dSPaolo Bonzini    extern void put_multipath_config(struct config *conf);
287*6ec0e15dSPaolo Bonzini    struct udev *udev;
288*6ec0e15dSPaolo Bonzini    struct config *get_multipath_config(void) { return multipath_conf; }
289*6ec0e15dSPaolo Bonzini    void put_multipath_config(struct config *conf) { }
290*6ec0e15dSPaolo Bonzini    int main(void) {
291*6ec0e15dSPaolo Bonzini        udev = udev_new();
292*6ec0e15dSPaolo Bonzini        multipath_conf = mpath_lib_init();
293*6ec0e15dSPaolo Bonzini        return 0;
294*6ec0e15dSPaolo Bonzini    }'''
295*6ec0e15dSPaolo Bonzini  mpath_test_source_old = '''
296*6ec0e15dSPaolo Bonzini      #include <libudev.h>
297*6ec0e15dSPaolo Bonzini      #include <mpath_persist.h>
298*6ec0e15dSPaolo Bonzini      unsigned mpath_mx_alloc_len = 1024;
299*6ec0e15dSPaolo Bonzini      int logsink;
300*6ec0e15dSPaolo Bonzini      int main(void) {
301*6ec0e15dSPaolo Bonzini          struct udev *udev = udev_new();
302*6ec0e15dSPaolo Bonzini          mpath_lib_init(udev);
303*6ec0e15dSPaolo Bonzini          return 0;
304*6ec0e15dSPaolo Bonzini      }'''
305*6ec0e15dSPaolo Bonzini  libmultipath = cc.find_library('multipath',
306*6ec0e15dSPaolo Bonzini                                 required: get_option('mpath'),
307*6ec0e15dSPaolo Bonzini                                 static: enable_static)
308*6ec0e15dSPaolo Bonzini  libmpathpersist = cc.find_library('mpathpersist',
309*6ec0e15dSPaolo Bonzini                                    required: get_option('mpath'),
310*6ec0e15dSPaolo Bonzini                                    static: enable_static)
311*6ec0e15dSPaolo Bonzini  if libmultipath.found() and libmpathpersist.found() and libudev.found()
312*6ec0e15dSPaolo Bonzini    mpathlibs = [libmultipath, libmpathpersist, libudev]
313*6ec0e15dSPaolo Bonzini    if cc.links(mpath_test_source_new, dependencies: mpathlibs)
314*6ec0e15dSPaolo Bonzini      mpathpersist = declare_dependency(dependencies: mpathlibs)
315*6ec0e15dSPaolo Bonzini      mpathpersist_new_api = true
316*6ec0e15dSPaolo Bonzini    elif cc.links(mpath_test_source_old, dependencies: mpathlibs)
317*6ec0e15dSPaolo Bonzini      mpathpersist = declare_dependency(dependencies: mpathlibs)
318*6ec0e15dSPaolo Bonzini    else
319*6ec0e15dSPaolo Bonzini      if get_option('mpath').enabled()
320*6ec0e15dSPaolo Bonzini        error('Cannot detect libmpathpersist API')
321*6ec0e15dSPaolo Bonzini      else
322*6ec0e15dSPaolo Bonzini        warning('Cannot detect libmpathpersist API, disabling')
323*6ec0e15dSPaolo Bonzini      endif
324*6ec0e15dSPaolo Bonzini    endif
325*6ec0e15dSPaolo Bonzini  endif
326*6ec0e15dSPaolo Bonziniendif
327*6ec0e15dSPaolo Bonzini
3282634733cSPaolo Bonzinibrlapi = not_found
3292634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host
3302634733cSPaolo Bonzini  brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split())
3312634733cSPaolo Bonziniendif
33235be72baSPaolo Bonzini
333760e4327SPaolo Bonzinisdl = not_found
334760e4327SPaolo Bonziniif have_system
335363743daSYonggang Luo  sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static)
33635be72baSPaolo Bonzini  sdl_image = not_found
337760e4327SPaolo Bonziniendif
33835be72baSPaolo Bonziniif sdl.found()
33935be72baSPaolo Bonzini  # work around 2.0.8 bug
34035be72baSPaolo Bonzini  sdl = declare_dependency(compile_args: '-Wno-undef',
34135be72baSPaolo Bonzini                           dependencies: sdl)
3427161a433SVolker Rümelin  sdl_image = dependency('SDL2_image', required: get_option('sdl_image'),
3431a94933fSPaolo Bonzini                         method: 'pkg-config', static: enable_static)
34435be72baSPaolo Bonzinielse
34535be72baSPaolo Bonzini  if get_option('sdl_image').enabled()
346a8dc2aceSSergei Trofimovich    error('sdl-image required, but SDL was @0@'.format(
347a8dc2aceSSergei Trofimovich          get_option('sdl').disabled() ? 'disabled' : 'not found'))
3482634733cSPaolo Bonzini  endif
34935be72baSPaolo Bonzini  sdl_image = not_found
35035be72baSPaolo Bonziniendif
35135be72baSPaolo Bonzini
3525e5733e5SMarc-André Lureaurbd = not_found
3535e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host
3545e5733e5SMarc-André Lureau  rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split())
3555e5733e5SMarc-André Lureauendif
3565e5733e5SMarc-André Lureauglusterfs = not_found
3575e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host
3585e5733e5SMarc-André Lureau  glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(),
3595e5733e5SMarc-André Lureau                                 link_args: config_host['GLUSTERFS_LIBS'].split())
3605e5733e5SMarc-André Lureauendif
3615e5733e5SMarc-André Lureaulibssh = not_found
3625e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host
3635e5733e5SMarc-André Lureau  libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(),
3645e5733e5SMarc-André Lureau                              link_args: config_host['LIBSSH_LIBS'].split())
3655e5733e5SMarc-André Lureauendif
3665e5733e5SMarc-André Lureaulibbzip2 = not_found
3675e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host
3685e5733e5SMarc-André Lureau  libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split())
3695e5733e5SMarc-André Lureauendif
3705e5733e5SMarc-André Lureauliblzfse = not_found
3715e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host
3725e5733e5SMarc-André Lureau  liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split())
3735e5733e5SMarc-André Lureauendif
374478e943fSPaolo Bonzinioss = not_found
375478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host
376478e943fSPaolo Bonzini  oss = declare_dependency(link_args: config_host['OSS_LIBS'].split())
377478e943fSPaolo Bonziniendif
378478e943fSPaolo Bonzinidsound = not_found
379478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host
380478e943fSPaolo Bonzini  dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split())
381478e943fSPaolo Bonziniendif
382478e943fSPaolo Bonzinicoreaudio = not_found
383478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host
384478e943fSPaolo Bonzini  coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split())
385478e943fSPaolo Bonziniendif
3862b1ccdf4SMarc-André Lureauopengl = not_found
3872b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host
388de2d3005SPaolo Bonzini  opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(),
389de2d3005SPaolo Bonzini                              link_args: config_host['OPENGL_LIBS'].split())
3902b1ccdf4SMarc-André Lureauendif
3912b1ccdf4SMarc-André Lureaugtk = not_found
3922b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host
3932b1ccdf4SMarc-André Lureau  gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(),
3942b1ccdf4SMarc-André Lureau                              link_args: config_host['GTK_LIBS'].split())
3952b1ccdf4SMarc-André Lureauendif
3962b1ccdf4SMarc-André Lureauvte = not_found
3972b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host
3982b1ccdf4SMarc-André Lureau  vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(),
3992b1ccdf4SMarc-André Lureau                           link_args: config_host['VTE_LIBS'].split())
4002b1ccdf4SMarc-André Lureauendif
4012b1ccdf4SMarc-André Lureaux11 = not_found
4022b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host
4032b1ccdf4SMarc-André Lureau  x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(),
4042b1ccdf4SMarc-André Lureau                           link_args: config_host['X11_LIBS'].split())
4052b1ccdf4SMarc-André Lureauendif
4062b1ccdf4SMarc-André Lureaucurses = not_found
4072b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host
4082b1ccdf4SMarc-André Lureau  curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(),
4092b1ccdf4SMarc-André Lureau                              link_args: config_host['CURSES_LIBS'].split())
4102b1ccdf4SMarc-André Lureauendif
4112b1ccdf4SMarc-André Lureauiconv = not_found
4122b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host
4132b1ccdf4SMarc-André Lureau  iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(),
4142b1ccdf4SMarc-André Lureau                             link_args: config_host['ICONV_LIBS'].split())
4152b1ccdf4SMarc-André Lureauendif
416a0b93237SPaolo Bonzinivnc = not_found
4172b1ccdf4SMarc-André Lureaupng = not_found
4182b1ccdf4SMarc-André Lureaujpeg = not_found
4192b1ccdf4SMarc-André Lureausasl = not_found
420a0b93237SPaolo Bonziniif get_option('vnc').enabled()
421a0b93237SPaolo Bonzini  vnc = declare_dependency() # dummy dependency
422a0b93237SPaolo Bonzini  png = dependency('libpng', required: get_option('vnc_png'),
4231a94933fSPaolo Bonzini                   method: 'pkg-config', static: enable_static)
424a0b93237SPaolo Bonzini  jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'],
425a0b93237SPaolo Bonzini                         required: get_option('vnc_jpeg'),
426a0b93237SPaolo Bonzini                         static: enable_static)
427a0b93237SPaolo Bonzini  sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'],
428a0b93237SPaolo Bonzini                         required: get_option('vnc_sasl'),
429a0b93237SPaolo Bonzini                         static: enable_static)
430a0b93237SPaolo Bonzini  if sasl.found()
431a0b93237SPaolo Bonzini    sasl = declare_dependency(dependencies: sasl,
432a0b93237SPaolo Bonzini                              compile_args: '-DSTRUCT_IOVEC_DEFINED')
433a0b93237SPaolo Bonzini  endif
4342b1ccdf4SMarc-André Lureauendif
4354a96337dSPaolo Bonzinifdt = not_found
4364a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host
4374a96337dSPaolo Bonzini  fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(),
4384a96337dSPaolo Bonzini                           link_args: config_host['FDT_LIBS'].split())
4394a96337dSPaolo Bonziniendif
440708eab42SMarc-André Lureausnappy = not_found
441708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host
442708eab42SMarc-André Lureau  snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split())
443708eab42SMarc-André Lureauendif
444708eab42SMarc-André Lureaulzo = not_found
445708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host
446708eab42SMarc-André Lureau  lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split())
447708eab42SMarc-André Lureauendif
44855166230SMarc-André Lureaurdma = not_found
44955166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host
45055166230SMarc-André Lureau  rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split())
45155166230SMarc-André Lureauendif
452ab318051SMarc-André Lureaunuma = not_found
453ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host
454ab318051SMarc-André Lureau  numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split())
455ab318051SMarc-André Lureauendif
456582ea95fSMarc-André Lureauxen = not_found
457582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host
458582ea95fSMarc-André Lureau  xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(),
459582ea95fSMarc-André Lureau                           link_args: config_host['XEN_LIBS'].split())
460582ea95fSMarc-André Lureauendif
46106677ce1SPaolo Bonzinicacard = not_found
46206677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host
46306677ce1SPaolo Bonzini  cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(),
46406677ce1SPaolo Bonzini                              link_args: config_host['SMARTCARD_LIBS'].split())
46506677ce1SPaolo Bonziniendif
4660a40bcb7SCésar Belleyu2f = not_found
4670a40bcb7SCésar Belleyif have_system
4680a40bcb7SCésar Belley  u2f = dependency('u2f-emu', required: get_option('u2f'),
4690a40bcb7SCésar Belley                   method: 'pkg-config',
4700a40bcb7SCésar Belley                   static: enable_static)
4710a40bcb7SCésar Belleyendif
47206677ce1SPaolo Bonziniusbredir = not_found
47306677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host
47406677ce1SPaolo Bonzini  usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(),
47506677ce1SPaolo Bonzini                                link_args: config_host['USB_REDIR_LIBS'].split())
47606677ce1SPaolo Bonziniendif
47706677ce1SPaolo Bonzinilibusb = not_found
47806677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host
47906677ce1SPaolo Bonzini  libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(),
48006677ce1SPaolo Bonzini                              link_args: config_host['LIBUSB_LIBS'].split())
48106677ce1SPaolo Bonziniendif
482c9322ab5SMarc-André Lureaucapstone = not_found
483c9322ab5SMarc-André Lureauif 'CONFIG_CAPSTONE' in config_host
484c9322ab5SMarc-André Lureau  capstone = declare_dependency(compile_args: config_host['CAPSTONE_CFLAGS'].split(),
485c9322ab5SMarc-André Lureau                                link_args: config_host['CAPSTONE_LIBS'].split())
486c9322ab5SMarc-André Lureauendif
487c9322ab5SMarc-André Lureaulibpmem = not_found
488c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host
489c9322ab5SMarc-André Lureau  libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(),
490c9322ab5SMarc-André Lureau                               link_args: config_host['LIBPMEM_LIBS'].split())
491c9322ab5SMarc-André Lureauendif
492c7c91a74SBruce Rogerslibdaxctl = not_found
493c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host
494c7c91a74SBruce Rogers  libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split())
495c7c91a74SBruce Rogersendif
4968ce0a45fSMarc-André Lureautasn1 = not_found
4978ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host
4988ce0a45fSMarc-André Lureau  tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(),
4998ce0a45fSMarc-André Lureau                             link_args: config_host['TASN1_LIBS'].split())
5008ce0a45fSMarc-André Lureauendif
501af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false,
502af04e89dSMarc-André Lureau                      method: 'pkg-config', static: enable_static)
503a81df1b6SPaolo Bonzini
5043909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid')
5053909def8SMarc-André Lureau
506859aef02SPaolo Bonzini# Create config-host.h
507859aef02SPaolo Bonzini
508f01496a3SPaolo Bonziniconfig_host_data.set('CONFIG_LIBUDEV', libudev.found())
509*6ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH', mpathpersist.found())
510*6ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api)
51135be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found())
51235be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
513a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found())
514a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found())
515a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found())
516a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found())
5174113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found())
518af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found())
5193909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid)
520859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version()))
521859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0])
522859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1])
523859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2])
524859aef02SPaolo Bonzini
525859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
526859aef02SPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'qemu_confdir', 'qemu_datadir',
527859aef02SPaolo Bonzini           'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir',
528859aef02SPaolo Bonzini           'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath']
529859aef02SPaolo Bonziniforeach k, v: config_host
530859aef02SPaolo Bonzini  if arrays.contains(k)
531859aef02SPaolo Bonzini    if v != ''
532859aef02SPaolo Bonzini      v = '"' + '", "'.join(v.split()) + '", '
533859aef02SPaolo Bonzini    endif
534859aef02SPaolo Bonzini    config_host_data.set(k, v)
535859aef02SPaolo Bonzini  elif k == 'ARCH'
536859aef02SPaolo Bonzini    config_host_data.set('HOST_' + v.to_upper(), 1)
537859aef02SPaolo Bonzini  elif strings.contains(k)
538859aef02SPaolo Bonzini    if not k.startswith('CONFIG_')
539859aef02SPaolo Bonzini      k = 'CONFIG_' + k.to_upper()
540859aef02SPaolo Bonzini    endif
541859aef02SPaolo Bonzini    config_host_data.set_quoted(k, v)
542859aef02SPaolo Bonzini  elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_')
543859aef02SPaolo Bonzini    config_host_data.set(k, v == 'y' ? 1 : v)
544859aef02SPaolo Bonzini  endif
545859aef02SPaolo Bonziniendforeach
546859aef02SPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data)
547859aef02SPaolo Bonzini
5482becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py')
549a98006bcSPaolo Bonziniconfig_all_devices = {}
550ca0fc784SPaolo Bonziniconfig_all_disas = {}
5512becc36aSPaolo Bonziniconfig_devices_mak_list = []
5522becc36aSPaolo Bonziniconfig_devices_h = {}
553859aef02SPaolo Bonziniconfig_target_h = {}
5542becc36aSPaolo Bonziniconfig_target_mak = {}
555ca0fc784SPaolo Bonzini
556ca0fc784SPaolo Bonzinidisassemblers = {
557ca0fc784SPaolo Bonzini  'alpha' : ['CONFIG_ALPHA_DIS'],
558ca0fc784SPaolo Bonzini  'arm' : ['CONFIG_ARM_DIS'],
559ca0fc784SPaolo Bonzini  'avr' : ['CONFIG_AVR_DIS'],
560ca0fc784SPaolo Bonzini  'cris' : ['CONFIG_CRIS_DIS'],
561ca0fc784SPaolo Bonzini  'hppa' : ['CONFIG_HPPA_DIS'],
562ca0fc784SPaolo Bonzini  'i386' : ['CONFIG_I386_DIS'],
563ca0fc784SPaolo Bonzini  'x86_64' : ['CONFIG_I386_DIS'],
564ca0fc784SPaolo Bonzini  'x32' : ['CONFIG_I386_DIS'],
565ca0fc784SPaolo Bonzini  'lm32' : ['CONFIG_LM32_DIS'],
566ca0fc784SPaolo Bonzini  'm68k' : ['CONFIG_M68K_DIS'],
567ca0fc784SPaolo Bonzini  'microblaze' : ['CONFIG_MICROBLAZE_DIS'],
568ca0fc784SPaolo Bonzini  'mips' : ['CONFIG_MIPS_DIS'],
569ca0fc784SPaolo Bonzini  'moxie' : ['CONFIG_MOXIE_DIS'],
570ca0fc784SPaolo Bonzini  'nios2' : ['CONFIG_NIOS2_DIS'],
571ca0fc784SPaolo Bonzini  'or1k' : ['CONFIG_OPENRISC_DIS'],
572ca0fc784SPaolo Bonzini  'ppc' : ['CONFIG_PPC_DIS'],
573ca0fc784SPaolo Bonzini  'riscv' : ['CONFIG_RISCV_DIS'],
574ca0fc784SPaolo Bonzini  'rx' : ['CONFIG_RX_DIS'],
575ca0fc784SPaolo Bonzini  's390' : ['CONFIG_S390_DIS'],
576ca0fc784SPaolo Bonzini  'sh4' : ['CONFIG_SH4_DIS'],
577ca0fc784SPaolo Bonzini  'sparc' : ['CONFIG_SPARC_DIS'],
578ca0fc784SPaolo Bonzini  'xtensa' : ['CONFIG_XTENSA_DIS'],
579ca0fc784SPaolo Bonzini}
580ca0fc784SPaolo Bonziniif link_language == 'cpp'
581ca0fc784SPaolo Bonzini  disassemblers += {
582ca0fc784SPaolo Bonzini    'aarch64' : [ 'CONFIG_ARM_A64_DIS'],
583ca0fc784SPaolo Bonzini    'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'],
584ca0fc784SPaolo Bonzini    'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'],
585ca0fc784SPaolo Bonzini  }
586ca0fc784SPaolo Bonziniendif
587ca0fc784SPaolo Bonzini
5882becc36aSPaolo Bonzinikconfig_external_symbols = [
5892becc36aSPaolo Bonzini  'CONFIG_KVM',
5902becc36aSPaolo Bonzini  'CONFIG_XEN',
5912becc36aSPaolo Bonzini  'CONFIG_TPM',
5922becc36aSPaolo Bonzini  'CONFIG_SPICE',
5932becc36aSPaolo Bonzini  'CONFIG_IVSHMEM',
5942becc36aSPaolo Bonzini  'CONFIG_OPENGL',
5952becc36aSPaolo Bonzini  'CONFIG_X11',
5962becc36aSPaolo Bonzini  'CONFIG_VHOST_USER',
59740bc0ca9SLaurent Vivier  'CONFIG_VHOST_VDPA',
5982becc36aSPaolo Bonzini  'CONFIG_VHOST_KERNEL',
5992becc36aSPaolo Bonzini  'CONFIG_VIRTFS',
6002becc36aSPaolo Bonzini  'CONFIG_LINUX',
6012becc36aSPaolo Bonzini  'CONFIG_PVRDMA',
6022becc36aSPaolo Bonzini]
603859aef02SPaolo Bonziniignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS']
604ca0fc784SPaolo Bonzini
605a81df1b6SPaolo Bonziniforeach target : target_dirs
606859aef02SPaolo Bonzini  config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak')
607859aef02SPaolo Bonzini
608ca0fc784SPaolo Bonzini  foreach k, v: disassemblers
609ca0fc784SPaolo Bonzini    if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k)
610ca0fc784SPaolo Bonzini      foreach sym: v
611ca0fc784SPaolo Bonzini        config_target += { sym: 'y' }
612ca0fc784SPaolo Bonzini        config_all_disas += { sym: 'y' }
613ca0fc784SPaolo Bonzini      endforeach
614ca0fc784SPaolo Bonzini    endif
615ca0fc784SPaolo Bonzini  endforeach
616ca0fc784SPaolo Bonzini
617859aef02SPaolo Bonzini  config_target_data = configuration_data()
618859aef02SPaolo Bonzini  foreach k, v: config_target
619859aef02SPaolo Bonzini    if not k.startswith('TARGET_') and not k.startswith('CONFIG_')
620859aef02SPaolo Bonzini      # do nothing
621859aef02SPaolo Bonzini    elif ignored.contains(k)
622859aef02SPaolo Bonzini      # do nothing
623859aef02SPaolo Bonzini    elif k == 'TARGET_BASE_ARCH'
624859aef02SPaolo Bonzini      config_target_data.set('TARGET_' + v.to_upper(), 1)
625859aef02SPaolo Bonzini    elif k == 'TARGET_NAME'
626859aef02SPaolo Bonzini      config_target_data.set_quoted(k, v)
627859aef02SPaolo Bonzini    elif v == 'y'
628859aef02SPaolo Bonzini      config_target_data.set(k, 1)
629859aef02SPaolo Bonzini    else
630859aef02SPaolo Bonzini      config_target_data.set(k, v)
631859aef02SPaolo Bonzini    endif
632859aef02SPaolo Bonzini  endforeach
633859aef02SPaolo Bonzini  config_target_h += {target: configure_file(output: target + '-config-target.h',
634859aef02SPaolo Bonzini                                               configuration: config_target_data)}
6352becc36aSPaolo Bonzini
6362becc36aSPaolo Bonzini  if target.endswith('-softmmu')
6372becc36aSPaolo Bonzini    base_kconfig = []
6382becc36aSPaolo Bonzini    foreach sym : kconfig_external_symbols
639859aef02SPaolo Bonzini      if sym in config_target or sym in config_host
6402becc36aSPaolo Bonzini        base_kconfig += '@0@=y'.format(sym)
6412becc36aSPaolo Bonzini      endif
6422becc36aSPaolo Bonzini    endforeach
6432becc36aSPaolo Bonzini
6442becc36aSPaolo Bonzini    config_devices_mak = target + '-config-devices.mak'
6452becc36aSPaolo Bonzini    config_devices_mak = configure_file(
6462becc36aSPaolo Bonzini      input: ['default-configs' / target + '.mak', 'Kconfig'],
6472becc36aSPaolo Bonzini      output: config_devices_mak,
6482becc36aSPaolo Bonzini      depfile: config_devices_mak + '.d',
6492becc36aSPaolo Bonzini      capture: true,
6502becc36aSPaolo Bonzini      command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'],
6512becc36aSPaolo Bonzini                config_devices_mak, '@DEPFILE@', '@INPUT@',
6522becc36aSPaolo Bonzini                base_kconfig])
653859aef02SPaolo Bonzini
654859aef02SPaolo Bonzini    config_devices_data = configuration_data()
655859aef02SPaolo Bonzini    config_devices = keyval.load(config_devices_mak)
656859aef02SPaolo Bonzini    foreach k, v: config_devices
657859aef02SPaolo Bonzini      config_devices_data.set(k, 1)
658859aef02SPaolo Bonzini    endforeach
6592becc36aSPaolo Bonzini    config_devices_mak_list += config_devices_mak
660859aef02SPaolo Bonzini    config_devices_h += {target: configure_file(output: target + '-config-devices.h',
661859aef02SPaolo Bonzini                                                configuration: config_devices_data)}
662859aef02SPaolo Bonzini    config_target += config_devices
663a98006bcSPaolo Bonzini    config_all_devices += config_devices
6642becc36aSPaolo Bonzini  endif
6652becc36aSPaolo Bonzini  config_target_mak += {target: config_target}
666a81df1b6SPaolo Bonziniendforeach
667a81df1b6SPaolo Bonzini
6682becc36aSPaolo Bonzini# This configuration is used to build files that are shared by
6692becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common"
6702becc36aSPaolo Bonzini# static_library target.
6712becc36aSPaolo Bonzini#
6722becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would
6732becc36aSPaolo Bonzini# build literally all source files, including devices only used by
6742becc36aSPaolo Bonzini# targets that are not built for this compilation.  The CONFIG_ALL
6752becc36aSPaolo Bonzini# pseudo symbol replaces it.
6762becc36aSPaolo Bonzini
6772becc36aSPaolo Bonziniconfig_all = config_all_devices
6782becc36aSPaolo Bonziniconfig_all += config_host
6792becc36aSPaolo Bonziniconfig_all += config_all_disas
6802becc36aSPaolo Bonziniconfig_all += {
6812becc36aSPaolo Bonzini  'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'),
6822becc36aSPaolo Bonzini  'CONFIG_SOFTMMU': have_system,
6832becc36aSPaolo Bonzini  'CONFIG_USER_ONLY': have_user,
6842becc36aSPaolo Bonzini  'CONFIG_ALL': true,
6852becc36aSPaolo Bonzini}
6862becc36aSPaolo Bonzini
687a81df1b6SPaolo Bonzini# Generators
688a81df1b6SPaolo Bonzini
6893f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool')
690650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl')
691a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py')
692a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py',
693a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/commands.py',
694a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/common.py',
695a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/error.py',
696a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/events.py',
697a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/expr.py',
698a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/gen.py',
699a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/introspect.py',
700a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/parser.py',
701a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/schema.py',
702a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/source.py',
703a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/types.py',
704a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/visit.py',
705a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/common.py',
706a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi-gen.py'
707a81df1b6SPaolo Bonzini]
708a81df1b6SPaolo Bonzini
709a81df1b6SPaolo Bonzinitracetool = [
710a81df1b6SPaolo Bonzini  python, files('scripts/tracetool.py'),
711a81df1b6SPaolo Bonzini   '--backend=' + config_host['TRACE_BACKENDS']
712a81df1b6SPaolo Bonzini]
713a81df1b6SPaolo Bonzini
7142c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'),
7152c273f32SMarc-André Lureau                    meson.current_source_dir(),
716859aef02SPaolo Bonzini                    config_host['PKGVERSION'], meson.project_version()]
7172c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h',
7182c273f32SMarc-André Lureau                             output: 'qemu-version.h',
7192c273f32SMarc-André Lureau                             command: qemu_version_cmd,
7202c273f32SMarc-André Lureau                             capture: true,
7212c273f32SMarc-André Lureau                             build_by_default: true,
7222c273f32SMarc-André Lureau                             build_always_stale: true)
7232c273f32SMarc-André Lureaugenh += qemu_version
7242c273f32SMarc-André Lureau
7253f885659SMarc-André Lureauhxdep = []
7263f885659SMarc-André Lureauhx_headers = [
7273f885659SMarc-André Lureau  ['qemu-options.hx', 'qemu-options.def'],
7283f885659SMarc-André Lureau  ['qemu-img-cmds.hx', 'qemu-img-cmds.h'],
7293f885659SMarc-André Lureau]
7303f885659SMarc-André Lureauif have_system
7313f885659SMarc-André Lureau  hx_headers += [
7323f885659SMarc-André Lureau    ['hmp-commands.hx', 'hmp-commands.h'],
7333f885659SMarc-André Lureau    ['hmp-commands-info.hx', 'hmp-commands-info.h'],
7343f885659SMarc-André Lureau  ]
7353f885659SMarc-André Lureauendif
7363f885659SMarc-André Lureauforeach d : hx_headers
737b7c70bf2SMarc-André Lureau  hxdep += custom_target(d[1],
7383f885659SMarc-André Lureau                input: files(d[0]),
7393f885659SMarc-André Lureau                output: d[1],
7403f885659SMarc-André Lureau                capture: true,
7413f885659SMarc-André Lureau                build_by_default: true, # to be removed when added to a target
7423f885659SMarc-André Lureau                command: [hxtool, '-h', '@INPUT0@'])
7433f885659SMarc-André Lureauendforeach
7443f885659SMarc-André Lureaugenh += hxdep
7453f885659SMarc-André Lureau
746eb937365SPeter MaydellSPHINX_ARGS = [config_host['SPHINX_BUILD'],
747eb937365SPeter Maydell               '-Dversion=' + meson.project_version(),
748eb937365SPeter Maydell               '-Drelease=' + config_host['PKGVERSION']]
749eb937365SPeter Maydell
750eb937365SPeter Maydellif get_option('werror')
751eb937365SPeter Maydell  SPHINX_ARGS += [ '-W' ]
752eb937365SPeter Maydellendif
753eb937365SPeter Maydell
754b3f4830aSPeter Maydellsphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py',
755b3f4830aSPeter Maydell                        meson.source_root() / 'docs/sphinx/hxtool.py',
756b3f4830aSPeter Maydell                        meson.source_root() / 'docs/sphinx/kerneldoc.py',
757b3f4830aSPeter Maydell                        meson.source_root() / 'docs/sphinx/kernellog.py',
758b3f4830aSPeter Maydell                        meson.source_root() / 'docs/sphinx/qapidoc.py',
759b3f4830aSPeter Maydell                        meson.source_root() / 'docs/sphinx/qmp_lexer.py',
760b3f4830aSPeter Maydell                        qapi_gen_depends ]
761b3f4830aSPeter Maydell
762a81df1b6SPaolo Bonzini# Collect sourcesets.
763a81df1b6SPaolo Bonzini
764a81df1b6SPaolo Bonziniutil_ss = ss.source_set()
765a81df1b6SPaolo Bonzinistub_ss = ss.source_set()
766a81df1b6SPaolo Bonzinitrace_ss = ss.source_set()
7673154fee4SMarc-André Lureaublock_ss = ss.source_set()
7684a96337dSPaolo Bonziniblockdev_ss = ss.source_set()
769ff219dcaSPaolo Bonziniqmp_ss = ss.source_set()
7702becc36aSPaolo Bonzinicommon_ss = ss.source_set()
7712becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set()
7722becc36aSPaolo Bonziniuser_ss = ss.source_set()
7732becc36aSPaolo Bonzinibsd_user_ss = ss.source_set()
7742becc36aSPaolo Bonzinilinux_user_ss = ss.source_set()
7752becc36aSPaolo Bonzinispecific_ss = ss.source_set()
77664ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set()
7772becc36aSPaolo Bonzini
7783154fee4SMarc-André Lureaumodules = {}
7792becc36aSPaolo Bonzinihw_arch = {}
7802becc36aSPaolo Bonzinitarget_arch = {}
7812becc36aSPaolo Bonzinitarget_softmmu_arch = {}
782a81df1b6SPaolo Bonzini
783a81df1b6SPaolo Bonzini###############
784a81df1b6SPaolo Bonzini# Trace files #
785a81df1b6SPaolo Bonzini###############
786a81df1b6SPaolo Bonzini
787c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once
788c9322ab5SMarc-André Lureau# we have those
789a81df1b6SPaolo Bonzinitrace_events_subdirs = [
790a81df1b6SPaolo Bonzini  'accel/kvm',
791a81df1b6SPaolo Bonzini  'accel/tcg',
792a81df1b6SPaolo Bonzini  'crypto',
793a81df1b6SPaolo Bonzini  'monitor',
794a81df1b6SPaolo Bonzini]
795a81df1b6SPaolo Bonziniif have_user
796a81df1b6SPaolo Bonzini  trace_events_subdirs += [ 'linux-user' ]
797a81df1b6SPaolo Bonziniendif
798a81df1b6SPaolo Bonziniif have_block
799a81df1b6SPaolo Bonzini  trace_events_subdirs += [
800a81df1b6SPaolo Bonzini    'authz',
801a81df1b6SPaolo Bonzini    'block',
802a81df1b6SPaolo Bonzini    'io',
803a81df1b6SPaolo Bonzini    'nbd',
804a81df1b6SPaolo Bonzini    'scsi',
805a81df1b6SPaolo Bonzini  ]
806a81df1b6SPaolo Bonziniendif
807a81df1b6SPaolo Bonziniif have_system
808a81df1b6SPaolo Bonzini  trace_events_subdirs += [
809a81df1b6SPaolo Bonzini    'audio',
810a81df1b6SPaolo Bonzini    'backends',
811a81df1b6SPaolo Bonzini    'backends/tpm',
812a81df1b6SPaolo Bonzini    'chardev',
813a81df1b6SPaolo Bonzini    'hw/9pfs',
814a81df1b6SPaolo Bonzini    'hw/acpi',
815a81df1b6SPaolo Bonzini    'hw/alpha',
816a81df1b6SPaolo Bonzini    'hw/arm',
817a81df1b6SPaolo Bonzini    'hw/audio',
818a81df1b6SPaolo Bonzini    'hw/block',
819a81df1b6SPaolo Bonzini    'hw/block/dataplane',
820a81df1b6SPaolo Bonzini    'hw/char',
821a81df1b6SPaolo Bonzini    'hw/display',
822a81df1b6SPaolo Bonzini    'hw/dma',
823a81df1b6SPaolo Bonzini    'hw/hppa',
824a81df1b6SPaolo Bonzini    'hw/hyperv',
825a81df1b6SPaolo Bonzini    'hw/i2c',
826a81df1b6SPaolo Bonzini    'hw/i386',
827a81df1b6SPaolo Bonzini    'hw/i386/xen',
828a81df1b6SPaolo Bonzini    'hw/ide',
829a81df1b6SPaolo Bonzini    'hw/input',
830a81df1b6SPaolo Bonzini    'hw/intc',
831a81df1b6SPaolo Bonzini    'hw/isa',
832a81df1b6SPaolo Bonzini    'hw/mem',
833a81df1b6SPaolo Bonzini    'hw/mips',
834a81df1b6SPaolo Bonzini    'hw/misc',
835a81df1b6SPaolo Bonzini    'hw/misc/macio',
836a81df1b6SPaolo Bonzini    'hw/net',
837a81df1b6SPaolo Bonzini    'hw/nvram',
838a81df1b6SPaolo Bonzini    'hw/pci',
839a81df1b6SPaolo Bonzini    'hw/pci-host',
840a81df1b6SPaolo Bonzini    'hw/ppc',
841a81df1b6SPaolo Bonzini    'hw/rdma',
842a81df1b6SPaolo Bonzini    'hw/rdma/vmw',
843a81df1b6SPaolo Bonzini    'hw/rtc',
844a81df1b6SPaolo Bonzini    'hw/s390x',
845a81df1b6SPaolo Bonzini    'hw/scsi',
846a81df1b6SPaolo Bonzini    'hw/sd',
847a81df1b6SPaolo Bonzini    'hw/sparc',
848a81df1b6SPaolo Bonzini    'hw/sparc64',
849a81df1b6SPaolo Bonzini    'hw/ssi',
850a81df1b6SPaolo Bonzini    'hw/timer',
851a81df1b6SPaolo Bonzini    'hw/tpm',
852a81df1b6SPaolo Bonzini    'hw/usb',
853a81df1b6SPaolo Bonzini    'hw/vfio',
854a81df1b6SPaolo Bonzini    'hw/virtio',
855a81df1b6SPaolo Bonzini    'hw/watchdog',
856a81df1b6SPaolo Bonzini    'hw/xen',
857a81df1b6SPaolo Bonzini    'hw/gpio',
858a81df1b6SPaolo Bonzini    'migration',
859a81df1b6SPaolo Bonzini    'net',
8608b7a5507SPhilippe Mathieu-Daudé    'softmmu',
861a81df1b6SPaolo Bonzini    'ui',
862a81df1b6SPaolo Bonzini  ]
863a81df1b6SPaolo Bonziniendif
864a81df1b6SPaolo Bonzinitrace_events_subdirs += [
865a81df1b6SPaolo Bonzini  'hw/core',
866a81df1b6SPaolo Bonzini  'qapi',
867a81df1b6SPaolo Bonzini  'qom',
868a81df1b6SPaolo Bonzini  'target/arm',
869a81df1b6SPaolo Bonzini  'target/hppa',
870a81df1b6SPaolo Bonzini  'target/i386',
871a81df1b6SPaolo Bonzini  'target/mips',
872a81df1b6SPaolo Bonzini  'target/ppc',
873a81df1b6SPaolo Bonzini  'target/riscv',
874a81df1b6SPaolo Bonzini  'target/s390x',
875a81df1b6SPaolo Bonzini  'target/sparc',
876a81df1b6SPaolo Bonzini  'util',
877a81df1b6SPaolo Bonzini]
878a81df1b6SPaolo Bonzini
879a81df1b6SPaolo Bonzinisubdir('qapi')
880a81df1b6SPaolo Bonzinisubdir('qobject')
881a81df1b6SPaolo Bonzinisubdir('stubs')
882a81df1b6SPaolo Bonzinisubdir('trace')
883a81df1b6SPaolo Bonzinisubdir('util')
8845582c58fSMarc-André Lureausubdir('qom')
8855582c58fSMarc-André Lureausubdir('authz')
886a81df1b6SPaolo Bonzinisubdir('crypto')
8872d78b56eSMarc-André Lureausubdir('ui')
888a81df1b6SPaolo Bonzini
8893154fee4SMarc-André Lureau
8903154fee4SMarc-André Lureauif enable_modules
8913154fee4SMarc-André Lureau  libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO')
8923154fee4SMarc-André Lureau  modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO')
8933154fee4SMarc-André Lureauendif
8943154fee4SMarc-André Lureau
895a81df1b6SPaolo Bonzini# Build targets from sourcesets
896a81df1b6SPaolo Bonzini
8972becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false)
898a81df1b6SPaolo Bonzini
899a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss)
9002becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false)
901a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil',
902a81df1b6SPaolo Bonzini                             sources: util_ss.sources() + stub_ss.sources() + genh,
903a81df1b6SPaolo Bonzini                             dependencies: [util_ss.dependencies(), m, glib, socket])
904a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil,
90504c6f1e7SMarc-André Lureau                              sources: genh + version_res)
906a81df1b6SPaolo Bonzini
907abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'),
908abff1abfSPaolo Bonzini                       output: 'decode-@BASENAME@.c.inc',
909abff1abfSPaolo Bonzini                       arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@'])
910abff1abfSPaolo Bonzini
911478e943fSPaolo Bonzinisubdir('audio')
9127fcfd456SMarc-André Lureausubdir('io')
913848e8ff6SMarc-André Lureausubdir('chardev')
914ec0d5893SMarc-André Lureausubdir('fsdev')
915abff1abfSPaolo Bonzinisubdir('libdecnumber')
916d3b18480SMarc-André Lureausubdir('target')
917708eab42SMarc-André Lureausubdir('dump')
918ec0d5893SMarc-André Lureau
9195e5733e5SMarc-André Lureaublock_ss.add(files(
9205e5733e5SMarc-André Lureau  'block.c',
9215e5733e5SMarc-André Lureau  'blockjob.c',
9225e5733e5SMarc-André Lureau  'job.c',
9235e5733e5SMarc-André Lureau  'qemu-io-cmds.c',
9245e5733e5SMarc-André Lureau))
9255e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c'))
9265e5733e5SMarc-André Lureau
9275e5733e5SMarc-André Lureausubdir('nbd')
9285e5733e5SMarc-André Lureausubdir('scsi')
9295e5733e5SMarc-André Lureausubdir('block')
9305e5733e5SMarc-André Lureau
9314a96337dSPaolo Bonziniblockdev_ss.add(files(
9324a96337dSPaolo Bonzini  'blockdev.c',
9334a96337dSPaolo Bonzini  'blockdev-nbd.c',
9344a96337dSPaolo Bonzini  'iothread.c',
9354a96337dSPaolo Bonzini  'job-qmp.c',
9364a96337dSPaolo Bonzini))
9374a96337dSPaolo Bonzini
9384a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon,
9394a96337dSPaolo Bonzini# os-win32.c does not
9404a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c'))
9414a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')])
9424a96337dSPaolo Bonzini
9434a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss)
9444a96337dSPaolo Bonzinisoftmmu_ss.add(files(
9454a96337dSPaolo Bonzini  'bootdevice.c',
9464a96337dSPaolo Bonzini  'dma-helpers.c',
9474a96337dSPaolo Bonzini  'qdev-monitor.c',
9484a96337dSPaolo Bonzini), sdl)
9494a96337dSPaolo Bonzini
9504a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c'))
9514a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp])
9524a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt],  if_true: [files('device_tree.c')])
9534a96337dSPaolo Bonzini
9544a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c'))
9554a96337dSPaolo Bonzini
9565d3ea0e1SPaolo Bonzinisubdir('softmmu')
957c9322ab5SMarc-André Lureau
958c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl)
959c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c'))
960c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files(
961c9322ab5SMarc-André Lureau  'fpu/softfloat.c',
962c9322ab5SMarc-André Lureau  'tcg/optimize.c',
963c9322ab5SMarc-André Lureau  'tcg/tcg-common.c',
964c9322ab5SMarc-André Lureau  'tcg/tcg-op-gvec.c',
965c9322ab5SMarc-André Lureau  'tcg/tcg-op-vec.c',
966c9322ab5SMarc-André Lureau  'tcg/tcg-op.c',
967c9322ab5SMarc-André Lureau  'tcg/tcg.c',
968c9322ab5SMarc-André Lureau))
969c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c'))
970c9322ab5SMarc-André Lureau
971ab318051SMarc-André Lureausubdir('backends')
972c574e161SMarc-André Lureausubdir('disas')
97355166230SMarc-André Lureausubdir('migration')
974ff219dcaSPaolo Bonzinisubdir('monitor')
975cdaf0722SMarc-André Lureausubdir('net')
97617ef2af6SMarc-André Lureausubdir('replay')
977582ea95fSMarc-André Lureausubdir('hw')
9781a82878aSMarc-André Lureausubdir('accel')
979f556b4a1SPaolo Bonzinisubdir('plugins')
980b309c321SMarc-André Lureausubdir('bsd-user')
9813a30446aSMarc-André Lureausubdir('linux-user')
9823a30446aSMarc-André Lureau
983b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c'))
984b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss)
985b309c321SMarc-André Lureau
9863a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c'))
9873a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss)
9885d3ea0e1SPaolo Bonzini
989a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries
990a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos')
99164ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz')
992a2ce7dbdSPaolo Bonzini
9933154fee4SMarc-André Lureaublock_mods = []
9943154fee4SMarc-André Lureausoftmmu_mods = []
9953154fee4SMarc-André Lureauforeach d, list : modules
9963154fee4SMarc-André Lureau  foreach m, module_ss : list
9973154fee4SMarc-André Lureau    if enable_modules and targetos != 'windows'
9983e292c51SGerd Hoffmann      module_ss = module_ss.apply(config_all, strict: false)
9993154fee4SMarc-André Lureau      sl = static_library(d + '-' + m, [genh, module_ss.sources()],
10003154fee4SMarc-André Lureau                          dependencies: [modulecommon, module_ss.dependencies()], pic: true)
10013154fee4SMarc-André Lureau      if d == 'block'
10023154fee4SMarc-André Lureau        block_mods += sl
10033154fee4SMarc-André Lureau      else
10043154fee4SMarc-André Lureau        softmmu_mods += sl
10053154fee4SMarc-André Lureau      endif
10063154fee4SMarc-André Lureau    else
10073154fee4SMarc-André Lureau      if d == 'block'
10083154fee4SMarc-André Lureau        block_ss.add_all(module_ss)
10093154fee4SMarc-André Lureau      else
10103154fee4SMarc-André Lureau        softmmu_ss.add_all(module_ss)
10113154fee4SMarc-André Lureau      endif
10123154fee4SMarc-André Lureau    endif
10133154fee4SMarc-André Lureau  endforeach
10143154fee4SMarc-André Lureauendforeach
10153154fee4SMarc-André Lureau
10163154fee4SMarc-André Lureaunm = find_program('nm')
1017604f3e4eSYonggang Luoundefsym = find_program('scripts/undefsym.py')
10183154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms',
10193154fee4SMarc-André Lureau                             input: [libqemuutil, block_mods],
10203154fee4SMarc-André Lureau                             capture: true,
10213154fee4SMarc-André Lureau                             command: [undefsym, nm, '@INPUT@'])
10223154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms',
10233154fee4SMarc-André Lureau                             input: [libqemuutil, softmmu_mods],
10243154fee4SMarc-André Lureau                             capture: true,
10253154fee4SMarc-André Lureau                             command: [undefsym, nm, '@INPUT@'])
10263154fee4SMarc-André Lureau
10275e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false)
10285e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh,
10295e5733e5SMarc-André Lureau                          dependencies: block_ss.dependencies(),
10305e5733e5SMarc-André Lureau                          link_depends: block_syms,
10315e5733e5SMarc-André Lureau                          name_suffix: 'fa',
10325e5733e5SMarc-André Lureau                          build_by_default: false)
10335e5733e5SMarc-André Lureau
10345e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock],
1035b7c70bf2SMarc-André Lureau                           link_args: '@block.syms',
1036b7c70bf2SMarc-André Lureau                           dependencies: [crypto, io])
10375e5733e5SMarc-André Lureau
1038ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false)
1039ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh,
1040ff219dcaSPaolo Bonzini                        dependencies: qmp_ss.dependencies(),
1041ff219dcaSPaolo Bonzini                        name_suffix: 'fa',
1042ff219dcaSPaolo Bonzini                        build_by_default: false)
1043ff219dcaSPaolo Bonzini
1044ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp])
1045ff219dcaSPaolo Bonzini
10463154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods
10473154fee4SMarc-André Lureau  shared_module(m.name(),
10483154fee4SMarc-André Lureau                name_prefix: '',
10493154fee4SMarc-André Lureau                link_whole: m,
10503154fee4SMarc-André Lureau                install: true,
10513154fee4SMarc-André Lureau                install_dir: config_host['qemu_moddir'])
10523154fee4SMarc-André Lureauendforeach
10533154fee4SMarc-André Lureau
105464ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp)
105564ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil)
105664ed6f92SPaolo Bonzini
105764ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss])
10582becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss)
10592becc36aSPaolo Bonzini
10602becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false)
10612becc36aSPaolo Bonzinicommon_all = static_library('common',
10622becc36aSPaolo Bonzini                            build_by_default: false,
10632becc36aSPaolo Bonzini                            sources: common_all.sources() + genh,
10642becc36aSPaolo Bonzini                            dependencies: common_all.dependencies(),
10652becc36aSPaolo Bonzini                            name_suffix: 'fa')
10662becc36aSPaolo Bonzini
1067c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh')
1068c9322ab5SMarc-André Lureau
106964ed6f92SPaolo Bonziniemulators = []
10702becc36aSPaolo Bonziniforeach target : target_dirs
10712becc36aSPaolo Bonzini  config_target = config_target_mak[target]
10722becc36aSPaolo Bonzini  target_name = config_target['TARGET_NAME']
10732becc36aSPaolo Bonzini  arch = config_target['TARGET_BASE_ARCH']
1074859aef02SPaolo Bonzini  arch_srcs = [config_target_h[target]]
107564ed6f92SPaolo Bonzini  arch_deps = []
107664ed6f92SPaolo Bonzini  c_args = ['-DNEED_CPU_H',
107764ed6f92SPaolo Bonzini            '-DCONFIG_TARGET="@0@-config-target.h"'.format(target),
107864ed6f92SPaolo Bonzini            '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)]
107964ed6f92SPaolo Bonzini  link_args = []
10802becc36aSPaolo Bonzini
1081859aef02SPaolo Bonzini  config_target += config_host
10822becc36aSPaolo Bonzini  target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
10832becc36aSPaolo Bonzini  if targetos == 'linux'
10842becc36aSPaolo Bonzini    target_inc += include_directories('linux-headers', is_system: true)
10852becc36aSPaolo Bonzini  endif
10862becc36aSPaolo Bonzini  if target.endswith('-softmmu')
10872becc36aSPaolo Bonzini    qemu_target_name = 'qemu-system-' + target_name
10882becc36aSPaolo Bonzini    target_type='system'
1089abff1abfSPaolo Bonzini    t = target_softmmu_arch[arch].apply(config_target, strict: false)
1090abff1abfSPaolo Bonzini    arch_srcs += t.sources()
109164ed6f92SPaolo Bonzini    arch_deps += t.dependencies()
1092abff1abfSPaolo Bonzini
10932c44220dSMarc-André Lureau    hw_dir = target_name == 'sparc64' ? 'sparc64' : arch
10942c44220dSMarc-André Lureau    hw = hw_arch[hw_dir].apply(config_target, strict: false)
10952c44220dSMarc-André Lureau    arch_srcs += hw.sources()
109664ed6f92SPaolo Bonzini    arch_deps += hw.dependencies()
10972c44220dSMarc-André Lureau
10982becc36aSPaolo Bonzini    arch_srcs += config_devices_h[target]
109964ed6f92SPaolo Bonzini    link_args += ['@block.syms', '@qemu.syms']
11002becc36aSPaolo Bonzini  else
11013a30446aSMarc-André Lureau    abi = config_target['TARGET_ABI_DIR']
11022becc36aSPaolo Bonzini    target_type='user'
11032becc36aSPaolo Bonzini    qemu_target_name = 'qemu-' + target_name
11042becc36aSPaolo Bonzini    if 'CONFIG_LINUX_USER' in config_target
11052becc36aSPaolo Bonzini      base_dir = 'linux-user'
11062becc36aSPaolo Bonzini      target_inc += include_directories('linux-user/host/' / config_host['ARCH'])
11072becc36aSPaolo Bonzini    else
11082becc36aSPaolo Bonzini      base_dir = 'bsd-user'
11092becc36aSPaolo Bonzini    endif
11102becc36aSPaolo Bonzini    target_inc += include_directories(
11112becc36aSPaolo Bonzini      base_dir,
11123a30446aSMarc-André Lureau      base_dir / abi,
11132becc36aSPaolo Bonzini    )
11143a30446aSMarc-André Lureau    if 'CONFIG_LINUX_USER' in config_target
11153a30446aSMarc-André Lureau      dir = base_dir / abi
11163a30446aSMarc-André Lureau      arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c')
11173a30446aSMarc-André Lureau      if config_target.has_key('TARGET_SYSTBL_ABI')
11183a30446aSMarc-André Lureau        arch_srcs += \
11193a30446aSMarc-André Lureau          syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'],
11203a30446aSMarc-André Lureau                                             extra_args : config_target['TARGET_SYSTBL_ABI'])
11213a30446aSMarc-André Lureau      endif
11223a30446aSMarc-André Lureau    endif
11232becc36aSPaolo Bonzini  endif
11242becc36aSPaolo Bonzini
1125c9322ab5SMarc-André Lureau  if 'TARGET_XML_FILES' in config_target
1126c9322ab5SMarc-André Lureau    gdbstub_xml = custom_target(target + '-gdbstub-xml.c',
1127c9322ab5SMarc-André Lureau                                output: target + '-gdbstub-xml.c',
1128c9322ab5SMarc-André Lureau                                input: files(config_target['TARGET_XML_FILES'].split()),
1129c9322ab5SMarc-André Lureau                                command: [feature_to_c, '@INPUT@'],
1130c9322ab5SMarc-André Lureau                                capture: true)
1131c9322ab5SMarc-André Lureau    arch_srcs += gdbstub_xml
1132c9322ab5SMarc-André Lureau  endif
1133c9322ab5SMarc-André Lureau
1134abff1abfSPaolo Bonzini  t = target_arch[arch].apply(config_target, strict: false)
1135abff1abfSPaolo Bonzini  arch_srcs += t.sources()
113664ed6f92SPaolo Bonzini  arch_deps += t.dependencies()
1137abff1abfSPaolo Bonzini
11382becc36aSPaolo Bonzini  target_common = common_ss.apply(config_target, strict: false)
11392becc36aSPaolo Bonzini  objects = common_all.extract_objects(target_common.sources())
114064ed6f92SPaolo Bonzini  deps = target_common.dependencies()
11412becc36aSPaolo Bonzini
11422becc36aSPaolo Bonzini  target_specific = specific_ss.apply(config_target, strict: false)
11432becc36aSPaolo Bonzini  arch_srcs += target_specific.sources()
114464ed6f92SPaolo Bonzini  arch_deps += target_specific.dependencies()
11452becc36aSPaolo Bonzini
114664ed6f92SPaolo Bonzini  lib = static_library('qemu-' + target,
1147859aef02SPaolo Bonzini                 sources: arch_srcs + genh,
1148b7612f45SPaolo Bonzini                 dependencies: arch_deps,
11492becc36aSPaolo Bonzini                 objects: objects,
11502becc36aSPaolo Bonzini                 include_directories: target_inc,
115164ed6f92SPaolo Bonzini                 c_args: c_args,
115264ed6f92SPaolo Bonzini                 build_by_default: false,
11532becc36aSPaolo Bonzini                 name_suffix: 'fa')
115464ed6f92SPaolo Bonzini
115564ed6f92SPaolo Bonzini  if target.endswith('-softmmu')
115664ed6f92SPaolo Bonzini    execs = [{
115764ed6f92SPaolo Bonzini      'name': 'qemu-system-' + target_name,
115864ed6f92SPaolo Bonzini      'gui': false,
115964ed6f92SPaolo Bonzini      'sources': files('softmmu/main.c'),
116064ed6f92SPaolo Bonzini      'dependencies': []
116164ed6f92SPaolo Bonzini    }]
116235be72baSPaolo Bonzini    if targetos == 'windows' and (sdl.found() or gtk.found())
116364ed6f92SPaolo Bonzini      execs += [{
116464ed6f92SPaolo Bonzini        'name': 'qemu-system-' + target_name + 'w',
116564ed6f92SPaolo Bonzini        'gui': true,
116664ed6f92SPaolo Bonzini        'sources': files('softmmu/main.c'),
116764ed6f92SPaolo Bonzini        'dependencies': []
116864ed6f92SPaolo Bonzini      }]
116964ed6f92SPaolo Bonzini    endif
117064ed6f92SPaolo Bonzini    if config_host.has_key('CONFIG_FUZZ')
117164ed6f92SPaolo Bonzini      specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false)
117264ed6f92SPaolo Bonzini      execs += [{
117364ed6f92SPaolo Bonzini        'name': 'qemu-fuzz-' + target_name,
117464ed6f92SPaolo Bonzini        'gui': false,
117564ed6f92SPaolo Bonzini        'sources': specific_fuzz.sources(),
117664ed6f92SPaolo Bonzini        'dependencies': specific_fuzz.dependencies(),
117764ed6f92SPaolo Bonzini      }]
117864ed6f92SPaolo Bonzini    endif
117964ed6f92SPaolo Bonzini  else
118064ed6f92SPaolo Bonzini    execs = [{
118164ed6f92SPaolo Bonzini      'name': 'qemu-' + target_name,
118264ed6f92SPaolo Bonzini      'gui': false,
118364ed6f92SPaolo Bonzini      'sources': [],
118464ed6f92SPaolo Bonzini      'dependencies': []
118564ed6f92SPaolo Bonzini    }]
118664ed6f92SPaolo Bonzini  endif
118764ed6f92SPaolo Bonzini  foreach exe: execs
118864ed6f92SPaolo Bonzini    emulators += executable(exe['name'], exe['sources'],
118964ed6f92SPaolo Bonzini               install: true,
119064ed6f92SPaolo Bonzini               c_args: c_args,
119164ed6f92SPaolo Bonzini               dependencies: arch_deps + deps + exe['dependencies'],
119264ed6f92SPaolo Bonzini               objects: lib.extract_all_objects(recursive: true),
119364ed6f92SPaolo Bonzini               link_language: link_language,
119464ed6f92SPaolo Bonzini               link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []),
119564ed6f92SPaolo Bonzini               link_args: link_args,
119664ed6f92SPaolo Bonzini               gui_app: exe['gui'])
119710e1d263SMarc-André Lureau
119810e1d263SMarc-André Lureau    if 'CONFIG_TRACE_SYSTEMTAP' in config_host
119910e1d263SMarc-André Lureau      foreach stp: [
1200bd5f973aSStefan Hajnoczi        {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false},
1201bd5f973aSStefan Hajnoczi        {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true},
120210e1d263SMarc-André Lureau        {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true},
120310e1d263SMarc-André Lureau        {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true},
120410e1d263SMarc-André Lureau      ]
1205bd5f973aSStefan Hajnoczi        custom_target(exe['name'] + stp['ext'],
120610e1d263SMarc-André Lureau                      input: trace_events_all,
1207bd5f973aSStefan Hajnoczi                      output: exe['name'] + stp['ext'],
120810e1d263SMarc-André Lureau                      capture: true,
120910e1d263SMarc-André Lureau                      install: stp['install'],
1210ab4c0996SMarc-André Lureau                      install_dir: qemu_datadir / '../systemtap/tapset',
121110e1d263SMarc-André Lureau                      command: [
121210e1d263SMarc-André Lureau                        tracetool, '--group=all', '--format=' + stp['fmt'],
121310e1d263SMarc-André Lureau                        '--binary=' + stp['bin'],
121410e1d263SMarc-André Lureau                        '--target-name=' + target_name,
121510e1d263SMarc-André Lureau                        '--target-type=' + target_type,
121610e1d263SMarc-André Lureau                        '--probe-prefix=qemu.' + target_type + '.' + target_name,
121710e1d263SMarc-André Lureau                        '@INPUT@',
121810e1d263SMarc-André Lureau                      ])
121910e1d263SMarc-André Lureau      endforeach
122010e1d263SMarc-André Lureau    endif
122164ed6f92SPaolo Bonzini  endforeach
12222becc36aSPaolo Bonziniendforeach
12232becc36aSPaolo Bonzini
1224931049b4SPaolo Bonzini# Other build targets
1225897b5afaSMarc-André Lureau
1226f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host
1227f556b4a1SPaolo Bonzini  install_headers('include/qemu/qemu-plugin.h')
1228f556b4a1SPaolo Bonziniendif
1229f556b4a1SPaolo Bonzini
1230f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host
1231f15bff25SPaolo Bonzini  subdir('qga')
1232f15bff25SPaolo Bonziniendif
1233f15bff25SPaolo Bonzini
12349755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled
12359755c94aSLaurent Vivier# when we don't build tools or system
12364113f4cfSLaurent Vivierif xkbcommon.found()
123728742467SMarc-André Lureau  # used for the update-keymaps target, so include rules even if !have_tools
123828742467SMarc-André Lureau  qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh,
123928742467SMarc-André Lureau                           dependencies: [qemuutil, xkbcommon], install: have_tools)
124028742467SMarc-André Lureauendif
124128742467SMarc-André Lureau
12428855e8f0SPhilippe Mathieu-Daudéqemu_block_tools = []
1243931049b4SPaolo Bonziniif have_tools
1244b7c70bf2SMarc-André Lureau  qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep],
1245b7c70bf2SMarc-André Lureau             dependencies: [authz, block, crypto, io, qom, qemuutil], install: true)
1246b7c70bf2SMarc-André Lureau  qemu_io = executable('qemu-io', files('qemu-io.c'),
1247b7c70bf2SMarc-André Lureau             dependencies: [block, qemuutil], install: true)
1248b7c70bf2SMarc-André Lureau  qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'),
1249b7c70bf2SMarc-André Lureau               dependencies: [block, qemuutil], install: true)
1250b7c70bf2SMarc-André Lureau
12517c58bb76SPaolo Bonzini  subdir('storage-daemon')
1252a9c9727cSPaolo Bonzini  subdir('contrib/rdmacm-mux')
12531d7bb6abSMarc-André Lureau  subdir('contrib/elf2dmp')
1254a9c9727cSPaolo Bonzini
1255157e7b13SMarc-André Lureau  executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'),
1256157e7b13SMarc-André Lureau             dependencies: qemuutil,
1257157e7b13SMarc-André Lureau             install: true)
1258157e7b13SMarc-André Lureau
1259931049b4SPaolo Bonzini  if 'CONFIG_VHOST_USER' in config_host
1260931049b4SPaolo Bonzini    subdir('contrib/libvhost-user')
12612d7ac0afSPaolo Bonzini    subdir('contrib/vhost-user-blk')
1262ea458960SMarc-André Lureau    subdir('contrib/vhost-user-gpu')
126332fcc624SMarc-André Lureau    subdir('contrib/vhost-user-input')
126499650b62SPaolo Bonzini    subdir('contrib/vhost-user-scsi')
1265931049b4SPaolo Bonzini  endif
12668f51e01cSMarc-André Lureau
12678f51e01cSMarc-André Lureau  if targetos == 'linux'
12688f51e01cSMarc-André Lureau    executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
12698f51e01cSMarc-André Lureau               dependencies: [qemuutil, libcap_ng],
12708f51e01cSMarc-André Lureau               install: true,
12718f51e01cSMarc-André Lureau               install_dir: get_option('libexecdir'))
1272897b5afaSMarc-André Lureau
1273897b5afaSMarc-André Lureau    executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'),
1274897b5afaSMarc-André Lureau               dependencies: [authz, crypto, io, qom, qemuutil,
1275*6ec0e15dSPaolo Bonzini                              libcap_ng, mpathpersist],
1276897b5afaSMarc-André Lureau               install: true)
12778f51e01cSMarc-André Lureau  endif
12788f51e01cSMarc-André Lureau
12795ee24e78SMarc-André Lureau  if 'CONFIG_IVSHMEM' in config_host
12805ee24e78SMarc-André Lureau    subdir('contrib/ivshmem-client')
12815ee24e78SMarc-André Lureau    subdir('contrib/ivshmem-server')
12825ee24e78SMarc-André Lureau  endif
1283931049b4SPaolo Bonziniendif
1284931049b4SPaolo Bonzini
1285f5aa6320SMarc-André Lureausubdir('scripts')
12863f99cf57SPaolo Bonzinisubdir('tools')
1287bdcbea7aSMarc-André Lureausubdir('pc-bios')
1288ce1c1e7aSPaolo Bonzinisubdir('tests')
1289f8aa24eaSPaolo Bonzinisubdir('docs')
1290e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host
1291e8f3bd71SMarc-André Lureau  subdir('po')
1292e8f3bd71SMarc-André Lureauendif
12933f99cf57SPaolo Bonzini
12948adfeba9SMarc-André Lureauif host_machine.system() == 'windows'
12958adfeba9SMarc-André Lureau  nsis_cmd = [
12968adfeba9SMarc-André Lureau    find_program('scripts/nsis.py'),
12978adfeba9SMarc-André Lureau    '@OUTPUT@',
12988adfeba9SMarc-André Lureau    get_option('prefix'),
12998adfeba9SMarc-André Lureau    meson.current_source_dir(),
13008adfeba9SMarc-André Lureau    host_machine.cpu_family(),
13018adfeba9SMarc-André Lureau    '--',
13028adfeba9SMarc-André Lureau    '-DDISPLAYVERSION=' + meson.project_version(),
13038adfeba9SMarc-André Lureau  ]
13048adfeba9SMarc-André Lureau  if build_docs
13058adfeba9SMarc-André Lureau    nsis_cmd += '-DCONFIG_DOCUMENTATION=y'
13068adfeba9SMarc-André Lureau  endif
13078adfeba9SMarc-André Lureau  if 'CONFIG_GTK' in config_host
13088adfeba9SMarc-André Lureau    nsis_cmd += '-DCONFIG_GTK=y'
13098adfeba9SMarc-André Lureau  endif
13108adfeba9SMarc-André Lureau
13118adfeba9SMarc-André Lureau  nsis = custom_target('nsis',
13128adfeba9SMarc-André Lureau                       output: 'qemu-setup-' + meson.project_version() + '.exe',
13138adfeba9SMarc-André Lureau                       input: files('qemu.nsi'),
13148adfeba9SMarc-André Lureau                       build_always_stale: true,
13158adfeba9SMarc-André Lureau                       command: nsis_cmd + ['@INPUT@'])
13168adfeba9SMarc-André Lureau  alias_target('installer', nsis)
13178adfeba9SMarc-André Lureauendif
13188adfeba9SMarc-André Lureau
1319f9332757SPaolo Bonzinisummary_info = {}
1320f9332757SPaolo Bonzinisummary_info += {'Install prefix':    config_host['prefix']}
1321f9332757SPaolo Bonzinisummary_info += {'BIOS directory':    config_host['qemu_datadir']}
1322f9332757SPaolo Bonzinisummary_info += {'firmware path':     config_host['qemu_firmwarepath']}
1323f9332757SPaolo Bonzinisummary_info += {'binary directory':  config_host['bindir']}
1324f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']}
1325f9332757SPaolo Bonzinisummary_info += {'module directory':  config_host['qemu_moddir']}
1326f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']}
1327f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']}
1328f9332757SPaolo Bonzinisummary_info += {'config directory':  config_host['sysconfdir']}
1329f9332757SPaolo Bonziniif targetos != 'windows'
1330f9332757SPaolo Bonzini  summary_info += {'local state directory': config_host['qemu_localstatedir']}
1331b81efab7SMarc-André Lureau  summary_info += {'Manual directory':      get_option('mandir')}
1332f9332757SPaolo Bonzinielse
1333f9332757SPaolo Bonzini  summary_info += {'local state directory': 'queried at runtime'}
1334f9332757SPaolo Bonziniendif
1335491e74c1SMarc-André Lureausummary_info += {'Doc directory':     get_option('docdir')}
1336f9332757SPaolo Bonzinisummary_info += {'Build directory':   meson.current_build_dir()}
1337f9332757SPaolo Bonzinisummary_info += {'Source path':       meson.current_source_dir()}
1338f9332757SPaolo Bonzinisummary_info += {'GIT binary':        config_host['GIT']}
1339f9332757SPaolo Bonzinisummary_info += {'GIT submodules':    config_host['GIT_SUBMODULES']}
1340f9332757SPaolo Bonzinisummary_info += {'C compiler':        meson.get_compiler('c').cmd_array()[0]}
1341f9332757SPaolo Bonzinisummary_info += {'Host C compiler':   meson.get_compiler('c', native: true).cmd_array()[0]}
1342f9332757SPaolo Bonziniif link_language == 'cpp'
1343f9332757SPaolo Bonzini  summary_info += {'C++ compiler':      meson.get_compiler('cpp').cmd_array()[0]}
1344f9332757SPaolo Bonzinielse
1345f9332757SPaolo Bonzini  summary_info += {'C++ compiler':      false}
1346f9332757SPaolo Bonziniendif
1347f9332757SPaolo Bonziniif targetos == 'darwin'
1348f9332757SPaolo Bonzini  summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
1349f9332757SPaolo Bonziniendif
1350f9332757SPaolo Bonzinisummary_info += {'ARFLAGS':           config_host['ARFLAGS']}
1351f9332757SPaolo Bonzinisummary_info += {'CFLAGS':            config_host['CFLAGS']}
1352f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS':       config_host['QEMU_CFLAGS']}
1353f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS':      config_host['QEMU_LDFLAGS']}
1354f9332757SPaolo Bonzinisummary_info += {'make':              config_host['MAKE']}
1355f9332757SPaolo Bonzinisummary_info += {'python':            '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
1356f9332757SPaolo Bonzinisummary_info += {'sphinx-build':      config_host['SPHINX_BUILD']}
1357f9332757SPaolo Bonzinisummary_info += {'genisoimage':       config_host['GENISOIMAGE']}
1358f9332757SPaolo Bonzini# TODO: add back version
1359f9332757SPaolo Bonzinisummary_info += {'slirp support':     config_host.has_key('CONFIG_SLIRP')}
1360f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP')
1361f9332757SPaolo Bonzini  summary_info += {'smbd':            config_host['CONFIG_SMBD_COMMAND']}
1362f9332757SPaolo Bonziniendif
1363f9332757SPaolo Bonzinisummary_info += {'module support':    config_host.has_key('CONFIG_MODULES')}
1364f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES')
1365f9332757SPaolo Bonzini  summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
1366f9332757SPaolo Bonziniendif
1367f9332757SPaolo Bonzinisummary_info += {'host CPU':          cpu}
1368f9332757SPaolo Bonzinisummary_info += {'host endianness':   build_machine.endian()}
1369f9332757SPaolo Bonzinisummary_info += {'target list':       config_host['TARGET_DIRS']}
1370f9332757SPaolo Bonzinisummary_info += {'gprof enabled':     config_host.has_key('CONFIG_GPROF')}
1371f9332757SPaolo Bonzinisummary_info += {'sparse enabled':    meson.get_compiler('c').cmd_array().contains('cgcc')}
1372f9332757SPaolo Bonzinisummary_info += {'strip binaries':    get_option('strip')}
1373f9332757SPaolo Bonzinisummary_info += {'profiler':          config_host.has_key('CONFIG_PROFILER')}
13743e8529ddSLaurent Viviersummary_info += {'static build':      config_host.has_key('CONFIG_STATIC')}
1375f9332757SPaolo Bonziniif targetos == 'darwin'
1376f9332757SPaolo Bonzini  summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
1377f9332757SPaolo Bonziniendif
1378f9332757SPaolo Bonzini# TODO: add back version
137935be72baSPaolo Bonzinisummary_info += {'SDL support':       sdl.found()}
138035be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()}
1381f9332757SPaolo Bonzini# TODO: add back version
1382f9332757SPaolo Bonzinisummary_info += {'GTK support':       config_host.has_key('CONFIG_GTK')}
1383f9332757SPaolo Bonzinisummary_info += {'GTK GL support':    config_host.has_key('CONFIG_GTK_GL')}
1384b7612f45SPaolo Bonzinisummary_info += {'pixman':            pixman.found()}
1385f9332757SPaolo Bonzini# TODO: add back version
1386f9332757SPaolo Bonzinisummary_info += {'VTE support':       config_host.has_key('CONFIG_VTE')}
1387f9332757SPaolo Bonzinisummary_info += {'TLS priority':      config_host['CONFIG_TLS_PRIORITY']}
1388f9332757SPaolo Bonzinisummary_info += {'GNUTLS support':    config_host.has_key('CONFIG_GNUTLS')}
1389f9332757SPaolo Bonzini# TODO: add back version
1390f9332757SPaolo Bonzinisummary_info += {'libgcrypt':         config_host.has_key('CONFIG_GCRYPT')}
1391f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT')
1392f9332757SPaolo Bonzini   summary_info += {'  hmac':            config_host.has_key('CONFIG_GCRYPT_HMAC')}
1393f9332757SPaolo Bonzini   summary_info += {'  XTS':             not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
1394f9332757SPaolo Bonziniendif
1395f9332757SPaolo Bonzini# TODO: add back version
1396f9332757SPaolo Bonzinisummary_info += {'nettle':            config_host.has_key('CONFIG_NETTLE')}
1397f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE')
1398f9332757SPaolo Bonzini   summary_info += {'  XTS':             not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
1399f9332757SPaolo Bonziniendif
1400f9332757SPaolo Bonzinisummary_info += {'libtasn1':          config_host.has_key('CONFIG_TASN1')}
1401f9332757SPaolo Bonzinisummary_info += {'PAM':               config_host.has_key('CONFIG_AUTH_PAM')}
1402f9332757SPaolo Bonzinisummary_info += {'iconv support':     config_host.has_key('CONFIG_ICONV')}
1403f9332757SPaolo Bonzinisummary_info += {'curses support':    config_host.has_key('CONFIG_CURSES')}
1404f9332757SPaolo Bonzini# TODO: add back version
1405f9332757SPaolo Bonzinisummary_info += {'virgl support':     config_host.has_key('CONFIG_VIRGL')}
1406f9332757SPaolo Bonzinisummary_info += {'curl support':      config_host.has_key('CONFIG_CURL')}
1407f9332757SPaolo Bonzinisummary_info += {'mingw32 support':   targetos == 'windows'}
1408f9332757SPaolo Bonzinisummary_info += {'Audio drivers':     config_host['CONFIG_AUDIO_DRIVERS']}
1409f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
1410f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
1411f9332757SPaolo Bonzinisummary_info += {'VirtFS support':    config_host.has_key('CONFIG_VIRTFS')}
1412*6ec0e15dSPaolo Bonzinisummary_info += {'Multipath support': mpathpersist.found()}
1413a0b93237SPaolo Bonzinisummary_info += {'VNC support':       vnc.found()}
1414a0b93237SPaolo Bonziniif vnc.found()
1415a0b93237SPaolo Bonzini  summary_info += {'VNC SASL support':  sasl.found()}
1416a0b93237SPaolo Bonzini  summary_info += {'VNC JPEG support':  jpeg.found()}
1417a0b93237SPaolo Bonzini  summary_info += {'VNC PNG support':   png.found()}
1418f9332757SPaolo Bonziniendif
1419f9332757SPaolo Bonzinisummary_info += {'xen support':       config_host.has_key('CONFIG_XEN_BACKEND')}
1420f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND')
1421f9332757SPaolo Bonzini  summary_info += {'xen ctrl version':  config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
1422f9332757SPaolo Bonziniendif
1423f9332757SPaolo Bonzinisummary_info += {'brlapi support':    config_host.has_key('CONFIG_BRLAPI')}
1424f9332757SPaolo Bonzinisummary_info += {'Documentation':     config_host.has_key('BUILD_DOCS')}
1425f9332757SPaolo Bonzinisummary_info += {'PIE':               get_option('b_pie')}
1426f9332757SPaolo Bonzinisummary_info += {'vde support':       config_host.has_key('CONFIG_VDE')}
1427f9332757SPaolo Bonzinisummary_info += {'netmap support':    config_host.has_key('CONFIG_NETMAP')}
1428f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
1429f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
1430f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
1431f9332757SPaolo Bonzinisummary_info += {'Install blobs':     config_host.has_key('INSTALL_BLOBS')}
1432f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG
1433f9332757SPaolo Bonzini#summary_info += {'KVM support':       have_kvm'}
1434f9332757SPaolo Bonzini#summary_info += {'HAX support':       have_hax'}
1435f9332757SPaolo Bonzini#summary_info += {'HVF support':       have_hvf'}
1436f9332757SPaolo Bonzini#summary_info += {'WHPX support':      have_whpx'}
1437f9332757SPaolo Bonzini#summary_info += {'TCG support':       have_tcg'}
1438f9332757SPaolo Bonzini#if get_option('tcg')
1439f9332757SPaolo Bonzini#  summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
1440f9332757SPaolo Bonzini#  summary_info += {'TCG interpreter':   config_host.has_key('CONFIG_TCG_INTERPRETER')}
1441f9332757SPaolo Bonzini#endif
1442f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
1443f9332757SPaolo Bonzinisummary_info += {'RDMA support':      config_host.has_key('CONFIG_RDMA')}
1444f9332757SPaolo Bonzinisummary_info += {'PVRDMA support':    config_host.has_key('CONFIG_PVRDMA')}
1445f9332757SPaolo Bonzinisummary_info += {'fdt support':       config_host.has_key('CONFIG_FDT')}
1446f9332757SPaolo Bonzinisummary_info += {'membarrier':        config_host.has_key('CONFIG_MEMBARRIER')}
1447f9332757SPaolo Bonzinisummary_info += {'preadv support':    config_host.has_key('CONFIG_PREADV')}
1448f9332757SPaolo Bonzinisummary_info += {'fdatasync':         config_host.has_key('CONFIG_FDATASYNC')}
1449f9332757SPaolo Bonzinisummary_info += {'madvise':           config_host.has_key('CONFIG_MADVISE')}
1450f9332757SPaolo Bonzinisummary_info += {'posix_madvise':     config_host.has_key('CONFIG_POSIX_MADVISE')}
1451f9332757SPaolo Bonzinisummary_info += {'posix_memalign':    config_host.has_key('CONFIG_POSIX_MEMALIGN')}
1452f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
1453f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
1454f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
1455f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
1456f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
1457f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
1458f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
1459f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
1460f9332757SPaolo Bonzinisummary_info += {'Trace backends':    config_host['TRACE_BACKENDS']}
1461f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple')
1462f9332757SPaolo Bonzini  summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
1463f9332757SPaolo Bonziniendif
1464f9332757SPaolo Bonzini# TODO: add back protocol and server version
1465f9332757SPaolo Bonzinisummary_info += {'spice support':     config_host.has_key('CONFIG_SPICE')}
1466f9332757SPaolo Bonzinisummary_info += {'rbd support':       config_host.has_key('CONFIG_RBD')}
1467f9332757SPaolo Bonzinisummary_info += {'xfsctl support':    config_host.has_key('CONFIG_XFS')}
1468f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
14690a40bcb7SCésar Belleysummary_info += {'U2F support':       u2f.found()}
1470f9332757SPaolo Bonzinisummary_info += {'libusb':            config_host.has_key('CONFIG_USB_LIBUSB')}
1471f9332757SPaolo Bonzinisummary_info += {'usb net redir':     config_host.has_key('CONFIG_USB_REDIR')}
1472f9332757SPaolo Bonzinisummary_info += {'OpenGL support':    config_host.has_key('CONFIG_OPENGL')}
1473f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs':    config_host.has_key('CONFIG_OPENGL_DMABUF')}
1474f9332757SPaolo Bonzinisummary_info += {'libiscsi support':  config_host.has_key('CONFIG_LIBISCSI')}
1475f9332757SPaolo Bonzinisummary_info += {'libnfs support':    config_host.has_key('CONFIG_LIBNFS')}
1476f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
1477f9332757SPaolo Bonziniif targetos == 'windows'
1478f9332757SPaolo Bonzini  if 'WIN_SDK' in config_host
1479f9332757SPaolo Bonzini    summary_info += {'Windows SDK':       config_host['WIN_SDK']}
1480f9332757SPaolo Bonzini  endif
1481f9332757SPaolo Bonzini  summary_info += {'QGA VSS support':   config_host.has_key('CONFIG_QGA_VSS')}
1482f9332757SPaolo Bonzini  summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
14834bad7c3bSStefan Hajnoczi  summary_info += {'QGA MSI support':   config_host.has_key('CONFIG_QGA_MSI')}
1484f9332757SPaolo Bonziniendif
1485f9332757SPaolo Bonzinisummary_info += {'seccomp support':   config_host.has_key('CONFIG_SECCOMP')}
1486f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
1487f9332757SPaolo Bonzinisummary_info += {'coroutine pool':    config_host['CONFIG_COROUTINE_POOL'] == '1'}
1488f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
1489f9332757SPaolo Bonzinisummary_info += {'mutex debugging':   config_host.has_key('CONFIG_DEBUG_MUTEX')}
1490f9332757SPaolo Bonzinisummary_info += {'crypto afalg':      config_host.has_key('CONFIG_AF_ALG')}
1491f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
1492bf0e56a3SMarc-André Lureausummary_info += {'gcov':              get_option('b_coverage')}
1493f9332757SPaolo Bonzinisummary_info += {'TPM support':       config_host.has_key('CONFIG_TPM')}
1494f9332757SPaolo Bonzinisummary_info += {'libssh support':    config_host.has_key('CONFIG_LIBSSH')}
1495f9332757SPaolo Bonzinisummary_info += {'QOM debugging':     config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
1496f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
1497f9332757SPaolo Bonzinisummary_info += {'lzo support':       config_host.has_key('CONFIG_LZO')}
1498f9332757SPaolo Bonzinisummary_info += {'snappy support':    config_host.has_key('CONFIG_SNAPPY')}
1499f9332757SPaolo Bonzinisummary_info += {'bzip2 support':     config_host.has_key('CONFIG_BZIP2')}
1500f9332757SPaolo Bonzinisummary_info += {'lzfse support':     config_host.has_key('CONFIG_LZFSE')}
1501f9332757SPaolo Bonzinisummary_info += {'zstd support':      config_host.has_key('CONFIG_ZSTD')}
1502f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
1503f9332757SPaolo Bonzinisummary_info += {'libxml2':           config_host.has_key('CONFIG_LIBXML2')}
1504f9332757SPaolo Bonzinisummary_info += {'tcmalloc support':  config_host.has_key('CONFIG_TCMALLOC')}
1505f9332757SPaolo Bonzinisummary_info += {'jemalloc support':  config_host.has_key('CONFIG_JEMALLOC')}
1506f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
1507f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
1508f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
1509f9332757SPaolo Bonzinisummary_info += {'bochs support':     config_host.has_key('CONFIG_BOCHS')}
1510f9332757SPaolo Bonzinisummary_info += {'cloop support':     config_host.has_key('CONFIG_CLOOP')}
1511f9332757SPaolo Bonzinisummary_info += {'dmg support':       config_host.has_key('CONFIG_DMG')}
1512f9332757SPaolo Bonzinisummary_info += {'qcow v1 support':   config_host.has_key('CONFIG_QCOW1')}
1513f9332757SPaolo Bonzinisummary_info += {'vdi support':       config_host.has_key('CONFIG_VDI')}
1514f9332757SPaolo Bonzinisummary_info += {'vvfat support':     config_host.has_key('CONFIG_VVFAT')}
1515f9332757SPaolo Bonzinisummary_info += {'qed support':       config_host.has_key('CONFIG_QED')}
1516f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
1517f9332757SPaolo Bonzinisummary_info += {'sheepdog support':  config_host.has_key('CONFIG_SHEEPDOG')}
1518f9332757SPaolo Bonzinisummary_info += {'capstone':          config_host.has_key('CONFIG_CAPSTONE')}
1519f9332757SPaolo Bonzinisummary_info += {'libpmem support':   config_host.has_key('CONFIG_LIBPMEM')}
1520f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
1521f01496a3SPaolo Bonzinisummary_info += {'libudev':           libudev.found()}
1522f9332757SPaolo Bonzinisummary_info += {'default devices':   config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
1523f9332757SPaolo Bonzinisummary_info += {'plugin support':    config_host.has_key('CONFIG_PLUGIN')}
1524f9332757SPaolo Bonzinisummary_info += {'fuzzing support':   config_host.has_key('CONFIG_FUZZ')}
1525f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN')
1526f9332757SPaolo Bonzini  summary_info += {'gdb':             config_host['HAVE_GDB_BIN']}
1527f9332757SPaolo Bonziniendif
1528f9332757SPaolo Bonzinisummary_info += {'thread sanitizer':  config_host.has_key('CONFIG_TSAN')}
1529f9332757SPaolo Bonzinisummary_info += {'rng-none':          config_host.has_key('CONFIG_RNG_NONE')}
1530f9332757SPaolo Bonzinisummary_info += {'Linux keyring':     config_host.has_key('CONFIG_SECRET_KEYRING')}
1531f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true)
1532f9332757SPaolo Bonzini
1533f9332757SPaolo Bonziniif not supported_cpus.contains(cpu)
1534f9332757SPaolo Bonzini  message()
1535f9332757SPaolo Bonzini  warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
1536f9332757SPaolo Bonzini  message()
1537f9332757SPaolo Bonzini  message('CPU host architecture ' + cpu + ' support is not currently maintained.')
1538f9332757SPaolo Bonzini  message('The QEMU project intends to remove support for this host CPU in')
1539f9332757SPaolo Bonzini  message('a future release if nobody volunteers to maintain it and to')
1540f9332757SPaolo Bonzini  message('provide a build host for our continuous integration setup.')
1541f9332757SPaolo Bonzini  message('configure has succeeded and you can continue to build, but')
1542f9332757SPaolo Bonzini  message('if you care about QEMU on this platform you should contact')
1543f9332757SPaolo Bonzini  message('us upstream at qemu-devel@nongnu.org.')
1544f9332757SPaolo Bonziniendif
1545f9332757SPaolo Bonzini
1546f9332757SPaolo Bonziniif not supported_oses.contains(targetos)
1547f9332757SPaolo Bonzini  message()
1548f9332757SPaolo Bonzini  warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
1549f9332757SPaolo Bonzini  message()
1550f9332757SPaolo Bonzini  message('Host OS ' + targetos + 'support is not currently maintained.')
1551f9332757SPaolo Bonzini  message('The QEMU project intends to remove support for this host OS in')
1552f9332757SPaolo Bonzini  message('a future release if nobody volunteers to maintain it and to')
1553f9332757SPaolo Bonzini  message('provide a build host for our continuous integration setup.')
1554f9332757SPaolo Bonzini  message('configure has succeeded and you can continue to build, but')
1555f9332757SPaolo Bonzini  message('if you care about QEMU on this platform you should contact')
1556f9332757SPaolo Bonzini  message('us upstream at qemu-devel@nongnu.org.')
1557f9332757SPaolo Bonziniendif
1558