xref: /openbmc/qemu/meson.build (revision de2d3005)
1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0',
290756b2fSGerd Hoffmann        default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11',
33e0e5190SPaolo Bonzini                          'b_colorout=auto'],
4a5665051SPaolo Bonzini        version: run_command('head', meson.source_root() / 'VERSION').stdout().strip())
5a5665051SPaolo Bonzini
6a5665051SPaolo Bonzininot_found = dependency('', required: false)
7b29b40f4SPaolo Bonziniif meson.version().version_compare('>=0.56.0')
8b29b40f4SPaolo Bonzini  keyval = import('keyval')
9b29b40f4SPaolo Bonzinielse
10a5665051SPaolo Bonzini  keyval = import('unstable-keyval')
11b29b40f4SPaolo Bonziniendif
12a81df1b6SPaolo Bonziniss = import('sourceset')
13a81df1b6SPaolo Bonzini
14ce1c1e7aSPaolo Bonzinish = find_program('sh')
15a81df1b6SPaolo Bonzinicc = meson.get_compiler('c')
16a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak')
173154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host
1835be72baSPaolo Bonzinienable_static = 'CONFIG_STATIC' in config_host
19f8aa24eaSPaolo Bonzinibuild_docs = 'BUILD_DOCS' in config_host
20ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix')
21491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix')
22859aef02SPaolo Bonziniconfig_host_data = configuration_data()
23859aef02SPaolo Bonzinigenh = []
24a5665051SPaolo Bonzini
25760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split()
26760e4327SPaolo Bonzinihave_user = false
27760e4327SPaolo Bonzinihave_system = false
28760e4327SPaolo Bonziniforeach target : target_dirs
29760e4327SPaolo Bonzini  have_user = have_user or target.endswith('-user')
30760e4327SPaolo Bonzini  have_system = have_system or target.endswith('-softmmu')
31760e4327SPaolo Bonziniendforeach
32760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host
33760e4327SPaolo Bonzinihave_block = have_system or have_tools
34760e4327SPaolo Bonzini
35201e8ed7SPaolo Bonzinipython = import('python').find_installation()
36201e8ed7SPaolo Bonzini
37201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux']
38201e8ed7SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64',
39201e8ed7SPaolo Bonzini  'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64']
40201e8ed7SPaolo Bonzini
41201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family()
42201e8ed7SPaolo Bonzinitargetos = host_machine.system()
43201e8ed7SPaolo Bonzini
44201e8ed7SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'),
45201e8ed7SPaolo Bonzini               output: 'ninjatool',
46201e8ed7SPaolo Bonzini               configuration: config_host)
47201e8ed7SPaolo Bonzini
48201e8ed7SPaolo Bonzini##################
49201e8ed7SPaolo Bonzini# Compiler flags #
50201e8ed7SPaolo Bonzini##################
51201e8ed7SPaolo Bonzini
52a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(),
53a5665051SPaolo Bonzini                      native: false, language: ['c', 'objc'])
54a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(),
55a5665051SPaolo Bonzini                      native: false, language: 'cpp')
56a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(),
57a5665051SPaolo Bonzini                           native: false, language: ['c', 'cpp', 'objc'])
58a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(),
59a5665051SPaolo Bonzini                      language: ['c', 'cpp', 'objc'])
60a5665051SPaolo Bonzini
61fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp')
62fc929892SMarc-André Lureauif link_language == 'cpp'
63fc929892SMarc-André Lureau  add_languages('cpp', required: true, native: false)
64fc929892SMarc-André Lureauendif
65a5665051SPaolo Bonziniif host_machine.system() == 'darwin'
66a5665051SPaolo Bonzini  add_languages('objc', required: false, native: false)
67a5665051SPaolo Bonziniendif
68a5665051SPaolo Bonzini
69968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host
70968b4db3SPaolo Bonzini  run_target('sparse',
71968b4db3SPaolo Bonzini             command: [find_program('scripts/check_sparse.py'),
72968b4db3SPaolo Bonzini                       config_host['SPARSE_CFLAGS'].split(),
73968b4db3SPaolo Bonzini                       'compile_commands.json'])
74968b4db3SPaolo Bonziniendif
75968b4db3SPaolo Bonzini
76a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false)
77a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false)
784a96337dSPaolo Bonziniwinmm = []
79a81df1b6SPaolo Bonzinisocket = []
8004c6f1e7SMarc-André Lureauversion_res = []
81d92989aaSMarc-André Lureaucoref = []
82d92989aaSMarc-André Lureauiokit = []
83d92989aaSMarc-André Lureaucocoa = []
84d92989aaSMarc-André Lureauhvf = []
85a81df1b6SPaolo Bonziniif targetos == 'windows'
86a81df1b6SPaolo Bonzini  socket = cc.find_library('ws2_32')
874a96337dSPaolo Bonzini  winmm = cc.find_library('winmm')
8804c6f1e7SMarc-André Lureau
8904c6f1e7SMarc-André Lureau  win = import('windows')
9004c6f1e7SMarc-André Lureau  version_res = win.compile_resources('version.rc',
9104c6f1e7SMarc-André Lureau                                      depend_files: files('pc-bios/qemu-nsis.ico'),
9204c6f1e7SMarc-André Lureau                                      include_directories: include_directories('.'))
93d92989aaSMarc-André Lureauelif targetos == 'darwin'
94d92989aaSMarc-André Lureau  coref = dependency('appleframeworks', modules: 'CoreFoundation')
95d92989aaSMarc-André Lureau  iokit = dependency('appleframeworks', modules: 'IOKit')
96d92989aaSMarc-André Lureau  cocoa = dependency('appleframeworks', modules: 'Cocoa')
97d92989aaSMarc-André Lureau  hvf = dependency('appleframeworks', modules: 'Hypervisor')
98cfad62f1SPaolo Bonzinielif targetos == 'sunos'
99cfad62f1SPaolo Bonzini  socket = [cc.find_library('socket'),
100cfad62f1SPaolo Bonzini            cc.find_library('nsl'),
101cfad62f1SPaolo Bonzini            cc.find_library('resolv')]
102cfad62f1SPaolo Bonzinielif targetos == 'haiku'
103cfad62f1SPaolo Bonzini  socket = [cc.find_library('posix_error_mapper'),
104cfad62f1SPaolo Bonzini            cc.find_library('network'),
105cfad62f1SPaolo Bonzini            cc.find_library('bsd')]
106a81df1b6SPaolo Bonziniendif
107215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands.  This was
108215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles.
109215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(),
110215b0c2fSPaolo Bonzini                      native: false, language: ['c', 'cpp', 'objc'])
111215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split())
112a81df1b6SPaolo Bonzinigio = not_found
113a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host
114a81df1b6SPaolo Bonzini  gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
115a81df1b6SPaolo Bonzini                           link_args: config_host['GIO_LIBS'].split())
116a81df1b6SPaolo Bonziniendif
117a81df1b6SPaolo Bonzinilttng = not_found
118a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host
119a81df1b6SPaolo Bonzini  lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
120a81df1b6SPaolo Bonziniendif
121a81df1b6SPaolo Bonziniurcubp = not_found
122a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host
123a81df1b6SPaolo Bonzini  urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split())
124a81df1b6SPaolo Bonziniendif
12546859d93SDaniel P. Berrangégcrypt = not_found
12646859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host
12746859d93SDaniel P. Berrangé  gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(),
12846859d93SDaniel P. Berrangé                              link_args: config_host['GCRYPT_LIBS'].split())
12946859d93SDaniel P. Berrangéendif
130a81df1b6SPaolo Bonzininettle = not_found
131a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host
132a81df1b6SPaolo Bonzini  nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(),
133a81df1b6SPaolo Bonzini                              link_args: config_host['NETTLE_LIBS'].split())
134a81df1b6SPaolo Bonziniendif
135a81df1b6SPaolo Bonzinignutls = not_found
136a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host
137a81df1b6SPaolo Bonzini  gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(),
138a81df1b6SPaolo Bonzini                              link_args: config_host['GNUTLS_LIBS'].split())
139a81df1b6SPaolo Bonziniendif
140b7612f45SPaolo Bonzinipixman = not_found
141b7612f45SPaolo Bonziniif have_system or have_tools
142b7612f45SPaolo Bonzini  pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8',
1431a94933fSPaolo Bonzini                      method: 'pkg-config', static: enable_static)
144b7612f45SPaolo Bonziniendif
1455e7fbd25SMarc-André Lureaupam = not_found
1465e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host
1475e7fbd25SMarc-André Lureau  pam = cc.find_library('pam')
1485e7fbd25SMarc-André Lureauendif
1495e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false)
1501ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static)
1515e5733e5SMarc-André Lureaulinux_io_uring = not_found
1525e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host
1535e5733e5SMarc-André Lureau  linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(),
1545e5733e5SMarc-André Lureau                                      link_args: config_host['LINUX_IO_URING_LIBS'].split())
1555e5733e5SMarc-André Lureauendif
1565e5733e5SMarc-André Lureaulibxml2 = not_found
1575e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host
1585e5733e5SMarc-André Lureau  libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(),
1595e5733e5SMarc-André Lureau                               link_args: config_host['LIBXML2_LIBS'].split())
1605e5733e5SMarc-André Lureauendif
1615e5733e5SMarc-André Lureaulibnfs = not_found
1625e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host
1635e5733e5SMarc-André Lureau  libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split())
1645e5733e5SMarc-André Lureauendif
165ec0d5893SMarc-André Lureaulibattr = not_found
166ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host
167ec0d5893SMarc-André Lureau  libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split())
168ec0d5893SMarc-André Lureauendif
1693f99cf57SPaolo Bonziniseccomp = not_found
1703f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host
1713f99cf57SPaolo Bonzini  seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(),
1723f99cf57SPaolo Bonzini                               link_args: config_host['SECCOMP_LIBS'].split())
1733f99cf57SPaolo Bonziniendif
1743f99cf57SPaolo Bonzinilibcap_ng = not_found
1753f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host
1763f99cf57SPaolo Bonzini  libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split())
1773f99cf57SPaolo Bonziniendif
1781917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools
1791917ec6dSPaolo Bonzini  xkbcommon = not_found
1801917ec6dSPaolo Bonzinielse
1811917ec6dSPaolo Bonzini  xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'),
1821a94933fSPaolo Bonzini                         method: 'pkg-config', static: enable_static)
183ade60d4fSMarc-André Lureauendif
184cdaf0722SMarc-André Lureauslirp = not_found
185cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP')
186cdaf0722SMarc-André Lureau  slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(),
187cdaf0722SMarc-André Lureau                             link_args: config_host['SLIRP_LIBS'].split())
188cdaf0722SMarc-André Lureauendif
189cdaf0722SMarc-André Lureauvde = not_found
190cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE')
191cdaf0722SMarc-André Lureau  vde = declare_dependency(link_args: config_host['VDE_LIBS'].split())
192cdaf0722SMarc-André Lureauendif
193478e943fSPaolo Bonzinipulse = not_found
194478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host
195478e943fSPaolo Bonzini  pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(),
196478e943fSPaolo Bonzini                             link_args: config_host['PULSE_LIBS'].split())
197478e943fSPaolo Bonziniendif
198478e943fSPaolo Bonzinialsa = not_found
199478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host
200478e943fSPaolo Bonzini  alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(),
201478e943fSPaolo Bonzini                            link_args: config_host['ALSA_LIBS'].split())
202478e943fSPaolo Bonziniendif
203478e943fSPaolo Bonzinijack = not_found
204478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host
205478e943fSPaolo Bonzini  jack = declare_dependency(link_args: config_host['JACK_LIBS'].split())
206478e943fSPaolo Bonziniendif
2072634733cSPaolo Bonzinispice = not_found
2082634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host
2092634733cSPaolo Bonzini  spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(),
2102634733cSPaolo Bonzini                             link_args: config_host['SPICE_LIBS'].split())
2112634733cSPaolo Bonziniendif
2125ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false)
213897b5afaSMarc-André Lureaulibmpathpersist = not_found
214897b5afaSMarc-André Lureauif config_host.has_key('CONFIG_MPATH')
215897b5afaSMarc-André Lureau  libmpathpersist = cc.find_library('mpathpersist')
216897b5afaSMarc-André Lureauendif
217ccf7afa5SPaolo Bonzinilibdl = not_found
218ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host
219ccf7afa5SPaolo Bonzini  libdl = cc.find_library('dl', required: true)
220ccf7afa5SPaolo Bonziniendif
22199650b62SPaolo Bonzinilibiscsi = not_found
22299650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host
22399650b62SPaolo Bonzini  libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(),
22499650b62SPaolo Bonzini                                link_args: config_host['LIBISCSI_LIBS'].split())
22599650b62SPaolo Bonziniendif
2265e5733e5SMarc-André Lureauzstd = not_found
2275e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host
2285e5733e5SMarc-André Lureau  zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(),
2295e5733e5SMarc-André Lureau                            link_args: config_host['ZSTD_LIBS'].split())
2305e5733e5SMarc-André Lureauendif
231ea458960SMarc-André Lureaugbm = not_found
232ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host
233ea458960SMarc-André Lureau  gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(),
234ea458960SMarc-André Lureau                           link_args: config_host['GBM_LIBS'].split())
235ea458960SMarc-André Lureauendif
236ea458960SMarc-André Lureauvirgl = not_found
237ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host
238ea458960SMarc-André Lureau  virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(),
239ea458960SMarc-André Lureau                             link_args: config_host['VIRGL_LIBS'].split())
240ea458960SMarc-André Lureauendif
2411d7bb6abSMarc-André Lureaucurl = not_found
2421d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host
2431d7bb6abSMarc-André Lureau  curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(),
2441d7bb6abSMarc-André Lureau                            link_args: config_host['CURL_LIBS'].split())
2451d7bb6abSMarc-André Lureauendif
246f15bff25SPaolo Bonzinilibudev = not_found
247f15bff25SPaolo Bonziniif 'CONFIG_LIBUDEV' in config_host
248f15bff25SPaolo Bonzini  libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split())
249f15bff25SPaolo Bonziniendif
2502634733cSPaolo Bonzinibrlapi = not_found
2512634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host
2522634733cSPaolo Bonzini  brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split())
2532634733cSPaolo Bonziniendif
25435be72baSPaolo Bonzini
255760e4327SPaolo Bonzinisdl = not_found
256760e4327SPaolo Bonziniif have_system
257363743daSYonggang Luo  sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static)
25835be72baSPaolo Bonzini  sdl_image = not_found
259760e4327SPaolo Bonziniendif
26035be72baSPaolo Bonziniif sdl.found()
26135be72baSPaolo Bonzini  # work around 2.0.8 bug
26235be72baSPaolo Bonzini  sdl = declare_dependency(compile_args: '-Wno-undef',
26335be72baSPaolo Bonzini                           dependencies: sdl)
2647161a433SVolker Rümelin  sdl_image = dependency('SDL2_image', required: get_option('sdl_image'),
2651a94933fSPaolo Bonzini                         method: 'pkg-config', static: enable_static)
26635be72baSPaolo Bonzinielse
26735be72baSPaolo Bonzini  if get_option('sdl_image').enabled()
26835be72baSPaolo Bonzini    error('sdl-image required, but SDL was @0@',
26935be72baSPaolo Bonzini          get_option('sdl').disabled() ? 'disabled' : 'not found')
2702634733cSPaolo Bonzini  endif
27135be72baSPaolo Bonzini  sdl_image = not_found
27235be72baSPaolo Bonziniendif
27335be72baSPaolo Bonzini
2745e5733e5SMarc-André Lureaurbd = not_found
2755e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host
2765e5733e5SMarc-André Lureau  rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split())
2775e5733e5SMarc-André Lureauendif
2785e5733e5SMarc-André Lureauglusterfs = not_found
2795e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host
2805e5733e5SMarc-André Lureau  glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(),
2815e5733e5SMarc-André Lureau                                 link_args: config_host['GLUSTERFS_LIBS'].split())
2825e5733e5SMarc-André Lureauendif
2835e5733e5SMarc-André Lureaulibssh = not_found
2845e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host
2855e5733e5SMarc-André Lureau  libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(),
2865e5733e5SMarc-André Lureau                              link_args: config_host['LIBSSH_LIBS'].split())
2875e5733e5SMarc-André Lureauendif
2885e5733e5SMarc-André Lureaulibbzip2 = not_found
2895e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host
2905e5733e5SMarc-André Lureau  libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split())
2915e5733e5SMarc-André Lureauendif
2925e5733e5SMarc-André Lureauliblzfse = not_found
2935e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host
2945e5733e5SMarc-André Lureau  liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split())
2955e5733e5SMarc-André Lureauendif
296478e943fSPaolo Bonzinioss = not_found
297478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host
298478e943fSPaolo Bonzini  oss = declare_dependency(link_args: config_host['OSS_LIBS'].split())
299478e943fSPaolo Bonziniendif
300478e943fSPaolo Bonzinidsound = not_found
301478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host
302478e943fSPaolo Bonzini  dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split())
303478e943fSPaolo Bonziniendif
304478e943fSPaolo Bonzinicoreaudio = not_found
305478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host
306478e943fSPaolo Bonzini  coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split())
307478e943fSPaolo Bonziniendif
3082b1ccdf4SMarc-André Lureauopengl = not_found
3092b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host
310*de2d3005SPaolo Bonzini  opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(),
311*de2d3005SPaolo Bonzini                              link_args: config_host['OPENGL_LIBS'].split())
3122b1ccdf4SMarc-André Lureauelse
3132b1ccdf4SMarc-André Lureauendif
3142b1ccdf4SMarc-André Lureaugtk = not_found
3152b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host
3162b1ccdf4SMarc-André Lureau  gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(),
3172b1ccdf4SMarc-André Lureau                              link_args: config_host['GTK_LIBS'].split())
3182b1ccdf4SMarc-André Lureauendif
3192b1ccdf4SMarc-André Lureauvte = not_found
3202b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host
3212b1ccdf4SMarc-André Lureau  vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(),
3222b1ccdf4SMarc-André Lureau                           link_args: config_host['VTE_LIBS'].split())
3232b1ccdf4SMarc-André Lureauendif
3242b1ccdf4SMarc-André Lureaux11 = not_found
3252b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host
3262b1ccdf4SMarc-André Lureau  x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(),
3272b1ccdf4SMarc-André Lureau                           link_args: config_host['X11_LIBS'].split())
3282b1ccdf4SMarc-André Lureauendif
3292b1ccdf4SMarc-André Lureaucurses = not_found
3302b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host
3312b1ccdf4SMarc-André Lureau  curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(),
3322b1ccdf4SMarc-André Lureau                              link_args: config_host['CURSES_LIBS'].split())
3332b1ccdf4SMarc-André Lureauendif
3342b1ccdf4SMarc-André Lureauiconv = not_found
3352b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host
3362b1ccdf4SMarc-André Lureau  iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(),
3372b1ccdf4SMarc-André Lureau                             link_args: config_host['ICONV_LIBS'].split())
3382b1ccdf4SMarc-André Lureauendif
3392b1ccdf4SMarc-André Lureaugio = not_found
3402b1ccdf4SMarc-André Lureauif 'CONFIG_GIO' in config_host
3412b1ccdf4SMarc-André Lureau  gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(),
3422b1ccdf4SMarc-André Lureau                           link_args: config_host['GIO_LIBS'].split())
3432b1ccdf4SMarc-André Lureauendif
344a0b93237SPaolo Bonzinivnc = not_found
3452b1ccdf4SMarc-André Lureaupng = not_found
3462b1ccdf4SMarc-André Lureaujpeg = not_found
3472b1ccdf4SMarc-André Lureausasl = not_found
348a0b93237SPaolo Bonziniif get_option('vnc').enabled()
349a0b93237SPaolo Bonzini  vnc = declare_dependency() # dummy dependency
350a0b93237SPaolo Bonzini  png = dependency('libpng', required: get_option('vnc_png'),
3511a94933fSPaolo Bonzini                   method: 'pkg-config', static: enable_static)
352a0b93237SPaolo Bonzini  jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'],
353a0b93237SPaolo Bonzini                         required: get_option('vnc_jpeg'),
354a0b93237SPaolo Bonzini                         static: enable_static)
355a0b93237SPaolo Bonzini  sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'],
356a0b93237SPaolo Bonzini                         required: get_option('vnc_sasl'),
357a0b93237SPaolo Bonzini                         static: enable_static)
358a0b93237SPaolo Bonzini  if sasl.found()
359a0b93237SPaolo Bonzini    sasl = declare_dependency(dependencies: sasl,
360a0b93237SPaolo Bonzini                              compile_args: '-DSTRUCT_IOVEC_DEFINED')
361a0b93237SPaolo Bonzini  endif
3622b1ccdf4SMarc-André Lureauendif
3634a96337dSPaolo Bonzinifdt = not_found
3644a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host
3654a96337dSPaolo Bonzini  fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(),
3664a96337dSPaolo Bonzini                           link_args: config_host['FDT_LIBS'].split())
3674a96337dSPaolo Bonziniendif
368708eab42SMarc-André Lureausnappy = not_found
369708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host
370708eab42SMarc-André Lureau  snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split())
371708eab42SMarc-André Lureauendif
372708eab42SMarc-André Lureaulzo = not_found
373708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host
374708eab42SMarc-André Lureau  lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split())
375708eab42SMarc-André Lureauendif
37655166230SMarc-André Lureaurdma = not_found
37755166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host
37855166230SMarc-André Lureau  rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split())
37955166230SMarc-André Lureauendif
380ab318051SMarc-André Lureaunuma = not_found
381ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host
382ab318051SMarc-André Lureau  numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split())
383ab318051SMarc-André Lureauendif
384582ea95fSMarc-André Lureauxen = not_found
385582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host
386582ea95fSMarc-André Lureau  xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(),
387582ea95fSMarc-André Lureau                           link_args: config_host['XEN_LIBS'].split())
388582ea95fSMarc-André Lureauendif
38906677ce1SPaolo Bonzinicacard = not_found
39006677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host
39106677ce1SPaolo Bonzini  cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(),
39206677ce1SPaolo Bonzini                              link_args: config_host['SMARTCARD_LIBS'].split())
39306677ce1SPaolo Bonziniendif
3940a40bcb7SCésar Belleyu2f = not_found
3950a40bcb7SCésar Belleyif have_system
3960a40bcb7SCésar Belley  u2f = dependency('u2f-emu', required: get_option('u2f'),
3970a40bcb7SCésar Belley                   method: 'pkg-config',
3980a40bcb7SCésar Belley                   static: enable_static)
3990a40bcb7SCésar Belleyendif
40006677ce1SPaolo Bonziniusbredir = not_found
40106677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host
40206677ce1SPaolo Bonzini  usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(),
40306677ce1SPaolo Bonzini                                link_args: config_host['USB_REDIR_LIBS'].split())
40406677ce1SPaolo Bonziniendif
40506677ce1SPaolo Bonzinilibusb = not_found
40606677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host
40706677ce1SPaolo Bonzini  libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(),
40806677ce1SPaolo Bonzini                              link_args: config_host['LIBUSB_LIBS'].split())
40906677ce1SPaolo Bonziniendif
410c9322ab5SMarc-André Lureaucapstone = not_found
411c9322ab5SMarc-André Lureauif 'CONFIG_CAPSTONE' in config_host
412c9322ab5SMarc-André Lureau  capstone = declare_dependency(compile_args: config_host['CAPSTONE_CFLAGS'].split(),
413c9322ab5SMarc-André Lureau                                link_args: config_host['CAPSTONE_LIBS'].split())
414c9322ab5SMarc-André Lureauendif
415c9322ab5SMarc-André Lureaulibpmem = not_found
416c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host
417c9322ab5SMarc-André Lureau  libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(),
418c9322ab5SMarc-André Lureau                               link_args: config_host['LIBPMEM_LIBS'].split())
419c9322ab5SMarc-André Lureauendif
420c7c91a74SBruce Rogerslibdaxctl = not_found
421c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host
422c7c91a74SBruce Rogers  libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split())
423c7c91a74SBruce Rogersendif
4248ce0a45fSMarc-André Lureautasn1 = not_found
4258ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host
4268ce0a45fSMarc-André Lureau  tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(),
4278ce0a45fSMarc-André Lureau                             link_args: config_host['TASN1_LIBS'].split())
4288ce0a45fSMarc-André Lureauendif
429af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false,
430af04e89dSMarc-André Lureau                      method: 'pkg-config', static: enable_static)
431a81df1b6SPaolo Bonzini
4323909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid')
4333909def8SMarc-André Lureau
434859aef02SPaolo Bonzini# Create config-host.h
435859aef02SPaolo Bonzini
43635be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found())
43735be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
438a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found())
439a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found())
440a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found())
441a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found())
4424113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found())
443af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found())
4443909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid)
445859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version()))
446859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0])
447859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1])
448859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2])
449859aef02SPaolo Bonzini
450859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
451859aef02SPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'qemu_confdir', 'qemu_datadir',
452859aef02SPaolo Bonzini           'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir',
453859aef02SPaolo Bonzini           'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath']
454859aef02SPaolo Bonziniforeach k, v: config_host
455859aef02SPaolo Bonzini  if arrays.contains(k)
456859aef02SPaolo Bonzini    if v != ''
457859aef02SPaolo Bonzini      v = '"' + '", "'.join(v.split()) + '", '
458859aef02SPaolo Bonzini    endif
459859aef02SPaolo Bonzini    config_host_data.set(k, v)
460859aef02SPaolo Bonzini  elif k == 'ARCH'
461859aef02SPaolo Bonzini    config_host_data.set('HOST_' + v.to_upper(), 1)
462859aef02SPaolo Bonzini  elif strings.contains(k)
463859aef02SPaolo Bonzini    if not k.startswith('CONFIG_')
464859aef02SPaolo Bonzini      k = 'CONFIG_' + k.to_upper()
465859aef02SPaolo Bonzini    endif
466859aef02SPaolo Bonzini    config_host_data.set_quoted(k, v)
467859aef02SPaolo Bonzini  elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_')
468859aef02SPaolo Bonzini    config_host_data.set(k, v == 'y' ? 1 : v)
469859aef02SPaolo Bonzini  endif
470859aef02SPaolo Bonziniendforeach
471859aef02SPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data)
472859aef02SPaolo Bonzini
4732becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py')
474a98006bcSPaolo Bonziniconfig_all_devices = {}
475ca0fc784SPaolo Bonziniconfig_all_disas = {}
4762becc36aSPaolo Bonziniconfig_devices_mak_list = []
4772becc36aSPaolo Bonziniconfig_devices_h = {}
478859aef02SPaolo Bonziniconfig_target_h = {}
4792becc36aSPaolo Bonziniconfig_target_mak = {}
480ca0fc784SPaolo Bonzini
481ca0fc784SPaolo Bonzinidisassemblers = {
482ca0fc784SPaolo Bonzini  'alpha' : ['CONFIG_ALPHA_DIS'],
483ca0fc784SPaolo Bonzini  'arm' : ['CONFIG_ARM_DIS'],
484ca0fc784SPaolo Bonzini  'avr' : ['CONFIG_AVR_DIS'],
485ca0fc784SPaolo Bonzini  'cris' : ['CONFIG_CRIS_DIS'],
486ca0fc784SPaolo Bonzini  'hppa' : ['CONFIG_HPPA_DIS'],
487ca0fc784SPaolo Bonzini  'i386' : ['CONFIG_I386_DIS'],
488ca0fc784SPaolo Bonzini  'x86_64' : ['CONFIG_I386_DIS'],
489ca0fc784SPaolo Bonzini  'x32' : ['CONFIG_I386_DIS'],
490ca0fc784SPaolo Bonzini  'lm32' : ['CONFIG_LM32_DIS'],
491ca0fc784SPaolo Bonzini  'm68k' : ['CONFIG_M68K_DIS'],
492ca0fc784SPaolo Bonzini  'microblaze' : ['CONFIG_MICROBLAZE_DIS'],
493ca0fc784SPaolo Bonzini  'mips' : ['CONFIG_MIPS_DIS'],
494ca0fc784SPaolo Bonzini  'moxie' : ['CONFIG_MOXIE_DIS'],
495ca0fc784SPaolo Bonzini  'nios2' : ['CONFIG_NIOS2_DIS'],
496ca0fc784SPaolo Bonzini  'or1k' : ['CONFIG_OPENRISC_DIS'],
497ca0fc784SPaolo Bonzini  'ppc' : ['CONFIG_PPC_DIS'],
498ca0fc784SPaolo Bonzini  'riscv' : ['CONFIG_RISCV_DIS'],
499ca0fc784SPaolo Bonzini  'rx' : ['CONFIG_RX_DIS'],
500ca0fc784SPaolo Bonzini  's390' : ['CONFIG_S390_DIS'],
501ca0fc784SPaolo Bonzini  'sh4' : ['CONFIG_SH4_DIS'],
502ca0fc784SPaolo Bonzini  'sparc' : ['CONFIG_SPARC_DIS'],
503ca0fc784SPaolo Bonzini  'xtensa' : ['CONFIG_XTENSA_DIS'],
504ca0fc784SPaolo Bonzini}
505ca0fc784SPaolo Bonziniif link_language == 'cpp'
506ca0fc784SPaolo Bonzini  disassemblers += {
507ca0fc784SPaolo Bonzini    'aarch64' : [ 'CONFIG_ARM_A64_DIS'],
508ca0fc784SPaolo Bonzini    'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'],
509ca0fc784SPaolo Bonzini    'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'],
510ca0fc784SPaolo Bonzini  }
511ca0fc784SPaolo Bonziniendif
512ca0fc784SPaolo Bonzini
5132becc36aSPaolo Bonzinikconfig_external_symbols = [
5142becc36aSPaolo Bonzini  'CONFIG_KVM',
5152becc36aSPaolo Bonzini  'CONFIG_XEN',
5162becc36aSPaolo Bonzini  'CONFIG_TPM',
5172becc36aSPaolo Bonzini  'CONFIG_SPICE',
5182becc36aSPaolo Bonzini  'CONFIG_IVSHMEM',
5192becc36aSPaolo Bonzini  'CONFIG_OPENGL',
5202becc36aSPaolo Bonzini  'CONFIG_X11',
5212becc36aSPaolo Bonzini  'CONFIG_VHOST_USER',
5222becc36aSPaolo Bonzini  'CONFIG_VHOST_KERNEL',
5232becc36aSPaolo Bonzini  'CONFIG_VIRTFS',
5242becc36aSPaolo Bonzini  'CONFIG_LINUX',
5252becc36aSPaolo Bonzini  'CONFIG_PVRDMA',
5262becc36aSPaolo Bonzini]
527859aef02SPaolo Bonziniignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS']
528ca0fc784SPaolo Bonzini
529a81df1b6SPaolo Bonziniforeach target : target_dirs
530859aef02SPaolo Bonzini  config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak')
531859aef02SPaolo Bonzini
532ca0fc784SPaolo Bonzini  foreach k, v: disassemblers
533ca0fc784SPaolo Bonzini    if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k)
534ca0fc784SPaolo Bonzini      foreach sym: v
535ca0fc784SPaolo Bonzini        config_target += { sym: 'y' }
536ca0fc784SPaolo Bonzini        config_all_disas += { sym: 'y' }
537ca0fc784SPaolo Bonzini      endforeach
538ca0fc784SPaolo Bonzini    endif
539ca0fc784SPaolo Bonzini  endforeach
540ca0fc784SPaolo Bonzini
541859aef02SPaolo Bonzini  config_target_data = configuration_data()
542859aef02SPaolo Bonzini  foreach k, v: config_target
543859aef02SPaolo Bonzini    if not k.startswith('TARGET_') and not k.startswith('CONFIG_')
544859aef02SPaolo Bonzini      # do nothing
545859aef02SPaolo Bonzini    elif ignored.contains(k)
546859aef02SPaolo Bonzini      # do nothing
547859aef02SPaolo Bonzini    elif k == 'TARGET_BASE_ARCH'
548859aef02SPaolo Bonzini      config_target_data.set('TARGET_' + v.to_upper(), 1)
549859aef02SPaolo Bonzini    elif k == 'TARGET_NAME'
550859aef02SPaolo Bonzini      config_target_data.set_quoted(k, v)
551859aef02SPaolo Bonzini    elif v == 'y'
552859aef02SPaolo Bonzini      config_target_data.set(k, 1)
553859aef02SPaolo Bonzini    else
554859aef02SPaolo Bonzini      config_target_data.set(k, v)
555859aef02SPaolo Bonzini    endif
556859aef02SPaolo Bonzini  endforeach
557859aef02SPaolo Bonzini  config_target_h += {target: configure_file(output: target + '-config-target.h',
558859aef02SPaolo Bonzini                                               configuration: config_target_data)}
5592becc36aSPaolo Bonzini
5602becc36aSPaolo Bonzini  if target.endswith('-softmmu')
5612becc36aSPaolo Bonzini    base_kconfig = []
5622becc36aSPaolo Bonzini    foreach sym : kconfig_external_symbols
563859aef02SPaolo Bonzini      if sym in config_target or sym in config_host
5642becc36aSPaolo Bonzini        base_kconfig += '@0@=y'.format(sym)
5652becc36aSPaolo Bonzini      endif
5662becc36aSPaolo Bonzini    endforeach
5672becc36aSPaolo Bonzini
5682becc36aSPaolo Bonzini    config_devices_mak = target + '-config-devices.mak'
5692becc36aSPaolo Bonzini    config_devices_mak = configure_file(
5702becc36aSPaolo Bonzini      input: ['default-configs' / target + '.mak', 'Kconfig'],
5712becc36aSPaolo Bonzini      output: config_devices_mak,
5722becc36aSPaolo Bonzini      depfile: config_devices_mak + '.d',
5732becc36aSPaolo Bonzini      capture: true,
5742becc36aSPaolo Bonzini      command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'],
5752becc36aSPaolo Bonzini                config_devices_mak, '@DEPFILE@', '@INPUT@',
5762becc36aSPaolo Bonzini                base_kconfig])
577859aef02SPaolo Bonzini
578859aef02SPaolo Bonzini    config_devices_data = configuration_data()
579859aef02SPaolo Bonzini    config_devices = keyval.load(config_devices_mak)
580859aef02SPaolo Bonzini    foreach k, v: config_devices
581859aef02SPaolo Bonzini      config_devices_data.set(k, 1)
582859aef02SPaolo Bonzini    endforeach
5832becc36aSPaolo Bonzini    config_devices_mak_list += config_devices_mak
584859aef02SPaolo Bonzini    config_devices_h += {target: configure_file(output: target + '-config-devices.h',
585859aef02SPaolo Bonzini                                                configuration: config_devices_data)}
586859aef02SPaolo Bonzini    config_target += config_devices
587a98006bcSPaolo Bonzini    config_all_devices += config_devices
5882becc36aSPaolo Bonzini  endif
5892becc36aSPaolo Bonzini  config_target_mak += {target: config_target}
590a81df1b6SPaolo Bonziniendforeach
591a81df1b6SPaolo Bonzini
5922becc36aSPaolo Bonzini# This configuration is used to build files that are shared by
5932becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common"
5942becc36aSPaolo Bonzini# static_library target.
5952becc36aSPaolo Bonzini#
5962becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would
5972becc36aSPaolo Bonzini# build literally all source files, including devices only used by
5982becc36aSPaolo Bonzini# targets that are not built for this compilation.  The CONFIG_ALL
5992becc36aSPaolo Bonzini# pseudo symbol replaces it.
6002becc36aSPaolo Bonzini
6012becc36aSPaolo Bonziniconfig_all = config_all_devices
6022becc36aSPaolo Bonziniconfig_all += config_host
6032becc36aSPaolo Bonziniconfig_all += config_all_disas
6042becc36aSPaolo Bonziniconfig_all += {
6052becc36aSPaolo Bonzini  'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'),
6062becc36aSPaolo Bonzini  'CONFIG_SOFTMMU': have_system,
6072becc36aSPaolo Bonzini  'CONFIG_USER_ONLY': have_user,
6082becc36aSPaolo Bonzini  'CONFIG_ALL': true,
6092becc36aSPaolo Bonzini}
6102becc36aSPaolo Bonzini
611a81df1b6SPaolo Bonzini# Generators
612a81df1b6SPaolo Bonzini
6133f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool')
614650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl')
615a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py')
616a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py',
617a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/commands.py',
618a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/common.py',
619a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/doc.py',
620a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/error.py',
621a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/events.py',
622a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/expr.py',
623a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/gen.py',
624a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/introspect.py',
625a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/parser.py',
626a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/schema.py',
627a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/source.py',
628a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/types.py',
629a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/visit.py',
630a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/common.py',
631a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi/doc.py',
632a81df1b6SPaolo Bonzini                     meson.source_root() / 'scripts/qapi-gen.py'
633a81df1b6SPaolo Bonzini]
634a81df1b6SPaolo Bonzini
635a81df1b6SPaolo Bonzinitracetool = [
636a81df1b6SPaolo Bonzini  python, files('scripts/tracetool.py'),
637a81df1b6SPaolo Bonzini   '--backend=' + config_host['TRACE_BACKENDS']
638a81df1b6SPaolo Bonzini]
639a81df1b6SPaolo Bonzini
6402c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'),
6412c273f32SMarc-André Lureau                    meson.current_source_dir(),
642859aef02SPaolo Bonzini                    config_host['PKGVERSION'], meson.project_version()]
6432c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h',
6442c273f32SMarc-André Lureau                             output: 'qemu-version.h',
6452c273f32SMarc-André Lureau                             command: qemu_version_cmd,
6462c273f32SMarc-André Lureau                             capture: true,
6472c273f32SMarc-André Lureau                             build_by_default: true,
6482c273f32SMarc-André Lureau                             build_always_stale: true)
6492c273f32SMarc-André Lureaugenh += qemu_version
6502c273f32SMarc-André Lureau
6513f885659SMarc-André Lureauhxdep = []
6523f885659SMarc-André Lureauhx_headers = [
6533f885659SMarc-André Lureau  ['qemu-options.hx', 'qemu-options.def'],
6543f885659SMarc-André Lureau  ['qemu-img-cmds.hx', 'qemu-img-cmds.h'],
6553f885659SMarc-André Lureau]
6563f885659SMarc-André Lureauif have_system
6573f885659SMarc-André Lureau  hx_headers += [
6583f885659SMarc-André Lureau    ['hmp-commands.hx', 'hmp-commands.h'],
6593f885659SMarc-André Lureau    ['hmp-commands-info.hx', 'hmp-commands-info.h'],
6603f885659SMarc-André Lureau  ]
6613f885659SMarc-André Lureauendif
6623f885659SMarc-André Lureauforeach d : hx_headers
663b7c70bf2SMarc-André Lureau  hxdep += custom_target(d[1],
6643f885659SMarc-André Lureau                input: files(d[0]),
6653f885659SMarc-André Lureau                output: d[1],
6663f885659SMarc-André Lureau                capture: true,
6673f885659SMarc-André Lureau                build_by_default: true, # to be removed when added to a target
6683f885659SMarc-André Lureau                command: [hxtool, '-h', '@INPUT0@'])
6693f885659SMarc-André Lureauendforeach
6703f885659SMarc-André Lureaugenh += hxdep
6713f885659SMarc-André Lureau
672a81df1b6SPaolo Bonzini# Collect sourcesets.
673a81df1b6SPaolo Bonzini
674a81df1b6SPaolo Bonziniutil_ss = ss.source_set()
675a81df1b6SPaolo Bonzinistub_ss = ss.source_set()
676a81df1b6SPaolo Bonzinitrace_ss = ss.source_set()
6773154fee4SMarc-André Lureaublock_ss = ss.source_set()
6784a96337dSPaolo Bonziniblockdev_ss = ss.source_set()
679ff219dcaSPaolo Bonziniqmp_ss = ss.source_set()
6802becc36aSPaolo Bonzinicommon_ss = ss.source_set()
6812becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set()
6822becc36aSPaolo Bonziniuser_ss = ss.source_set()
6832becc36aSPaolo Bonzinibsd_user_ss = ss.source_set()
6842becc36aSPaolo Bonzinilinux_user_ss = ss.source_set()
6852becc36aSPaolo Bonzinispecific_ss = ss.source_set()
68664ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set()
6872becc36aSPaolo Bonzini
6883154fee4SMarc-André Lureaumodules = {}
6892becc36aSPaolo Bonzinihw_arch = {}
6902becc36aSPaolo Bonzinitarget_arch = {}
6912becc36aSPaolo Bonzinitarget_softmmu_arch = {}
692a81df1b6SPaolo Bonzini
693a81df1b6SPaolo Bonzini###############
694a81df1b6SPaolo Bonzini# Trace files #
695a81df1b6SPaolo Bonzini###############
696a81df1b6SPaolo Bonzini
697c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once
698c9322ab5SMarc-André Lureau# we have those
699a81df1b6SPaolo Bonzinitrace_events_subdirs = [
700a81df1b6SPaolo Bonzini  'accel/kvm',
701a81df1b6SPaolo Bonzini  'accel/tcg',
702a81df1b6SPaolo Bonzini  'crypto',
703a81df1b6SPaolo Bonzini  'monitor',
704a81df1b6SPaolo Bonzini]
705a81df1b6SPaolo Bonziniif have_user
706a81df1b6SPaolo Bonzini  trace_events_subdirs += [ 'linux-user' ]
707a81df1b6SPaolo Bonziniendif
708a81df1b6SPaolo Bonziniif have_block
709a81df1b6SPaolo Bonzini  trace_events_subdirs += [
710a81df1b6SPaolo Bonzini    'authz',
711a81df1b6SPaolo Bonzini    'block',
712a81df1b6SPaolo Bonzini    'io',
713a81df1b6SPaolo Bonzini    'nbd',
714a81df1b6SPaolo Bonzini    'scsi',
715a81df1b6SPaolo Bonzini  ]
716a81df1b6SPaolo Bonziniendif
717a81df1b6SPaolo Bonziniif have_system
718a81df1b6SPaolo Bonzini  trace_events_subdirs += [
719a81df1b6SPaolo Bonzini    'audio',
720a81df1b6SPaolo Bonzini    'backends',
721a81df1b6SPaolo Bonzini    'backends/tpm',
722a81df1b6SPaolo Bonzini    'chardev',
723a81df1b6SPaolo Bonzini    'hw/9pfs',
724a81df1b6SPaolo Bonzini    'hw/acpi',
725a81df1b6SPaolo Bonzini    'hw/alpha',
726a81df1b6SPaolo Bonzini    'hw/arm',
727a81df1b6SPaolo Bonzini    'hw/audio',
728a81df1b6SPaolo Bonzini    'hw/block',
729a81df1b6SPaolo Bonzini    'hw/block/dataplane',
730a81df1b6SPaolo Bonzini    'hw/char',
731a81df1b6SPaolo Bonzini    'hw/display',
732a81df1b6SPaolo Bonzini    'hw/dma',
733a81df1b6SPaolo Bonzini    'hw/hppa',
734a81df1b6SPaolo Bonzini    'hw/hyperv',
735a81df1b6SPaolo Bonzini    'hw/i2c',
736a81df1b6SPaolo Bonzini    'hw/i386',
737a81df1b6SPaolo Bonzini    'hw/i386/xen',
738a81df1b6SPaolo Bonzini    'hw/ide',
739a81df1b6SPaolo Bonzini    'hw/input',
740a81df1b6SPaolo Bonzini    'hw/intc',
741a81df1b6SPaolo Bonzini    'hw/isa',
742a81df1b6SPaolo Bonzini    'hw/mem',
743a81df1b6SPaolo Bonzini    'hw/mips',
744a81df1b6SPaolo Bonzini    'hw/misc',
745a81df1b6SPaolo Bonzini    'hw/misc/macio',
746a81df1b6SPaolo Bonzini    'hw/net',
747a81df1b6SPaolo Bonzini    'hw/nvram',
748a81df1b6SPaolo Bonzini    'hw/pci',
749a81df1b6SPaolo Bonzini    'hw/pci-host',
750a81df1b6SPaolo Bonzini    'hw/ppc',
751a81df1b6SPaolo Bonzini    'hw/rdma',
752a81df1b6SPaolo Bonzini    'hw/rdma/vmw',
753a81df1b6SPaolo Bonzini    'hw/rtc',
754a81df1b6SPaolo Bonzini    'hw/s390x',
755a81df1b6SPaolo Bonzini    'hw/scsi',
756a81df1b6SPaolo Bonzini    'hw/sd',
757a81df1b6SPaolo Bonzini    'hw/sparc',
758a81df1b6SPaolo Bonzini    'hw/sparc64',
759a81df1b6SPaolo Bonzini    'hw/ssi',
760a81df1b6SPaolo Bonzini    'hw/timer',
761a81df1b6SPaolo Bonzini    'hw/tpm',
762a81df1b6SPaolo Bonzini    'hw/usb',
763a81df1b6SPaolo Bonzini    'hw/vfio',
764a81df1b6SPaolo Bonzini    'hw/virtio',
765a81df1b6SPaolo Bonzini    'hw/watchdog',
766a81df1b6SPaolo Bonzini    'hw/xen',
767a81df1b6SPaolo Bonzini    'hw/gpio',
768a81df1b6SPaolo Bonzini    'hw/riscv',
769a81df1b6SPaolo Bonzini    'migration',
770a81df1b6SPaolo Bonzini    'net',
771a81df1b6SPaolo Bonzini    'ui',
772a81df1b6SPaolo Bonzini  ]
773a81df1b6SPaolo Bonziniendif
774a81df1b6SPaolo Bonzinitrace_events_subdirs += [
775a81df1b6SPaolo Bonzini  'hw/core',
776a81df1b6SPaolo Bonzini  'qapi',
777a81df1b6SPaolo Bonzini  'qom',
778a81df1b6SPaolo Bonzini  'target/arm',
779a81df1b6SPaolo Bonzini  'target/hppa',
780a81df1b6SPaolo Bonzini  'target/i386',
781a81df1b6SPaolo Bonzini  'target/mips',
782a81df1b6SPaolo Bonzini  'target/ppc',
783a81df1b6SPaolo Bonzini  'target/riscv',
784a81df1b6SPaolo Bonzini  'target/s390x',
785a81df1b6SPaolo Bonzini  'target/sparc',
786a81df1b6SPaolo Bonzini  'util',
787a81df1b6SPaolo Bonzini]
788a81df1b6SPaolo Bonzini
789a81df1b6SPaolo Bonzinisubdir('qapi')
790a81df1b6SPaolo Bonzinisubdir('qobject')
791a81df1b6SPaolo Bonzinisubdir('stubs')
792a81df1b6SPaolo Bonzinisubdir('trace')
793a81df1b6SPaolo Bonzinisubdir('util')
7945582c58fSMarc-André Lureausubdir('qom')
7955582c58fSMarc-André Lureausubdir('authz')
796a81df1b6SPaolo Bonzinisubdir('crypto')
7972d78b56eSMarc-André Lureausubdir('ui')
798a81df1b6SPaolo Bonzini
7993154fee4SMarc-André Lureau
8003154fee4SMarc-André Lureauif enable_modules
8013154fee4SMarc-André Lureau  libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO')
8023154fee4SMarc-André Lureau  modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO')
8033154fee4SMarc-André Lureauendif
8043154fee4SMarc-André Lureau
805a81df1b6SPaolo Bonzini# Build targets from sourcesets
806a81df1b6SPaolo Bonzini
8072becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false)
808a81df1b6SPaolo Bonzini
809a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss)
8102becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false)
811a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil',
812a81df1b6SPaolo Bonzini                             sources: util_ss.sources() + stub_ss.sources() + genh,
813a81df1b6SPaolo Bonzini                             dependencies: [util_ss.dependencies(), m, glib, socket])
814a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil,
81504c6f1e7SMarc-André Lureau                              sources: genh + version_res)
816a81df1b6SPaolo Bonzini
817abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'),
818abff1abfSPaolo Bonzini                       output: 'decode-@BASENAME@.c.inc',
819abff1abfSPaolo Bonzini                       arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@'])
820abff1abfSPaolo Bonzini
821478e943fSPaolo Bonzinisubdir('audio')
8227fcfd456SMarc-André Lureausubdir('io')
823848e8ff6SMarc-André Lureausubdir('chardev')
824ec0d5893SMarc-André Lureausubdir('fsdev')
825abff1abfSPaolo Bonzinisubdir('libdecnumber')
826d3b18480SMarc-André Lureausubdir('target')
827708eab42SMarc-André Lureausubdir('dump')
828ec0d5893SMarc-André Lureau
8295e5733e5SMarc-André Lureaublock_ss.add(files(
8305e5733e5SMarc-André Lureau  'block.c',
8315e5733e5SMarc-André Lureau  'blockjob.c',
8325e5733e5SMarc-André Lureau  'job.c',
8335e5733e5SMarc-André Lureau  'qemu-io-cmds.c',
8345e5733e5SMarc-André Lureau))
8355e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c'))
8365e5733e5SMarc-André Lureau
8375e5733e5SMarc-André Lureausubdir('nbd')
8385e5733e5SMarc-André Lureausubdir('scsi')
8395e5733e5SMarc-André Lureausubdir('block')
8405e5733e5SMarc-André Lureau
8414a96337dSPaolo Bonziniblockdev_ss.add(files(
8424a96337dSPaolo Bonzini  'blockdev.c',
8434a96337dSPaolo Bonzini  'blockdev-nbd.c',
8444a96337dSPaolo Bonzini  'iothread.c',
8454a96337dSPaolo Bonzini  'job-qmp.c',
8464a96337dSPaolo Bonzini))
8474a96337dSPaolo Bonzini
8484a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon,
8494a96337dSPaolo Bonzini# os-win32.c does not
8504a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c'))
8514a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')])
8524a96337dSPaolo Bonzini
8534a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss)
8544a96337dSPaolo Bonzinisoftmmu_ss.add(files(
8554a96337dSPaolo Bonzini  'bootdevice.c',
8564a96337dSPaolo Bonzini  'dma-helpers.c',
8574a96337dSPaolo Bonzini  'qdev-monitor.c',
8584a96337dSPaolo Bonzini), sdl)
8594a96337dSPaolo Bonzini
8604a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c'))
8614a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp])
8624a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt],  if_true: [files('device_tree.c')])
8634a96337dSPaolo Bonzini
8644a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c'))
8654a96337dSPaolo Bonzini
8665d3ea0e1SPaolo Bonzinisubdir('softmmu')
867c9322ab5SMarc-André Lureau
868c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl)
869c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c'))
870c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files(
871c9322ab5SMarc-André Lureau  'fpu/softfloat.c',
872c9322ab5SMarc-André Lureau  'tcg/optimize.c',
873c9322ab5SMarc-André Lureau  'tcg/tcg-common.c',
874c9322ab5SMarc-André Lureau  'tcg/tcg-op-gvec.c',
875c9322ab5SMarc-André Lureau  'tcg/tcg-op-vec.c',
876c9322ab5SMarc-André Lureau  'tcg/tcg-op.c',
877c9322ab5SMarc-André Lureau  'tcg/tcg.c',
878c9322ab5SMarc-André Lureau))
879c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c'))
880c9322ab5SMarc-André Lureau
881ab318051SMarc-André Lureausubdir('backends')
882c574e161SMarc-André Lureausubdir('disas')
88355166230SMarc-André Lureausubdir('migration')
884ff219dcaSPaolo Bonzinisubdir('monitor')
885cdaf0722SMarc-André Lureausubdir('net')
88617ef2af6SMarc-André Lureausubdir('replay')
887582ea95fSMarc-André Lureausubdir('hw')
8881a82878aSMarc-André Lureausubdir('accel')
889f556b4a1SPaolo Bonzinisubdir('plugins')
890b309c321SMarc-André Lureausubdir('bsd-user')
8913a30446aSMarc-André Lureausubdir('linux-user')
8923a30446aSMarc-André Lureau
893b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c'))
894b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss)
895b309c321SMarc-André Lureau
8963a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c'))
8973a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss)
8985d3ea0e1SPaolo Bonzini
899a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries
900a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos')
90164ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz')
902a2ce7dbdSPaolo Bonzini
9033154fee4SMarc-André Lureaublock_mods = []
9043154fee4SMarc-André Lureausoftmmu_mods = []
9053154fee4SMarc-André Lureauforeach d, list : modules
9063154fee4SMarc-André Lureau  foreach m, module_ss : list
9073154fee4SMarc-André Lureau    if enable_modules and targetos != 'windows'
9083154fee4SMarc-André Lureau      module_ss = module_ss.apply(config_host, strict: false)
9093154fee4SMarc-André Lureau      sl = static_library(d + '-' + m, [genh, module_ss.sources()],
9103154fee4SMarc-André Lureau                          dependencies: [modulecommon, module_ss.dependencies()], pic: true)
9113154fee4SMarc-André Lureau      if d == 'block'
9123154fee4SMarc-André Lureau        block_mods += sl
9133154fee4SMarc-André Lureau      else
9143154fee4SMarc-André Lureau        softmmu_mods += sl
9153154fee4SMarc-André Lureau      endif
9163154fee4SMarc-André Lureau    else
9173154fee4SMarc-André Lureau      if d == 'block'
9183154fee4SMarc-André Lureau        block_ss.add_all(module_ss)
9193154fee4SMarc-André Lureau      else
9203154fee4SMarc-André Lureau        softmmu_ss.add_all(module_ss)
9213154fee4SMarc-André Lureau      endif
9223154fee4SMarc-André Lureau    endif
9233154fee4SMarc-André Lureau  endforeach
9243154fee4SMarc-André Lureauendforeach
9253154fee4SMarc-André Lureau
9263154fee4SMarc-André Lureaunm = find_program('nm')
9273154fee4SMarc-André Lureauundefsym = find_program('scripts/undefsym.sh')
9283154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms',
9293154fee4SMarc-André Lureau                             input: [libqemuutil, block_mods],
9303154fee4SMarc-André Lureau                             capture: true,
9313154fee4SMarc-André Lureau                             command: [undefsym, nm, '@INPUT@'])
9323154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms',
9333154fee4SMarc-André Lureau                             input: [libqemuutil, softmmu_mods],
9343154fee4SMarc-André Lureau                             capture: true,
9353154fee4SMarc-André Lureau                             command: [undefsym, nm, '@INPUT@'])
9363154fee4SMarc-André Lureau
9375e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false)
9385e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh,
9395e5733e5SMarc-André Lureau                          dependencies: block_ss.dependencies(),
9405e5733e5SMarc-André Lureau                          link_depends: block_syms,
9415e5733e5SMarc-André Lureau                          name_suffix: 'fa',
9425e5733e5SMarc-André Lureau                          build_by_default: false)
9435e5733e5SMarc-André Lureau
9445e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock],
945b7c70bf2SMarc-André Lureau                           link_args: '@block.syms',
946b7c70bf2SMarc-André Lureau                           dependencies: [crypto, io])
9475e5733e5SMarc-André Lureau
948ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false)
949ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh,
950ff219dcaSPaolo Bonzini                        dependencies: qmp_ss.dependencies(),
951ff219dcaSPaolo Bonzini                        name_suffix: 'fa',
952ff219dcaSPaolo Bonzini                        build_by_default: false)
953ff219dcaSPaolo Bonzini
954ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp])
955ff219dcaSPaolo Bonzini
9563154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods
9573154fee4SMarc-André Lureau  shared_module(m.name(),
9583154fee4SMarc-André Lureau                name_prefix: '',
9593154fee4SMarc-André Lureau                link_whole: m,
9603154fee4SMarc-André Lureau                install: true,
9613154fee4SMarc-André Lureau                install_dir: config_host['qemu_moddir'])
9623154fee4SMarc-André Lureauendforeach
9633154fee4SMarc-André Lureau
96464ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp)
96564ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil)
96664ed6f92SPaolo Bonzini
96764ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss])
9682becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss)
9692becc36aSPaolo Bonzini
9702becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false)
9712becc36aSPaolo Bonzinicommon_all = static_library('common',
9722becc36aSPaolo Bonzini                            build_by_default: false,
9732becc36aSPaolo Bonzini                            sources: common_all.sources() + genh,
9742becc36aSPaolo Bonzini                            dependencies: common_all.dependencies(),
9752becc36aSPaolo Bonzini                            name_suffix: 'fa')
9762becc36aSPaolo Bonzini
977c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh')
978c9322ab5SMarc-André Lureau
97964ed6f92SPaolo Bonziniemulators = []
9802becc36aSPaolo Bonziniforeach target : target_dirs
9812becc36aSPaolo Bonzini  config_target = config_target_mak[target]
9822becc36aSPaolo Bonzini  target_name = config_target['TARGET_NAME']
9832becc36aSPaolo Bonzini  arch = config_target['TARGET_BASE_ARCH']
984859aef02SPaolo Bonzini  arch_srcs = [config_target_h[target]]
98564ed6f92SPaolo Bonzini  arch_deps = []
98664ed6f92SPaolo Bonzini  c_args = ['-DNEED_CPU_H',
98764ed6f92SPaolo Bonzini            '-DCONFIG_TARGET="@0@-config-target.h"'.format(target),
98864ed6f92SPaolo Bonzini            '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)]
98964ed6f92SPaolo Bonzini  link_args = []
9902becc36aSPaolo Bonzini
991859aef02SPaolo Bonzini  config_target += config_host
9922becc36aSPaolo Bonzini  target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])]
9932becc36aSPaolo Bonzini  if targetos == 'linux'
9942becc36aSPaolo Bonzini    target_inc += include_directories('linux-headers', is_system: true)
9952becc36aSPaolo Bonzini  endif
9962becc36aSPaolo Bonzini  if target.endswith('-softmmu')
9972becc36aSPaolo Bonzini    qemu_target_name = 'qemu-system-' + target_name
9982becc36aSPaolo Bonzini    target_type='system'
999abff1abfSPaolo Bonzini    t = target_softmmu_arch[arch].apply(config_target, strict: false)
1000abff1abfSPaolo Bonzini    arch_srcs += t.sources()
100164ed6f92SPaolo Bonzini    arch_deps += t.dependencies()
1002abff1abfSPaolo Bonzini
10032c44220dSMarc-André Lureau    hw_dir = target_name == 'sparc64' ? 'sparc64' : arch
10042c44220dSMarc-André Lureau    hw = hw_arch[hw_dir].apply(config_target, strict: false)
10052c44220dSMarc-André Lureau    arch_srcs += hw.sources()
100664ed6f92SPaolo Bonzini    arch_deps += hw.dependencies()
10072c44220dSMarc-André Lureau
10082becc36aSPaolo Bonzini    arch_srcs += config_devices_h[target]
100964ed6f92SPaolo Bonzini    link_args += ['@block.syms', '@qemu.syms']
10102becc36aSPaolo Bonzini  else
10113a30446aSMarc-André Lureau    abi = config_target['TARGET_ABI_DIR']
10122becc36aSPaolo Bonzini    target_type='user'
10132becc36aSPaolo Bonzini    qemu_target_name = 'qemu-' + target_name
10142becc36aSPaolo Bonzini    if 'CONFIG_LINUX_USER' in config_target
10152becc36aSPaolo Bonzini      base_dir = 'linux-user'
10162becc36aSPaolo Bonzini      target_inc += include_directories('linux-user/host/' / config_host['ARCH'])
10172becc36aSPaolo Bonzini    else
10182becc36aSPaolo Bonzini      base_dir = 'bsd-user'
10192becc36aSPaolo Bonzini    endif
10202becc36aSPaolo Bonzini    target_inc += include_directories(
10212becc36aSPaolo Bonzini      base_dir,
10223a30446aSMarc-André Lureau      base_dir / abi,
10232becc36aSPaolo Bonzini    )
10243a30446aSMarc-André Lureau    if 'CONFIG_LINUX_USER' in config_target
10253a30446aSMarc-André Lureau      dir = base_dir / abi
10263a30446aSMarc-André Lureau      arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c')
10273a30446aSMarc-André Lureau      if config_target.has_key('TARGET_SYSTBL_ABI')
10283a30446aSMarc-André Lureau        arch_srcs += \
10293a30446aSMarc-André Lureau          syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'],
10303a30446aSMarc-André Lureau                                             extra_args : config_target['TARGET_SYSTBL_ABI'])
10313a30446aSMarc-André Lureau      endif
10323a30446aSMarc-André Lureau    endif
10332becc36aSPaolo Bonzini  endif
10342becc36aSPaolo Bonzini
1035c9322ab5SMarc-André Lureau  if 'TARGET_XML_FILES' in config_target
1036c9322ab5SMarc-André Lureau    gdbstub_xml = custom_target(target + '-gdbstub-xml.c',
1037c9322ab5SMarc-André Lureau                                output: target + '-gdbstub-xml.c',
1038c9322ab5SMarc-André Lureau                                input: files(config_target['TARGET_XML_FILES'].split()),
1039c9322ab5SMarc-André Lureau                                command: [feature_to_c, '@INPUT@'],
1040c9322ab5SMarc-André Lureau                                capture: true)
1041c9322ab5SMarc-André Lureau    arch_srcs += gdbstub_xml
1042c9322ab5SMarc-André Lureau  endif
1043c9322ab5SMarc-André Lureau
1044abff1abfSPaolo Bonzini  t = target_arch[arch].apply(config_target, strict: false)
1045abff1abfSPaolo Bonzini  arch_srcs += t.sources()
104664ed6f92SPaolo Bonzini  arch_deps += t.dependencies()
1047abff1abfSPaolo Bonzini
10482becc36aSPaolo Bonzini  target_common = common_ss.apply(config_target, strict: false)
10492becc36aSPaolo Bonzini  objects = common_all.extract_objects(target_common.sources())
105064ed6f92SPaolo Bonzini  deps = target_common.dependencies()
10512becc36aSPaolo Bonzini
10522becc36aSPaolo Bonzini  target_specific = specific_ss.apply(config_target, strict: false)
10532becc36aSPaolo Bonzini  arch_srcs += target_specific.sources()
105464ed6f92SPaolo Bonzini  arch_deps += target_specific.dependencies()
10552becc36aSPaolo Bonzini
105664ed6f92SPaolo Bonzini  lib = static_library('qemu-' + target,
1057859aef02SPaolo Bonzini                 sources: arch_srcs + genh,
1058b7612f45SPaolo Bonzini                 dependencies: arch_deps,
10592becc36aSPaolo Bonzini                 objects: objects,
10602becc36aSPaolo Bonzini                 include_directories: target_inc,
106164ed6f92SPaolo Bonzini                 c_args: c_args,
106264ed6f92SPaolo Bonzini                 build_by_default: false,
10632becc36aSPaolo Bonzini                 name_suffix: 'fa')
106464ed6f92SPaolo Bonzini
106564ed6f92SPaolo Bonzini  if target.endswith('-softmmu')
106664ed6f92SPaolo Bonzini    execs = [{
106764ed6f92SPaolo Bonzini      'name': 'qemu-system-' + target_name,
106864ed6f92SPaolo Bonzini      'gui': false,
106964ed6f92SPaolo Bonzini      'sources': files('softmmu/main.c'),
107064ed6f92SPaolo Bonzini      'dependencies': []
107164ed6f92SPaolo Bonzini    }]
107235be72baSPaolo Bonzini    if targetos == 'windows' and (sdl.found() or gtk.found())
107364ed6f92SPaolo Bonzini      execs += [{
107464ed6f92SPaolo Bonzini        'name': 'qemu-system-' + target_name + 'w',
107564ed6f92SPaolo Bonzini        'gui': true,
107664ed6f92SPaolo Bonzini        'sources': files('softmmu/main.c'),
107764ed6f92SPaolo Bonzini        'dependencies': []
107864ed6f92SPaolo Bonzini      }]
107964ed6f92SPaolo Bonzini    endif
108064ed6f92SPaolo Bonzini    if config_host.has_key('CONFIG_FUZZ')
108164ed6f92SPaolo Bonzini      specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false)
108264ed6f92SPaolo Bonzini      execs += [{
108364ed6f92SPaolo Bonzini        'name': 'qemu-fuzz-' + target_name,
108464ed6f92SPaolo Bonzini        'gui': false,
108564ed6f92SPaolo Bonzini        'sources': specific_fuzz.sources(),
108664ed6f92SPaolo Bonzini        'dependencies': specific_fuzz.dependencies(),
108764ed6f92SPaolo Bonzini        'link_depends': [files('tests/qtest/fuzz/fork_fuzz.ld')],
108864ed6f92SPaolo Bonzini      }]
108964ed6f92SPaolo Bonzini    endif
109064ed6f92SPaolo Bonzini  else
109164ed6f92SPaolo Bonzini    execs = [{
109264ed6f92SPaolo Bonzini      'name': 'qemu-' + target_name,
109364ed6f92SPaolo Bonzini      'gui': false,
109464ed6f92SPaolo Bonzini      'sources': [],
109564ed6f92SPaolo Bonzini      'dependencies': []
109664ed6f92SPaolo Bonzini    }]
109764ed6f92SPaolo Bonzini  endif
109864ed6f92SPaolo Bonzini  foreach exe: execs
109964ed6f92SPaolo Bonzini    emulators += executable(exe['name'], exe['sources'],
110064ed6f92SPaolo Bonzini               install: true,
110164ed6f92SPaolo Bonzini               c_args: c_args,
110264ed6f92SPaolo Bonzini               dependencies: arch_deps + deps + exe['dependencies'],
110364ed6f92SPaolo Bonzini               objects: lib.extract_all_objects(recursive: true),
110464ed6f92SPaolo Bonzini               link_language: link_language,
110564ed6f92SPaolo Bonzini               link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []),
110664ed6f92SPaolo Bonzini               link_args: link_args,
110764ed6f92SPaolo Bonzini               gui_app: exe['gui'])
110810e1d263SMarc-André Lureau
110910e1d263SMarc-André Lureau    if 'CONFIG_TRACE_SYSTEMTAP' in config_host
111010e1d263SMarc-André Lureau      foreach stp: [
1111bd5f973aSStefan Hajnoczi        {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false},
1112bd5f973aSStefan Hajnoczi        {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true},
111310e1d263SMarc-André Lureau        {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true},
111410e1d263SMarc-André Lureau        {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true},
111510e1d263SMarc-André Lureau      ]
1116bd5f973aSStefan Hajnoczi        custom_target(exe['name'] + stp['ext'],
111710e1d263SMarc-André Lureau                      input: trace_events_all,
1118bd5f973aSStefan Hajnoczi                      output: exe['name'] + stp['ext'],
111910e1d263SMarc-André Lureau                      capture: true,
112010e1d263SMarc-André Lureau                      install: stp['install'],
1121ab4c0996SMarc-André Lureau                      install_dir: qemu_datadir / '../systemtap/tapset',
112210e1d263SMarc-André Lureau                      command: [
112310e1d263SMarc-André Lureau                        tracetool, '--group=all', '--format=' + stp['fmt'],
112410e1d263SMarc-André Lureau                        '--binary=' + stp['bin'],
112510e1d263SMarc-André Lureau                        '--target-name=' + target_name,
112610e1d263SMarc-André Lureau                        '--target-type=' + target_type,
112710e1d263SMarc-André Lureau                        '--probe-prefix=qemu.' + target_type + '.' + target_name,
112810e1d263SMarc-André Lureau                        '@INPUT@',
112910e1d263SMarc-André Lureau                      ])
113010e1d263SMarc-André Lureau      endforeach
113110e1d263SMarc-André Lureau    endif
113264ed6f92SPaolo Bonzini  endforeach
11332becc36aSPaolo Bonziniendforeach
11342becc36aSPaolo Bonzini
1135931049b4SPaolo Bonzini# Other build targets
1136897b5afaSMarc-André Lureau
1137f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host
1138f556b4a1SPaolo Bonzini  install_headers('include/qemu/qemu-plugin.h')
1139f556b4a1SPaolo Bonziniendif
1140f556b4a1SPaolo Bonzini
1141f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host
1142f15bff25SPaolo Bonzini  subdir('qga')
1143f15bff25SPaolo Bonziniendif
1144f15bff25SPaolo Bonzini
11459755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled
11469755c94aSLaurent Vivier# when we don't build tools or system
11474113f4cfSLaurent Vivierif xkbcommon.found()
114828742467SMarc-André Lureau  # used for the update-keymaps target, so include rules even if !have_tools
114928742467SMarc-André Lureau  qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh,
115028742467SMarc-André Lureau                           dependencies: [qemuutil, xkbcommon], install: have_tools)
115128742467SMarc-André Lureauendif
115228742467SMarc-André Lureau
11538855e8f0SPhilippe Mathieu-Daudéqemu_block_tools = []
1154931049b4SPaolo Bonziniif have_tools
1155b7c70bf2SMarc-André Lureau  qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep],
1156b7c70bf2SMarc-André Lureau             dependencies: [authz, block, crypto, io, qom, qemuutil], install: true)
1157b7c70bf2SMarc-André Lureau  qemu_io = executable('qemu-io', files('qemu-io.c'),
1158b7c70bf2SMarc-André Lureau             dependencies: [block, qemuutil], install: true)
1159b7c70bf2SMarc-André Lureau  qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'),
1160b7c70bf2SMarc-André Lureau               dependencies: [block, qemuutil], install: true)
1161b7c70bf2SMarc-André Lureau
11627c58bb76SPaolo Bonzini  subdir('storage-daemon')
1163a9c9727cSPaolo Bonzini  subdir('contrib/rdmacm-mux')
11641d7bb6abSMarc-André Lureau  subdir('contrib/elf2dmp')
1165a9c9727cSPaolo Bonzini
1166157e7b13SMarc-André Lureau  executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'),
1167157e7b13SMarc-André Lureau             dependencies: qemuutil,
1168157e7b13SMarc-André Lureau             install: true)
1169157e7b13SMarc-André Lureau
1170931049b4SPaolo Bonzini  if 'CONFIG_VHOST_USER' in config_host
1171931049b4SPaolo Bonzini    subdir('contrib/libvhost-user')
11722d7ac0afSPaolo Bonzini    subdir('contrib/vhost-user-blk')
1173ea458960SMarc-André Lureau    subdir('contrib/vhost-user-gpu')
117432fcc624SMarc-André Lureau    subdir('contrib/vhost-user-input')
117599650b62SPaolo Bonzini    subdir('contrib/vhost-user-scsi')
1176931049b4SPaolo Bonzini  endif
11778f51e01cSMarc-André Lureau
11788f51e01cSMarc-André Lureau  if targetos == 'linux'
11798f51e01cSMarc-André Lureau    executable('qemu-bridge-helper', files('qemu-bridge-helper.c'),
11808f51e01cSMarc-André Lureau               dependencies: [qemuutil, libcap_ng],
11818f51e01cSMarc-André Lureau               install: true,
11828f51e01cSMarc-André Lureau               install_dir: get_option('libexecdir'))
1183897b5afaSMarc-André Lureau
1184897b5afaSMarc-André Lureau    executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'),
1185897b5afaSMarc-André Lureau               dependencies: [authz, crypto, io, qom, qemuutil,
1186897b5afaSMarc-André Lureau                              libcap_ng, libudev, libmpathpersist],
1187897b5afaSMarc-André Lureau               install: true)
11888f51e01cSMarc-André Lureau  endif
11898f51e01cSMarc-André Lureau
11905ee24e78SMarc-André Lureau  if 'CONFIG_IVSHMEM' in config_host
11915ee24e78SMarc-André Lureau    subdir('contrib/ivshmem-client')
11925ee24e78SMarc-André Lureau    subdir('contrib/ivshmem-server')
11935ee24e78SMarc-André Lureau  endif
1194931049b4SPaolo Bonziniendif
1195931049b4SPaolo Bonzini
1196f5aa6320SMarc-André Lureausubdir('scripts')
11973f99cf57SPaolo Bonzinisubdir('tools')
1198bdcbea7aSMarc-André Lureausubdir('pc-bios')
1199ce1c1e7aSPaolo Bonzinisubdir('tests')
1200f8aa24eaSPaolo Bonzinisubdir('docs')
1201e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host
1202e8f3bd71SMarc-André Lureau  subdir('po')
1203e8f3bd71SMarc-André Lureauendif
12043f99cf57SPaolo Bonzini
1205acfdaac5SPaolo Bonziniif build_docs
1206acfdaac5SPaolo Bonzini  makeinfo = find_program('makeinfo', required: build_docs)
1207acfdaac5SPaolo Bonzini
1208acfdaac5SPaolo Bonzini  docs_inc = [
1209acfdaac5SPaolo Bonzini    '-I', meson.current_source_dir(),
1210acfdaac5SPaolo Bonzini    '-I', meson.current_build_dir() / 'docs',
1211acfdaac5SPaolo Bonzini    '-I', '@OUTDIR@',
1212acfdaac5SPaolo Bonzini  ]
1213acfdaac5SPaolo Bonzini
1214acfdaac5SPaolo Bonzini  version_texi = configure_file(output: 'version.texi',
1215acfdaac5SPaolo Bonzini                              input: 'version.texi.in',
1216acfdaac5SPaolo Bonzini                              configuration: {'VERSION': meson.project_version(),
1217acfdaac5SPaolo Bonzini                                              'qemu_confdir': config_host['qemu_confdir']})
1218acfdaac5SPaolo Bonzini
1219acfdaac5SPaolo Bonzini  texi = {
1220acfdaac5SPaolo Bonzini    'qemu-qmp-ref': ['docs/interop/qemu-qmp-ref.texi', qapi_doc_texi, version_texi],
1221acfdaac5SPaolo Bonzini  }
1222acfdaac5SPaolo Bonzini  if 'CONFIG_GUEST_AGENT' in config_host
1223acfdaac5SPaolo Bonzini    texi += {'qemu-ga-ref': ['docs/interop/qemu-ga-ref.texi', qga_qapi_doc_texi, version_texi]}
1224acfdaac5SPaolo Bonzini  endif
1225acfdaac5SPaolo Bonzini
1226acfdaac5SPaolo Bonzini  if makeinfo.found()
1227acfdaac5SPaolo Bonzini    cmd = [
1228acfdaac5SPaolo Bonzini      'env', 'LC_ALL=C', makeinfo, '--no-split', '--number-sections', docs_inc,
1229acfdaac5SPaolo Bonzini      '@INPUT0@', '-o', '@OUTPUT@',
1230acfdaac5SPaolo Bonzini    ]
1231acfdaac5SPaolo Bonzini    foreach ext, args: {
1232acfdaac5SPaolo Bonzini        'info': [],
1233acfdaac5SPaolo Bonzini        'html': ['--no-headers', '--html'],
1234acfdaac5SPaolo Bonzini        'txt': ['--no-headers', '--plaintext'],
1235acfdaac5SPaolo Bonzini    }
1236acfdaac5SPaolo Bonzini      t = []
1237acfdaac5SPaolo Bonzini      foreach doc, input: texi
1238acfdaac5SPaolo Bonzini        output = doc + '.' + ext
1239acfdaac5SPaolo Bonzini        t += custom_target(output,
1240acfdaac5SPaolo Bonzini                      input: input,
1241acfdaac5SPaolo Bonzini                      output: output,
1242acfdaac5SPaolo Bonzini                      install: true,
1243491e74c1SMarc-André Lureau                      install_dir: qemu_docdir / 'interop',
1244acfdaac5SPaolo Bonzini                      command: cmd + args)
1245acfdaac5SPaolo Bonzini      endforeach
1246acfdaac5SPaolo Bonzini      alias_target(ext, t)
1247acfdaac5SPaolo Bonzini    endforeach
1248acfdaac5SPaolo Bonzini  endif
1249acfdaac5SPaolo Bonzini
1250acfdaac5SPaolo Bonzini  texi2pdf = find_program('texi2pdf', required: false)
1251acfdaac5SPaolo Bonzini
1252acfdaac5SPaolo Bonzini  if texi2pdf.found()
1253acfdaac5SPaolo Bonzini    pdfs = []
1254acfdaac5SPaolo Bonzini    foreach doc, input: texi
1255acfdaac5SPaolo Bonzini      output = doc + '.pdf'
1256acfdaac5SPaolo Bonzini      pdfs += custom_target(output,
1257acfdaac5SPaolo Bonzini                    input: input,
1258acfdaac5SPaolo Bonzini                    output: output,
1259acfdaac5SPaolo Bonzini                    command: [texi2pdf, '-q', docs_inc, '@INPUT0@', '-o', '@OUTPUT@'],
1260acfdaac5SPaolo Bonzini                    build_by_default: false)
1261acfdaac5SPaolo Bonzini    endforeach
1262acfdaac5SPaolo Bonzini    alias_target('pdf', pdfs)
1263acfdaac5SPaolo Bonzini  endif
1264acfdaac5SPaolo Bonzini
1265acfdaac5SPaolo Bonzini  texi2pod = find_program('scripts/texi2pod.pl')
1266acfdaac5SPaolo Bonzini  pod2man = find_program('pod2man', required: build_docs)
1267acfdaac5SPaolo Bonzini
1268acfdaac5SPaolo Bonzini  if pod2man.found()
1269acfdaac5SPaolo Bonzini    foreach doc, input: texi
1270acfdaac5SPaolo Bonzini      man = doc + '.7'
1271acfdaac5SPaolo Bonzini      pod = custom_target(man + '.pod',
1272acfdaac5SPaolo Bonzini                          input: input,
1273acfdaac5SPaolo Bonzini                          output: man + '.pod',
1274acfdaac5SPaolo Bonzini                          command: [texi2pod,
1275acfdaac5SPaolo Bonzini                                    '-DVERSION="' + meson.project_version() + '"',
1276acfdaac5SPaolo Bonzini                                    '-DCONFDIR="' + config_host['qemu_confdir'] + '"',
1277acfdaac5SPaolo Bonzini                                    '@INPUT0@', '@OUTPUT@'])
1278acfdaac5SPaolo Bonzini      man = custom_target(man,
1279acfdaac5SPaolo Bonzini                          input: pod,
1280acfdaac5SPaolo Bonzini                          output: man,
1281acfdaac5SPaolo Bonzini                          capture: true,
1282acfdaac5SPaolo Bonzini                          install: true,
1283b81efab7SMarc-André Lureau                          install_dir: get_option('mandir') / 'man7',
1284acfdaac5SPaolo Bonzini                          command: [pod2man, '--utf8', '--section=7', '--center=" "',
1285acfdaac5SPaolo Bonzini                                    '--release=" "', '@INPUT@'])
1286acfdaac5SPaolo Bonzini    endforeach
1287acfdaac5SPaolo Bonzini  endif
1288acfdaac5SPaolo Bonziniendif
1289acfdaac5SPaolo Bonzini
12908adfeba9SMarc-André Lureauif host_machine.system() == 'windows'
12918adfeba9SMarc-André Lureau  nsis_cmd = [
12928adfeba9SMarc-André Lureau    find_program('scripts/nsis.py'),
12938adfeba9SMarc-André Lureau    '@OUTPUT@',
12948adfeba9SMarc-André Lureau    get_option('prefix'),
12958adfeba9SMarc-André Lureau    meson.current_source_dir(),
12968adfeba9SMarc-André Lureau    host_machine.cpu_family(),
12978adfeba9SMarc-André Lureau    '--',
12988adfeba9SMarc-André Lureau    '-DDISPLAYVERSION=' + meson.project_version(),
12998adfeba9SMarc-André Lureau  ]
13008adfeba9SMarc-André Lureau  if build_docs
13018adfeba9SMarc-André Lureau    nsis_cmd += '-DCONFIG_DOCUMENTATION=y'
13028adfeba9SMarc-André Lureau  endif
13038adfeba9SMarc-André Lureau  if 'CONFIG_GTK' in config_host
13048adfeba9SMarc-André Lureau    nsis_cmd += '-DCONFIG_GTK=y'
13058adfeba9SMarc-André Lureau  endif
13068adfeba9SMarc-André Lureau
13078adfeba9SMarc-André Lureau  nsis = custom_target('nsis',
13088adfeba9SMarc-André Lureau                       output: 'qemu-setup-' + meson.project_version() + '.exe',
13098adfeba9SMarc-André Lureau                       input: files('qemu.nsi'),
13108adfeba9SMarc-André Lureau                       build_always_stale: true,
13118adfeba9SMarc-André Lureau                       command: nsis_cmd + ['@INPUT@'])
13128adfeba9SMarc-André Lureau  alias_target('installer', nsis)
13138adfeba9SMarc-André Lureauendif
13148adfeba9SMarc-André Lureau
1315f9332757SPaolo Bonzinisummary_info = {}
1316f9332757SPaolo Bonzinisummary_info += {'Install prefix':    config_host['prefix']}
1317f9332757SPaolo Bonzinisummary_info += {'BIOS directory':    config_host['qemu_datadir']}
1318f9332757SPaolo Bonzinisummary_info += {'firmware path':     config_host['qemu_firmwarepath']}
1319f9332757SPaolo Bonzinisummary_info += {'binary directory':  config_host['bindir']}
1320f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']}
1321f9332757SPaolo Bonzinisummary_info += {'module directory':  config_host['qemu_moddir']}
1322f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']}
1323f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']}
1324f9332757SPaolo Bonzinisummary_info += {'config directory':  config_host['sysconfdir']}
1325f9332757SPaolo Bonziniif targetos != 'windows'
1326f9332757SPaolo Bonzini  summary_info += {'local state directory': config_host['qemu_localstatedir']}
1327b81efab7SMarc-André Lureau  summary_info += {'Manual directory':      get_option('mandir')}
1328f9332757SPaolo Bonzinielse
1329f9332757SPaolo Bonzini  summary_info += {'local state directory': 'queried at runtime'}
1330f9332757SPaolo Bonziniendif
1331491e74c1SMarc-André Lureausummary_info += {'Doc directory':     get_option('docdir')}
1332f9332757SPaolo Bonzinisummary_info += {'Build directory':   meson.current_build_dir()}
1333f9332757SPaolo Bonzinisummary_info += {'Source path':       meson.current_source_dir()}
1334f9332757SPaolo Bonzinisummary_info += {'GIT binary':        config_host['GIT']}
1335f9332757SPaolo Bonzinisummary_info += {'GIT submodules':    config_host['GIT_SUBMODULES']}
1336f9332757SPaolo Bonzinisummary_info += {'C compiler':        meson.get_compiler('c').cmd_array()[0]}
1337f9332757SPaolo Bonzinisummary_info += {'Host C compiler':   meson.get_compiler('c', native: true).cmd_array()[0]}
1338f9332757SPaolo Bonziniif link_language == 'cpp'
1339f9332757SPaolo Bonzini  summary_info += {'C++ compiler':      meson.get_compiler('cpp').cmd_array()[0]}
1340f9332757SPaolo Bonzinielse
1341f9332757SPaolo Bonzini  summary_info += {'C++ compiler':      false}
1342f9332757SPaolo Bonziniendif
1343f9332757SPaolo Bonziniif targetos == 'darwin'
1344f9332757SPaolo Bonzini  summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]}
1345f9332757SPaolo Bonziniendif
1346f9332757SPaolo Bonzinisummary_info += {'ARFLAGS':           config_host['ARFLAGS']}
1347f9332757SPaolo Bonzinisummary_info += {'CFLAGS':            config_host['CFLAGS']}
1348f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS':       config_host['QEMU_CFLAGS']}
1349f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS':      config_host['QEMU_LDFLAGS']}
1350f9332757SPaolo Bonzinisummary_info += {'make':              config_host['MAKE']}
1351f9332757SPaolo Bonzinisummary_info += {'python':            '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
1352f9332757SPaolo Bonzinisummary_info += {'sphinx-build':      config_host['SPHINX_BUILD']}
1353f9332757SPaolo Bonzinisummary_info += {'genisoimage':       config_host['GENISOIMAGE']}
1354f9332757SPaolo Bonzini# TODO: add back version
1355f9332757SPaolo Bonzinisummary_info += {'slirp support':     config_host.has_key('CONFIG_SLIRP')}
1356f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP')
1357f9332757SPaolo Bonzini  summary_info += {'smbd':            config_host['CONFIG_SMBD_COMMAND']}
1358f9332757SPaolo Bonziniendif
1359f9332757SPaolo Bonzinisummary_info += {'module support':    config_host.has_key('CONFIG_MODULES')}
1360f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES')
1361f9332757SPaolo Bonzini  summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
1362f9332757SPaolo Bonziniendif
1363f9332757SPaolo Bonzinisummary_info += {'host CPU':          cpu}
1364f9332757SPaolo Bonzinisummary_info += {'host endianness':   build_machine.endian()}
1365f9332757SPaolo Bonzinisummary_info += {'target list':       config_host['TARGET_DIRS']}
1366f9332757SPaolo Bonzinisummary_info += {'gprof enabled':     config_host.has_key('CONFIG_GPROF')}
1367f9332757SPaolo Bonzinisummary_info += {'sparse enabled':    meson.get_compiler('c').cmd_array().contains('cgcc')}
1368f9332757SPaolo Bonzinisummary_info += {'strip binaries':    get_option('strip')}
1369f9332757SPaolo Bonzinisummary_info += {'profiler':          config_host.has_key('CONFIG_PROFILER')}
1370f9332757SPaolo Bonzinisummary_info += {'static build':      config_host.has_key('CONFIG_TOOLS')}
1371f9332757SPaolo Bonziniif targetos == 'darwin'
1372f9332757SPaolo Bonzini  summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
1373f9332757SPaolo Bonziniendif
1374f9332757SPaolo Bonzini# TODO: add back version
137535be72baSPaolo Bonzinisummary_info += {'SDL support':       sdl.found()}
137635be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()}
1377f9332757SPaolo Bonzini# TODO: add back version
1378f9332757SPaolo Bonzinisummary_info += {'GTK support':       config_host.has_key('CONFIG_GTK')}
1379f9332757SPaolo Bonzinisummary_info += {'GTK GL support':    config_host.has_key('CONFIG_GTK_GL')}
1380b7612f45SPaolo Bonzinisummary_info += {'pixman':            pixman.found()}
1381f9332757SPaolo Bonzini# TODO: add back version
1382f9332757SPaolo Bonzinisummary_info += {'VTE support':       config_host.has_key('CONFIG_VTE')}
1383f9332757SPaolo Bonzinisummary_info += {'TLS priority':      config_host['CONFIG_TLS_PRIORITY']}
1384f9332757SPaolo Bonzinisummary_info += {'GNUTLS support':    config_host.has_key('CONFIG_GNUTLS')}
1385f9332757SPaolo Bonzini# TODO: add back version
1386f9332757SPaolo Bonzinisummary_info += {'libgcrypt':         config_host.has_key('CONFIG_GCRYPT')}
1387f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT')
1388f9332757SPaolo Bonzini   summary_info += {'  hmac':            config_host.has_key('CONFIG_GCRYPT_HMAC')}
1389f9332757SPaolo Bonzini   summary_info += {'  XTS':             not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
1390f9332757SPaolo Bonziniendif
1391f9332757SPaolo Bonzini# TODO: add back version
1392f9332757SPaolo Bonzinisummary_info += {'nettle':            config_host.has_key('CONFIG_NETTLE')}
1393f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE')
1394f9332757SPaolo Bonzini   summary_info += {'  XTS':             not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')}
1395f9332757SPaolo Bonziniendif
1396f9332757SPaolo Bonzinisummary_info += {'libtasn1':          config_host.has_key('CONFIG_TASN1')}
1397f9332757SPaolo Bonzinisummary_info += {'PAM':               config_host.has_key('CONFIG_AUTH_PAM')}
1398f9332757SPaolo Bonzinisummary_info += {'iconv support':     config_host.has_key('CONFIG_ICONV')}
1399f9332757SPaolo Bonzinisummary_info += {'curses support':    config_host.has_key('CONFIG_CURSES')}
1400f9332757SPaolo Bonzini# TODO: add back version
1401f9332757SPaolo Bonzinisummary_info += {'virgl support':     config_host.has_key('CONFIG_VIRGL')}
1402f9332757SPaolo Bonzinisummary_info += {'curl support':      config_host.has_key('CONFIG_CURL')}
1403f9332757SPaolo Bonzinisummary_info += {'mingw32 support':   targetos == 'windows'}
1404f9332757SPaolo Bonzinisummary_info += {'Audio drivers':     config_host['CONFIG_AUDIO_DRIVERS']}
1405f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']}
1406f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']}
1407f9332757SPaolo Bonzinisummary_info += {'VirtFS support':    config_host.has_key('CONFIG_VIRTFS')}
1408f9332757SPaolo Bonzinisummary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')}
1409a0b93237SPaolo Bonzinisummary_info += {'VNC support':       vnc.found()}
1410a0b93237SPaolo Bonziniif vnc.found()
1411a0b93237SPaolo Bonzini  summary_info += {'VNC SASL support':  sasl.found()}
1412a0b93237SPaolo Bonzini  summary_info += {'VNC JPEG support':  jpeg.found()}
1413a0b93237SPaolo Bonzini  summary_info += {'VNC PNG support':   png.found()}
1414f9332757SPaolo Bonziniendif
1415f9332757SPaolo Bonzinisummary_info += {'xen support':       config_host.has_key('CONFIG_XEN_BACKEND')}
1416f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND')
1417f9332757SPaolo Bonzini  summary_info += {'xen ctrl version':  config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']}
1418f9332757SPaolo Bonziniendif
1419f9332757SPaolo Bonzinisummary_info += {'brlapi support':    config_host.has_key('CONFIG_BRLAPI')}
1420f9332757SPaolo Bonzinisummary_info += {'Documentation':     config_host.has_key('BUILD_DOCS')}
1421f9332757SPaolo Bonzinisummary_info += {'PIE':               get_option('b_pie')}
1422f9332757SPaolo Bonzinisummary_info += {'vde support':       config_host.has_key('CONFIG_VDE')}
1423f9332757SPaolo Bonzinisummary_info += {'netmap support':    config_host.has_key('CONFIG_NETMAP')}
1424f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
1425f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')}
1426f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')}
1427f9332757SPaolo Bonzinisummary_info += {'Install blobs':     config_host.has_key('INSTALL_BLOBS')}
1428f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG
1429f9332757SPaolo Bonzini#summary_info += {'KVM support':       have_kvm'}
1430f9332757SPaolo Bonzini#summary_info += {'HAX support':       have_hax'}
1431f9332757SPaolo Bonzini#summary_info += {'HVF support':       have_hvf'}
1432f9332757SPaolo Bonzini#summary_info += {'WHPX support':      have_whpx'}
1433f9332757SPaolo Bonzini#summary_info += {'TCG support':       have_tcg'}
1434f9332757SPaolo Bonzini#if get_option('tcg')
1435f9332757SPaolo Bonzini#  summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
1436f9332757SPaolo Bonzini#  summary_info += {'TCG interpreter':   config_host.has_key('CONFIG_TCG_INTERPRETER')}
1437f9332757SPaolo Bonzini#endif
1438f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')}
1439f9332757SPaolo Bonzinisummary_info += {'RDMA support':      config_host.has_key('CONFIG_RDMA')}
1440f9332757SPaolo Bonzinisummary_info += {'PVRDMA support':    config_host.has_key('CONFIG_PVRDMA')}
1441f9332757SPaolo Bonzinisummary_info += {'fdt support':       config_host.has_key('CONFIG_FDT')}
1442f9332757SPaolo Bonzinisummary_info += {'membarrier':        config_host.has_key('CONFIG_MEMBARRIER')}
1443f9332757SPaolo Bonzinisummary_info += {'preadv support':    config_host.has_key('CONFIG_PREADV')}
1444f9332757SPaolo Bonzinisummary_info += {'fdatasync':         config_host.has_key('CONFIG_FDATASYNC')}
1445f9332757SPaolo Bonzinisummary_info += {'madvise':           config_host.has_key('CONFIG_MADVISE')}
1446f9332757SPaolo Bonzinisummary_info += {'posix_madvise':     config_host.has_key('CONFIG_POSIX_MADVISE')}
1447f9332757SPaolo Bonzinisummary_info += {'posix_memalign':    config_host.has_key('CONFIG_POSIX_MEMALIGN')}
1448f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')}
1449f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')}
1450f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')}
1451f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')}
1452f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')}
1453f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')}
1454f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')}
1455f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')}
1456f9332757SPaolo Bonzinisummary_info += {'Trace backends':    config_host['TRACE_BACKENDS']}
1457f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple')
1458f9332757SPaolo Bonzini  summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
1459f9332757SPaolo Bonziniendif
1460f9332757SPaolo Bonzini# TODO: add back protocol and server version
1461f9332757SPaolo Bonzinisummary_info += {'spice support':     config_host.has_key('CONFIG_SPICE')}
1462f9332757SPaolo Bonzinisummary_info += {'rbd support':       config_host.has_key('CONFIG_RBD')}
1463f9332757SPaolo Bonzinisummary_info += {'xfsctl support':    config_host.has_key('CONFIG_XFS')}
1464f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
14650a40bcb7SCésar Belleysummary_info += {'U2F support':       u2f.found()}
1466f9332757SPaolo Bonzinisummary_info += {'libusb':            config_host.has_key('CONFIG_USB_LIBUSB')}
1467f9332757SPaolo Bonzinisummary_info += {'usb net redir':     config_host.has_key('CONFIG_USB_REDIR')}
1468f9332757SPaolo Bonzinisummary_info += {'OpenGL support':    config_host.has_key('CONFIG_OPENGL')}
1469f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs':    config_host.has_key('CONFIG_OPENGL_DMABUF')}
1470f9332757SPaolo Bonzinisummary_info += {'libiscsi support':  config_host.has_key('CONFIG_LIBISCSI')}
1471f9332757SPaolo Bonzinisummary_info += {'libnfs support':    config_host.has_key('CONFIG_LIBNFS')}
1472f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')}
1473f9332757SPaolo Bonziniif targetos == 'windows'
1474f9332757SPaolo Bonzini  if 'WIN_SDK' in config_host
1475f9332757SPaolo Bonzini    summary_info += {'Windows SDK':       config_host['WIN_SDK']}
1476f9332757SPaolo Bonzini  endif
1477f9332757SPaolo Bonzini  summary_info += {'QGA VSS support':   config_host.has_key('CONFIG_QGA_VSS')}
1478f9332757SPaolo Bonzini  summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')}
1479f9332757SPaolo Bonzini  summary_info += {'QGA MSI support':   config_host.has_key('CONFIG_QGA_MSI_ENABLED')}
1480f9332757SPaolo Bonziniendif
1481f9332757SPaolo Bonzinisummary_info += {'seccomp support':   config_host.has_key('CONFIG_SECCOMP')}
1482f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']}
1483f9332757SPaolo Bonzinisummary_info += {'coroutine pool':    config_host['CONFIG_COROUTINE_POOL'] == '1'}
1484f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
1485f9332757SPaolo Bonzinisummary_info += {'mutex debugging':   config_host.has_key('CONFIG_DEBUG_MUTEX')}
1486f9332757SPaolo Bonzinisummary_info += {'crypto afalg':      config_host.has_key('CONFIG_AF_ALG')}
1487f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')}
1488bf0e56a3SMarc-André Lureausummary_info += {'gcov':              get_option('b_coverage')}
1489f9332757SPaolo Bonzinisummary_info += {'TPM support':       config_host.has_key('CONFIG_TPM')}
1490f9332757SPaolo Bonzinisummary_info += {'libssh support':    config_host.has_key('CONFIG_LIBSSH')}
1491f9332757SPaolo Bonzinisummary_info += {'QOM debugging':     config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
1492f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')}
1493f9332757SPaolo Bonzinisummary_info += {'lzo support':       config_host.has_key('CONFIG_LZO')}
1494f9332757SPaolo Bonzinisummary_info += {'snappy support':    config_host.has_key('CONFIG_SNAPPY')}
1495f9332757SPaolo Bonzinisummary_info += {'bzip2 support':     config_host.has_key('CONFIG_BZIP2')}
1496f9332757SPaolo Bonzinisummary_info += {'lzfse support':     config_host.has_key('CONFIG_LZFSE')}
1497f9332757SPaolo Bonzinisummary_info += {'zstd support':      config_host.has_key('CONFIG_ZSTD')}
1498f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
1499f9332757SPaolo Bonzinisummary_info += {'libxml2':           config_host.has_key('CONFIG_LIBXML2')}
1500f9332757SPaolo Bonzinisummary_info += {'tcmalloc support':  config_host.has_key('CONFIG_TCMALLOC')}
1501f9332757SPaolo Bonzinisummary_info += {'jemalloc support':  config_host.has_key('CONFIG_JEMALLOC')}
1502f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
1503f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
1504f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
1505f9332757SPaolo Bonzinisummary_info += {'bochs support':     config_host.has_key('CONFIG_BOCHS')}
1506f9332757SPaolo Bonzinisummary_info += {'cloop support':     config_host.has_key('CONFIG_CLOOP')}
1507f9332757SPaolo Bonzinisummary_info += {'dmg support':       config_host.has_key('CONFIG_DMG')}
1508f9332757SPaolo Bonzinisummary_info += {'qcow v1 support':   config_host.has_key('CONFIG_QCOW1')}
1509f9332757SPaolo Bonzinisummary_info += {'vdi support':       config_host.has_key('CONFIG_VDI')}
1510f9332757SPaolo Bonzinisummary_info += {'vvfat support':     config_host.has_key('CONFIG_VVFAT')}
1511f9332757SPaolo Bonzinisummary_info += {'qed support':       config_host.has_key('CONFIG_QED')}
1512f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')}
1513f9332757SPaolo Bonzinisummary_info += {'sheepdog support':  config_host.has_key('CONFIG_SHEEPDOG')}
1514f9332757SPaolo Bonzinisummary_info += {'capstone':          config_host.has_key('CONFIG_CAPSTONE')}
1515f9332757SPaolo Bonzinisummary_info += {'libpmem support':   config_host.has_key('CONFIG_LIBPMEM')}
1516f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')}
1517f9332757SPaolo Bonzinisummary_info += {'libudev':           config_host.has_key('CONFIG_LIBUDEV')}
1518f9332757SPaolo Bonzinisummary_info += {'default devices':   config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'}
1519f9332757SPaolo Bonzinisummary_info += {'plugin support':    config_host.has_key('CONFIG_PLUGIN')}
1520f9332757SPaolo Bonzinisummary_info += {'fuzzing support':   config_host.has_key('CONFIG_FUZZ')}
1521f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN')
1522f9332757SPaolo Bonzini  summary_info += {'gdb':             config_host['HAVE_GDB_BIN']}
1523f9332757SPaolo Bonziniendif
1524f9332757SPaolo Bonzinisummary_info += {'thread sanitizer':  config_host.has_key('CONFIG_TSAN')}
1525f9332757SPaolo Bonzinisummary_info += {'rng-none':          config_host.has_key('CONFIG_RNG_NONE')}
1526f9332757SPaolo Bonzinisummary_info += {'Linux keyring':     config_host.has_key('CONFIG_SECRET_KEYRING')}
1527f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true)
1528f9332757SPaolo Bonzini
1529f9332757SPaolo Bonziniif not supported_cpus.contains(cpu)
1530f9332757SPaolo Bonzini  message()
1531f9332757SPaolo Bonzini  warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!')
1532f9332757SPaolo Bonzini  message()
1533f9332757SPaolo Bonzini  message('CPU host architecture ' + cpu + ' support is not currently maintained.')
1534f9332757SPaolo Bonzini  message('The QEMU project intends to remove support for this host CPU in')
1535f9332757SPaolo Bonzini  message('a future release if nobody volunteers to maintain it and to')
1536f9332757SPaolo Bonzini  message('provide a build host for our continuous integration setup.')
1537f9332757SPaolo Bonzini  message('configure has succeeded and you can continue to build, but')
1538f9332757SPaolo Bonzini  message('if you care about QEMU on this platform you should contact')
1539f9332757SPaolo Bonzini  message('us upstream at qemu-devel@nongnu.org.')
1540f9332757SPaolo Bonziniendif
1541f9332757SPaolo Bonzini
1542f9332757SPaolo Bonziniif not supported_oses.contains(targetos)
1543f9332757SPaolo Bonzini  message()
1544f9332757SPaolo Bonzini  warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!')
1545f9332757SPaolo Bonzini  message()
1546f9332757SPaolo Bonzini  message('Host OS ' + targetos + 'support is not currently maintained.')
1547f9332757SPaolo Bonzini  message('The QEMU project intends to remove support for this host OS in')
1548f9332757SPaolo Bonzini  message('a future release if nobody volunteers to maintain it and to')
1549f9332757SPaolo Bonzini  message('provide a build host for our continuous integration setup.')
1550f9332757SPaolo Bonzini  message('configure has succeeded and you can continue to build, but')
1551f9332757SPaolo Bonzini  message('if you care about QEMU on this platform you should contact')
1552f9332757SPaolo Bonzini  message('us upstream at qemu-devel@nongnu.org.')
1553f9332757SPaolo Bonziniendif
1554