1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0', 290756b2fSGerd Hoffmann default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 33e0e5190SPaolo Bonzini 'b_colorout=auto'], 4a5665051SPaolo Bonzini version: run_command('head', meson.source_root() / 'VERSION').stdout().strip()) 5a5665051SPaolo Bonzini 6a5665051SPaolo Bonzininot_found = dependency('', required: false) 7b29b40f4SPaolo Bonziniif meson.version().version_compare('>=0.56.0') 8b29b40f4SPaolo Bonzini keyval = import('keyval') 9b29b40f4SPaolo Bonzinielse 10a5665051SPaolo Bonzini keyval = import('unstable-keyval') 11b29b40f4SPaolo Bonziniendif 12a81df1b6SPaolo Bonziniss = import('sourceset') 13a81df1b6SPaolo Bonzini 14ce1c1e7aSPaolo Bonzinish = find_program('sh') 15a81df1b6SPaolo Bonzinicc = meson.get_compiler('c') 16a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak') 173154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host 1835be72baSPaolo Bonzinienable_static = 'CONFIG_STATIC' in config_host 19f8aa24eaSPaolo Bonzinibuild_docs = 'BUILD_DOCS' in config_host 208fe11232SMarc-André Lureau 218fe11232SMarc-André Lureauif get_option('qemu_suffix').startswith('/') 228fe11232SMarc-André Lureau error('qemu_suffix cannot start with a /') 238fe11232SMarc-André Lureauendif 248fe11232SMarc-André Lureau 25ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix') 26491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix') 27859aef02SPaolo Bonziniconfig_host_data = configuration_data() 28859aef02SPaolo Bonzinigenh = [] 29a5665051SPaolo Bonzini 30760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 31760e4327SPaolo Bonzinihave_user = false 32760e4327SPaolo Bonzinihave_system = false 33760e4327SPaolo Bonziniforeach target : target_dirs 34760e4327SPaolo Bonzini have_user = have_user or target.endswith('-user') 35760e4327SPaolo Bonzini have_system = have_system or target.endswith('-softmmu') 36760e4327SPaolo Bonziniendforeach 37760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 38760e4327SPaolo Bonzinihave_block = have_system or have_tools 39760e4327SPaolo Bonzini 40201e8ed7SPaolo Bonzinipython = import('python').find_installation() 41201e8ed7SPaolo Bonzini 42201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 43201e8ed7SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', 44201e8ed7SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 45201e8ed7SPaolo Bonzini 46201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family() 47201e8ed7SPaolo Bonzinitargetos = host_machine.system() 48201e8ed7SPaolo Bonzini 49201e8ed7SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'), 50201e8ed7SPaolo Bonzini output: 'ninjatool', 51201e8ed7SPaolo Bonzini configuration: config_host) 52201e8ed7SPaolo Bonzini 53*8a19980eSPaolo Bonziniif cpu in ['x86', 'x86_64'] 54*8a19980eSPaolo Bonzini kvm_targets = ['i386-softmmu', 'x86_64-softmmu'] 55*8a19980eSPaolo Bonzinielif cpu == 'aarch64' 56*8a19980eSPaolo Bonzini kvm_targets = ['aarch64-softmmu'] 57*8a19980eSPaolo Bonzinielif cpu == 's390x' 58*8a19980eSPaolo Bonzini kvm_targets = ['s390x-softmmu'] 59*8a19980eSPaolo Bonzinielif cpu in ['ppc', 'ppc64'] 60*8a19980eSPaolo Bonzini kvm_targets = ['ppc-softmmu', 'ppc64-softmmu'] 61*8a19980eSPaolo Bonzinielse 62*8a19980eSPaolo Bonzini kvm_targets = [] 63*8a19980eSPaolo Bonziniendif 64*8a19980eSPaolo Bonzini 65*8a19980eSPaolo Bonziniaccelerator_targets = { 'CONFIG_KVM': kvm_targets } 66*8a19980eSPaolo Bonziniif cpu in ['x86', 'x86_64'] 67*8a19980eSPaolo Bonzini accelerator_targets += { 68*8a19980eSPaolo Bonzini 'CONFIG_HAX': ['i386-softmmu', 'x86_64-softmmu'], 69*8a19980eSPaolo Bonzini 'CONFIG_XEN': ['i386-softmmu', 'x86_64-softmmu'], 70*8a19980eSPaolo Bonzini 'CONFIG_HVF': ['x86_64-softmmu'], 71*8a19980eSPaolo Bonzini 'CONFIG_WHPX': ['i386-softmmu', 'x86_64-softmmu'], 72*8a19980eSPaolo Bonzini } 73*8a19980eSPaolo Bonziniendif 74*8a19980eSPaolo Bonzini 75201e8ed7SPaolo Bonzini################## 76201e8ed7SPaolo Bonzini# Compiler flags # 77201e8ed7SPaolo Bonzini################## 78201e8ed7SPaolo Bonzini 79ff9ed62bSAlexander Bulekov# Specify linker-script with add_project_link_arguments so that it is not placed 80ff9ed62bSAlexander Bulekov# within a linker --start-group/--end-group pair 81ff9ed62bSAlexander Bulekovif 'CONFIG_FUZZ' in config_host 82ff9ed62bSAlexander Bulekov add_project_link_arguments(['-Wl,-T,', 83ff9ed62bSAlexander Bulekov (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')], 84ff9ed62bSAlexander Bulekov native: false, language: ['c', 'cpp', 'objc']) 85ff9ed62bSAlexander Bulekovendif 86ff9ed62bSAlexander Bulekov 87a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 88a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 89a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 90a5665051SPaolo Bonzini native: false, language: 'cpp') 91a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 92a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 93a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 94a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 95a5665051SPaolo Bonzini 96c46f76d1SAlexander Bulekov 97fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 98fc929892SMarc-André Lureauif link_language == 'cpp' 99fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 100fc929892SMarc-André Lureauendif 101a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 102a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 103a5665051SPaolo Bonziniendif 104a5665051SPaolo Bonzini 105968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host 106968b4db3SPaolo Bonzini run_target('sparse', 107968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 108968b4db3SPaolo Bonzini config_host['SPARSE_CFLAGS'].split(), 109968b4db3SPaolo Bonzini 'compile_commands.json']) 110968b4db3SPaolo Bonziniendif 111968b4db3SPaolo Bonzini 1126ec0e15dSPaolo Bonzini########################################### 1136ec0e15dSPaolo Bonzini# Target-specific checks and dependencies # 1146ec0e15dSPaolo Bonzini########################################### 1156ec0e15dSPaolo Bonzini 1166ec0e15dSPaolo Bonziniif targetos != 'linux' and get_option('mpath').enabled() 1176ec0e15dSPaolo Bonzini error('Multipath is supported only on Linux') 1186ec0e15dSPaolo Bonziniendif 1196ec0e15dSPaolo Bonzini 120a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 121a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 1224a96337dSPaolo Bonziniwinmm = [] 123a81df1b6SPaolo Bonzinisocket = [] 12404c6f1e7SMarc-André Lureauversion_res = [] 125d92989aaSMarc-André Lureaucoref = [] 126d92989aaSMarc-André Lureauiokit = [] 127b4e312e9SPaolo Bonzinicocoa = not_found 128*8a19980eSPaolo Bonzinihvf = not_found 129a81df1b6SPaolo Bonziniif targetos == 'windows' 130a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 1314a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 13204c6f1e7SMarc-André Lureau 13304c6f1e7SMarc-André Lureau win = import('windows') 13404c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 13504c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 13604c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 137d92989aaSMarc-André Lureauelif targetos == 'darwin' 138d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 139d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 140b4e312e9SPaolo Bonzini cocoa = dependency('appleframeworks', modules: 'Cocoa', required: get_option('cocoa')) 141cfad62f1SPaolo Bonzinielif targetos == 'sunos' 142cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 143cfad62f1SPaolo Bonzini cc.find_library('nsl'), 144cfad62f1SPaolo Bonzini cc.find_library('resolv')] 145cfad62f1SPaolo Bonzinielif targetos == 'haiku' 146cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 147cfad62f1SPaolo Bonzini cc.find_library('network'), 148cfad62f1SPaolo Bonzini cc.find_library('bsd')] 149a81df1b6SPaolo Bonziniendif 1506ec0e15dSPaolo Bonzini 151*8a19980eSPaolo Bonziniaccelerators = [] 152*8a19980eSPaolo Bonziniif not get_option('kvm').disabled() and targetos == 'linux' 153*8a19980eSPaolo Bonzini accelerators += 'CONFIG_KVM' 154*8a19980eSPaolo Bonziniendif 155*8a19980eSPaolo Bonziniif not get_option('xen').disabled() and 'CONFIG_XEN_BACKEND' in config_host 156*8a19980eSPaolo Bonzini accelerators += 'CONFIG_XEN' 157*8a19980eSPaolo Bonzini have_xen_pci_passthrough = not get_option('xen_pci_passthrough').disabled() and targetos == 'linux' 158*8a19980eSPaolo Bonzinielse 159*8a19980eSPaolo Bonzini have_xen_pci_passthrough = false 160*8a19980eSPaolo Bonziniendif 161*8a19980eSPaolo Bonziniif not get_option('whpx').disabled() and targetos == 'windows' 162*8a19980eSPaolo Bonzini if get_option('whpx').enabled() and cpu != 'x86_64' 163*8a19980eSPaolo Bonzini error('WHPX requires 64-bit host') 164*8a19980eSPaolo Bonzini elif cc.has_header('WinHvPlatform.h', required: get_option('whpx')) and \ 165*8a19980eSPaolo Bonzini cc.has_header('WinHvEmulation.h', required: get_option('whpx')) 166*8a19980eSPaolo Bonzini accelerators += 'CONFIG_WHPX' 167*8a19980eSPaolo Bonzini endif 168*8a19980eSPaolo Bonziniendif 169*8a19980eSPaolo Bonziniif not get_option('hvf').disabled() 170*8a19980eSPaolo Bonzini hvf = dependency('appleframeworks', modules: 'Hypervisor', 171*8a19980eSPaolo Bonzini required: get_option('hvf')) 172*8a19980eSPaolo Bonzini if hvf.found() 173*8a19980eSPaolo Bonzini accelerators += 'CONFIG_HVF' 174*8a19980eSPaolo Bonzini endif 175*8a19980eSPaolo Bonziniendif 176*8a19980eSPaolo Bonziniif not get_option('hax').disabled() 177*8a19980eSPaolo Bonzini if get_option('hax').enabled() or targetos in ['windows', 'darwin', 'netbsd'] 178*8a19980eSPaolo Bonzini accelerators += 'CONFIG_HAX' 179*8a19980eSPaolo Bonzini endif 180*8a19980eSPaolo Bonziniendif 181*8a19980eSPaolo Bonziniif not get_option('tcg').disabled() 182*8a19980eSPaolo Bonzini if cpu not in supported_cpus 183*8a19980eSPaolo Bonzini if 'CONFIG_TCG_INTERPRETER' in config_host 184*8a19980eSPaolo Bonzini warning('Unsupported CPU @0@, will use TCG with TCI (experimental)'.format(cpu)) 185*8a19980eSPaolo Bonzini else 186*8a19980eSPaolo Bonzini error('Unsupported CPU @0@, try --enable-tcg-interpreter'.format(cpu)) 187*8a19980eSPaolo Bonzini endif 188*8a19980eSPaolo Bonzini endif 189*8a19980eSPaolo Bonzini accelerators += 'CONFIG_TCG' 190*8a19980eSPaolo Bonzini config_host += { 'CONFIG_TCG': 'y' } 191*8a19980eSPaolo Bonziniendif 192*8a19980eSPaolo Bonzini 193*8a19980eSPaolo Bonziniif 'CONFIG_KVM' not in accelerators and get_option('kvm').enabled() 194*8a19980eSPaolo Bonzini error('KVM not available on this platform') 195*8a19980eSPaolo Bonziniendif 196*8a19980eSPaolo Bonziniif 'CONFIG_HVF' not in accelerators and get_option('hvf').enabled() 197*8a19980eSPaolo Bonzini error('HVF not available on this platform') 198*8a19980eSPaolo Bonziniendif 199*8a19980eSPaolo Bonziniif 'CONFIG_WHPX' not in accelerators and get_option('whpx').enabled() 200*8a19980eSPaolo Bonzini error('WHPX not available on this platform') 201*8a19980eSPaolo Bonziniendif 202*8a19980eSPaolo Bonziniif not have_xen_pci_passthrough and get_option('xen_pci_passthrough').enabled() 203*8a19980eSPaolo Bonzini if 'CONFIG_XEN' in accelerators 204*8a19980eSPaolo Bonzini error('Xen PCI passthrough not available on this platform') 205*8a19980eSPaolo Bonzini else 206*8a19980eSPaolo Bonzini error('Xen PCI passthrough requested but Xen not enabled') 207*8a19980eSPaolo Bonzini endif 208*8a19980eSPaolo Bonziniendif 209b4e312e9SPaolo Bonziniif not cocoa.found() and get_option('cocoa').enabled() 210b4e312e9SPaolo Bonzini error('Cocoa not available on this platform') 211b4e312e9SPaolo Bonziniendif 212b4e312e9SPaolo Bonzini 2136ec0e15dSPaolo Bonzini################ 2146ec0e15dSPaolo Bonzini# Dependencies # 2156ec0e15dSPaolo Bonzini################ 2166ec0e15dSPaolo Bonzini 217215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands. This was 218215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles. 219215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(), 220215b0c2fSPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 221215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split()) 222a81df1b6SPaolo Bonzinigio = not_found 223a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 224a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 225a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 226a81df1b6SPaolo Bonziniendif 227a81df1b6SPaolo Bonzinilttng = not_found 228a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 229a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 230a81df1b6SPaolo Bonziniendif 231a81df1b6SPaolo Bonziniurcubp = not_found 232a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 233a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 234a81df1b6SPaolo Bonziniendif 23546859d93SDaniel P. Berrangégcrypt = not_found 23646859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host 23746859d93SDaniel P. Berrangé gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), 23846859d93SDaniel P. Berrangé link_args: config_host['GCRYPT_LIBS'].split()) 23946859d93SDaniel P. Berrangéendif 240a81df1b6SPaolo Bonzininettle = not_found 241a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 242a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 243a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 244a81df1b6SPaolo Bonziniendif 245a81df1b6SPaolo Bonzinignutls = not_found 246a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 247a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 248a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 249a81df1b6SPaolo Bonziniendif 250b7612f45SPaolo Bonzinipixman = not_found 251b7612f45SPaolo Bonziniif have_system or have_tools 252b7612f45SPaolo Bonzini pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', 2531a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 254b7612f45SPaolo Bonziniendif 2555e7fbd25SMarc-André Lureaupam = not_found 2565e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 2575e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 2585e7fbd25SMarc-André Lureauendif 2595e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 2601ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static) 2615e5733e5SMarc-André Lureaulinux_io_uring = not_found 2625e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 2635e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 2645e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 2655e5733e5SMarc-André Lureauendif 2665e5733e5SMarc-André Lureaulibxml2 = not_found 2675e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 2685e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 2695e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 2705e5733e5SMarc-André Lureauendif 2715e5733e5SMarc-André Lureaulibnfs = not_found 2725e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 2735e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 2745e5733e5SMarc-André Lureauendif 275ec0d5893SMarc-André Lureaulibattr = not_found 276ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 277ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 278ec0d5893SMarc-André Lureauendif 2793f99cf57SPaolo Bonziniseccomp = not_found 2803f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 2813f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 2823f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 2833f99cf57SPaolo Bonziniendif 2843f99cf57SPaolo Bonzinilibcap_ng = not_found 2853f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 2863f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 2873f99cf57SPaolo Bonziniendif 2881917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools 2891917ec6dSPaolo Bonzini xkbcommon = not_found 2901917ec6dSPaolo Bonzinielse 2911917ec6dSPaolo Bonzini xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), 2921a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 293ade60d4fSMarc-André Lureauendif 294cdaf0722SMarc-André Lureauslirp = not_found 295cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP') 296cdaf0722SMarc-André Lureau slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(), 297cdaf0722SMarc-André Lureau link_args: config_host['SLIRP_LIBS'].split()) 298cdaf0722SMarc-André Lureauendif 299cdaf0722SMarc-André Lureauvde = not_found 300cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE') 301cdaf0722SMarc-André Lureau vde = declare_dependency(link_args: config_host['VDE_LIBS'].split()) 302cdaf0722SMarc-André Lureauendif 303478e943fSPaolo Bonzinipulse = not_found 304478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 305478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 306478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 307478e943fSPaolo Bonziniendif 308478e943fSPaolo Bonzinialsa = not_found 309478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 310478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 311478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 312478e943fSPaolo Bonziniendif 313478e943fSPaolo Bonzinijack = not_found 314478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 315478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 316478e943fSPaolo Bonziniendif 3172634733cSPaolo Bonzinispice = not_found 3182634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 3192634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 3202634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 3212634733cSPaolo Bonziniendif 3225ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 323ccf7afa5SPaolo Bonzinilibdl = not_found 324ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 325ccf7afa5SPaolo Bonzini libdl = cc.find_library('dl', required: true) 326ccf7afa5SPaolo Bonziniendif 32799650b62SPaolo Bonzinilibiscsi = not_found 32899650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 32999650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 33099650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 33199650b62SPaolo Bonziniendif 3325e5733e5SMarc-André Lureauzstd = not_found 3335e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 3345e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 3355e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 3365e5733e5SMarc-André Lureauendif 337ea458960SMarc-André Lureaugbm = not_found 338ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 339ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 340ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 341ea458960SMarc-André Lureauendif 342ea458960SMarc-André Lureauvirgl = not_found 343ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 344ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 345ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 346ea458960SMarc-André Lureauendif 3471d7bb6abSMarc-André Lureaucurl = not_found 3481d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 3491d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 3501d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 3511d7bb6abSMarc-André Lureauendif 352f15bff25SPaolo Bonzinilibudev = not_found 353f01496a3SPaolo Bonziniif targetos == 'linux' and (have_system or have_tools) 3546ec0e15dSPaolo Bonzini libudev = dependency('libudev', 3556ec0e15dSPaolo Bonzini required: get_option('mpath').enabled(), 3566ec0e15dSPaolo Bonzini static: enable_static) 357f15bff25SPaolo Bonziniendif 3586ec0e15dSPaolo Bonzini 3596ec0e15dSPaolo Bonzinimpathpersist = not_found 3606ec0e15dSPaolo Bonzinimpathpersist_new_api = false 3616ec0e15dSPaolo Bonziniif targetos == 'linux' and have_tools and not get_option('mpath').disabled() 3626ec0e15dSPaolo Bonzini mpath_test_source_new = ''' 3636ec0e15dSPaolo Bonzini #include <libudev.h> 3646ec0e15dSPaolo Bonzini #include <mpath_persist.h> 3656ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 3666ec0e15dSPaolo Bonzini int logsink; 3676ec0e15dSPaolo Bonzini static struct config *multipath_conf; 3686ec0e15dSPaolo Bonzini extern struct udev *udev; 3696ec0e15dSPaolo Bonzini extern struct config *get_multipath_config(void); 3706ec0e15dSPaolo Bonzini extern void put_multipath_config(struct config *conf); 3716ec0e15dSPaolo Bonzini struct udev *udev; 3726ec0e15dSPaolo Bonzini struct config *get_multipath_config(void) { return multipath_conf; } 3736ec0e15dSPaolo Bonzini void put_multipath_config(struct config *conf) { } 3746ec0e15dSPaolo Bonzini int main(void) { 3756ec0e15dSPaolo Bonzini udev = udev_new(); 3766ec0e15dSPaolo Bonzini multipath_conf = mpath_lib_init(); 3776ec0e15dSPaolo Bonzini return 0; 3786ec0e15dSPaolo Bonzini }''' 3796ec0e15dSPaolo Bonzini mpath_test_source_old = ''' 3806ec0e15dSPaolo Bonzini #include <libudev.h> 3816ec0e15dSPaolo Bonzini #include <mpath_persist.h> 3826ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 3836ec0e15dSPaolo Bonzini int logsink; 3846ec0e15dSPaolo Bonzini int main(void) { 3856ec0e15dSPaolo Bonzini struct udev *udev = udev_new(); 3866ec0e15dSPaolo Bonzini mpath_lib_init(udev); 3876ec0e15dSPaolo Bonzini return 0; 3886ec0e15dSPaolo Bonzini }''' 38943b43a40SPaolo Bonzini mpathlibs = [libudev] 39043b43a40SPaolo Bonzini if enable_static 39143b43a40SPaolo Bonzini mpathlibs += cc.find_library('devmapper', 3926ec0e15dSPaolo Bonzini required: get_option('mpath'), 3936ec0e15dSPaolo Bonzini static: enable_static) 39443b43a40SPaolo Bonzini endif 39543b43a40SPaolo Bonzini mpathlibs += cc.find_library('multipath', 3966ec0e15dSPaolo Bonzini required: get_option('mpath'), 3976ec0e15dSPaolo Bonzini static: enable_static) 39843b43a40SPaolo Bonzini mpathlibs += cc.find_library('mpathpersist', 39943b43a40SPaolo Bonzini required: get_option('mpath'), 40043b43a40SPaolo Bonzini static: enable_static) 40143b43a40SPaolo Bonzini foreach lib: mpathlibs 40243b43a40SPaolo Bonzini if not lib.found() 40343b43a40SPaolo Bonzini mpathlibs = [] 40443b43a40SPaolo Bonzini break 40543b43a40SPaolo Bonzini endif 40643b43a40SPaolo Bonzini endforeach 40743b43a40SPaolo Bonzini if mpathlibs.length() > 0 4086ec0e15dSPaolo Bonzini if cc.links(mpath_test_source_new, dependencies: mpathlibs) 4096ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 4106ec0e15dSPaolo Bonzini mpathpersist_new_api = true 4116ec0e15dSPaolo Bonzini elif cc.links(mpath_test_source_old, dependencies: mpathlibs) 4126ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 4136ec0e15dSPaolo Bonzini else 4146ec0e15dSPaolo Bonzini if get_option('mpath').enabled() 4156ec0e15dSPaolo Bonzini error('Cannot detect libmpathpersist API') 4166ec0e15dSPaolo Bonzini else 4176ec0e15dSPaolo Bonzini warning('Cannot detect libmpathpersist API, disabling') 4186ec0e15dSPaolo Bonzini endif 4196ec0e15dSPaolo Bonzini endif 4206ec0e15dSPaolo Bonzini endif 4216ec0e15dSPaolo Bonziniendif 4226ec0e15dSPaolo Bonzini 4232634733cSPaolo Bonzinibrlapi = not_found 4242634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 4252634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 4262634733cSPaolo Bonziniendif 42735be72baSPaolo Bonzini 428760e4327SPaolo Bonzinisdl = not_found 429760e4327SPaolo Bonziniif have_system 430363743daSYonggang Luo sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) 43135be72baSPaolo Bonzini sdl_image = not_found 432760e4327SPaolo Bonziniendif 43335be72baSPaolo Bonziniif sdl.found() 43435be72baSPaolo Bonzini # work around 2.0.8 bug 43535be72baSPaolo Bonzini sdl = declare_dependency(compile_args: '-Wno-undef', 43635be72baSPaolo Bonzini dependencies: sdl) 4377161a433SVolker Rümelin sdl_image = dependency('SDL2_image', required: get_option('sdl_image'), 4381a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 43935be72baSPaolo Bonzinielse 44035be72baSPaolo Bonzini if get_option('sdl_image').enabled() 441a8dc2aceSSergei Trofimovich error('sdl-image required, but SDL was @0@'.format( 442a8dc2aceSSergei Trofimovich get_option('sdl').disabled() ? 'disabled' : 'not found')) 4432634733cSPaolo Bonzini endif 44435be72baSPaolo Bonzini sdl_image = not_found 44535be72baSPaolo Bonziniendif 44635be72baSPaolo Bonzini 4475e5733e5SMarc-André Lureaurbd = not_found 4485e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 4495e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 4505e5733e5SMarc-André Lureauendif 4515e5733e5SMarc-André Lureauglusterfs = not_found 4525e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 4535e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 4545e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 4555e5733e5SMarc-André Lureauendif 4565e5733e5SMarc-André Lureaulibssh = not_found 4575e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 4585e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 4595e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 4605e5733e5SMarc-André Lureauendif 4615e5733e5SMarc-André Lureaulibbzip2 = not_found 4625e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 4635e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 4645e5733e5SMarc-André Lureauendif 4655e5733e5SMarc-André Lureauliblzfse = not_found 4665e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 4675e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 4685e5733e5SMarc-André Lureauendif 469478e943fSPaolo Bonzinioss = not_found 470478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 471478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 472478e943fSPaolo Bonziniendif 473478e943fSPaolo Bonzinidsound = not_found 474478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 475478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 476478e943fSPaolo Bonziniendif 477478e943fSPaolo Bonzinicoreaudio = not_found 478478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 479478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 480478e943fSPaolo Bonziniendif 4812b1ccdf4SMarc-André Lureauopengl = not_found 4822b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 483de2d3005SPaolo Bonzini opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(), 484de2d3005SPaolo Bonzini link_args: config_host['OPENGL_LIBS'].split()) 4852b1ccdf4SMarc-André Lureauendif 4862b1ccdf4SMarc-André Lureaugtk = not_found 4872b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host 4882b1ccdf4SMarc-André Lureau gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(), 4892b1ccdf4SMarc-André Lureau link_args: config_host['GTK_LIBS'].split()) 4902b1ccdf4SMarc-André Lureauendif 4912b1ccdf4SMarc-André Lureauvte = not_found 4922b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 4932b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 4942b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 4952b1ccdf4SMarc-André Lureauendif 4962b1ccdf4SMarc-André Lureaux11 = not_found 4972b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host 4982b1ccdf4SMarc-André Lureau x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(), 4992b1ccdf4SMarc-André Lureau link_args: config_host['X11_LIBS'].split()) 5002b1ccdf4SMarc-André Lureauendif 5012b1ccdf4SMarc-André Lureaucurses = not_found 5022b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host 5032b1ccdf4SMarc-André Lureau curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(), 5042b1ccdf4SMarc-André Lureau link_args: config_host['CURSES_LIBS'].split()) 5052b1ccdf4SMarc-André Lureauendif 5062b1ccdf4SMarc-André Lureauiconv = not_found 5072b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host 5082b1ccdf4SMarc-André Lureau iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(), 5092b1ccdf4SMarc-André Lureau link_args: config_host['ICONV_LIBS'].split()) 5102b1ccdf4SMarc-André Lureauendif 511a0b93237SPaolo Bonzinivnc = not_found 5122b1ccdf4SMarc-André Lureaupng = not_found 5132b1ccdf4SMarc-André Lureaujpeg = not_found 5142b1ccdf4SMarc-André Lureausasl = not_found 515a0b93237SPaolo Bonziniif get_option('vnc').enabled() 516a0b93237SPaolo Bonzini vnc = declare_dependency() # dummy dependency 517a0b93237SPaolo Bonzini png = dependency('libpng', required: get_option('vnc_png'), 5181a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 519a0b93237SPaolo Bonzini jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'], 520a0b93237SPaolo Bonzini required: get_option('vnc_jpeg'), 521a0b93237SPaolo Bonzini static: enable_static) 522a0b93237SPaolo Bonzini sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'], 523a0b93237SPaolo Bonzini required: get_option('vnc_sasl'), 524a0b93237SPaolo Bonzini static: enable_static) 525a0b93237SPaolo Bonzini if sasl.found() 526a0b93237SPaolo Bonzini sasl = declare_dependency(dependencies: sasl, 527a0b93237SPaolo Bonzini compile_args: '-DSTRUCT_IOVEC_DEFINED') 528a0b93237SPaolo Bonzini endif 5292b1ccdf4SMarc-André Lureauendif 5304a96337dSPaolo Bonzinifdt = not_found 5314a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host 5324a96337dSPaolo Bonzini fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(), 5334a96337dSPaolo Bonzini link_args: config_host['FDT_LIBS'].split()) 5344a96337dSPaolo Bonziniendif 535708eab42SMarc-André Lureausnappy = not_found 536708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host 537708eab42SMarc-André Lureau snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split()) 538708eab42SMarc-André Lureauendif 539708eab42SMarc-André Lureaulzo = not_found 540708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host 541708eab42SMarc-André Lureau lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split()) 542708eab42SMarc-André Lureauendif 54355166230SMarc-André Lureaurdma = not_found 54455166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host 54555166230SMarc-André Lureau rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split()) 54655166230SMarc-André Lureauendif 547ab318051SMarc-André Lureaunuma = not_found 548ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host 549ab318051SMarc-André Lureau numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split()) 550ab318051SMarc-André Lureauendif 551582ea95fSMarc-André Lureauxen = not_found 552582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host 553582ea95fSMarc-André Lureau xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(), 554582ea95fSMarc-André Lureau link_args: config_host['XEN_LIBS'].split()) 555582ea95fSMarc-André Lureauendif 55606677ce1SPaolo Bonzinicacard = not_found 55706677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host 55806677ce1SPaolo Bonzini cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(), 55906677ce1SPaolo Bonzini link_args: config_host['SMARTCARD_LIBS'].split()) 56006677ce1SPaolo Bonziniendif 5610a40bcb7SCésar Belleyu2f = not_found 5620a40bcb7SCésar Belleyif have_system 5630a40bcb7SCésar Belley u2f = dependency('u2f-emu', required: get_option('u2f'), 5640a40bcb7SCésar Belley method: 'pkg-config', 5650a40bcb7SCésar Belley static: enable_static) 5660a40bcb7SCésar Belleyendif 56706677ce1SPaolo Bonziniusbredir = not_found 56806677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host 56906677ce1SPaolo Bonzini usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(), 57006677ce1SPaolo Bonzini link_args: config_host['USB_REDIR_LIBS'].split()) 57106677ce1SPaolo Bonziniendif 57206677ce1SPaolo Bonzinilibusb = not_found 57306677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host 57406677ce1SPaolo Bonzini libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(), 57506677ce1SPaolo Bonzini link_args: config_host['LIBUSB_LIBS'].split()) 57606677ce1SPaolo Bonziniendif 577c9322ab5SMarc-André Lureaucapstone = not_found 578c9322ab5SMarc-André Lureauif 'CONFIG_CAPSTONE' in config_host 579c9322ab5SMarc-André Lureau capstone = declare_dependency(compile_args: config_host['CAPSTONE_CFLAGS'].split(), 580c9322ab5SMarc-André Lureau link_args: config_host['CAPSTONE_LIBS'].split()) 581c9322ab5SMarc-André Lureauendif 582c9322ab5SMarc-André Lureaulibpmem = not_found 583c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host 584c9322ab5SMarc-André Lureau libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), 585c9322ab5SMarc-André Lureau link_args: config_host['LIBPMEM_LIBS'].split()) 586c9322ab5SMarc-André Lureauendif 587c7c91a74SBruce Rogerslibdaxctl = not_found 588c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host 589c7c91a74SBruce Rogers libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) 590c7c91a74SBruce Rogersendif 5918ce0a45fSMarc-André Lureautasn1 = not_found 5928ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host 5938ce0a45fSMarc-André Lureau tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), 5948ce0a45fSMarc-André Lureau link_args: config_host['TASN1_LIBS'].split()) 5958ce0a45fSMarc-André Lureauendif 596af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false, 597af04e89dSMarc-André Lureau method: 'pkg-config', static: enable_static) 598a81df1b6SPaolo Bonzini 5993909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid') 6003909def8SMarc-André Lureau 601aa087962SPaolo Bonzini# Malloc tests 602aa087962SPaolo Bonzini 603aa087962SPaolo Bonzinimalloc = [] 604aa087962SPaolo Bonziniif get_option('malloc') == 'system' 605aa087962SPaolo Bonzini has_malloc_trim = \ 606aa087962SPaolo Bonzini not get_option('malloc_trim').disabled() and \ 607aa087962SPaolo Bonzini cc.links('''#include <malloc.h> 608aa087962SPaolo Bonzini int main(void) { malloc_trim(0); return 0; }''') 609aa087962SPaolo Bonzinielse 610aa087962SPaolo Bonzini has_malloc_trim = false 611aa087962SPaolo Bonzini malloc = cc.find_library(get_option('malloc'), required: true) 612aa087962SPaolo Bonziniendif 613aa087962SPaolo Bonziniif not has_malloc_trim and get_option('malloc_trim').enabled() 614aa087962SPaolo Bonzini if get_option('malloc') == 'system' 615aa087962SPaolo Bonzini error('malloc_trim not available on this platform.') 616aa087962SPaolo Bonzini else 617aa087962SPaolo Bonzini error('malloc_trim not available with non-libc memory allocator') 618aa087962SPaolo Bonzini endif 619aa087962SPaolo Bonziniendif 620aa087962SPaolo Bonzini 621859aef02SPaolo Bonzini# Create config-host.h 622859aef02SPaolo Bonzini 623b4e312e9SPaolo Bonziniconfig_host_data.set('CONFIG_COCOA', cocoa.found()) 624f01496a3SPaolo Bonziniconfig_host_data.set('CONFIG_LIBUDEV', libudev.found()) 6256ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH', mpathpersist.found()) 6266ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api) 62735be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found()) 62835be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) 629a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found()) 630a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) 631a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found()) 632a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found()) 6334113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) 634af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found()) 6353909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid) 636aa087962SPaolo Bonziniconfig_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim) 637859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version())) 638859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]) 639859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1]) 640859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]) 641859aef02SPaolo Bonzini 642859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST'] 643f4f5ed2cSPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'bindir', 'prefix', 'qemu_confdir', 'qemu_datadir', 644859aef02SPaolo Bonzini 'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir', 645f4f5ed2cSPaolo Bonzini 'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath', 'sysconfdir'] 646859aef02SPaolo Bonziniforeach k, v: config_host 647859aef02SPaolo Bonzini if arrays.contains(k) 648859aef02SPaolo Bonzini if v != '' 649859aef02SPaolo Bonzini v = '"' + '", "'.join(v.split()) + '", ' 650859aef02SPaolo Bonzini endif 651859aef02SPaolo Bonzini config_host_data.set(k, v) 652859aef02SPaolo Bonzini elif k == 'ARCH' 653859aef02SPaolo Bonzini config_host_data.set('HOST_' + v.to_upper(), 1) 654859aef02SPaolo Bonzini elif strings.contains(k) 655859aef02SPaolo Bonzini if not k.startswith('CONFIG_') 656859aef02SPaolo Bonzini k = 'CONFIG_' + k.to_upper() 657859aef02SPaolo Bonzini endif 658859aef02SPaolo Bonzini config_host_data.set_quoted(k, v) 659859aef02SPaolo Bonzini elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_') 660859aef02SPaolo Bonzini config_host_data.set(k, v == 'y' ? 1 : v) 661859aef02SPaolo Bonzini endif 662859aef02SPaolo Bonziniendforeach 663859aef02SPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data) 664859aef02SPaolo Bonzini 6652becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 66605512f55SPaolo Bonziniconfig_all = {} 667a98006bcSPaolo Bonziniconfig_all_devices = {} 668ca0fc784SPaolo Bonziniconfig_all_disas = {} 6692becc36aSPaolo Bonziniconfig_devices_mak_list = [] 6702becc36aSPaolo Bonziniconfig_devices_h = {} 671859aef02SPaolo Bonziniconfig_target_h = {} 6722becc36aSPaolo Bonziniconfig_target_mak = {} 673ca0fc784SPaolo Bonzini 674ca0fc784SPaolo Bonzinidisassemblers = { 675ca0fc784SPaolo Bonzini 'alpha' : ['CONFIG_ALPHA_DIS'], 676ca0fc784SPaolo Bonzini 'arm' : ['CONFIG_ARM_DIS'], 677ca0fc784SPaolo Bonzini 'avr' : ['CONFIG_AVR_DIS'], 678ca0fc784SPaolo Bonzini 'cris' : ['CONFIG_CRIS_DIS'], 679ca0fc784SPaolo Bonzini 'hppa' : ['CONFIG_HPPA_DIS'], 680ca0fc784SPaolo Bonzini 'i386' : ['CONFIG_I386_DIS'], 681ca0fc784SPaolo Bonzini 'x86_64' : ['CONFIG_I386_DIS'], 682ca0fc784SPaolo Bonzini 'x32' : ['CONFIG_I386_DIS'], 683ca0fc784SPaolo Bonzini 'lm32' : ['CONFIG_LM32_DIS'], 684ca0fc784SPaolo Bonzini 'm68k' : ['CONFIG_M68K_DIS'], 685ca0fc784SPaolo Bonzini 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], 686ca0fc784SPaolo Bonzini 'mips' : ['CONFIG_MIPS_DIS'], 687ca0fc784SPaolo Bonzini 'moxie' : ['CONFIG_MOXIE_DIS'], 688ca0fc784SPaolo Bonzini 'nios2' : ['CONFIG_NIOS2_DIS'], 689ca0fc784SPaolo Bonzini 'or1k' : ['CONFIG_OPENRISC_DIS'], 690ca0fc784SPaolo Bonzini 'ppc' : ['CONFIG_PPC_DIS'], 691ca0fc784SPaolo Bonzini 'riscv' : ['CONFIG_RISCV_DIS'], 692ca0fc784SPaolo Bonzini 'rx' : ['CONFIG_RX_DIS'], 693ca0fc784SPaolo Bonzini 's390' : ['CONFIG_S390_DIS'], 694ca0fc784SPaolo Bonzini 'sh4' : ['CONFIG_SH4_DIS'], 695ca0fc784SPaolo Bonzini 'sparc' : ['CONFIG_SPARC_DIS'], 696ca0fc784SPaolo Bonzini 'xtensa' : ['CONFIG_XTENSA_DIS'], 697ca0fc784SPaolo Bonzini} 698ca0fc784SPaolo Bonziniif link_language == 'cpp' 699ca0fc784SPaolo Bonzini disassemblers += { 700ca0fc784SPaolo Bonzini 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], 701ca0fc784SPaolo Bonzini 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], 702ca0fc784SPaolo Bonzini 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], 703ca0fc784SPaolo Bonzini } 704ca0fc784SPaolo Bonziniendif 705ca0fc784SPaolo Bonzini 7062becc36aSPaolo Bonzinikconfig_external_symbols = [ 7072becc36aSPaolo Bonzini 'CONFIG_KVM', 7082becc36aSPaolo Bonzini 'CONFIG_XEN', 7092becc36aSPaolo Bonzini 'CONFIG_TPM', 7102becc36aSPaolo Bonzini 'CONFIG_SPICE', 7112becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 7122becc36aSPaolo Bonzini 'CONFIG_OPENGL', 7132becc36aSPaolo Bonzini 'CONFIG_X11', 7142becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 71540bc0ca9SLaurent Vivier 'CONFIG_VHOST_VDPA', 7162becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 7172becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 7182becc36aSPaolo Bonzini 'CONFIG_LINUX', 7192becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 7202becc36aSPaolo Bonzini] 721859aef02SPaolo Bonziniignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS'] 722ca0fc784SPaolo Bonzini 723a81df1b6SPaolo Bonziniforeach target : target_dirs 724859aef02SPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') 725859aef02SPaolo Bonzini 726*8a19980eSPaolo Bonzini have_accel = false 727*8a19980eSPaolo Bonzini foreach sym: accelerators 728*8a19980eSPaolo Bonzini if sym == 'CONFIG_TCG' or target in accelerator_targets.get(sym, []) 729*8a19980eSPaolo Bonzini config_target += { sym: 'y' } 730*8a19980eSPaolo Bonzini config_all += { sym: 'y' } 731*8a19980eSPaolo Bonzini if sym == 'CONFIG_XEN' and have_xen_pci_passthrough 732*8a19980eSPaolo Bonzini config_target += { 'CONFIG_XEN_PCI_PASSTHROUGH': 'y' } 733*8a19980eSPaolo Bonzini endif 734*8a19980eSPaolo Bonzini have_accel = true 735*8a19980eSPaolo Bonzini endif 736*8a19980eSPaolo Bonzini endforeach 737*8a19980eSPaolo Bonzini assert(have_accel) 738*8a19980eSPaolo Bonzini 739ca0fc784SPaolo Bonzini foreach k, v: disassemblers 740ca0fc784SPaolo Bonzini if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) 741ca0fc784SPaolo Bonzini foreach sym: v 742ca0fc784SPaolo Bonzini config_target += { sym: 'y' } 743ca0fc784SPaolo Bonzini config_all_disas += { sym: 'y' } 744ca0fc784SPaolo Bonzini endforeach 745ca0fc784SPaolo Bonzini endif 746ca0fc784SPaolo Bonzini endforeach 747ca0fc784SPaolo Bonzini 748859aef02SPaolo Bonzini config_target_data = configuration_data() 749859aef02SPaolo Bonzini foreach k, v: config_target 750859aef02SPaolo Bonzini if not k.startswith('TARGET_') and not k.startswith('CONFIG_') 751859aef02SPaolo Bonzini # do nothing 752859aef02SPaolo Bonzini elif ignored.contains(k) 753859aef02SPaolo Bonzini # do nothing 754859aef02SPaolo Bonzini elif k == 'TARGET_BASE_ARCH' 755859aef02SPaolo Bonzini config_target_data.set('TARGET_' + v.to_upper(), 1) 756859aef02SPaolo Bonzini elif k == 'TARGET_NAME' 757859aef02SPaolo Bonzini config_target_data.set_quoted(k, v) 758859aef02SPaolo Bonzini elif v == 'y' 759859aef02SPaolo Bonzini config_target_data.set(k, 1) 760859aef02SPaolo Bonzini else 761859aef02SPaolo Bonzini config_target_data.set(k, v) 762859aef02SPaolo Bonzini endif 763859aef02SPaolo Bonzini endforeach 764859aef02SPaolo Bonzini config_target_h += {target: configure_file(output: target + '-config-target.h', 765859aef02SPaolo Bonzini configuration: config_target_data)} 7662becc36aSPaolo Bonzini 7672becc36aSPaolo Bonzini if target.endswith('-softmmu') 7682becc36aSPaolo Bonzini base_kconfig = [] 7692becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 770859aef02SPaolo Bonzini if sym in config_target or sym in config_host 7712becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 7722becc36aSPaolo Bonzini endif 7732becc36aSPaolo Bonzini endforeach 7742becc36aSPaolo Bonzini 7752becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 7762becc36aSPaolo Bonzini config_devices_mak = configure_file( 7771bb4cb1cSPaolo Bonzini input: ['default-configs/devices' / target + '.mak', 'Kconfig'], 7782becc36aSPaolo Bonzini output: config_devices_mak, 7792becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 7802becc36aSPaolo Bonzini capture: true, 7812becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 7822becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 7832becc36aSPaolo Bonzini base_kconfig]) 784859aef02SPaolo Bonzini 785859aef02SPaolo Bonzini config_devices_data = configuration_data() 786859aef02SPaolo Bonzini config_devices = keyval.load(config_devices_mak) 787859aef02SPaolo Bonzini foreach k, v: config_devices 788859aef02SPaolo Bonzini config_devices_data.set(k, 1) 789859aef02SPaolo Bonzini endforeach 7902becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 791859aef02SPaolo Bonzini config_devices_h += {target: configure_file(output: target + '-config-devices.h', 792859aef02SPaolo Bonzini configuration: config_devices_data)} 793859aef02SPaolo Bonzini config_target += config_devices 794a98006bcSPaolo Bonzini config_all_devices += config_devices 7952becc36aSPaolo Bonzini endif 7962becc36aSPaolo Bonzini config_target_mak += {target: config_target} 797a81df1b6SPaolo Bonziniendforeach 798a81df1b6SPaolo Bonzini 7992becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 8002becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 8012becc36aSPaolo Bonzini# static_library target. 8022becc36aSPaolo Bonzini# 8032becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 8042becc36aSPaolo Bonzini# build literally all source files, including devices only used by 8052becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 8062becc36aSPaolo Bonzini# pseudo symbol replaces it. 8072becc36aSPaolo Bonzini 80805512f55SPaolo Bonziniconfig_all += config_all_devices 8092becc36aSPaolo Bonziniconfig_all += config_host 8102becc36aSPaolo Bonziniconfig_all += config_all_disas 8112becc36aSPaolo Bonziniconfig_all += { 8122becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 8132becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 8142becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 8152becc36aSPaolo Bonzini 'CONFIG_ALL': true, 8162becc36aSPaolo Bonzini} 8172becc36aSPaolo Bonzini 818a81df1b6SPaolo Bonzini# Generators 819a81df1b6SPaolo Bonzini 8203f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 821650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 822a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 823a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 824a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 825a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 826a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 827a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 828a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 829a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 830a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 831a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 832a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 833a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 834a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 835a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 836a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 837a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 838a81df1b6SPaolo Bonzini] 839a81df1b6SPaolo Bonzini 840a81df1b6SPaolo Bonzinitracetool = [ 841a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 842a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 843a81df1b6SPaolo Bonzini] 844a81df1b6SPaolo Bonzini 8452c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 8462c273f32SMarc-André Lureau meson.current_source_dir(), 847859aef02SPaolo Bonzini config_host['PKGVERSION'], meson.project_version()] 8482c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 8492c273f32SMarc-André Lureau output: 'qemu-version.h', 8502c273f32SMarc-André Lureau command: qemu_version_cmd, 8512c273f32SMarc-André Lureau capture: true, 8522c273f32SMarc-André Lureau build_by_default: true, 8532c273f32SMarc-André Lureau build_always_stale: true) 8542c273f32SMarc-André Lureaugenh += qemu_version 8552c273f32SMarc-André Lureau 8563f885659SMarc-André Lureauhxdep = [] 8573f885659SMarc-André Lureauhx_headers = [ 8583f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 8593f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 8603f885659SMarc-André Lureau] 8613f885659SMarc-André Lureauif have_system 8623f885659SMarc-André Lureau hx_headers += [ 8633f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 8643f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 8653f885659SMarc-André Lureau ] 8663f885659SMarc-André Lureauendif 8673f885659SMarc-André Lureauforeach d : hx_headers 868b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 8693f885659SMarc-André Lureau input: files(d[0]), 8703f885659SMarc-André Lureau output: d[1], 8713f885659SMarc-André Lureau capture: true, 8723f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 8733f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 8743f885659SMarc-André Lureauendforeach 8753f885659SMarc-André Lureaugenh += hxdep 8763f885659SMarc-André Lureau 877eb937365SPeter MaydellSPHINX_ARGS = [config_host['SPHINX_BUILD'], 878eb937365SPeter Maydell '-Dversion=' + meson.project_version(), 879eb937365SPeter Maydell '-Drelease=' + config_host['PKGVERSION']] 880eb937365SPeter Maydell 881eb937365SPeter Maydellif get_option('werror') 882eb937365SPeter Maydell SPHINX_ARGS += [ '-W' ] 883eb937365SPeter Maydellendif 884eb937365SPeter Maydell 885b3f4830aSPeter Maydellsphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py', 886b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/hxtool.py', 887b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kerneldoc.py', 888b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kernellog.py', 889b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qapidoc.py', 890b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qmp_lexer.py', 891b3f4830aSPeter Maydell qapi_gen_depends ] 892b3f4830aSPeter Maydell 893a81df1b6SPaolo Bonzini# Collect sourcesets. 894a81df1b6SPaolo Bonzini 895a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 896a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 897a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 8983154fee4SMarc-André Lureaublock_ss = ss.source_set() 8994a96337dSPaolo Bonziniblockdev_ss = ss.source_set() 900ff219dcaSPaolo Bonziniqmp_ss = ss.source_set() 9012becc36aSPaolo Bonzinicommon_ss = ss.source_set() 9022becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 9032becc36aSPaolo Bonziniuser_ss = ss.source_set() 9042becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 9052becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 9062becc36aSPaolo Bonzinispecific_ss = ss.source_set() 90764ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set() 9082becc36aSPaolo Bonzini 9093154fee4SMarc-André Lureaumodules = {} 9102becc36aSPaolo Bonzinihw_arch = {} 9112becc36aSPaolo Bonzinitarget_arch = {} 9122becc36aSPaolo Bonzinitarget_softmmu_arch = {} 913a81df1b6SPaolo Bonzini 914a81df1b6SPaolo Bonzini############### 915a81df1b6SPaolo Bonzini# Trace files # 916a81df1b6SPaolo Bonzini############### 917a81df1b6SPaolo Bonzini 918c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once 919c9322ab5SMarc-André Lureau# we have those 920a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 921a81df1b6SPaolo Bonzini 'accel/kvm', 922a81df1b6SPaolo Bonzini 'accel/tcg', 923a81df1b6SPaolo Bonzini 'crypto', 924a81df1b6SPaolo Bonzini 'monitor', 925a81df1b6SPaolo Bonzini] 926a81df1b6SPaolo Bonziniif have_user 927a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 928a81df1b6SPaolo Bonziniendif 929a81df1b6SPaolo Bonziniif have_block 930a81df1b6SPaolo Bonzini trace_events_subdirs += [ 931a81df1b6SPaolo Bonzini 'authz', 932a81df1b6SPaolo Bonzini 'block', 933a81df1b6SPaolo Bonzini 'io', 934a81df1b6SPaolo Bonzini 'nbd', 935a81df1b6SPaolo Bonzini 'scsi', 936a81df1b6SPaolo Bonzini ] 937a81df1b6SPaolo Bonziniendif 938a81df1b6SPaolo Bonziniif have_system 939a81df1b6SPaolo Bonzini trace_events_subdirs += [ 940a81df1b6SPaolo Bonzini 'audio', 941a81df1b6SPaolo Bonzini 'backends', 942a81df1b6SPaolo Bonzini 'backends/tpm', 943a81df1b6SPaolo Bonzini 'chardev', 944a81df1b6SPaolo Bonzini 'hw/9pfs', 945a81df1b6SPaolo Bonzini 'hw/acpi', 946a81df1b6SPaolo Bonzini 'hw/alpha', 947a81df1b6SPaolo Bonzini 'hw/arm', 948a81df1b6SPaolo Bonzini 'hw/audio', 949a81df1b6SPaolo Bonzini 'hw/block', 950a81df1b6SPaolo Bonzini 'hw/block/dataplane', 951a81df1b6SPaolo Bonzini 'hw/char', 952a81df1b6SPaolo Bonzini 'hw/display', 953a81df1b6SPaolo Bonzini 'hw/dma', 954a81df1b6SPaolo Bonzini 'hw/hppa', 955a81df1b6SPaolo Bonzini 'hw/hyperv', 956a81df1b6SPaolo Bonzini 'hw/i2c', 957a81df1b6SPaolo Bonzini 'hw/i386', 958a81df1b6SPaolo Bonzini 'hw/i386/xen', 959a81df1b6SPaolo Bonzini 'hw/ide', 960a81df1b6SPaolo Bonzini 'hw/input', 961a81df1b6SPaolo Bonzini 'hw/intc', 962a81df1b6SPaolo Bonzini 'hw/isa', 963a81df1b6SPaolo Bonzini 'hw/mem', 964a81df1b6SPaolo Bonzini 'hw/mips', 965a81df1b6SPaolo Bonzini 'hw/misc', 966a81df1b6SPaolo Bonzini 'hw/misc/macio', 967a81df1b6SPaolo Bonzini 'hw/net', 968a81df1b6SPaolo Bonzini 'hw/nvram', 969a81df1b6SPaolo Bonzini 'hw/pci', 970a81df1b6SPaolo Bonzini 'hw/pci-host', 971a81df1b6SPaolo Bonzini 'hw/ppc', 972a81df1b6SPaolo Bonzini 'hw/rdma', 973a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 974a81df1b6SPaolo Bonzini 'hw/rtc', 975a81df1b6SPaolo Bonzini 'hw/s390x', 976a81df1b6SPaolo Bonzini 'hw/scsi', 977a81df1b6SPaolo Bonzini 'hw/sd', 978a81df1b6SPaolo Bonzini 'hw/sparc', 979a81df1b6SPaolo Bonzini 'hw/sparc64', 980a81df1b6SPaolo Bonzini 'hw/ssi', 981a81df1b6SPaolo Bonzini 'hw/timer', 982a81df1b6SPaolo Bonzini 'hw/tpm', 983a81df1b6SPaolo Bonzini 'hw/usb', 984a81df1b6SPaolo Bonzini 'hw/vfio', 985a81df1b6SPaolo Bonzini 'hw/virtio', 986a81df1b6SPaolo Bonzini 'hw/watchdog', 987a81df1b6SPaolo Bonzini 'hw/xen', 988a81df1b6SPaolo Bonzini 'hw/gpio', 989a81df1b6SPaolo Bonzini 'migration', 990a81df1b6SPaolo Bonzini 'net', 9918b7a5507SPhilippe Mathieu-Daudé 'softmmu', 992a81df1b6SPaolo Bonzini 'ui', 993a81df1b6SPaolo Bonzini ] 994a81df1b6SPaolo Bonziniendif 995a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 996a81df1b6SPaolo Bonzini 'hw/core', 997a81df1b6SPaolo Bonzini 'qapi', 998a81df1b6SPaolo Bonzini 'qom', 999a81df1b6SPaolo Bonzini 'target/arm', 1000a81df1b6SPaolo Bonzini 'target/hppa', 1001a81df1b6SPaolo Bonzini 'target/i386', 1002a81df1b6SPaolo Bonzini 'target/mips', 1003a81df1b6SPaolo Bonzini 'target/ppc', 1004a81df1b6SPaolo Bonzini 'target/riscv', 1005a81df1b6SPaolo Bonzini 'target/s390x', 1006a81df1b6SPaolo Bonzini 'target/sparc', 1007a81df1b6SPaolo Bonzini 'util', 1008a81df1b6SPaolo Bonzini] 1009a81df1b6SPaolo Bonzini 1010a81df1b6SPaolo Bonzinisubdir('qapi') 1011a81df1b6SPaolo Bonzinisubdir('qobject') 1012a81df1b6SPaolo Bonzinisubdir('stubs') 1013a81df1b6SPaolo Bonzinisubdir('trace') 1014a81df1b6SPaolo Bonzinisubdir('util') 10155582c58fSMarc-André Lureausubdir('qom') 10165582c58fSMarc-André Lureausubdir('authz') 1017a81df1b6SPaolo Bonzinisubdir('crypto') 10182d78b56eSMarc-André Lureausubdir('ui') 1019a81df1b6SPaolo Bonzini 10203154fee4SMarc-André Lureau 10213154fee4SMarc-André Lureauif enable_modules 10223154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 10233154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 10243154fee4SMarc-André Lureauendif 10253154fee4SMarc-André Lureau 1026a81df1b6SPaolo Bonzini# Build targets from sourcesets 1027a81df1b6SPaolo Bonzini 10282becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 1029a81df1b6SPaolo Bonzini 1030a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 10312becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 1032a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 1033a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 1034aa087962SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket, malloc]) 1035a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 103604c6f1e7SMarc-André Lureau sources: genh + version_res) 1037a81df1b6SPaolo Bonzini 1038abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'), 1039abff1abfSPaolo Bonzini output: 'decode-@BASENAME@.c.inc', 1040abff1abfSPaolo Bonzini arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@']) 1041abff1abfSPaolo Bonzini 1042478e943fSPaolo Bonzinisubdir('audio') 10437fcfd456SMarc-André Lureausubdir('io') 1044848e8ff6SMarc-André Lureausubdir('chardev') 1045ec0d5893SMarc-André Lureausubdir('fsdev') 1046abff1abfSPaolo Bonzinisubdir('libdecnumber') 1047d3b18480SMarc-André Lureausubdir('target') 1048708eab42SMarc-André Lureausubdir('dump') 1049ec0d5893SMarc-André Lureau 10505e5733e5SMarc-André Lureaublock_ss.add(files( 10515e5733e5SMarc-André Lureau 'block.c', 105256ee8626SKevin Wolf 'blockdev-nbd.c', 10535e5733e5SMarc-André Lureau 'blockjob.c', 10545e5733e5SMarc-André Lureau 'job.c', 10555e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 10565e5733e5SMarc-André Lureau)) 10575e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 10585e5733e5SMarc-André Lureau 10595e5733e5SMarc-André Lureausubdir('nbd') 10605e5733e5SMarc-André Lureausubdir('scsi') 10615e5733e5SMarc-André Lureausubdir('block') 10625e5733e5SMarc-André Lureau 10634a96337dSPaolo Bonziniblockdev_ss.add(files( 10644a96337dSPaolo Bonzini 'blockdev.c', 10654a96337dSPaolo Bonzini 'iothread.c', 10664a96337dSPaolo Bonzini 'job-qmp.c', 10674a96337dSPaolo Bonzini)) 10684a96337dSPaolo Bonzini 10694a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 10704a96337dSPaolo Bonzini# os-win32.c does not 10714a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 10724a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 10734a96337dSPaolo Bonzini 10744a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 10754a96337dSPaolo Bonzinisoftmmu_ss.add(files( 10764a96337dSPaolo Bonzini 'bootdevice.c', 10774a96337dSPaolo Bonzini 'dma-helpers.c', 10784a96337dSPaolo Bonzini 'qdev-monitor.c', 10794a96337dSPaolo Bonzini), sdl) 10804a96337dSPaolo Bonzini 10814a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c')) 10824a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp]) 10834a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')]) 10844a96337dSPaolo Bonzini 10854a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 10864a96337dSPaolo Bonzini 10875d3ea0e1SPaolo Bonzinisubdir('softmmu') 1088c9322ab5SMarc-André Lureau 1089c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl) 1090c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c')) 1091c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files( 1092c9322ab5SMarc-André Lureau 'fpu/softfloat.c', 1093c9322ab5SMarc-André Lureau 'tcg/optimize.c', 1094c9322ab5SMarc-André Lureau 'tcg/tcg-common.c', 1095c9322ab5SMarc-André Lureau 'tcg/tcg-op-gvec.c', 1096c9322ab5SMarc-André Lureau 'tcg/tcg-op-vec.c', 1097c9322ab5SMarc-André Lureau 'tcg/tcg-op.c', 1098c9322ab5SMarc-André Lureau 'tcg/tcg.c', 1099c9322ab5SMarc-André Lureau)) 1100c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c')) 1101c9322ab5SMarc-André Lureau 1102ab318051SMarc-André Lureausubdir('backends') 1103c574e161SMarc-André Lureausubdir('disas') 110455166230SMarc-André Lureausubdir('migration') 1105ff219dcaSPaolo Bonzinisubdir('monitor') 1106cdaf0722SMarc-André Lureausubdir('net') 110717ef2af6SMarc-André Lureausubdir('replay') 1108582ea95fSMarc-André Lureausubdir('hw') 11091a82878aSMarc-André Lureausubdir('accel') 1110f556b4a1SPaolo Bonzinisubdir('plugins') 1111b309c321SMarc-André Lureausubdir('bsd-user') 11123a30446aSMarc-André Lureausubdir('linux-user') 11133a30446aSMarc-André Lureau 1114b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c')) 1115b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss) 1116b309c321SMarc-André Lureau 11173a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c')) 11183a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss) 11195d3ea0e1SPaolo Bonzini 1120a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 1121a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 112264ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz') 1123a2ce7dbdSPaolo Bonzini 11243154fee4SMarc-André Lureaublock_mods = [] 11253154fee4SMarc-André Lureausoftmmu_mods = [] 11263154fee4SMarc-André Lureauforeach d, list : modules 11273154fee4SMarc-André Lureau foreach m, module_ss : list 11283154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 11293e292c51SGerd Hoffmann module_ss = module_ss.apply(config_all, strict: false) 11303154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 11313154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 11323154fee4SMarc-André Lureau if d == 'block' 11333154fee4SMarc-André Lureau block_mods += sl 11343154fee4SMarc-André Lureau else 11353154fee4SMarc-André Lureau softmmu_mods += sl 11363154fee4SMarc-André Lureau endif 11373154fee4SMarc-André Lureau else 11383154fee4SMarc-André Lureau if d == 'block' 11393154fee4SMarc-André Lureau block_ss.add_all(module_ss) 11403154fee4SMarc-André Lureau else 11413154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 11423154fee4SMarc-André Lureau endif 11433154fee4SMarc-André Lureau endif 11443154fee4SMarc-André Lureau endforeach 11453154fee4SMarc-André Lureauendforeach 11463154fee4SMarc-André Lureau 11473154fee4SMarc-André Lureaunm = find_program('nm') 1148604f3e4eSYonggang Luoundefsym = find_program('scripts/undefsym.py') 11493154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 11503154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 11513154fee4SMarc-André Lureau capture: true, 11523154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 11533154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 11543154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 11553154fee4SMarc-André Lureau capture: true, 11563154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 11573154fee4SMarc-André Lureau 11585e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 11595e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 11605e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 11615e5733e5SMarc-André Lureau link_depends: block_syms, 11625e5733e5SMarc-André Lureau name_suffix: 'fa', 11635e5733e5SMarc-André Lureau build_by_default: false) 11645e5733e5SMarc-André Lureau 11655e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 1166b7c70bf2SMarc-André Lureau link_args: '@block.syms', 1167b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 11685e5733e5SMarc-André Lureau 1169ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 1170ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 1171ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 1172ff219dcaSPaolo Bonzini name_suffix: 'fa', 1173ff219dcaSPaolo Bonzini build_by_default: false) 1174ff219dcaSPaolo Bonzini 1175ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 1176ff219dcaSPaolo Bonzini 11773154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 11783154fee4SMarc-André Lureau shared_module(m.name(), 11793154fee4SMarc-André Lureau name_prefix: '', 11803154fee4SMarc-André Lureau link_whole: m, 11813154fee4SMarc-André Lureau install: true, 11823154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 11833154fee4SMarc-André Lureauendforeach 11843154fee4SMarc-André Lureau 118564ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp) 118664ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil) 118764ed6f92SPaolo Bonzini 118864ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss]) 11892becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 11902becc36aSPaolo Bonzini 11912becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 11922becc36aSPaolo Bonzinicommon_all = static_library('common', 11932becc36aSPaolo Bonzini build_by_default: false, 11942becc36aSPaolo Bonzini sources: common_all.sources() + genh, 11952becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 11962becc36aSPaolo Bonzini name_suffix: 'fa') 11972becc36aSPaolo Bonzini 1198c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh') 1199c9322ab5SMarc-André Lureau 1200fd5eef85SPaolo Bonziniemulators = {} 12012becc36aSPaolo Bonziniforeach target : target_dirs 12022becc36aSPaolo Bonzini config_target = config_target_mak[target] 12032becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 12042becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 1205859aef02SPaolo Bonzini arch_srcs = [config_target_h[target]] 120664ed6f92SPaolo Bonzini arch_deps = [] 120764ed6f92SPaolo Bonzini c_args = ['-DNEED_CPU_H', 120864ed6f92SPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 120964ed6f92SPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] 121064ed6f92SPaolo Bonzini link_args = [] 12112becc36aSPaolo Bonzini 1212859aef02SPaolo Bonzini config_target += config_host 12132becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 12142becc36aSPaolo Bonzini if targetos == 'linux' 12152becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 12162becc36aSPaolo Bonzini endif 12172becc36aSPaolo Bonzini if target.endswith('-softmmu') 12182becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 12192becc36aSPaolo Bonzini target_type='system' 1220abff1abfSPaolo Bonzini t = target_softmmu_arch[arch].apply(config_target, strict: false) 1221abff1abfSPaolo Bonzini arch_srcs += t.sources() 122264ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1223abff1abfSPaolo Bonzini 12242c44220dSMarc-André Lureau hw_dir = target_name == 'sparc64' ? 'sparc64' : arch 12252c44220dSMarc-André Lureau hw = hw_arch[hw_dir].apply(config_target, strict: false) 12262c44220dSMarc-André Lureau arch_srcs += hw.sources() 122764ed6f92SPaolo Bonzini arch_deps += hw.dependencies() 12282c44220dSMarc-André Lureau 12292becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 123064ed6f92SPaolo Bonzini link_args += ['@block.syms', '@qemu.syms'] 12312becc36aSPaolo Bonzini else 12323a30446aSMarc-André Lureau abi = config_target['TARGET_ABI_DIR'] 12332becc36aSPaolo Bonzini target_type='user' 12342becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 12352becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 12362becc36aSPaolo Bonzini base_dir = 'linux-user' 12372becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 12382becc36aSPaolo Bonzini else 12392becc36aSPaolo Bonzini base_dir = 'bsd-user' 12402becc36aSPaolo Bonzini endif 12412becc36aSPaolo Bonzini target_inc += include_directories( 12422becc36aSPaolo Bonzini base_dir, 12433a30446aSMarc-André Lureau base_dir / abi, 12442becc36aSPaolo Bonzini ) 12453a30446aSMarc-André Lureau if 'CONFIG_LINUX_USER' in config_target 12463a30446aSMarc-André Lureau dir = base_dir / abi 12473a30446aSMarc-André Lureau arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c') 12483a30446aSMarc-André Lureau if config_target.has_key('TARGET_SYSTBL_ABI') 12493a30446aSMarc-André Lureau arch_srcs += \ 12503a30446aSMarc-André Lureau syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'], 12513a30446aSMarc-André Lureau extra_args : config_target['TARGET_SYSTBL_ABI']) 12523a30446aSMarc-André Lureau endif 12533a30446aSMarc-André Lureau endif 12542becc36aSPaolo Bonzini endif 12552becc36aSPaolo Bonzini 1256c9322ab5SMarc-André Lureau if 'TARGET_XML_FILES' in config_target 1257c9322ab5SMarc-André Lureau gdbstub_xml = custom_target(target + '-gdbstub-xml.c', 1258c9322ab5SMarc-André Lureau output: target + '-gdbstub-xml.c', 1259c9322ab5SMarc-André Lureau input: files(config_target['TARGET_XML_FILES'].split()), 1260c9322ab5SMarc-André Lureau command: [feature_to_c, '@INPUT@'], 1261c9322ab5SMarc-André Lureau capture: true) 1262c9322ab5SMarc-André Lureau arch_srcs += gdbstub_xml 1263c9322ab5SMarc-André Lureau endif 1264c9322ab5SMarc-André Lureau 1265abff1abfSPaolo Bonzini t = target_arch[arch].apply(config_target, strict: false) 1266abff1abfSPaolo Bonzini arch_srcs += t.sources() 126764ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1268abff1abfSPaolo Bonzini 12692becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 12702becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 127164ed6f92SPaolo Bonzini deps = target_common.dependencies() 12722becc36aSPaolo Bonzini 12732becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 12742becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 127564ed6f92SPaolo Bonzini arch_deps += target_specific.dependencies() 12762becc36aSPaolo Bonzini 127764ed6f92SPaolo Bonzini lib = static_library('qemu-' + target, 1278859aef02SPaolo Bonzini sources: arch_srcs + genh, 1279b7612f45SPaolo Bonzini dependencies: arch_deps, 12802becc36aSPaolo Bonzini objects: objects, 12812becc36aSPaolo Bonzini include_directories: target_inc, 128264ed6f92SPaolo Bonzini c_args: c_args, 128364ed6f92SPaolo Bonzini build_by_default: false, 12842becc36aSPaolo Bonzini name_suffix: 'fa') 128564ed6f92SPaolo Bonzini 128664ed6f92SPaolo Bonzini if target.endswith('-softmmu') 128764ed6f92SPaolo Bonzini execs = [{ 128864ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name, 128964ed6f92SPaolo Bonzini 'gui': false, 129064ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 129164ed6f92SPaolo Bonzini 'dependencies': [] 129264ed6f92SPaolo Bonzini }] 129335be72baSPaolo Bonzini if targetos == 'windows' and (sdl.found() or gtk.found()) 129464ed6f92SPaolo Bonzini execs += [{ 129564ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name + 'w', 129664ed6f92SPaolo Bonzini 'gui': true, 129764ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 129864ed6f92SPaolo Bonzini 'dependencies': [] 129964ed6f92SPaolo Bonzini }] 130064ed6f92SPaolo Bonzini endif 130164ed6f92SPaolo Bonzini if config_host.has_key('CONFIG_FUZZ') 130264ed6f92SPaolo Bonzini specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false) 130364ed6f92SPaolo Bonzini execs += [{ 130464ed6f92SPaolo Bonzini 'name': 'qemu-fuzz-' + target_name, 130564ed6f92SPaolo Bonzini 'gui': false, 130664ed6f92SPaolo Bonzini 'sources': specific_fuzz.sources(), 130764ed6f92SPaolo Bonzini 'dependencies': specific_fuzz.dependencies(), 130864ed6f92SPaolo Bonzini }] 130964ed6f92SPaolo Bonzini endif 131064ed6f92SPaolo Bonzini else 131164ed6f92SPaolo Bonzini execs = [{ 131264ed6f92SPaolo Bonzini 'name': 'qemu-' + target_name, 131364ed6f92SPaolo Bonzini 'gui': false, 131464ed6f92SPaolo Bonzini 'sources': [], 131564ed6f92SPaolo Bonzini 'dependencies': [] 131664ed6f92SPaolo Bonzini }] 131764ed6f92SPaolo Bonzini endif 131864ed6f92SPaolo Bonzini foreach exe: execs 1319fd5eef85SPaolo Bonzini emulators += {exe['name']: 1320fd5eef85SPaolo Bonzini executable(exe['name'], exe['sources'], 132164ed6f92SPaolo Bonzini install: true, 132264ed6f92SPaolo Bonzini c_args: c_args, 132364ed6f92SPaolo Bonzini dependencies: arch_deps + deps + exe['dependencies'], 132464ed6f92SPaolo Bonzini objects: lib.extract_all_objects(recursive: true), 132564ed6f92SPaolo Bonzini link_language: link_language, 132664ed6f92SPaolo Bonzini link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []), 132764ed6f92SPaolo Bonzini link_args: link_args, 132864ed6f92SPaolo Bonzini gui_app: exe['gui']) 1329fd5eef85SPaolo Bonzini } 133010e1d263SMarc-André Lureau 133110e1d263SMarc-André Lureau if 'CONFIG_TRACE_SYSTEMTAP' in config_host 133210e1d263SMarc-André Lureau foreach stp: [ 1333bd5f973aSStefan Hajnoczi {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, 1334bd5f973aSStefan Hajnoczi {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, 133510e1d263SMarc-André Lureau {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, 133610e1d263SMarc-André Lureau {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, 133710e1d263SMarc-André Lureau ] 1338bd5f973aSStefan Hajnoczi custom_target(exe['name'] + stp['ext'], 133910e1d263SMarc-André Lureau input: trace_events_all, 1340bd5f973aSStefan Hajnoczi output: exe['name'] + stp['ext'], 134110e1d263SMarc-André Lureau capture: true, 134210e1d263SMarc-André Lureau install: stp['install'], 1343ab4c0996SMarc-André Lureau install_dir: qemu_datadir / '../systemtap/tapset', 134410e1d263SMarc-André Lureau command: [ 134510e1d263SMarc-André Lureau tracetool, '--group=all', '--format=' + stp['fmt'], 134610e1d263SMarc-André Lureau '--binary=' + stp['bin'], 134710e1d263SMarc-André Lureau '--target-name=' + target_name, 134810e1d263SMarc-André Lureau '--target-type=' + target_type, 134910e1d263SMarc-André Lureau '--probe-prefix=qemu.' + target_type + '.' + target_name, 135010e1d263SMarc-André Lureau '@INPUT@', 135110e1d263SMarc-André Lureau ]) 135210e1d263SMarc-André Lureau endforeach 135310e1d263SMarc-André Lureau endif 135464ed6f92SPaolo Bonzini endforeach 13552becc36aSPaolo Bonziniendforeach 13562becc36aSPaolo Bonzini 1357931049b4SPaolo Bonzini# Other build targets 1358897b5afaSMarc-André Lureau 1359f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 1360f556b4a1SPaolo Bonzini install_headers('include/qemu/qemu-plugin.h') 1361f556b4a1SPaolo Bonziniendif 1362f556b4a1SPaolo Bonzini 1363f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 1364f15bff25SPaolo Bonzini subdir('qga') 1365f15bff25SPaolo Bonziniendif 1366f15bff25SPaolo Bonzini 13679755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled 13689755c94aSLaurent Vivier# when we don't build tools or system 13694113f4cfSLaurent Vivierif xkbcommon.found() 137028742467SMarc-André Lureau # used for the update-keymaps target, so include rules even if !have_tools 137128742467SMarc-André Lureau qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, 137228742467SMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: have_tools) 137328742467SMarc-André Lureauendif 137428742467SMarc-André Lureau 1375931049b4SPaolo Bonziniif have_tools 1376b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 1377b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 1378b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 1379b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1380b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 1381b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1382b7c70bf2SMarc-André Lureau 13837c58bb76SPaolo Bonzini subdir('storage-daemon') 1384a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 13851d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 1386a9c9727cSPaolo Bonzini 1387157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 1388157e7b13SMarc-André Lureau dependencies: qemuutil, 1389157e7b13SMarc-André Lureau install: true) 1390157e7b13SMarc-André Lureau 1391931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 1392931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 13932d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 1394ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 139532fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 139699650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 1397931049b4SPaolo Bonzini endif 13988f51e01cSMarc-André Lureau 13998f51e01cSMarc-André Lureau if targetos == 'linux' 14008f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 14018f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 14028f51e01cSMarc-André Lureau install: true, 14038f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 1404897b5afaSMarc-André Lureau 1405897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 1406897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 14076ec0e15dSPaolo Bonzini libcap_ng, mpathpersist], 1408897b5afaSMarc-André Lureau install: true) 14098f51e01cSMarc-André Lureau endif 14108f51e01cSMarc-André Lureau 14115ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 14125ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 14135ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 14145ee24e78SMarc-André Lureau endif 1415931049b4SPaolo Bonziniendif 1416931049b4SPaolo Bonzini 1417f5aa6320SMarc-André Lureausubdir('scripts') 14183f99cf57SPaolo Bonzinisubdir('tools') 1419bdcbea7aSMarc-André Lureausubdir('pc-bios') 1420ce1c1e7aSPaolo Bonzinisubdir('tests') 1421f8aa24eaSPaolo Bonzinisubdir('docs') 1422e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host 1423e8f3bd71SMarc-André Lureau subdir('po') 1424e8f3bd71SMarc-André Lureauendif 14253f99cf57SPaolo Bonzini 14268adfeba9SMarc-André Lureauif host_machine.system() == 'windows' 14278adfeba9SMarc-André Lureau nsis_cmd = [ 14288adfeba9SMarc-André Lureau find_program('scripts/nsis.py'), 14298adfeba9SMarc-André Lureau '@OUTPUT@', 14308adfeba9SMarc-André Lureau get_option('prefix'), 14318adfeba9SMarc-André Lureau meson.current_source_dir(), 14328adfeba9SMarc-André Lureau host_machine.cpu_family(), 14338adfeba9SMarc-André Lureau '--', 14348adfeba9SMarc-André Lureau '-DDISPLAYVERSION=' + meson.project_version(), 14358adfeba9SMarc-André Lureau ] 14368adfeba9SMarc-André Lureau if build_docs 14378adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_DOCUMENTATION=y' 14388adfeba9SMarc-André Lureau endif 14398adfeba9SMarc-André Lureau if 'CONFIG_GTK' in config_host 14408adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_GTK=y' 14418adfeba9SMarc-André Lureau endif 14428adfeba9SMarc-André Lureau 14438adfeba9SMarc-André Lureau nsis = custom_target('nsis', 14448adfeba9SMarc-André Lureau output: 'qemu-setup-' + meson.project_version() + '.exe', 14458adfeba9SMarc-André Lureau input: files('qemu.nsi'), 14468adfeba9SMarc-André Lureau build_always_stale: true, 14478adfeba9SMarc-André Lureau command: nsis_cmd + ['@INPUT@']) 14488adfeba9SMarc-André Lureau alias_target('installer', nsis) 14498adfeba9SMarc-André Lureauendif 14508adfeba9SMarc-André Lureau 1451f9332757SPaolo Bonzinisummary_info = {} 1452f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 1453f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 1454f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 1455f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 1456f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 1457f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 1458f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 1459f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 1460f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 1461f9332757SPaolo Bonziniif targetos != 'windows' 1462f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 1463b81efab7SMarc-André Lureau summary_info += {'Manual directory': get_option('mandir')} 1464f9332757SPaolo Bonzinielse 1465f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 1466f9332757SPaolo Bonziniendif 1467491e74c1SMarc-André Lureausummary_info += {'Doc directory': get_option('docdir')} 1468f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 1469f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 1470f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 1471f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 1472f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 1473f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 1474f9332757SPaolo Bonziniif link_language == 'cpp' 1475f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 1476f9332757SPaolo Bonzinielse 1477f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 1478f9332757SPaolo Bonziniendif 1479f9332757SPaolo Bonziniif targetos == 'darwin' 1480f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 1481f9332757SPaolo Bonziniendif 1482f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 1483f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 1484f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 1485f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 1486f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 1487f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 1488f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 1489f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 1490f9332757SPaolo Bonzini# TODO: add back version 1491f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 1492f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 1493f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 1494f9332757SPaolo Bonziniendif 1495f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 1496f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 1497f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 1498f9332757SPaolo Bonziniendif 1499f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 1500f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 1501f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 1502f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 1503f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 1504f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 1505f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 15063e8529ddSLaurent Viviersummary_info += {'static build': config_host.has_key('CONFIG_STATIC')} 1507f9332757SPaolo Bonziniif targetos == 'darwin' 1508f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 1509f9332757SPaolo Bonziniendif 1510f9332757SPaolo Bonzini# TODO: add back version 151135be72baSPaolo Bonzinisummary_info += {'SDL support': sdl.found()} 151235be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()} 1513f9332757SPaolo Bonzini# TODO: add back version 1514f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 1515f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 1516b7612f45SPaolo Bonzinisummary_info += {'pixman': pixman.found()} 1517f9332757SPaolo Bonzini# TODO: add back version 1518f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 1519f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 1520f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 1521f9332757SPaolo Bonzini# TODO: add back version 1522f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 1523f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 1524f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 1525f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1526f9332757SPaolo Bonziniendif 1527f9332757SPaolo Bonzini# TODO: add back version 1528f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 1529f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 1530f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1531f9332757SPaolo Bonziniendif 1532f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 1533f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 1534f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 1535f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 1536f9332757SPaolo Bonzini# TODO: add back version 1537f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 1538f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 1539f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 1540f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 1541f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 1542f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 1543f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 15446ec0e15dSPaolo Bonzinisummary_info += {'Multipath support': mpathpersist.found()} 1545a0b93237SPaolo Bonzinisummary_info += {'VNC support': vnc.found()} 1546a0b93237SPaolo Bonziniif vnc.found() 1547a0b93237SPaolo Bonzini summary_info += {'VNC SASL support': sasl.found()} 1548a0b93237SPaolo Bonzini summary_info += {'VNC JPEG support': jpeg.found()} 1549a0b93237SPaolo Bonzini summary_info += {'VNC PNG support': png.found()} 1550f9332757SPaolo Bonziniendif 1551f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 1552f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 1553f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 1554f9332757SPaolo Bonziniendif 1555f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 1556f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 1557f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 1558f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 1559f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 1560f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 1561f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 1562f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 1563f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 156405512f55SPaolo Bonzinisummary_info += {'KVM support': config_all.has_key('CONFIG_KVM')} 156505512f55SPaolo Bonzinisummary_info += {'HAX support': config_all.has_key('CONFIG_HAX')} 156605512f55SPaolo Bonzinisummary_info += {'HVF support': config_all.has_key('CONFIG_HVF')} 156705512f55SPaolo Bonzinisummary_info += {'WHPX support': config_all.has_key('CONFIG_WHPX')} 156805512f55SPaolo Bonzinisummary_info += {'TCG support': config_all.has_key('CONFIG_TCG')} 156905512f55SPaolo Bonziniif config_all.has_key('CONFIG_TCG') 157005512f55SPaolo Bonzini summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 157105512f55SPaolo Bonzini summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 157205512f55SPaolo Bonziniendif 1573aa087962SPaolo Bonzinisummary_info += {'malloc trim support': has_malloc_trim} 1574f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 1575f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 1576f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 1577f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 1578f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 1579f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 1580f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 1581f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 1582f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 1583f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 1584f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 1585f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 1586f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 1587f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 1588f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 1589f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 1590f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 1591f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 1592f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 1593f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 1594f9332757SPaolo Bonziniendif 1595f9332757SPaolo Bonzini# TODO: add back protocol and server version 1596f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 1597f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 1598f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 1599f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 16000a40bcb7SCésar Belleysummary_info += {'U2F support': u2f.found()} 1601f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 1602f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 1603f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 1604f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 1605f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 1606f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 1607f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 1608f9332757SPaolo Bonziniif targetos == 'windows' 1609f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 1610f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 1611f9332757SPaolo Bonzini endif 1612f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 1613f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 16144bad7c3bSStefan Hajnoczi summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI')} 1615f9332757SPaolo Bonziniendif 1616f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 1617f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 1618f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 1619f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 1620f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 1621f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 1622f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 1623bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 1624f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 1625f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 1626f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 1627f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 1628f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 1629f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 1630f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 1631f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 1632f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 1633f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 1634f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 1635aa087962SPaolo Bonzinisummary_info += {'memory allocator': get_option('malloc')} 1636f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 1637f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 1638f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 1639f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 1640f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 1641f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 1642f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 1643f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 1644f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 1645f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 1646f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 1647f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 1648f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 1649f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 1650f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 1651f01496a3SPaolo Bonzinisummary_info += {'libudev': libudev.found()} 1652f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 1653f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 1654f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 1655f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 1656f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 1657f9332757SPaolo Bonziniendif 1658f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 1659f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 1660f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 1661f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 1662f9332757SPaolo Bonzini 1663f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 1664f9332757SPaolo Bonzini message() 1665f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 1666f9332757SPaolo Bonzini message() 1667f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 1668f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 1669f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1670f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1671f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1672f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1673f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1674f9332757SPaolo Bonziniendif 1675f9332757SPaolo Bonzini 1676f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 1677f9332757SPaolo Bonzini message() 1678f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 1679f9332757SPaolo Bonzini message() 1680f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 1681f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 1682f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1683f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1684f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1685f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1686f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1687f9332757SPaolo Bonziniendif 1688