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 538a19980eSPaolo Bonziniif cpu in ['x86', 'x86_64'] 548a19980eSPaolo Bonzini kvm_targets = ['i386-softmmu', 'x86_64-softmmu'] 558a19980eSPaolo Bonzinielif cpu == 'aarch64' 568a19980eSPaolo Bonzini kvm_targets = ['aarch64-softmmu'] 578a19980eSPaolo Bonzinielif cpu == 's390x' 588a19980eSPaolo Bonzini kvm_targets = ['s390x-softmmu'] 598a19980eSPaolo Bonzinielif cpu in ['ppc', 'ppc64'] 608a19980eSPaolo Bonzini kvm_targets = ['ppc-softmmu', 'ppc64-softmmu'] 618a19980eSPaolo Bonzinielse 628a19980eSPaolo Bonzini kvm_targets = [] 638a19980eSPaolo Bonziniendif 648a19980eSPaolo Bonzini 658a19980eSPaolo Bonziniaccelerator_targets = { 'CONFIG_KVM': kvm_targets } 668a19980eSPaolo Bonziniif cpu in ['x86', 'x86_64'] 678a19980eSPaolo Bonzini accelerator_targets += { 688a19980eSPaolo Bonzini 'CONFIG_HAX': ['i386-softmmu', 'x86_64-softmmu'], 698a19980eSPaolo Bonzini 'CONFIG_XEN': ['i386-softmmu', 'x86_64-softmmu'], 708a19980eSPaolo Bonzini 'CONFIG_HVF': ['x86_64-softmmu'], 718a19980eSPaolo Bonzini 'CONFIG_WHPX': ['i386-softmmu', 'x86_64-softmmu'], 728a19980eSPaolo Bonzini } 738a19980eSPaolo Bonziniendif 748a19980eSPaolo 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 105*deb62371SPaolo Bonzinisparse = find_program('cgcc', required: get_option('sparse')) 106*deb62371SPaolo Bonziniif sparse.found() 107968b4db3SPaolo Bonzini run_target('sparse', 108968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 109*deb62371SPaolo Bonzini 'compile_commands.json', sparse.full_path(), '-Wbitwise', 110*deb62371SPaolo Bonzini '-Wno-transparent-union', '-Wno-old-initializer', 111*deb62371SPaolo Bonzini '-Wno-non-pointer-null']) 112968b4db3SPaolo Bonziniendif 113968b4db3SPaolo Bonzini 1146ec0e15dSPaolo Bonzini########################################### 1156ec0e15dSPaolo Bonzini# Target-specific checks and dependencies # 1166ec0e15dSPaolo Bonzini########################################### 1176ec0e15dSPaolo Bonzini 1186ec0e15dSPaolo Bonziniif targetos != 'linux' and get_option('mpath').enabled() 1196ec0e15dSPaolo Bonzini error('Multipath is supported only on Linux') 1206ec0e15dSPaolo Bonziniendif 1216ec0e15dSPaolo Bonzini 122a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 123a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 1244a96337dSPaolo Bonziniwinmm = [] 125a81df1b6SPaolo Bonzinisocket = [] 12604c6f1e7SMarc-André Lureauversion_res = [] 127d92989aaSMarc-André Lureaucoref = [] 128d92989aaSMarc-André Lureauiokit = [] 129b6c7cfd4SPaolo Bonziniemulator_link_args = [] 130b4e312e9SPaolo Bonzinicocoa = not_found 1318a19980eSPaolo Bonzinihvf = not_found 132a81df1b6SPaolo Bonziniif targetos == 'windows' 133a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 1344a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 13504c6f1e7SMarc-André Lureau 13604c6f1e7SMarc-André Lureau win = import('windows') 13704c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 13804c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 13904c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 140d92989aaSMarc-André Lureauelif targetos == 'darwin' 141d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 142d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 143b4e312e9SPaolo Bonzini cocoa = dependency('appleframeworks', modules: 'Cocoa', required: get_option('cocoa')) 144cfad62f1SPaolo Bonzinielif targetos == 'sunos' 145cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 146cfad62f1SPaolo Bonzini cc.find_library('nsl'), 147cfad62f1SPaolo Bonzini cc.find_library('resolv')] 148cfad62f1SPaolo Bonzinielif targetos == 'haiku' 149cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 150cfad62f1SPaolo Bonzini cc.find_library('network'), 151cfad62f1SPaolo Bonzini cc.find_library('bsd')] 152b6c7cfd4SPaolo Bonzinielif targetos == 'openbsd' 153b6c7cfd4SPaolo Bonzini if not get_option('tcg').disabled() and target_dirs.length() > 0 154b6c7cfd4SPaolo Bonzini # Disable OpenBSD W^X if available 155b6c7cfd4SPaolo Bonzini emulator_link_args = cc.get_supported_link_arguments('-Wl,-z,wxneeded') 156b6c7cfd4SPaolo Bonzini endif 157a81df1b6SPaolo Bonziniendif 1586ec0e15dSPaolo Bonzini 1598a19980eSPaolo Bonziniaccelerators = [] 1608a19980eSPaolo Bonziniif not get_option('kvm').disabled() and targetos == 'linux' 1618a19980eSPaolo Bonzini accelerators += 'CONFIG_KVM' 1628a19980eSPaolo Bonziniendif 1638a19980eSPaolo Bonziniif not get_option('xen').disabled() and 'CONFIG_XEN_BACKEND' in config_host 1648a19980eSPaolo Bonzini accelerators += 'CONFIG_XEN' 1658a19980eSPaolo Bonzini have_xen_pci_passthrough = not get_option('xen_pci_passthrough').disabled() and targetos == 'linux' 1668a19980eSPaolo Bonzinielse 1678a19980eSPaolo Bonzini have_xen_pci_passthrough = false 1688a19980eSPaolo Bonziniendif 1698a19980eSPaolo Bonziniif not get_option('whpx').disabled() and targetos == 'windows' 1708a19980eSPaolo Bonzini if get_option('whpx').enabled() and cpu != 'x86_64' 1718a19980eSPaolo Bonzini error('WHPX requires 64-bit host') 1728a19980eSPaolo Bonzini elif cc.has_header('WinHvPlatform.h', required: get_option('whpx')) and \ 1738a19980eSPaolo Bonzini cc.has_header('WinHvEmulation.h', required: get_option('whpx')) 1748a19980eSPaolo Bonzini accelerators += 'CONFIG_WHPX' 1758a19980eSPaolo Bonzini endif 1768a19980eSPaolo Bonziniendif 1778a19980eSPaolo Bonziniif not get_option('hvf').disabled() 1788a19980eSPaolo Bonzini hvf = dependency('appleframeworks', modules: 'Hypervisor', 1798a19980eSPaolo Bonzini required: get_option('hvf')) 1808a19980eSPaolo Bonzini if hvf.found() 1818a19980eSPaolo Bonzini accelerators += 'CONFIG_HVF' 1828a19980eSPaolo Bonzini endif 1838a19980eSPaolo Bonziniendif 1848a19980eSPaolo Bonziniif not get_option('hax').disabled() 1858a19980eSPaolo Bonzini if get_option('hax').enabled() or targetos in ['windows', 'darwin', 'netbsd'] 1868a19980eSPaolo Bonzini accelerators += 'CONFIG_HAX' 1878a19980eSPaolo Bonzini endif 1888a19980eSPaolo Bonziniendif 1898a19980eSPaolo Bonziniif not get_option('tcg').disabled() 1908a19980eSPaolo Bonzini if cpu not in supported_cpus 1918a19980eSPaolo Bonzini if 'CONFIG_TCG_INTERPRETER' in config_host 1928a19980eSPaolo Bonzini warning('Unsupported CPU @0@, will use TCG with TCI (experimental)'.format(cpu)) 1938a19980eSPaolo Bonzini else 1948a19980eSPaolo Bonzini error('Unsupported CPU @0@, try --enable-tcg-interpreter'.format(cpu)) 1958a19980eSPaolo Bonzini endif 1968a19980eSPaolo Bonzini endif 1978a19980eSPaolo Bonzini accelerators += 'CONFIG_TCG' 1988a19980eSPaolo Bonzini config_host += { 'CONFIG_TCG': 'y' } 1998a19980eSPaolo Bonziniendif 2008a19980eSPaolo Bonzini 2018a19980eSPaolo Bonziniif 'CONFIG_KVM' not in accelerators and get_option('kvm').enabled() 2028a19980eSPaolo Bonzini error('KVM not available on this platform') 2038a19980eSPaolo Bonziniendif 2048a19980eSPaolo Bonziniif 'CONFIG_HVF' not in accelerators and get_option('hvf').enabled() 2058a19980eSPaolo Bonzini error('HVF not available on this platform') 2068a19980eSPaolo Bonziniendif 2078a19980eSPaolo Bonziniif 'CONFIG_WHPX' not in accelerators and get_option('whpx').enabled() 2088a19980eSPaolo Bonzini error('WHPX not available on this platform') 2098a19980eSPaolo Bonziniendif 2108a19980eSPaolo Bonziniif not have_xen_pci_passthrough and get_option('xen_pci_passthrough').enabled() 2118a19980eSPaolo Bonzini if 'CONFIG_XEN' in accelerators 2128a19980eSPaolo Bonzini error('Xen PCI passthrough not available on this platform') 2138a19980eSPaolo Bonzini else 2148a19980eSPaolo Bonzini error('Xen PCI passthrough requested but Xen not enabled') 2158a19980eSPaolo Bonzini endif 2168a19980eSPaolo Bonziniendif 217b4e312e9SPaolo Bonziniif not cocoa.found() and get_option('cocoa').enabled() 218b4e312e9SPaolo Bonzini error('Cocoa not available on this platform') 219b4e312e9SPaolo Bonziniendif 220b4e312e9SPaolo Bonzini 2216ec0e15dSPaolo Bonzini################ 2226ec0e15dSPaolo Bonzini# Dependencies # 2236ec0e15dSPaolo Bonzini################ 2246ec0e15dSPaolo Bonzini 225215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands. This was 226215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles. 227215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(), 228215b0c2fSPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 229215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split()) 230a81df1b6SPaolo Bonzinigio = not_found 231a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 232a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 233a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 234a81df1b6SPaolo Bonziniendif 235a81df1b6SPaolo Bonzinilttng = not_found 236a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 237a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 238a81df1b6SPaolo Bonziniendif 239a81df1b6SPaolo Bonziniurcubp = not_found 240a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 241a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 242a81df1b6SPaolo Bonziniendif 24346859d93SDaniel P. Berrangégcrypt = not_found 24446859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host 24546859d93SDaniel P. Berrangé gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), 24646859d93SDaniel P. Berrangé link_args: config_host['GCRYPT_LIBS'].split()) 24746859d93SDaniel P. Berrangéendif 248a81df1b6SPaolo Bonzininettle = not_found 249a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 250a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 251a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 252a81df1b6SPaolo Bonziniendif 253a81df1b6SPaolo Bonzinignutls = not_found 254a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 255a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 256a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 257a81df1b6SPaolo Bonziniendif 258b7612f45SPaolo Bonzinipixman = not_found 259b7612f45SPaolo Bonziniif have_system or have_tools 260b7612f45SPaolo Bonzini pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', 2611a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 262b7612f45SPaolo Bonziniendif 2635e7fbd25SMarc-André Lureaupam = not_found 2645e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 2655e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 2665e7fbd25SMarc-André Lureauendif 2675e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 2681ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static) 2695e5733e5SMarc-André Lureaulinux_io_uring = not_found 2705e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 2715e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 2725e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 2735e5733e5SMarc-André Lureauendif 2745e5733e5SMarc-André Lureaulibxml2 = not_found 2755e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 2765e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 2775e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 2785e5733e5SMarc-André Lureauendif 2795e5733e5SMarc-André Lureaulibnfs = not_found 2805e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 2815e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 2825e5733e5SMarc-André Lureauendif 283ec0d5893SMarc-André Lureaulibattr = not_found 284ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 285ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 286ec0d5893SMarc-André Lureauendif 2873f99cf57SPaolo Bonziniseccomp = not_found 2883f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 2893f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 2903f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 2913f99cf57SPaolo Bonziniendif 2923f99cf57SPaolo Bonzinilibcap_ng = not_found 2933f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 2943f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 2953f99cf57SPaolo Bonziniendif 2961917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools 2971917ec6dSPaolo Bonzini xkbcommon = not_found 2981917ec6dSPaolo Bonzinielse 2991917ec6dSPaolo Bonzini xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), 3001a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 301ade60d4fSMarc-André Lureauendif 302cdaf0722SMarc-André Lureauslirp = not_found 303cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP') 304cdaf0722SMarc-André Lureau slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(), 305cdaf0722SMarc-André Lureau link_args: config_host['SLIRP_LIBS'].split()) 306cdaf0722SMarc-André Lureauendif 307cdaf0722SMarc-André Lureauvde = not_found 308cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE') 309cdaf0722SMarc-André Lureau vde = declare_dependency(link_args: config_host['VDE_LIBS'].split()) 310cdaf0722SMarc-André Lureauendif 311478e943fSPaolo Bonzinipulse = not_found 312478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 313478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 314478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 315478e943fSPaolo Bonziniendif 316478e943fSPaolo Bonzinialsa = not_found 317478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 318478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 319478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 320478e943fSPaolo Bonziniendif 321478e943fSPaolo Bonzinijack = not_found 322478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 323478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 324478e943fSPaolo Bonziniendif 3252634733cSPaolo Bonzinispice = not_found 3262634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 3272634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 3282634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 3292634733cSPaolo Bonziniendif 3305ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 331ccf7afa5SPaolo Bonzinilibdl = not_found 332ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 333ccf7afa5SPaolo Bonzini libdl = cc.find_library('dl', required: true) 334ccf7afa5SPaolo Bonziniendif 33599650b62SPaolo Bonzinilibiscsi = not_found 33699650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 33799650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 33899650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 33999650b62SPaolo Bonziniendif 3405e5733e5SMarc-André Lureauzstd = not_found 3415e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 3425e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 3435e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 3445e5733e5SMarc-André Lureauendif 345ea458960SMarc-André Lureaugbm = not_found 346ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 347ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 348ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 349ea458960SMarc-André Lureauendif 350ea458960SMarc-André Lureauvirgl = not_found 351ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 352ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 353ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 354ea458960SMarc-André Lureauendif 3551d7bb6abSMarc-André Lureaucurl = not_found 3561d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 3571d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 3581d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 3591d7bb6abSMarc-André Lureauendif 360f15bff25SPaolo Bonzinilibudev = not_found 361f01496a3SPaolo Bonziniif targetos == 'linux' and (have_system or have_tools) 3626ec0e15dSPaolo Bonzini libudev = dependency('libudev', 3636ec0e15dSPaolo Bonzini required: get_option('mpath').enabled(), 3646ec0e15dSPaolo Bonzini static: enable_static) 365f15bff25SPaolo Bonziniendif 3666ec0e15dSPaolo Bonzini 3676ec0e15dSPaolo Bonzinimpathpersist = not_found 3686ec0e15dSPaolo Bonzinimpathpersist_new_api = false 3696ec0e15dSPaolo Bonziniif targetos == 'linux' and have_tools and not get_option('mpath').disabled() 3706ec0e15dSPaolo Bonzini mpath_test_source_new = ''' 3716ec0e15dSPaolo Bonzini #include <libudev.h> 3726ec0e15dSPaolo Bonzini #include <mpath_persist.h> 3736ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 3746ec0e15dSPaolo Bonzini int logsink; 3756ec0e15dSPaolo Bonzini static struct config *multipath_conf; 3766ec0e15dSPaolo Bonzini extern struct udev *udev; 3776ec0e15dSPaolo Bonzini extern struct config *get_multipath_config(void); 3786ec0e15dSPaolo Bonzini extern void put_multipath_config(struct config *conf); 3796ec0e15dSPaolo Bonzini struct udev *udev; 3806ec0e15dSPaolo Bonzini struct config *get_multipath_config(void) { return multipath_conf; } 3816ec0e15dSPaolo Bonzini void put_multipath_config(struct config *conf) { } 3826ec0e15dSPaolo Bonzini int main(void) { 3836ec0e15dSPaolo Bonzini udev = udev_new(); 3846ec0e15dSPaolo Bonzini multipath_conf = mpath_lib_init(); 3856ec0e15dSPaolo Bonzini return 0; 3866ec0e15dSPaolo Bonzini }''' 3876ec0e15dSPaolo Bonzini mpath_test_source_old = ''' 3886ec0e15dSPaolo Bonzini #include <libudev.h> 3896ec0e15dSPaolo Bonzini #include <mpath_persist.h> 3906ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 3916ec0e15dSPaolo Bonzini int logsink; 3926ec0e15dSPaolo Bonzini int main(void) { 3936ec0e15dSPaolo Bonzini struct udev *udev = udev_new(); 3946ec0e15dSPaolo Bonzini mpath_lib_init(udev); 3956ec0e15dSPaolo Bonzini return 0; 3966ec0e15dSPaolo Bonzini }''' 39743b43a40SPaolo Bonzini mpathlibs = [libudev] 39843b43a40SPaolo Bonzini if enable_static 39943b43a40SPaolo Bonzini mpathlibs += cc.find_library('devmapper', 4006ec0e15dSPaolo Bonzini required: get_option('mpath'), 4016ec0e15dSPaolo Bonzini static: enable_static) 40243b43a40SPaolo Bonzini endif 40343b43a40SPaolo Bonzini mpathlibs += cc.find_library('multipath', 4046ec0e15dSPaolo Bonzini required: get_option('mpath'), 4056ec0e15dSPaolo Bonzini static: enable_static) 40643b43a40SPaolo Bonzini mpathlibs += cc.find_library('mpathpersist', 40743b43a40SPaolo Bonzini required: get_option('mpath'), 40843b43a40SPaolo Bonzini static: enable_static) 40943b43a40SPaolo Bonzini foreach lib: mpathlibs 41043b43a40SPaolo Bonzini if not lib.found() 41143b43a40SPaolo Bonzini mpathlibs = [] 41243b43a40SPaolo Bonzini break 41343b43a40SPaolo Bonzini endif 41443b43a40SPaolo Bonzini endforeach 41543b43a40SPaolo Bonzini if mpathlibs.length() > 0 4166ec0e15dSPaolo Bonzini if cc.links(mpath_test_source_new, dependencies: mpathlibs) 4176ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 4186ec0e15dSPaolo Bonzini mpathpersist_new_api = true 4196ec0e15dSPaolo Bonzini elif cc.links(mpath_test_source_old, dependencies: mpathlibs) 4206ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 4216ec0e15dSPaolo Bonzini else 4226ec0e15dSPaolo Bonzini if get_option('mpath').enabled() 4236ec0e15dSPaolo Bonzini error('Cannot detect libmpathpersist API') 4246ec0e15dSPaolo Bonzini else 4256ec0e15dSPaolo Bonzini warning('Cannot detect libmpathpersist API, disabling') 4266ec0e15dSPaolo Bonzini endif 4276ec0e15dSPaolo Bonzini endif 4286ec0e15dSPaolo Bonzini endif 4296ec0e15dSPaolo Bonziniendif 4306ec0e15dSPaolo Bonzini 4312634733cSPaolo Bonzinibrlapi = not_found 4322634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 4332634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 4342634733cSPaolo Bonziniendif 43535be72baSPaolo Bonzini 436760e4327SPaolo Bonzinisdl = not_found 437760e4327SPaolo Bonziniif have_system 438363743daSYonggang Luo sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) 43935be72baSPaolo Bonzini sdl_image = not_found 440760e4327SPaolo Bonziniendif 44135be72baSPaolo Bonziniif sdl.found() 44235be72baSPaolo Bonzini # work around 2.0.8 bug 44335be72baSPaolo Bonzini sdl = declare_dependency(compile_args: '-Wno-undef', 44435be72baSPaolo Bonzini dependencies: sdl) 4457161a433SVolker Rümelin sdl_image = dependency('SDL2_image', required: get_option('sdl_image'), 4461a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 44735be72baSPaolo Bonzinielse 44835be72baSPaolo Bonzini if get_option('sdl_image').enabled() 449a8dc2aceSSergei Trofimovich error('sdl-image required, but SDL was @0@'.format( 450a8dc2aceSSergei Trofimovich get_option('sdl').disabled() ? 'disabled' : 'not found')) 4512634733cSPaolo Bonzini endif 45235be72baSPaolo Bonzini sdl_image = not_found 45335be72baSPaolo Bonziniendif 45435be72baSPaolo Bonzini 4555e5733e5SMarc-André Lureaurbd = not_found 4565e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 4575e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 4585e5733e5SMarc-André Lureauendif 4595e5733e5SMarc-André Lureauglusterfs = not_found 4605e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 4615e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 4625e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 4635e5733e5SMarc-André Lureauendif 4645e5733e5SMarc-André Lureaulibssh = not_found 4655e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 4665e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 4675e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 4685e5733e5SMarc-André Lureauendif 4695e5733e5SMarc-André Lureaulibbzip2 = not_found 4705e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 4715e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 4725e5733e5SMarc-André Lureauendif 4735e5733e5SMarc-André Lureauliblzfse = not_found 4745e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 4755e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 4765e5733e5SMarc-André Lureauendif 477478e943fSPaolo Bonzinioss = not_found 478478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 479478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 480478e943fSPaolo Bonziniendif 481478e943fSPaolo Bonzinidsound = not_found 482478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 483478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 484478e943fSPaolo Bonziniendif 485478e943fSPaolo Bonzinicoreaudio = not_found 486478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 487478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 488478e943fSPaolo Bonziniendif 4892b1ccdf4SMarc-André Lureauopengl = not_found 4902b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 491de2d3005SPaolo Bonzini opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(), 492de2d3005SPaolo Bonzini link_args: config_host['OPENGL_LIBS'].split()) 4932b1ccdf4SMarc-André Lureauendif 4942b1ccdf4SMarc-André Lureaugtk = not_found 4952b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host 4962b1ccdf4SMarc-André Lureau gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(), 4972b1ccdf4SMarc-André Lureau link_args: config_host['GTK_LIBS'].split()) 4982b1ccdf4SMarc-André Lureauendif 4992b1ccdf4SMarc-André Lureauvte = not_found 5002b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 5012b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 5022b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 5032b1ccdf4SMarc-André Lureauendif 5042b1ccdf4SMarc-André Lureaux11 = not_found 5052b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host 5062b1ccdf4SMarc-André Lureau x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(), 5072b1ccdf4SMarc-André Lureau link_args: config_host['X11_LIBS'].split()) 5082b1ccdf4SMarc-André Lureauendif 5092b1ccdf4SMarc-André Lureaucurses = not_found 5102b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host 5112b1ccdf4SMarc-André Lureau curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(), 5122b1ccdf4SMarc-André Lureau link_args: config_host['CURSES_LIBS'].split()) 5132b1ccdf4SMarc-André Lureauendif 5142b1ccdf4SMarc-André Lureauiconv = not_found 5152b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host 5162b1ccdf4SMarc-André Lureau iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(), 5172b1ccdf4SMarc-André Lureau link_args: config_host['ICONV_LIBS'].split()) 5182b1ccdf4SMarc-André Lureauendif 519a0b93237SPaolo Bonzinivnc = not_found 5202b1ccdf4SMarc-André Lureaupng = not_found 5212b1ccdf4SMarc-André Lureaujpeg = not_found 5222b1ccdf4SMarc-André Lureausasl = not_found 523a0b93237SPaolo Bonziniif get_option('vnc').enabled() 524a0b93237SPaolo Bonzini vnc = declare_dependency() # dummy dependency 525a0b93237SPaolo Bonzini png = dependency('libpng', required: get_option('vnc_png'), 5261a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 527a0b93237SPaolo Bonzini jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'], 528a0b93237SPaolo Bonzini required: get_option('vnc_jpeg'), 529a0b93237SPaolo Bonzini static: enable_static) 530a0b93237SPaolo Bonzini sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'], 531a0b93237SPaolo Bonzini required: get_option('vnc_sasl'), 532a0b93237SPaolo Bonzini static: enable_static) 533a0b93237SPaolo Bonzini if sasl.found() 534a0b93237SPaolo Bonzini sasl = declare_dependency(dependencies: sasl, 535a0b93237SPaolo Bonzini compile_args: '-DSTRUCT_IOVEC_DEFINED') 536a0b93237SPaolo Bonzini endif 5372b1ccdf4SMarc-André Lureauendif 5384a96337dSPaolo Bonzinifdt = not_found 5394a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host 5404a96337dSPaolo Bonzini fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(), 5414a96337dSPaolo Bonzini link_args: config_host['FDT_LIBS'].split()) 5424a96337dSPaolo Bonziniendif 543708eab42SMarc-André Lureausnappy = not_found 544708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host 545708eab42SMarc-André Lureau snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split()) 546708eab42SMarc-André Lureauendif 547708eab42SMarc-André Lureaulzo = not_found 548708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host 549708eab42SMarc-André Lureau lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split()) 550708eab42SMarc-André Lureauendif 55155166230SMarc-André Lureaurdma = not_found 55255166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host 55355166230SMarc-André Lureau rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split()) 55455166230SMarc-André Lureauendif 555ab318051SMarc-André Lureaunuma = not_found 556ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host 557ab318051SMarc-André Lureau numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split()) 558ab318051SMarc-André Lureauendif 559582ea95fSMarc-André Lureauxen = not_found 560582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host 561582ea95fSMarc-André Lureau xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(), 562582ea95fSMarc-André Lureau link_args: config_host['XEN_LIBS'].split()) 563582ea95fSMarc-André Lureauendif 56406677ce1SPaolo Bonzinicacard = not_found 56506677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host 56606677ce1SPaolo Bonzini cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(), 56706677ce1SPaolo Bonzini link_args: config_host['SMARTCARD_LIBS'].split()) 56806677ce1SPaolo Bonziniendif 5690a40bcb7SCésar Belleyu2f = not_found 5700a40bcb7SCésar Belleyif have_system 5710a40bcb7SCésar Belley u2f = dependency('u2f-emu', required: get_option('u2f'), 5720a40bcb7SCésar Belley method: 'pkg-config', 5730a40bcb7SCésar Belley static: enable_static) 5740a40bcb7SCésar Belleyendif 57506677ce1SPaolo Bonziniusbredir = not_found 57606677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host 57706677ce1SPaolo Bonzini usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(), 57806677ce1SPaolo Bonzini link_args: config_host['USB_REDIR_LIBS'].split()) 57906677ce1SPaolo Bonziniendif 58006677ce1SPaolo Bonzinilibusb = not_found 58106677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host 58206677ce1SPaolo Bonzini libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(), 58306677ce1SPaolo Bonzini link_args: config_host['LIBUSB_LIBS'].split()) 58406677ce1SPaolo Bonziniendif 585c9322ab5SMarc-André Lureaucapstone = not_found 586c9322ab5SMarc-André Lureauif 'CONFIG_CAPSTONE' in config_host 587c9322ab5SMarc-André Lureau capstone = declare_dependency(compile_args: config_host['CAPSTONE_CFLAGS'].split(), 588c9322ab5SMarc-André Lureau link_args: config_host['CAPSTONE_LIBS'].split()) 589c9322ab5SMarc-André Lureauendif 590c9322ab5SMarc-André Lureaulibpmem = not_found 591c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host 592c9322ab5SMarc-André Lureau libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), 593c9322ab5SMarc-André Lureau link_args: config_host['LIBPMEM_LIBS'].split()) 594c9322ab5SMarc-André Lureauendif 595c7c91a74SBruce Rogerslibdaxctl = not_found 596c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host 597c7c91a74SBruce Rogers libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) 598c7c91a74SBruce Rogersendif 5998ce0a45fSMarc-André Lureautasn1 = not_found 6008ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host 6018ce0a45fSMarc-André Lureau tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), 6028ce0a45fSMarc-André Lureau link_args: config_host['TASN1_LIBS'].split()) 6038ce0a45fSMarc-André Lureauendif 604af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false, 605af04e89dSMarc-André Lureau method: 'pkg-config', static: enable_static) 606a81df1b6SPaolo Bonzini 6073909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid') 6083909def8SMarc-André Lureau 609aa087962SPaolo Bonzini# Malloc tests 610aa087962SPaolo Bonzini 611aa087962SPaolo Bonzinimalloc = [] 612aa087962SPaolo Bonziniif get_option('malloc') == 'system' 613aa087962SPaolo Bonzini has_malloc_trim = \ 614aa087962SPaolo Bonzini not get_option('malloc_trim').disabled() and \ 615aa087962SPaolo Bonzini cc.links('''#include <malloc.h> 616aa087962SPaolo Bonzini int main(void) { malloc_trim(0); return 0; }''') 617aa087962SPaolo Bonzinielse 618aa087962SPaolo Bonzini has_malloc_trim = false 619aa087962SPaolo Bonzini malloc = cc.find_library(get_option('malloc'), required: true) 620aa087962SPaolo Bonziniendif 621aa087962SPaolo Bonziniif not has_malloc_trim and get_option('malloc_trim').enabled() 622aa087962SPaolo Bonzini if get_option('malloc') == 'system' 623aa087962SPaolo Bonzini error('malloc_trim not available on this platform.') 624aa087962SPaolo Bonzini else 625aa087962SPaolo Bonzini error('malloc_trim not available with non-libc memory allocator') 626aa087962SPaolo Bonzini endif 627aa087962SPaolo Bonziniendif 628aa087962SPaolo Bonzini 629859aef02SPaolo Bonzini# Create config-host.h 630859aef02SPaolo Bonzini 631b4e312e9SPaolo Bonziniconfig_host_data.set('CONFIG_COCOA', cocoa.found()) 632f01496a3SPaolo Bonziniconfig_host_data.set('CONFIG_LIBUDEV', libudev.found()) 6336ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH', mpathpersist.found()) 6346ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api) 63535be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found()) 63635be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) 637a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found()) 638a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) 639a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found()) 640a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found()) 6414113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) 642af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found()) 6433909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid) 644aa087962SPaolo Bonziniconfig_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim) 645859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version())) 646859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]) 647859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1]) 648859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]) 649859aef02SPaolo Bonzini 650765686d6SPaolo Bonziniignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target 651859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST'] 652f4f5ed2cSPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'bindir', 'prefix', 'qemu_confdir', 'qemu_datadir', 653859aef02SPaolo Bonzini 'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir', 654f4f5ed2cSPaolo Bonzini 'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath', 'sysconfdir'] 655859aef02SPaolo Bonziniforeach k, v: config_host 656765686d6SPaolo Bonzini if ignored.contains(k) 657765686d6SPaolo Bonzini # do nothing 658765686d6SPaolo Bonzini elif arrays.contains(k) 659859aef02SPaolo Bonzini if v != '' 660859aef02SPaolo Bonzini v = '"' + '", "'.join(v.split()) + '", ' 661859aef02SPaolo Bonzini endif 662859aef02SPaolo Bonzini config_host_data.set(k, v) 663859aef02SPaolo Bonzini elif k == 'ARCH' 664859aef02SPaolo Bonzini config_host_data.set('HOST_' + v.to_upper(), 1) 665859aef02SPaolo Bonzini elif strings.contains(k) 666859aef02SPaolo Bonzini if not k.startswith('CONFIG_') 667859aef02SPaolo Bonzini k = 'CONFIG_' + k.to_upper() 668859aef02SPaolo Bonzini endif 669859aef02SPaolo Bonzini config_host_data.set_quoted(k, v) 670859aef02SPaolo Bonzini elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_') 671859aef02SPaolo Bonzini config_host_data.set(k, v == 'y' ? 1 : v) 672859aef02SPaolo Bonzini endif 673859aef02SPaolo Bonziniendforeach 674859aef02SPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data) 675859aef02SPaolo Bonzini 6762becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 67705512f55SPaolo Bonziniconfig_all = {} 678a98006bcSPaolo Bonziniconfig_all_devices = {} 679ca0fc784SPaolo Bonziniconfig_all_disas = {} 6802becc36aSPaolo Bonziniconfig_devices_mak_list = [] 6812becc36aSPaolo Bonziniconfig_devices_h = {} 682859aef02SPaolo Bonziniconfig_target_h = {} 6832becc36aSPaolo Bonziniconfig_target_mak = {} 684ca0fc784SPaolo Bonzini 685ca0fc784SPaolo Bonzinidisassemblers = { 686ca0fc784SPaolo Bonzini 'alpha' : ['CONFIG_ALPHA_DIS'], 687ca0fc784SPaolo Bonzini 'arm' : ['CONFIG_ARM_DIS'], 688ca0fc784SPaolo Bonzini 'avr' : ['CONFIG_AVR_DIS'], 689ca0fc784SPaolo Bonzini 'cris' : ['CONFIG_CRIS_DIS'], 690ca0fc784SPaolo Bonzini 'hppa' : ['CONFIG_HPPA_DIS'], 691ca0fc784SPaolo Bonzini 'i386' : ['CONFIG_I386_DIS'], 692ca0fc784SPaolo Bonzini 'x86_64' : ['CONFIG_I386_DIS'], 693ca0fc784SPaolo Bonzini 'x32' : ['CONFIG_I386_DIS'], 694ca0fc784SPaolo Bonzini 'lm32' : ['CONFIG_LM32_DIS'], 695ca0fc784SPaolo Bonzini 'm68k' : ['CONFIG_M68K_DIS'], 696ca0fc784SPaolo Bonzini 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], 697ca0fc784SPaolo Bonzini 'mips' : ['CONFIG_MIPS_DIS'], 698ca0fc784SPaolo Bonzini 'moxie' : ['CONFIG_MOXIE_DIS'], 699ca0fc784SPaolo Bonzini 'nios2' : ['CONFIG_NIOS2_DIS'], 700ca0fc784SPaolo Bonzini 'or1k' : ['CONFIG_OPENRISC_DIS'], 701ca0fc784SPaolo Bonzini 'ppc' : ['CONFIG_PPC_DIS'], 702ca0fc784SPaolo Bonzini 'riscv' : ['CONFIG_RISCV_DIS'], 703ca0fc784SPaolo Bonzini 'rx' : ['CONFIG_RX_DIS'], 704ca0fc784SPaolo Bonzini 's390' : ['CONFIG_S390_DIS'], 705ca0fc784SPaolo Bonzini 'sh4' : ['CONFIG_SH4_DIS'], 706ca0fc784SPaolo Bonzini 'sparc' : ['CONFIG_SPARC_DIS'], 707ca0fc784SPaolo Bonzini 'xtensa' : ['CONFIG_XTENSA_DIS'], 708ca0fc784SPaolo Bonzini} 709ca0fc784SPaolo Bonziniif link_language == 'cpp' 710ca0fc784SPaolo Bonzini disassemblers += { 711ca0fc784SPaolo Bonzini 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], 712ca0fc784SPaolo Bonzini 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], 713ca0fc784SPaolo Bonzini 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], 714ca0fc784SPaolo Bonzini } 715ca0fc784SPaolo Bonziniendif 716ca0fc784SPaolo Bonzini 7172becc36aSPaolo Bonzinikconfig_external_symbols = [ 7182becc36aSPaolo Bonzini 'CONFIG_KVM', 7192becc36aSPaolo Bonzini 'CONFIG_XEN', 7202becc36aSPaolo Bonzini 'CONFIG_TPM', 7212becc36aSPaolo Bonzini 'CONFIG_SPICE', 7222becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 7232becc36aSPaolo Bonzini 'CONFIG_OPENGL', 7242becc36aSPaolo Bonzini 'CONFIG_X11', 7252becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 72640bc0ca9SLaurent Vivier 'CONFIG_VHOST_VDPA', 7272becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 7282becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 7292becc36aSPaolo Bonzini 'CONFIG_LINUX', 7302becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 7312becc36aSPaolo Bonzini] 732a9a74907SPaolo Bonziniignored = [ 'TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_ARCH' ] 733ca0fc784SPaolo Bonzini 734fdb75aefSPaolo Bonzinidefault_targets = 'CONFIG_DEFAULT_TARGETS' in config_host 735fdb75aefSPaolo Bonziniactual_target_dirs = [] 736a81df1b6SPaolo Bonziniforeach target : target_dirs 737765686d6SPaolo Bonzini config_target = { 'TARGET_NAME': target.split('-')[0] } 738765686d6SPaolo Bonzini if target.endswith('linux-user') 739fdb75aefSPaolo Bonzini if targetos != 'linux' 740fdb75aefSPaolo Bonzini if default_targets 741fdb75aefSPaolo Bonzini continue 742fdb75aefSPaolo Bonzini endif 743fdb75aefSPaolo Bonzini error('Target @0@ is only available on a Linux host'.format(target)) 744fdb75aefSPaolo Bonzini endif 745765686d6SPaolo Bonzini config_target += { 'CONFIG_LINUX_USER': 'y' } 746765686d6SPaolo Bonzini elif target.endswith('bsd-user') 747fdb75aefSPaolo Bonzini if 'CONFIG_BSD' not in config_host 748fdb75aefSPaolo Bonzini if default_targets 749fdb75aefSPaolo Bonzini continue 750fdb75aefSPaolo Bonzini endif 751fdb75aefSPaolo Bonzini error('Target @0@ is only available on a BSD host'.format(target)) 752fdb75aefSPaolo Bonzini endif 753765686d6SPaolo Bonzini config_target += { 'CONFIG_BSD_USER': 'y' } 754765686d6SPaolo Bonzini elif target.endswith('softmmu') 755765686d6SPaolo Bonzini config_target += { 'CONFIG_SOFTMMU': 'y' } 756765686d6SPaolo Bonzini endif 757765686d6SPaolo Bonzini if target.endswith('-user') 758765686d6SPaolo Bonzini config_target += { 759765686d6SPaolo Bonzini 'CONFIG_USER_ONLY': 'y', 760765686d6SPaolo Bonzini 'CONFIG_QEMU_INTERP_PREFIX': 761765686d6SPaolo Bonzini config_host['CONFIG_QEMU_INTERP_PREFIX'].format(config_target['TARGET_NAME']) 762765686d6SPaolo Bonzini } 763765686d6SPaolo Bonzini endif 764859aef02SPaolo Bonzini 7658a19980eSPaolo Bonzini have_accel = false 7668a19980eSPaolo Bonzini foreach sym: accelerators 7678a19980eSPaolo Bonzini if sym == 'CONFIG_TCG' or target in accelerator_targets.get(sym, []) 7688a19980eSPaolo Bonzini config_target += { sym: 'y' } 7698a19980eSPaolo Bonzini config_all += { sym: 'y' } 7708a19980eSPaolo Bonzini if sym == 'CONFIG_XEN' and have_xen_pci_passthrough 7718a19980eSPaolo Bonzini config_target += { 'CONFIG_XEN_PCI_PASSTHROUGH': 'y' } 7728a19980eSPaolo Bonzini endif 7738a19980eSPaolo Bonzini have_accel = true 7748a19980eSPaolo Bonzini endif 7758a19980eSPaolo Bonzini endforeach 776fdb75aefSPaolo Bonzini if not have_accel 777fdb75aefSPaolo Bonzini if default_targets 778fdb75aefSPaolo Bonzini continue 779fdb75aefSPaolo Bonzini endif 780fdb75aefSPaolo Bonzini error('No accelerator available for target @0@'.format(target)) 781fdb75aefSPaolo Bonzini endif 7828a19980eSPaolo Bonzini 783fdb75aefSPaolo Bonzini actual_target_dirs += target 784765686d6SPaolo Bonzini config_target += keyval.load('default-configs/targets' / target + '.mak') 785a9a74907SPaolo Bonzini config_target += { 'TARGET_' + config_target['TARGET_ARCH'].to_upper(): 'y' } 786765686d6SPaolo Bonzini 787fa73168bSPaolo Bonzini # Add default keys 788fa73168bSPaolo Bonzini if 'TARGET_BASE_ARCH' not in config_target 789fa73168bSPaolo Bonzini config_target += {'TARGET_BASE_ARCH': config_target['TARGET_ARCH']} 790fa73168bSPaolo Bonzini endif 791fa73168bSPaolo Bonzini if 'TARGET_ABI_DIR' not in config_target 792fa73168bSPaolo Bonzini config_target += {'TARGET_ABI_DIR': config_target['TARGET_ARCH']} 793fa73168bSPaolo Bonzini endif 794fa73168bSPaolo Bonzini 795ca0fc784SPaolo Bonzini foreach k, v: disassemblers 796ca0fc784SPaolo Bonzini if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) 797ca0fc784SPaolo Bonzini foreach sym: v 798ca0fc784SPaolo Bonzini config_target += { sym: 'y' } 799ca0fc784SPaolo Bonzini config_all_disas += { sym: 'y' } 800ca0fc784SPaolo Bonzini endforeach 801ca0fc784SPaolo Bonzini endif 802ca0fc784SPaolo Bonzini endforeach 803ca0fc784SPaolo Bonzini 804859aef02SPaolo Bonzini config_target_data = configuration_data() 805859aef02SPaolo Bonzini foreach k, v: config_target 806859aef02SPaolo Bonzini if not k.startswith('TARGET_') and not k.startswith('CONFIG_') 807859aef02SPaolo Bonzini # do nothing 808859aef02SPaolo Bonzini elif ignored.contains(k) 809859aef02SPaolo Bonzini # do nothing 810859aef02SPaolo Bonzini elif k == 'TARGET_BASE_ARCH' 811a9a74907SPaolo Bonzini # Note that TARGET_BASE_ARCH ends up in config-target.h but it is 812a9a74907SPaolo Bonzini # not used to select files from sourcesets. 813859aef02SPaolo Bonzini config_target_data.set('TARGET_' + v.to_upper(), 1) 814765686d6SPaolo Bonzini elif k == 'TARGET_NAME' or k == 'CONFIG_QEMU_INTERP_PREFIX' 815859aef02SPaolo Bonzini config_target_data.set_quoted(k, v) 816859aef02SPaolo Bonzini elif v == 'y' 817859aef02SPaolo Bonzini config_target_data.set(k, 1) 818859aef02SPaolo Bonzini else 819859aef02SPaolo Bonzini config_target_data.set(k, v) 820859aef02SPaolo Bonzini endif 821859aef02SPaolo Bonzini endforeach 822859aef02SPaolo Bonzini config_target_h += {target: configure_file(output: target + '-config-target.h', 823859aef02SPaolo Bonzini configuration: config_target_data)} 8242becc36aSPaolo Bonzini 8252becc36aSPaolo Bonzini if target.endswith('-softmmu') 8262becc36aSPaolo Bonzini base_kconfig = [] 8272becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 828859aef02SPaolo Bonzini if sym in config_target or sym in config_host 8292becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 8302becc36aSPaolo Bonzini endif 8312becc36aSPaolo Bonzini endforeach 8322becc36aSPaolo Bonzini 8332becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 8342becc36aSPaolo Bonzini config_devices_mak = configure_file( 8351bb4cb1cSPaolo Bonzini input: ['default-configs/devices' / target + '.mak', 'Kconfig'], 8362becc36aSPaolo Bonzini output: config_devices_mak, 8372becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 8382becc36aSPaolo Bonzini capture: true, 8392becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 8402becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 8412becc36aSPaolo Bonzini base_kconfig]) 842859aef02SPaolo Bonzini 843859aef02SPaolo Bonzini config_devices_data = configuration_data() 844859aef02SPaolo Bonzini config_devices = keyval.load(config_devices_mak) 845859aef02SPaolo Bonzini foreach k, v: config_devices 846859aef02SPaolo Bonzini config_devices_data.set(k, 1) 847859aef02SPaolo Bonzini endforeach 8482becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 849859aef02SPaolo Bonzini config_devices_h += {target: configure_file(output: target + '-config-devices.h', 850859aef02SPaolo Bonzini configuration: config_devices_data)} 851859aef02SPaolo Bonzini config_target += config_devices 852a98006bcSPaolo Bonzini config_all_devices += config_devices 8532becc36aSPaolo Bonzini endif 8542becc36aSPaolo Bonzini config_target_mak += {target: config_target} 855a81df1b6SPaolo Bonziniendforeach 856fdb75aefSPaolo Bonzinitarget_dirs = actual_target_dirs 857a81df1b6SPaolo Bonzini 8582becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 8592becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 8602becc36aSPaolo Bonzini# static_library target. 8612becc36aSPaolo Bonzini# 8622becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 8632becc36aSPaolo Bonzini# build literally all source files, including devices only used by 8642becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 8652becc36aSPaolo Bonzini# pseudo symbol replaces it. 8662becc36aSPaolo Bonzini 86705512f55SPaolo Bonziniconfig_all += config_all_devices 8682becc36aSPaolo Bonziniconfig_all += config_host 8692becc36aSPaolo Bonziniconfig_all += config_all_disas 8702becc36aSPaolo Bonziniconfig_all += { 8712becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 8722becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 8732becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 8742becc36aSPaolo Bonzini 'CONFIG_ALL': true, 8752becc36aSPaolo Bonzini} 8762becc36aSPaolo Bonzini 877a81df1b6SPaolo Bonzini# Generators 878a81df1b6SPaolo Bonzini 8793f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 880650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 881a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 882a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 883a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 884a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 885a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 886a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 887a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 888a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 889a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 890a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 891a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 892a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 893a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 894a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 895a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 896a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 897a81df1b6SPaolo Bonzini] 898a81df1b6SPaolo Bonzini 899a81df1b6SPaolo Bonzinitracetool = [ 900a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 901a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 902a81df1b6SPaolo Bonzini] 903a81df1b6SPaolo Bonzini 9042c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 9052c273f32SMarc-André Lureau meson.current_source_dir(), 906859aef02SPaolo Bonzini config_host['PKGVERSION'], meson.project_version()] 9072c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 9082c273f32SMarc-André Lureau output: 'qemu-version.h', 9092c273f32SMarc-André Lureau command: qemu_version_cmd, 9102c273f32SMarc-André Lureau capture: true, 9112c273f32SMarc-André Lureau build_by_default: true, 9122c273f32SMarc-André Lureau build_always_stale: true) 9132c273f32SMarc-André Lureaugenh += qemu_version 9142c273f32SMarc-André Lureau 9153f885659SMarc-André Lureauhxdep = [] 9163f885659SMarc-André Lureauhx_headers = [ 9173f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 9183f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 9193f885659SMarc-André Lureau] 9203f885659SMarc-André Lureauif have_system 9213f885659SMarc-André Lureau hx_headers += [ 9223f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 9233f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 9243f885659SMarc-André Lureau ] 9253f885659SMarc-André Lureauendif 9263f885659SMarc-André Lureauforeach d : hx_headers 927b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 9283f885659SMarc-André Lureau input: files(d[0]), 9293f885659SMarc-André Lureau output: d[1], 9303f885659SMarc-André Lureau capture: true, 9313f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 9323f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 9333f885659SMarc-André Lureauendforeach 9343f885659SMarc-André Lureaugenh += hxdep 9353f885659SMarc-André Lureau 936eb937365SPeter MaydellSPHINX_ARGS = [config_host['SPHINX_BUILD'], 937eb937365SPeter Maydell '-Dversion=' + meson.project_version(), 938eb937365SPeter Maydell '-Drelease=' + config_host['PKGVERSION']] 939eb937365SPeter Maydell 940eb937365SPeter Maydellif get_option('werror') 941eb937365SPeter Maydell SPHINX_ARGS += [ '-W' ] 942eb937365SPeter Maydellendif 943eb937365SPeter Maydell 944b3f4830aSPeter Maydellsphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py', 945b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/hxtool.py', 946b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kerneldoc.py', 947b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kernellog.py', 948b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qapidoc.py', 949b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qmp_lexer.py', 950b3f4830aSPeter Maydell qapi_gen_depends ] 951b3f4830aSPeter Maydell 952a81df1b6SPaolo Bonzini# Collect sourcesets. 953a81df1b6SPaolo Bonzini 954a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 955a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 956a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 9573154fee4SMarc-André Lureaublock_ss = ss.source_set() 9584a96337dSPaolo Bonziniblockdev_ss = ss.source_set() 959ff219dcaSPaolo Bonziniqmp_ss = ss.source_set() 9602becc36aSPaolo Bonzinicommon_ss = ss.source_set() 9612becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 9622becc36aSPaolo Bonziniuser_ss = ss.source_set() 9632becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 9642becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 9652becc36aSPaolo Bonzinispecific_ss = ss.source_set() 96664ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set() 9672becc36aSPaolo Bonzini 9683154fee4SMarc-André Lureaumodules = {} 9692becc36aSPaolo Bonzinihw_arch = {} 9702becc36aSPaolo Bonzinitarget_arch = {} 9712becc36aSPaolo Bonzinitarget_softmmu_arch = {} 972a81df1b6SPaolo Bonzini 973a81df1b6SPaolo Bonzini############### 974a81df1b6SPaolo Bonzini# Trace files # 975a81df1b6SPaolo Bonzini############### 976a81df1b6SPaolo Bonzini 977c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once 978c9322ab5SMarc-André Lureau# we have those 979a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 980a81df1b6SPaolo Bonzini 'accel/kvm', 981a81df1b6SPaolo Bonzini 'accel/tcg', 982a81df1b6SPaolo Bonzini 'crypto', 983a81df1b6SPaolo Bonzini 'monitor', 984a81df1b6SPaolo Bonzini] 985a81df1b6SPaolo Bonziniif have_user 986a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 987a81df1b6SPaolo Bonziniendif 988a81df1b6SPaolo Bonziniif have_block 989a81df1b6SPaolo Bonzini trace_events_subdirs += [ 990a81df1b6SPaolo Bonzini 'authz', 991a81df1b6SPaolo Bonzini 'block', 992a81df1b6SPaolo Bonzini 'io', 993a81df1b6SPaolo Bonzini 'nbd', 994a81df1b6SPaolo Bonzini 'scsi', 995a81df1b6SPaolo Bonzini ] 996a81df1b6SPaolo Bonziniendif 997a81df1b6SPaolo Bonziniif have_system 998a81df1b6SPaolo Bonzini trace_events_subdirs += [ 999a81df1b6SPaolo Bonzini 'audio', 1000a81df1b6SPaolo Bonzini 'backends', 1001a81df1b6SPaolo Bonzini 'backends/tpm', 1002a81df1b6SPaolo Bonzini 'chardev', 1003a81df1b6SPaolo Bonzini 'hw/9pfs', 1004a81df1b6SPaolo Bonzini 'hw/acpi', 1005a81df1b6SPaolo Bonzini 'hw/alpha', 1006a81df1b6SPaolo Bonzini 'hw/arm', 1007a81df1b6SPaolo Bonzini 'hw/audio', 1008a81df1b6SPaolo Bonzini 'hw/block', 1009a81df1b6SPaolo Bonzini 'hw/block/dataplane', 1010a81df1b6SPaolo Bonzini 'hw/char', 1011a81df1b6SPaolo Bonzini 'hw/display', 1012a81df1b6SPaolo Bonzini 'hw/dma', 1013a81df1b6SPaolo Bonzini 'hw/hppa', 1014a81df1b6SPaolo Bonzini 'hw/hyperv', 1015a81df1b6SPaolo Bonzini 'hw/i2c', 1016a81df1b6SPaolo Bonzini 'hw/i386', 1017a81df1b6SPaolo Bonzini 'hw/i386/xen', 1018a81df1b6SPaolo Bonzini 'hw/ide', 1019a81df1b6SPaolo Bonzini 'hw/input', 1020a81df1b6SPaolo Bonzini 'hw/intc', 1021a81df1b6SPaolo Bonzini 'hw/isa', 1022a81df1b6SPaolo Bonzini 'hw/mem', 1023a81df1b6SPaolo Bonzini 'hw/mips', 1024a81df1b6SPaolo Bonzini 'hw/misc', 1025a81df1b6SPaolo Bonzini 'hw/misc/macio', 1026a81df1b6SPaolo Bonzini 'hw/net', 1027a81df1b6SPaolo Bonzini 'hw/nvram', 1028a81df1b6SPaolo Bonzini 'hw/pci', 1029a81df1b6SPaolo Bonzini 'hw/pci-host', 1030a81df1b6SPaolo Bonzini 'hw/ppc', 1031a81df1b6SPaolo Bonzini 'hw/rdma', 1032a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 1033a81df1b6SPaolo Bonzini 'hw/rtc', 1034a81df1b6SPaolo Bonzini 'hw/s390x', 1035a81df1b6SPaolo Bonzini 'hw/scsi', 1036a81df1b6SPaolo Bonzini 'hw/sd', 1037a81df1b6SPaolo Bonzini 'hw/sparc', 1038a81df1b6SPaolo Bonzini 'hw/sparc64', 1039a81df1b6SPaolo Bonzini 'hw/ssi', 1040a81df1b6SPaolo Bonzini 'hw/timer', 1041a81df1b6SPaolo Bonzini 'hw/tpm', 1042a81df1b6SPaolo Bonzini 'hw/usb', 1043a81df1b6SPaolo Bonzini 'hw/vfio', 1044a81df1b6SPaolo Bonzini 'hw/virtio', 1045a81df1b6SPaolo Bonzini 'hw/watchdog', 1046a81df1b6SPaolo Bonzini 'hw/xen', 1047a81df1b6SPaolo Bonzini 'hw/gpio', 1048a81df1b6SPaolo Bonzini 'migration', 1049a81df1b6SPaolo Bonzini 'net', 10508b7a5507SPhilippe Mathieu-Daudé 'softmmu', 1051a81df1b6SPaolo Bonzini 'ui', 1052a81df1b6SPaolo Bonzini ] 1053a81df1b6SPaolo Bonziniendif 1054a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 1055a81df1b6SPaolo Bonzini 'hw/core', 1056a81df1b6SPaolo Bonzini 'qapi', 1057a81df1b6SPaolo Bonzini 'qom', 1058a81df1b6SPaolo Bonzini 'target/arm', 1059a81df1b6SPaolo Bonzini 'target/hppa', 1060a81df1b6SPaolo Bonzini 'target/i386', 1061a81df1b6SPaolo Bonzini 'target/mips', 1062a81df1b6SPaolo Bonzini 'target/ppc', 1063a81df1b6SPaolo Bonzini 'target/riscv', 1064a81df1b6SPaolo Bonzini 'target/s390x', 1065a81df1b6SPaolo Bonzini 'target/sparc', 1066a81df1b6SPaolo Bonzini 'util', 1067a81df1b6SPaolo Bonzini] 1068a81df1b6SPaolo Bonzini 1069a81df1b6SPaolo Bonzinisubdir('qapi') 1070a81df1b6SPaolo Bonzinisubdir('qobject') 1071a81df1b6SPaolo Bonzinisubdir('stubs') 1072a81df1b6SPaolo Bonzinisubdir('trace') 1073a81df1b6SPaolo Bonzinisubdir('util') 10745582c58fSMarc-André Lureausubdir('qom') 10755582c58fSMarc-André Lureausubdir('authz') 1076a81df1b6SPaolo Bonzinisubdir('crypto') 10772d78b56eSMarc-André Lureausubdir('ui') 1078a81df1b6SPaolo Bonzini 10793154fee4SMarc-André Lureau 10803154fee4SMarc-André Lureauif enable_modules 10813154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 10823154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 10833154fee4SMarc-André Lureauendif 10843154fee4SMarc-André Lureau 1085a81df1b6SPaolo Bonzini# Build targets from sourcesets 1086a81df1b6SPaolo Bonzini 10872becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 1088a81df1b6SPaolo Bonzini 1089a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 10902becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 1091a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 1092a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 1093aa087962SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket, malloc]) 1094a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 109504c6f1e7SMarc-André Lureau sources: genh + version_res) 1096a81df1b6SPaolo Bonzini 1097abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'), 1098abff1abfSPaolo Bonzini output: 'decode-@BASENAME@.c.inc', 1099abff1abfSPaolo Bonzini arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@']) 1100abff1abfSPaolo Bonzini 1101478e943fSPaolo Bonzinisubdir('audio') 11027fcfd456SMarc-André Lureausubdir('io') 1103848e8ff6SMarc-André Lureausubdir('chardev') 1104ec0d5893SMarc-André Lureausubdir('fsdev') 1105abff1abfSPaolo Bonzinisubdir('libdecnumber') 1106d3b18480SMarc-André Lureausubdir('target') 1107708eab42SMarc-André Lureausubdir('dump') 1108ec0d5893SMarc-André Lureau 11095e5733e5SMarc-André Lureaublock_ss.add(files( 11105e5733e5SMarc-André Lureau 'block.c', 111156ee8626SKevin Wolf 'blockdev-nbd.c', 11125e5733e5SMarc-André Lureau 'blockjob.c', 11135e5733e5SMarc-André Lureau 'job.c', 11145e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 11155e5733e5SMarc-André Lureau)) 11165e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 11175e5733e5SMarc-André Lureau 11185e5733e5SMarc-André Lureausubdir('nbd') 11195e5733e5SMarc-André Lureausubdir('scsi') 11205e5733e5SMarc-André Lureausubdir('block') 11215e5733e5SMarc-André Lureau 11224a96337dSPaolo Bonziniblockdev_ss.add(files( 11234a96337dSPaolo Bonzini 'blockdev.c', 11244a96337dSPaolo Bonzini 'iothread.c', 11254a96337dSPaolo Bonzini 'job-qmp.c', 11264a96337dSPaolo Bonzini)) 11274a96337dSPaolo Bonzini 11284a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 11294a96337dSPaolo Bonzini# os-win32.c does not 11304a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 11314a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 11324a96337dSPaolo Bonzini 11334a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 11344a96337dSPaolo Bonzinisoftmmu_ss.add(files( 11354a96337dSPaolo Bonzini 'bootdevice.c', 11364a96337dSPaolo Bonzini 'dma-helpers.c', 11374a96337dSPaolo Bonzini 'qdev-monitor.c', 11384a96337dSPaolo Bonzini), sdl) 11394a96337dSPaolo Bonzini 11404a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c')) 11414a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp]) 11424a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')]) 11434a96337dSPaolo Bonzini 11444a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 11454a96337dSPaolo Bonzini 11465d3ea0e1SPaolo Bonzinisubdir('softmmu') 1147c9322ab5SMarc-André Lureau 1148c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl) 1149c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c')) 1150c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files( 1151c9322ab5SMarc-André Lureau 'fpu/softfloat.c', 1152c9322ab5SMarc-André Lureau 'tcg/optimize.c', 1153c9322ab5SMarc-André Lureau 'tcg/tcg-common.c', 1154c9322ab5SMarc-André Lureau 'tcg/tcg-op-gvec.c', 1155c9322ab5SMarc-André Lureau 'tcg/tcg-op-vec.c', 1156c9322ab5SMarc-André Lureau 'tcg/tcg-op.c', 1157c9322ab5SMarc-André Lureau 'tcg/tcg.c', 1158c9322ab5SMarc-André Lureau)) 1159c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c')) 1160c9322ab5SMarc-André Lureau 1161ab318051SMarc-André Lureausubdir('backends') 1162c574e161SMarc-André Lureausubdir('disas') 116355166230SMarc-André Lureausubdir('migration') 1164ff219dcaSPaolo Bonzinisubdir('monitor') 1165cdaf0722SMarc-André Lureausubdir('net') 116617ef2af6SMarc-André Lureausubdir('replay') 1167582ea95fSMarc-André Lureausubdir('hw') 11681a82878aSMarc-André Lureausubdir('accel') 1169f556b4a1SPaolo Bonzinisubdir('plugins') 1170b309c321SMarc-André Lureausubdir('bsd-user') 11713a30446aSMarc-André Lureausubdir('linux-user') 11723a30446aSMarc-André Lureau 1173b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c')) 1174b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss) 1175b309c321SMarc-André Lureau 11763a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c')) 11773a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss) 11785d3ea0e1SPaolo Bonzini 1179a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 1180a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 118164ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz') 1182a2ce7dbdSPaolo Bonzini 11833154fee4SMarc-André Lureaublock_mods = [] 11843154fee4SMarc-André Lureausoftmmu_mods = [] 11853154fee4SMarc-André Lureauforeach d, list : modules 11863154fee4SMarc-André Lureau foreach m, module_ss : list 11873154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 11883e292c51SGerd Hoffmann module_ss = module_ss.apply(config_all, strict: false) 11893154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 11903154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 11913154fee4SMarc-André Lureau if d == 'block' 11923154fee4SMarc-André Lureau block_mods += sl 11933154fee4SMarc-André Lureau else 11943154fee4SMarc-André Lureau softmmu_mods += sl 11953154fee4SMarc-André Lureau endif 11963154fee4SMarc-André Lureau else 11973154fee4SMarc-André Lureau if d == 'block' 11983154fee4SMarc-André Lureau block_ss.add_all(module_ss) 11993154fee4SMarc-André Lureau else 12003154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 12013154fee4SMarc-André Lureau endif 12023154fee4SMarc-André Lureau endif 12033154fee4SMarc-André Lureau endforeach 12043154fee4SMarc-André Lureauendforeach 12053154fee4SMarc-André Lureau 12063154fee4SMarc-André Lureaunm = find_program('nm') 1207604f3e4eSYonggang Luoundefsym = find_program('scripts/undefsym.py') 12083154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 12093154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 12103154fee4SMarc-André Lureau capture: true, 12113154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 12123154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 12133154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 12143154fee4SMarc-André Lureau capture: true, 12153154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 12163154fee4SMarc-André Lureau 12175e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 12185e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 12195e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 12205e5733e5SMarc-André Lureau link_depends: block_syms, 12215e5733e5SMarc-André Lureau name_suffix: 'fa', 12225e5733e5SMarc-André Lureau build_by_default: false) 12235e5733e5SMarc-André Lureau 12245e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 1225b7c70bf2SMarc-André Lureau link_args: '@block.syms', 1226b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 12275e5733e5SMarc-André Lureau 1228ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 1229ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 1230ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 1231ff219dcaSPaolo Bonzini name_suffix: 'fa', 1232ff219dcaSPaolo Bonzini build_by_default: false) 1233ff219dcaSPaolo Bonzini 1234ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 1235ff219dcaSPaolo Bonzini 12363154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 12373154fee4SMarc-André Lureau shared_module(m.name(), 12383154fee4SMarc-André Lureau name_prefix: '', 12393154fee4SMarc-André Lureau link_whole: m, 12403154fee4SMarc-André Lureau install: true, 12413154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 12423154fee4SMarc-André Lureauendforeach 12433154fee4SMarc-André Lureau 124464ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp) 124564ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil) 124664ed6f92SPaolo Bonzini 124764ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss]) 12482becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 12492becc36aSPaolo Bonzini 12502becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 12512becc36aSPaolo Bonzinicommon_all = static_library('common', 12522becc36aSPaolo Bonzini build_by_default: false, 12532becc36aSPaolo Bonzini sources: common_all.sources() + genh, 12542becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 12552becc36aSPaolo Bonzini name_suffix: 'fa') 12562becc36aSPaolo Bonzini 1257c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh') 1258c9322ab5SMarc-André Lureau 1259fd5eef85SPaolo Bonziniemulators = {} 12602becc36aSPaolo Bonziniforeach target : target_dirs 12612becc36aSPaolo Bonzini config_target = config_target_mak[target] 12622becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 12632becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 1264859aef02SPaolo Bonzini arch_srcs = [config_target_h[target]] 126564ed6f92SPaolo Bonzini arch_deps = [] 126664ed6f92SPaolo Bonzini c_args = ['-DNEED_CPU_H', 126764ed6f92SPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 126864ed6f92SPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] 1269b6c7cfd4SPaolo Bonzini link_args = emulator_link_args 12702becc36aSPaolo Bonzini 1271859aef02SPaolo Bonzini config_target += config_host 12722becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 12732becc36aSPaolo Bonzini if targetos == 'linux' 12742becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 12752becc36aSPaolo Bonzini endif 12762becc36aSPaolo Bonzini if target.endswith('-softmmu') 12772becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 12782becc36aSPaolo Bonzini target_type='system' 1279abff1abfSPaolo Bonzini t = target_softmmu_arch[arch].apply(config_target, strict: false) 1280abff1abfSPaolo Bonzini arch_srcs += t.sources() 128164ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1282abff1abfSPaolo Bonzini 12832c44220dSMarc-André Lureau hw_dir = target_name == 'sparc64' ? 'sparc64' : arch 12842c44220dSMarc-André Lureau hw = hw_arch[hw_dir].apply(config_target, strict: false) 12852c44220dSMarc-André Lureau arch_srcs += hw.sources() 128664ed6f92SPaolo Bonzini arch_deps += hw.dependencies() 12872c44220dSMarc-André Lureau 12882becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 128964ed6f92SPaolo Bonzini link_args += ['@block.syms', '@qemu.syms'] 12902becc36aSPaolo Bonzini else 12913a30446aSMarc-André Lureau abi = config_target['TARGET_ABI_DIR'] 12922becc36aSPaolo Bonzini target_type='user' 12932becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 12942becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 12952becc36aSPaolo Bonzini base_dir = 'linux-user' 12962becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 12972becc36aSPaolo Bonzini else 12982becc36aSPaolo Bonzini base_dir = 'bsd-user' 12992becc36aSPaolo Bonzini endif 13002becc36aSPaolo Bonzini target_inc += include_directories( 13012becc36aSPaolo Bonzini base_dir, 13023a30446aSMarc-André Lureau base_dir / abi, 13032becc36aSPaolo Bonzini ) 13043a30446aSMarc-André Lureau if 'CONFIG_LINUX_USER' in config_target 13053a30446aSMarc-André Lureau dir = base_dir / abi 13063a30446aSMarc-André Lureau arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c') 13073a30446aSMarc-André Lureau if config_target.has_key('TARGET_SYSTBL_ABI') 13083a30446aSMarc-André Lureau arch_srcs += \ 13093a30446aSMarc-André Lureau syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'], 13103a30446aSMarc-André Lureau extra_args : config_target['TARGET_SYSTBL_ABI']) 13113a30446aSMarc-André Lureau endif 13123a30446aSMarc-André Lureau endif 13132becc36aSPaolo Bonzini endif 13142becc36aSPaolo Bonzini 1315c9322ab5SMarc-André Lureau if 'TARGET_XML_FILES' in config_target 1316c9322ab5SMarc-André Lureau gdbstub_xml = custom_target(target + '-gdbstub-xml.c', 1317c9322ab5SMarc-André Lureau output: target + '-gdbstub-xml.c', 1318c9322ab5SMarc-André Lureau input: files(config_target['TARGET_XML_FILES'].split()), 1319c9322ab5SMarc-André Lureau command: [feature_to_c, '@INPUT@'], 1320c9322ab5SMarc-André Lureau capture: true) 1321c9322ab5SMarc-André Lureau arch_srcs += gdbstub_xml 1322c9322ab5SMarc-André Lureau endif 1323c9322ab5SMarc-André Lureau 1324abff1abfSPaolo Bonzini t = target_arch[arch].apply(config_target, strict: false) 1325abff1abfSPaolo Bonzini arch_srcs += t.sources() 132664ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1327abff1abfSPaolo Bonzini 13282becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 13292becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 133064ed6f92SPaolo Bonzini deps = target_common.dependencies() 13312becc36aSPaolo Bonzini 13322becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 13332becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 133464ed6f92SPaolo Bonzini arch_deps += target_specific.dependencies() 13352becc36aSPaolo Bonzini 133664ed6f92SPaolo Bonzini lib = static_library('qemu-' + target, 1337859aef02SPaolo Bonzini sources: arch_srcs + genh, 1338b7612f45SPaolo Bonzini dependencies: arch_deps, 13392becc36aSPaolo Bonzini objects: objects, 13402becc36aSPaolo Bonzini include_directories: target_inc, 134164ed6f92SPaolo Bonzini c_args: c_args, 134264ed6f92SPaolo Bonzini build_by_default: false, 13432becc36aSPaolo Bonzini name_suffix: 'fa') 134464ed6f92SPaolo Bonzini 134564ed6f92SPaolo Bonzini if target.endswith('-softmmu') 134664ed6f92SPaolo Bonzini execs = [{ 134764ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name, 134864ed6f92SPaolo Bonzini 'gui': false, 134964ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 135064ed6f92SPaolo Bonzini 'dependencies': [] 135164ed6f92SPaolo Bonzini }] 135235be72baSPaolo Bonzini if targetos == 'windows' and (sdl.found() or gtk.found()) 135364ed6f92SPaolo Bonzini execs += [{ 135464ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name + 'w', 135564ed6f92SPaolo Bonzini 'gui': true, 135664ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 135764ed6f92SPaolo Bonzini 'dependencies': [] 135864ed6f92SPaolo Bonzini }] 135964ed6f92SPaolo Bonzini endif 136064ed6f92SPaolo Bonzini if config_host.has_key('CONFIG_FUZZ') 136164ed6f92SPaolo Bonzini specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false) 136264ed6f92SPaolo Bonzini execs += [{ 136364ed6f92SPaolo Bonzini 'name': 'qemu-fuzz-' + target_name, 136464ed6f92SPaolo Bonzini 'gui': false, 136564ed6f92SPaolo Bonzini 'sources': specific_fuzz.sources(), 136664ed6f92SPaolo Bonzini 'dependencies': specific_fuzz.dependencies(), 136764ed6f92SPaolo Bonzini }] 136864ed6f92SPaolo Bonzini endif 136964ed6f92SPaolo Bonzini else 137064ed6f92SPaolo Bonzini execs = [{ 137164ed6f92SPaolo Bonzini 'name': 'qemu-' + target_name, 137264ed6f92SPaolo Bonzini 'gui': false, 137364ed6f92SPaolo Bonzini 'sources': [], 137464ed6f92SPaolo Bonzini 'dependencies': [] 137564ed6f92SPaolo Bonzini }] 137664ed6f92SPaolo Bonzini endif 137764ed6f92SPaolo Bonzini foreach exe: execs 1378fd5eef85SPaolo Bonzini emulators += {exe['name']: 1379fd5eef85SPaolo Bonzini executable(exe['name'], exe['sources'], 138064ed6f92SPaolo Bonzini install: true, 138164ed6f92SPaolo Bonzini c_args: c_args, 138264ed6f92SPaolo Bonzini dependencies: arch_deps + deps + exe['dependencies'], 138364ed6f92SPaolo Bonzini objects: lib.extract_all_objects(recursive: true), 138464ed6f92SPaolo Bonzini link_language: link_language, 138564ed6f92SPaolo Bonzini link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []), 138664ed6f92SPaolo Bonzini link_args: link_args, 138764ed6f92SPaolo Bonzini gui_app: exe['gui']) 1388fd5eef85SPaolo Bonzini } 138910e1d263SMarc-André Lureau 139010e1d263SMarc-André Lureau if 'CONFIG_TRACE_SYSTEMTAP' in config_host 139110e1d263SMarc-André Lureau foreach stp: [ 1392bd5f973aSStefan Hajnoczi {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, 1393bd5f973aSStefan Hajnoczi {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, 139410e1d263SMarc-André Lureau {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, 139510e1d263SMarc-André Lureau {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, 139610e1d263SMarc-André Lureau ] 1397bd5f973aSStefan Hajnoczi custom_target(exe['name'] + stp['ext'], 139810e1d263SMarc-André Lureau input: trace_events_all, 1399bd5f973aSStefan Hajnoczi output: exe['name'] + stp['ext'], 140010e1d263SMarc-André Lureau capture: true, 140110e1d263SMarc-André Lureau install: stp['install'], 1402ab4c0996SMarc-André Lureau install_dir: qemu_datadir / '../systemtap/tapset', 140310e1d263SMarc-André Lureau command: [ 140410e1d263SMarc-André Lureau tracetool, '--group=all', '--format=' + stp['fmt'], 140510e1d263SMarc-André Lureau '--binary=' + stp['bin'], 140610e1d263SMarc-André Lureau '--target-name=' + target_name, 140710e1d263SMarc-André Lureau '--target-type=' + target_type, 140810e1d263SMarc-André Lureau '--probe-prefix=qemu.' + target_type + '.' + target_name, 140910e1d263SMarc-André Lureau '@INPUT@', 141010e1d263SMarc-André Lureau ]) 141110e1d263SMarc-André Lureau endforeach 141210e1d263SMarc-André Lureau endif 141364ed6f92SPaolo Bonzini endforeach 14142becc36aSPaolo Bonziniendforeach 14152becc36aSPaolo Bonzini 1416931049b4SPaolo Bonzini# Other build targets 1417897b5afaSMarc-André Lureau 1418f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 1419f556b4a1SPaolo Bonzini install_headers('include/qemu/qemu-plugin.h') 1420f556b4a1SPaolo Bonziniendif 1421f556b4a1SPaolo Bonzini 1422f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 1423f15bff25SPaolo Bonzini subdir('qga') 1424f15bff25SPaolo Bonziniendif 1425f15bff25SPaolo Bonzini 14269755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled 14279755c94aSLaurent Vivier# when we don't build tools or system 14284113f4cfSLaurent Vivierif xkbcommon.found() 142928742467SMarc-André Lureau # used for the update-keymaps target, so include rules even if !have_tools 143028742467SMarc-André Lureau qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, 143128742467SMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: have_tools) 143228742467SMarc-André Lureauendif 143328742467SMarc-André Lureau 1434931049b4SPaolo Bonziniif have_tools 1435b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 1436b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 1437b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 1438b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1439b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 1440b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1441b7c70bf2SMarc-André Lureau 14427c58bb76SPaolo Bonzini subdir('storage-daemon') 1443a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 14441d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 1445a9c9727cSPaolo Bonzini 1446157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 1447157e7b13SMarc-André Lureau dependencies: qemuutil, 1448157e7b13SMarc-André Lureau install: true) 1449157e7b13SMarc-André Lureau 1450931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 1451931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 14522d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 1453ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 145432fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 145599650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 1456931049b4SPaolo Bonzini endif 14578f51e01cSMarc-André Lureau 14588f51e01cSMarc-André Lureau if targetos == 'linux' 14598f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 14608f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 14618f51e01cSMarc-André Lureau install: true, 14628f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 1463897b5afaSMarc-André Lureau 1464897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 1465897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 14666ec0e15dSPaolo Bonzini libcap_ng, mpathpersist], 1467897b5afaSMarc-André Lureau install: true) 14688f51e01cSMarc-André Lureau endif 14698f51e01cSMarc-André Lureau 14705ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 14715ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 14725ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 14735ee24e78SMarc-André Lureau endif 1474931049b4SPaolo Bonziniendif 1475931049b4SPaolo Bonzini 1476f5aa6320SMarc-André Lureausubdir('scripts') 14773f99cf57SPaolo Bonzinisubdir('tools') 1478bdcbea7aSMarc-André Lureausubdir('pc-bios') 1479ce1c1e7aSPaolo Bonzinisubdir('tests') 1480f8aa24eaSPaolo Bonzinisubdir('docs') 1481e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host 1482e8f3bd71SMarc-André Lureau subdir('po') 1483e8f3bd71SMarc-André Lureauendif 14843f99cf57SPaolo Bonzini 14858adfeba9SMarc-André Lureauif host_machine.system() == 'windows' 14868adfeba9SMarc-André Lureau nsis_cmd = [ 14878adfeba9SMarc-André Lureau find_program('scripts/nsis.py'), 14888adfeba9SMarc-André Lureau '@OUTPUT@', 14898adfeba9SMarc-André Lureau get_option('prefix'), 14908adfeba9SMarc-André Lureau meson.current_source_dir(), 14918adfeba9SMarc-André Lureau host_machine.cpu_family(), 14928adfeba9SMarc-André Lureau '--', 14938adfeba9SMarc-André Lureau '-DDISPLAYVERSION=' + meson.project_version(), 14948adfeba9SMarc-André Lureau ] 14958adfeba9SMarc-André Lureau if build_docs 14968adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_DOCUMENTATION=y' 14978adfeba9SMarc-André Lureau endif 14988adfeba9SMarc-André Lureau if 'CONFIG_GTK' in config_host 14998adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_GTK=y' 15008adfeba9SMarc-André Lureau endif 15018adfeba9SMarc-André Lureau 15028adfeba9SMarc-André Lureau nsis = custom_target('nsis', 15038adfeba9SMarc-André Lureau output: 'qemu-setup-' + meson.project_version() + '.exe', 15048adfeba9SMarc-André Lureau input: files('qemu.nsi'), 15058adfeba9SMarc-André Lureau build_always_stale: true, 15068adfeba9SMarc-André Lureau command: nsis_cmd + ['@INPUT@']) 15078adfeba9SMarc-André Lureau alias_target('installer', nsis) 15088adfeba9SMarc-André Lureauendif 15098adfeba9SMarc-André Lureau 1510f9332757SPaolo Bonzinisummary_info = {} 1511f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 1512f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 1513f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 1514f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 1515f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 1516f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 1517f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 1518f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 1519f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 1520f9332757SPaolo Bonziniif targetos != 'windows' 1521f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 1522b81efab7SMarc-André Lureau summary_info += {'Manual directory': get_option('mandir')} 1523f9332757SPaolo Bonzinielse 1524f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 1525f9332757SPaolo Bonziniendif 1526491e74c1SMarc-André Lureausummary_info += {'Doc directory': get_option('docdir')} 1527f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 1528f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 1529f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 1530f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 1531f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 1532f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 1533f9332757SPaolo Bonziniif link_language == 'cpp' 1534f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 1535f9332757SPaolo Bonzinielse 1536f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 1537f9332757SPaolo Bonziniendif 1538f9332757SPaolo Bonziniif targetos == 'darwin' 1539f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 1540f9332757SPaolo Bonziniendif 1541f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 1542f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 1543f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 1544f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 1545f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 1546f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 1547f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 1548f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 1549f9332757SPaolo Bonzini# TODO: add back version 1550f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 1551f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 1552f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 1553f9332757SPaolo Bonziniendif 1554f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 1555f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 1556f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 1557f9332757SPaolo Bonziniendif 1558f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 1559f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 1560fdb75aefSPaolo Bonzinisummary_info += {'target list': ' '.join(target_dirs)} 1561f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 1562*deb62371SPaolo Bonzinisummary_info += {'sparse enabled': sparse.found()} 1563f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 1564f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 15653e8529ddSLaurent Viviersummary_info += {'static build': config_host.has_key('CONFIG_STATIC')} 1566f9332757SPaolo Bonziniif targetos == 'darwin' 1567f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 1568f9332757SPaolo Bonziniendif 1569f9332757SPaolo Bonzini# TODO: add back version 157035be72baSPaolo Bonzinisummary_info += {'SDL support': sdl.found()} 157135be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()} 1572f9332757SPaolo Bonzini# TODO: add back version 1573f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 1574f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 1575b7612f45SPaolo Bonzinisummary_info += {'pixman': pixman.found()} 1576f9332757SPaolo Bonzini# TODO: add back version 1577f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 1578f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 1579f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 1580f9332757SPaolo Bonzini# TODO: add back version 1581f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 1582f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 1583f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 1584f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1585f9332757SPaolo Bonziniendif 1586f9332757SPaolo Bonzini# TODO: add back version 1587f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 1588f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 1589f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1590f9332757SPaolo Bonziniendif 1591f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 1592f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 1593f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 1594f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 1595f9332757SPaolo Bonzini# TODO: add back version 1596f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 1597f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 1598f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 1599f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 1600f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 1601f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 1602f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 16036ec0e15dSPaolo Bonzinisummary_info += {'Multipath support': mpathpersist.found()} 1604a0b93237SPaolo Bonzinisummary_info += {'VNC support': vnc.found()} 1605a0b93237SPaolo Bonziniif vnc.found() 1606a0b93237SPaolo Bonzini summary_info += {'VNC SASL support': sasl.found()} 1607a0b93237SPaolo Bonzini summary_info += {'VNC JPEG support': jpeg.found()} 1608a0b93237SPaolo Bonzini summary_info += {'VNC PNG support': png.found()} 1609f9332757SPaolo Bonziniendif 1610f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 1611f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 1612f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 1613f9332757SPaolo Bonziniendif 1614f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 1615f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 1616f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 1617f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 1618f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 1619f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 1620f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 1621f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 1622f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 162305512f55SPaolo Bonzinisummary_info += {'KVM support': config_all.has_key('CONFIG_KVM')} 162405512f55SPaolo Bonzinisummary_info += {'HAX support': config_all.has_key('CONFIG_HAX')} 162505512f55SPaolo Bonzinisummary_info += {'HVF support': config_all.has_key('CONFIG_HVF')} 162605512f55SPaolo Bonzinisummary_info += {'WHPX support': config_all.has_key('CONFIG_WHPX')} 162705512f55SPaolo Bonzinisummary_info += {'TCG support': config_all.has_key('CONFIG_TCG')} 162805512f55SPaolo Bonziniif config_all.has_key('CONFIG_TCG') 162905512f55SPaolo Bonzini summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 163005512f55SPaolo Bonzini summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 163105512f55SPaolo Bonziniendif 1632aa087962SPaolo Bonzinisummary_info += {'malloc trim support': has_malloc_trim} 1633f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 1634f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 1635f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 1636f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 1637f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 1638f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 1639f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 1640f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 1641f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 1642f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 1643f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 1644f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 1645f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 1646f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 1647f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 1648f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 1649f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 1650f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 1651f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 1652f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 1653f9332757SPaolo Bonziniendif 1654f9332757SPaolo Bonzini# TODO: add back protocol and server version 1655f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 1656f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 1657f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 1658f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 16590a40bcb7SCésar Belleysummary_info += {'U2F support': u2f.found()} 1660f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 1661f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 1662f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 1663f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 1664f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 1665f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 1666f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 1667f9332757SPaolo Bonziniif targetos == 'windows' 1668f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 1669f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 1670f9332757SPaolo Bonzini endif 1671f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 1672f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 16734bad7c3bSStefan Hajnoczi summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI')} 1674f9332757SPaolo Bonziniendif 1675f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 1676f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 1677f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 1678f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 1679f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 1680f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 1681f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 1682bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 1683f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 1684f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 1685f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 1686f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 1687f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 1688f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 1689f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 1690f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 1691f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 1692f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 1693f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 1694aa087962SPaolo Bonzinisummary_info += {'memory allocator': get_option('malloc')} 1695f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 1696f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 1697f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 1698f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 1699f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 1700f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 1701f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 1702f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 1703f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 1704f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 1705f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 1706f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 1707f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 1708f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 1709f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 1710f01496a3SPaolo Bonzinisummary_info += {'libudev': libudev.found()} 1711f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 1712f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 1713f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 1714f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 1715f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 1716f9332757SPaolo Bonziniendif 1717f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 1718f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 1719f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 1720f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 1721f9332757SPaolo Bonzini 1722f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 1723f9332757SPaolo Bonzini message() 1724f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 1725f9332757SPaolo Bonzini message() 1726f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 1727f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 1728f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1729f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1730f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1731f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1732f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1733f9332757SPaolo Bonziniendif 1734f9332757SPaolo Bonzini 1735f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 1736f9332757SPaolo Bonzini message() 1737f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 1738f9332757SPaolo Bonzini message() 1739f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 1740f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 1741f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1742f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1743f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1744f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1745f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1746f9332757SPaolo Bonziniendif 1747