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') 138b18cdbfSRichard Hendersonfs = import('fs') 14a81df1b6SPaolo Bonzini 15ce1c1e7aSPaolo Bonzinish = find_program('sh') 16a81df1b6SPaolo Bonzinicc = meson.get_compiler('c') 17a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak') 183154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host 1935be72baSPaolo Bonzinienable_static = 'CONFIG_STATIC' in config_host 20f8aa24eaSPaolo Bonzinibuild_docs = 'BUILD_DOCS' in config_host 218fe11232SMarc-André Lureau 228fe11232SMarc-André Lureauif get_option('qemu_suffix').startswith('/') 238fe11232SMarc-André Lureau error('qemu_suffix cannot start with a /') 248fe11232SMarc-André Lureauendif 258fe11232SMarc-André Lureau 26ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix') 27491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix') 28859aef02SPaolo Bonziniconfig_host_data = configuration_data() 29859aef02SPaolo Bonzinigenh = [] 30a5665051SPaolo Bonzini 31760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 32760e4327SPaolo Bonzinihave_user = false 33760e4327SPaolo Bonzinihave_system = false 34760e4327SPaolo Bonziniforeach target : target_dirs 35760e4327SPaolo Bonzini have_user = have_user or target.endswith('-user') 36760e4327SPaolo Bonzini have_system = have_system or target.endswith('-softmmu') 37760e4327SPaolo Bonziniendforeach 38760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 39760e4327SPaolo Bonzinihave_block = have_system or have_tools 40760e4327SPaolo Bonzini 41201e8ed7SPaolo Bonzinipython = import('python').find_installation() 42201e8ed7SPaolo Bonzini 43201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 44201e8ed7SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', 45201e8ed7SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 46201e8ed7SPaolo Bonzini 47201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family() 48201e8ed7SPaolo Bonzinitargetos = host_machine.system() 49201e8ed7SPaolo Bonzini 50201e8ed7SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'), 51201e8ed7SPaolo Bonzini output: 'ninjatool', 52201e8ed7SPaolo Bonzini configuration: config_host) 53201e8ed7SPaolo Bonzini 548a19980eSPaolo Bonziniif cpu in ['x86', 'x86_64'] 558a19980eSPaolo Bonzini kvm_targets = ['i386-softmmu', 'x86_64-softmmu'] 568a19980eSPaolo Bonzinielif cpu == 'aarch64' 578a19980eSPaolo Bonzini kvm_targets = ['aarch64-softmmu'] 588a19980eSPaolo Bonzinielif cpu == 's390x' 598a19980eSPaolo Bonzini kvm_targets = ['s390x-softmmu'] 608a19980eSPaolo Bonzinielif cpu in ['ppc', 'ppc64'] 618a19980eSPaolo Bonzini kvm_targets = ['ppc-softmmu', 'ppc64-softmmu'] 62fbc5884cSHuacai Chenelif cpu in ['mips', 'mips64'] 63fbc5884cSHuacai Chen kvm_targets = ['mips-softmmu', 'mipsel-softmmu', 'mips64-softmmu', 'mips64el-softmmu'] 648a19980eSPaolo Bonzinielse 658a19980eSPaolo Bonzini kvm_targets = [] 668a19980eSPaolo Bonziniendif 678a19980eSPaolo Bonzini 688a19980eSPaolo Bonziniaccelerator_targets = { 'CONFIG_KVM': kvm_targets } 698a19980eSPaolo Bonziniif cpu in ['x86', 'x86_64'] 708a19980eSPaolo Bonzini accelerator_targets += { 718a19980eSPaolo Bonzini 'CONFIG_HAX': ['i386-softmmu', 'x86_64-softmmu'], 728a19980eSPaolo Bonzini 'CONFIG_XEN': ['i386-softmmu', 'x86_64-softmmu'], 738a19980eSPaolo Bonzini 'CONFIG_HVF': ['x86_64-softmmu'], 748a19980eSPaolo Bonzini 'CONFIG_WHPX': ['i386-softmmu', 'x86_64-softmmu'], 758a19980eSPaolo Bonzini } 768a19980eSPaolo Bonziniendif 778a19980eSPaolo Bonzini 78201e8ed7SPaolo Bonzini################## 79201e8ed7SPaolo Bonzini# Compiler flags # 80201e8ed7SPaolo Bonzini################## 81201e8ed7SPaolo Bonzini 82ff9ed62bSAlexander Bulekov# Specify linker-script with add_project_link_arguments so that it is not placed 83ff9ed62bSAlexander Bulekov# within a linker --start-group/--end-group pair 84ff9ed62bSAlexander Bulekovif 'CONFIG_FUZZ' in config_host 85ff9ed62bSAlexander Bulekov add_project_link_arguments(['-Wl,-T,', 86ff9ed62bSAlexander Bulekov (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')], 87ff9ed62bSAlexander Bulekov native: false, language: ['c', 'cpp', 'objc']) 88ff9ed62bSAlexander Bulekovendif 89ff9ed62bSAlexander Bulekov 90a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 91a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 92a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 93a5665051SPaolo Bonzini native: false, language: 'cpp') 94a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 95a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 96a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 97a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 98a5665051SPaolo Bonzini 99c46f76d1SAlexander Bulekov 100fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 101fc929892SMarc-André Lureauif link_language == 'cpp' 102fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 103fc929892SMarc-André Lureauendif 104a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 105a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 106a5665051SPaolo Bonziniendif 107a5665051SPaolo Bonzini 108deb62371SPaolo Bonzinisparse = find_program('cgcc', required: get_option('sparse')) 109deb62371SPaolo Bonziniif sparse.found() 110968b4db3SPaolo Bonzini run_target('sparse', 111968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 112deb62371SPaolo Bonzini 'compile_commands.json', sparse.full_path(), '-Wbitwise', 113deb62371SPaolo Bonzini '-Wno-transparent-union', '-Wno-old-initializer', 114deb62371SPaolo Bonzini '-Wno-non-pointer-null']) 115968b4db3SPaolo Bonziniendif 116968b4db3SPaolo Bonzini 1176ec0e15dSPaolo Bonzini########################################### 1186ec0e15dSPaolo Bonzini# Target-specific checks and dependencies # 1196ec0e15dSPaolo Bonzini########################################### 1206ec0e15dSPaolo Bonzini 1216ec0e15dSPaolo Bonziniif targetos != 'linux' and get_option('mpath').enabled() 1226ec0e15dSPaolo Bonzini error('Multipath is supported only on Linux') 1236ec0e15dSPaolo Bonziniendif 1246ec0e15dSPaolo Bonzini 125a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 126a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 1274a96337dSPaolo Bonziniwinmm = [] 128a81df1b6SPaolo Bonzinisocket = [] 12904c6f1e7SMarc-André Lureauversion_res = [] 130d92989aaSMarc-André Lureaucoref = [] 131d92989aaSMarc-André Lureauiokit = [] 132b6c7cfd4SPaolo Bonziniemulator_link_args = [] 133b4e312e9SPaolo Bonzinicocoa = not_found 1348a19980eSPaolo Bonzinihvf = not_found 135a81df1b6SPaolo Bonziniif targetos == 'windows' 136a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 1374a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 13804c6f1e7SMarc-André Lureau 13904c6f1e7SMarc-André Lureau win = import('windows') 14004c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 14104c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 14204c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 143d92989aaSMarc-André Lureauelif targetos == 'darwin' 144d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 145d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 146b4e312e9SPaolo Bonzini cocoa = dependency('appleframeworks', modules: 'Cocoa', required: get_option('cocoa')) 147cfad62f1SPaolo Bonzinielif targetos == 'sunos' 148cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 149cfad62f1SPaolo Bonzini cc.find_library('nsl'), 150cfad62f1SPaolo Bonzini cc.find_library('resolv')] 151cfad62f1SPaolo Bonzinielif targetos == 'haiku' 152cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 153cfad62f1SPaolo Bonzini cc.find_library('network'), 154cfad62f1SPaolo Bonzini cc.find_library('bsd')] 155b6c7cfd4SPaolo Bonzinielif targetos == 'openbsd' 156b6c7cfd4SPaolo Bonzini if not get_option('tcg').disabled() and target_dirs.length() > 0 157b6c7cfd4SPaolo Bonzini # Disable OpenBSD W^X if available 158b6c7cfd4SPaolo Bonzini emulator_link_args = cc.get_supported_link_arguments('-Wl,-z,wxneeded') 159b6c7cfd4SPaolo Bonzini endif 160a81df1b6SPaolo Bonziniendif 1616ec0e15dSPaolo Bonzini 1628a19980eSPaolo Bonziniaccelerators = [] 1638a19980eSPaolo Bonziniif not get_option('kvm').disabled() and targetos == 'linux' 1648a19980eSPaolo Bonzini accelerators += 'CONFIG_KVM' 1658a19980eSPaolo Bonziniendif 1668a19980eSPaolo Bonziniif not get_option('xen').disabled() and 'CONFIG_XEN_BACKEND' in config_host 1678a19980eSPaolo Bonzini accelerators += 'CONFIG_XEN' 1688a19980eSPaolo Bonzini have_xen_pci_passthrough = not get_option('xen_pci_passthrough').disabled() and targetos == 'linux' 1698a19980eSPaolo Bonzinielse 1708a19980eSPaolo Bonzini have_xen_pci_passthrough = false 1718a19980eSPaolo Bonziniendif 1728a19980eSPaolo Bonziniif not get_option('whpx').disabled() and targetos == 'windows' 1738a19980eSPaolo Bonzini if get_option('whpx').enabled() and cpu != 'x86_64' 1748a19980eSPaolo Bonzini error('WHPX requires 64-bit host') 1758a19980eSPaolo Bonzini elif cc.has_header('WinHvPlatform.h', required: get_option('whpx')) and \ 1768a19980eSPaolo Bonzini cc.has_header('WinHvEmulation.h', required: get_option('whpx')) 1778a19980eSPaolo Bonzini accelerators += 'CONFIG_WHPX' 1788a19980eSPaolo Bonzini endif 1798a19980eSPaolo Bonziniendif 1808a19980eSPaolo Bonziniif not get_option('hvf').disabled() 1818a19980eSPaolo Bonzini hvf = dependency('appleframeworks', modules: 'Hypervisor', 1828a19980eSPaolo Bonzini required: get_option('hvf')) 1838a19980eSPaolo Bonzini if hvf.found() 1848a19980eSPaolo Bonzini accelerators += 'CONFIG_HVF' 1858a19980eSPaolo Bonzini endif 1868a19980eSPaolo Bonziniendif 1878a19980eSPaolo Bonziniif not get_option('hax').disabled() 1888a19980eSPaolo Bonzini if get_option('hax').enabled() or targetos in ['windows', 'darwin', 'netbsd'] 1898a19980eSPaolo Bonzini accelerators += 'CONFIG_HAX' 1908a19980eSPaolo Bonzini endif 1918a19980eSPaolo Bonziniendif 1928a19980eSPaolo Bonziniif not get_option('tcg').disabled() 1938a19980eSPaolo Bonzini if cpu not in supported_cpus 1948a19980eSPaolo Bonzini if 'CONFIG_TCG_INTERPRETER' in config_host 1958a19980eSPaolo Bonzini warning('Unsupported CPU @0@, will use TCG with TCI (experimental)'.format(cpu)) 1968a19980eSPaolo Bonzini else 1978a19980eSPaolo Bonzini error('Unsupported CPU @0@, try --enable-tcg-interpreter'.format(cpu)) 1988a19980eSPaolo Bonzini endif 1998a19980eSPaolo Bonzini endif 2008a19980eSPaolo Bonzini accelerators += 'CONFIG_TCG' 2018a19980eSPaolo Bonzini config_host += { 'CONFIG_TCG': 'y' } 2028a19980eSPaolo Bonziniendif 2038a19980eSPaolo Bonzini 2048a19980eSPaolo Bonziniif 'CONFIG_KVM' not in accelerators and get_option('kvm').enabled() 2058a19980eSPaolo Bonzini error('KVM not available on this platform') 2068a19980eSPaolo Bonziniendif 2078a19980eSPaolo Bonziniif 'CONFIG_HVF' not in accelerators and get_option('hvf').enabled() 2088a19980eSPaolo Bonzini error('HVF not available on this platform') 2098a19980eSPaolo Bonziniendif 2108a19980eSPaolo Bonziniif 'CONFIG_WHPX' not in accelerators and get_option('whpx').enabled() 2118a19980eSPaolo Bonzini error('WHPX not available on this platform') 2128a19980eSPaolo Bonziniendif 2138a19980eSPaolo Bonziniif not have_xen_pci_passthrough and get_option('xen_pci_passthrough').enabled() 2148a19980eSPaolo Bonzini if 'CONFIG_XEN' in accelerators 2158a19980eSPaolo Bonzini error('Xen PCI passthrough not available on this platform') 2168a19980eSPaolo Bonzini else 2178a19980eSPaolo Bonzini error('Xen PCI passthrough requested but Xen not enabled') 2188a19980eSPaolo Bonzini endif 2198a19980eSPaolo Bonziniendif 220b4e312e9SPaolo Bonziniif not cocoa.found() and get_option('cocoa').enabled() 221b4e312e9SPaolo Bonzini error('Cocoa not available on this platform') 222b4e312e9SPaolo Bonziniendif 223b4e312e9SPaolo Bonzini 2246ec0e15dSPaolo Bonzini################ 2256ec0e15dSPaolo Bonzini# Dependencies # 2266ec0e15dSPaolo Bonzini################ 2276ec0e15dSPaolo Bonzini 228215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands. This was 229215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles. 230215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(), 231215b0c2fSPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 232215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split()) 233a81df1b6SPaolo Bonzinigio = not_found 234a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 235a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 236a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 237a81df1b6SPaolo Bonziniendif 238a81df1b6SPaolo Bonzinilttng = not_found 239a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 240a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 241a81df1b6SPaolo Bonziniendif 242a81df1b6SPaolo Bonziniurcubp = not_found 243a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 244a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 245a81df1b6SPaolo Bonziniendif 24646859d93SDaniel P. Berrangégcrypt = not_found 24746859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host 24846859d93SDaniel P. Berrangé gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), 24946859d93SDaniel P. Berrangé link_args: config_host['GCRYPT_LIBS'].split()) 25046859d93SDaniel P. Berrangéendif 251a81df1b6SPaolo Bonzininettle = not_found 252a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 253a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 254a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 255a81df1b6SPaolo Bonziniendif 256a81df1b6SPaolo Bonzinignutls = not_found 257a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 258a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 259a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 260a81df1b6SPaolo Bonziniendif 261b7612f45SPaolo Bonzinipixman = not_found 262b7612f45SPaolo Bonziniif have_system or have_tools 263b7612f45SPaolo Bonzini pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', 2641a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 265b7612f45SPaolo Bonziniendif 2665e7fbd25SMarc-André Lureaupam = not_found 2675e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 2685e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 2695e7fbd25SMarc-André Lureauendif 2705e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 2711ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static) 2725e5733e5SMarc-André Lureaulinux_io_uring = not_found 2735e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 2745e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 2755e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 2765e5733e5SMarc-André Lureauendif 2775e5733e5SMarc-André Lureaulibxml2 = not_found 2785e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 2795e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 2805e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 2815e5733e5SMarc-André Lureauendif 2825e5733e5SMarc-André Lureaulibnfs = not_found 2835e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 2845e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 2855e5733e5SMarc-André Lureauendif 286ec0d5893SMarc-André Lureaulibattr = not_found 287ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 288ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 289ec0d5893SMarc-André Lureauendif 2903f99cf57SPaolo Bonziniseccomp = not_found 2913f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 2923f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 2933f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 2943f99cf57SPaolo Bonziniendif 2953f99cf57SPaolo Bonzinilibcap_ng = not_found 2963f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 2973f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 2983f99cf57SPaolo Bonziniendif 2991917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools 3001917ec6dSPaolo Bonzini xkbcommon = not_found 3011917ec6dSPaolo Bonzinielse 3021917ec6dSPaolo Bonzini xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), 3031a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 304ade60d4fSMarc-André Lureauendif 305cdaf0722SMarc-André Lureauvde = not_found 306cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE') 307cdaf0722SMarc-André Lureau vde = declare_dependency(link_args: config_host['VDE_LIBS'].split()) 308cdaf0722SMarc-André Lureauendif 309478e943fSPaolo Bonzinipulse = not_found 310478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 311478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 312478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 313478e943fSPaolo Bonziniendif 314478e943fSPaolo Bonzinialsa = not_found 315478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 316478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 317478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 318478e943fSPaolo Bonziniendif 319478e943fSPaolo Bonzinijack = not_found 320478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 321478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 322478e943fSPaolo Bonziniendif 3232634733cSPaolo Bonzinispice = not_found 3242634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 3252634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 3262634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 3272634733cSPaolo Bonziniendif 3285ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 329ccf7afa5SPaolo Bonzinilibdl = not_found 330ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 331ccf7afa5SPaolo Bonzini libdl = cc.find_library('dl', required: true) 332ccf7afa5SPaolo Bonziniendif 33399650b62SPaolo Bonzinilibiscsi = not_found 33499650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 33599650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 33699650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 33799650b62SPaolo Bonziniendif 3385e5733e5SMarc-André Lureauzstd = not_found 3395e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 3405e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 3415e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 3425e5733e5SMarc-André Lureauendif 343ea458960SMarc-André Lureaugbm = not_found 344ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 345ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 346ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 347ea458960SMarc-André Lureauendif 348ea458960SMarc-André Lureauvirgl = not_found 349ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 350ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 351ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 352ea458960SMarc-André Lureauendif 3531d7bb6abSMarc-André Lureaucurl = not_found 3541d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 3551d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 3561d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 3571d7bb6abSMarc-André Lureauendif 358f15bff25SPaolo Bonzinilibudev = not_found 359f01496a3SPaolo Bonziniif targetos == 'linux' and (have_system or have_tools) 3606ec0e15dSPaolo Bonzini libudev = dependency('libudev', 3616ec0e15dSPaolo Bonzini required: get_option('mpath').enabled(), 3626ec0e15dSPaolo Bonzini static: enable_static) 363f15bff25SPaolo Bonziniendif 3646ec0e15dSPaolo Bonzini 3656ec0e15dSPaolo Bonzinimpathpersist = not_found 3666ec0e15dSPaolo Bonzinimpathpersist_new_api = false 3676ec0e15dSPaolo Bonziniif targetos == 'linux' and have_tools and not get_option('mpath').disabled() 3686ec0e15dSPaolo Bonzini mpath_test_source_new = ''' 3696ec0e15dSPaolo Bonzini #include <libudev.h> 3706ec0e15dSPaolo Bonzini #include <mpath_persist.h> 3716ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 3726ec0e15dSPaolo Bonzini int logsink; 3736ec0e15dSPaolo Bonzini static struct config *multipath_conf; 3746ec0e15dSPaolo Bonzini extern struct udev *udev; 3756ec0e15dSPaolo Bonzini extern struct config *get_multipath_config(void); 3766ec0e15dSPaolo Bonzini extern void put_multipath_config(struct config *conf); 3776ec0e15dSPaolo Bonzini struct udev *udev; 3786ec0e15dSPaolo Bonzini struct config *get_multipath_config(void) { return multipath_conf; } 3796ec0e15dSPaolo Bonzini void put_multipath_config(struct config *conf) { } 3806ec0e15dSPaolo Bonzini int main(void) { 3816ec0e15dSPaolo Bonzini udev = udev_new(); 3826ec0e15dSPaolo Bonzini multipath_conf = mpath_lib_init(); 3836ec0e15dSPaolo Bonzini return 0; 3846ec0e15dSPaolo Bonzini }''' 3856ec0e15dSPaolo Bonzini mpath_test_source_old = ''' 3866ec0e15dSPaolo Bonzini #include <libudev.h> 3876ec0e15dSPaolo Bonzini #include <mpath_persist.h> 3886ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 3896ec0e15dSPaolo Bonzini int logsink; 3906ec0e15dSPaolo Bonzini int main(void) { 3916ec0e15dSPaolo Bonzini struct udev *udev = udev_new(); 3926ec0e15dSPaolo Bonzini mpath_lib_init(udev); 3936ec0e15dSPaolo Bonzini return 0; 3946ec0e15dSPaolo Bonzini }''' 39543b43a40SPaolo Bonzini mpathlibs = [libudev] 39643b43a40SPaolo Bonzini if enable_static 39743b43a40SPaolo Bonzini mpathlibs += cc.find_library('devmapper', 3986ec0e15dSPaolo Bonzini required: get_option('mpath'), 3996ec0e15dSPaolo Bonzini static: enable_static) 40043b43a40SPaolo Bonzini endif 40143b43a40SPaolo Bonzini mpathlibs += cc.find_library('multipath', 4026ec0e15dSPaolo Bonzini required: get_option('mpath'), 4036ec0e15dSPaolo Bonzini static: enable_static) 40443b43a40SPaolo Bonzini mpathlibs += cc.find_library('mpathpersist', 40543b43a40SPaolo Bonzini required: get_option('mpath'), 40643b43a40SPaolo Bonzini static: enable_static) 40743b43a40SPaolo Bonzini foreach lib: mpathlibs 40843b43a40SPaolo Bonzini if not lib.found() 40943b43a40SPaolo Bonzini mpathlibs = [] 41043b43a40SPaolo Bonzini break 41143b43a40SPaolo Bonzini endif 41243b43a40SPaolo Bonzini endforeach 41343b43a40SPaolo Bonzini if mpathlibs.length() > 0 4146ec0e15dSPaolo Bonzini if cc.links(mpath_test_source_new, dependencies: mpathlibs) 4156ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 4166ec0e15dSPaolo Bonzini mpathpersist_new_api = true 4176ec0e15dSPaolo Bonzini elif cc.links(mpath_test_source_old, dependencies: mpathlibs) 4186ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 4196ec0e15dSPaolo Bonzini else 4206ec0e15dSPaolo Bonzini if get_option('mpath').enabled() 4216ec0e15dSPaolo Bonzini error('Cannot detect libmpathpersist API') 4226ec0e15dSPaolo Bonzini else 4236ec0e15dSPaolo Bonzini warning('Cannot detect libmpathpersist API, disabling') 4246ec0e15dSPaolo Bonzini endif 4256ec0e15dSPaolo Bonzini endif 4266ec0e15dSPaolo Bonzini endif 4276ec0e15dSPaolo Bonziniendif 4286ec0e15dSPaolo Bonzini 4292634733cSPaolo Bonzinibrlapi = not_found 4302634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 4312634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 4322634733cSPaolo Bonziniendif 43335be72baSPaolo Bonzini 434760e4327SPaolo Bonzinisdl = not_found 435760e4327SPaolo Bonziniif have_system 436363743daSYonggang Luo sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) 43735be72baSPaolo Bonzini sdl_image = not_found 438760e4327SPaolo Bonziniendif 43935be72baSPaolo Bonziniif sdl.found() 44035be72baSPaolo Bonzini # work around 2.0.8 bug 44135be72baSPaolo Bonzini sdl = declare_dependency(compile_args: '-Wno-undef', 44235be72baSPaolo Bonzini dependencies: sdl) 4437161a433SVolker Rümelin sdl_image = dependency('SDL2_image', required: get_option('sdl_image'), 4441a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 44535be72baSPaolo Bonzinielse 44635be72baSPaolo Bonzini if get_option('sdl_image').enabled() 447a8dc2aceSSergei Trofimovich error('sdl-image required, but SDL was @0@'.format( 448a8dc2aceSSergei Trofimovich get_option('sdl').disabled() ? 'disabled' : 'not found')) 4492634733cSPaolo Bonzini endif 45035be72baSPaolo Bonzini sdl_image = not_found 45135be72baSPaolo Bonziniendif 45235be72baSPaolo Bonzini 4535e5733e5SMarc-André Lureaurbd = not_found 4545e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 4555e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 4565e5733e5SMarc-André Lureauendif 4575e5733e5SMarc-André Lureauglusterfs = not_found 4585e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 4595e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 4605e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 4615e5733e5SMarc-André Lureauendif 4625e5733e5SMarc-André Lureaulibssh = not_found 4635e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 4645e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 4655e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 4665e5733e5SMarc-André Lureauendif 4675e5733e5SMarc-André Lureaulibbzip2 = not_found 4685e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 4695e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 4705e5733e5SMarc-André Lureauendif 4715e5733e5SMarc-André Lureauliblzfse = not_found 4725e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 4735e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 4745e5733e5SMarc-André Lureauendif 475478e943fSPaolo Bonzinioss = not_found 476478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 477478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 478478e943fSPaolo Bonziniendif 479478e943fSPaolo Bonzinidsound = not_found 480478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 481478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 482478e943fSPaolo Bonziniendif 483478e943fSPaolo Bonzinicoreaudio = not_found 484478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 485478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 486478e943fSPaolo Bonziniendif 4872b1ccdf4SMarc-André Lureauopengl = not_found 4882b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 489de2d3005SPaolo Bonzini opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(), 490de2d3005SPaolo Bonzini link_args: config_host['OPENGL_LIBS'].split()) 4912b1ccdf4SMarc-André Lureauendif 4922b1ccdf4SMarc-André Lureaugtk = not_found 4932b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host 4942b1ccdf4SMarc-André Lureau gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(), 4952b1ccdf4SMarc-André Lureau link_args: config_host['GTK_LIBS'].split()) 4962b1ccdf4SMarc-André Lureauendif 4972b1ccdf4SMarc-André Lureauvte = not_found 4982b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 4992b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 5002b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 5012b1ccdf4SMarc-André Lureauendif 5022b1ccdf4SMarc-André Lureaux11 = not_found 5032b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host 5042b1ccdf4SMarc-André Lureau x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(), 5052b1ccdf4SMarc-André Lureau link_args: config_host['X11_LIBS'].split()) 5062b1ccdf4SMarc-André Lureauendif 5072b1ccdf4SMarc-André Lureaucurses = not_found 5082b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host 5092b1ccdf4SMarc-André Lureau curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(), 5102b1ccdf4SMarc-André Lureau link_args: config_host['CURSES_LIBS'].split()) 5112b1ccdf4SMarc-André Lureauendif 5122b1ccdf4SMarc-André Lureauiconv = not_found 5132b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host 5142b1ccdf4SMarc-André Lureau iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(), 5152b1ccdf4SMarc-André Lureau link_args: config_host['ICONV_LIBS'].split()) 5162b1ccdf4SMarc-André Lureauendif 517a0b93237SPaolo Bonzinivnc = not_found 5182b1ccdf4SMarc-André Lureaupng = not_found 5192b1ccdf4SMarc-André Lureaujpeg = not_found 5202b1ccdf4SMarc-André Lureausasl = not_found 521a0b93237SPaolo Bonziniif get_option('vnc').enabled() 522a0b93237SPaolo Bonzini vnc = declare_dependency() # dummy dependency 523a0b93237SPaolo Bonzini png = dependency('libpng', required: get_option('vnc_png'), 5241a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 525a0b93237SPaolo Bonzini jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'], 526a0b93237SPaolo Bonzini required: get_option('vnc_jpeg'), 527a0b93237SPaolo Bonzini static: enable_static) 528a0b93237SPaolo Bonzini sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'], 529a0b93237SPaolo Bonzini required: get_option('vnc_sasl'), 530a0b93237SPaolo Bonzini static: enable_static) 531a0b93237SPaolo Bonzini if sasl.found() 532a0b93237SPaolo Bonzini sasl = declare_dependency(dependencies: sasl, 533a0b93237SPaolo Bonzini compile_args: '-DSTRUCT_IOVEC_DEFINED') 534a0b93237SPaolo Bonzini endif 5352b1ccdf4SMarc-André Lureauendif 536708eab42SMarc-André Lureausnappy = not_found 537708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host 538708eab42SMarc-André Lureau snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split()) 539708eab42SMarc-André Lureauendif 540708eab42SMarc-André Lureaulzo = not_found 541708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host 542708eab42SMarc-André Lureau lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split()) 543708eab42SMarc-André Lureauendif 54455166230SMarc-André Lureaurdma = not_found 54555166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host 54655166230SMarc-André Lureau rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split()) 54755166230SMarc-André Lureauendif 548ab318051SMarc-André Lureaunuma = not_found 549ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host 550ab318051SMarc-André Lureau numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split()) 551ab318051SMarc-André Lureauendif 552582ea95fSMarc-André Lureauxen = not_found 553582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host 554582ea95fSMarc-André Lureau xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(), 555582ea95fSMarc-André Lureau link_args: config_host['XEN_LIBS'].split()) 556582ea95fSMarc-André Lureauendif 55706677ce1SPaolo Bonzinicacard = not_found 55806677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host 55906677ce1SPaolo Bonzini cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(), 56006677ce1SPaolo Bonzini link_args: config_host['SMARTCARD_LIBS'].split()) 56106677ce1SPaolo Bonziniendif 5620a40bcb7SCésar Belleyu2f = not_found 5630a40bcb7SCésar Belleyif have_system 5640a40bcb7SCésar Belley u2f = dependency('u2f-emu', required: get_option('u2f'), 5650a40bcb7SCésar Belley method: 'pkg-config', 5660a40bcb7SCésar Belley static: enable_static) 5670a40bcb7SCésar Belleyendif 56806677ce1SPaolo Bonziniusbredir = not_found 56906677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host 57006677ce1SPaolo Bonzini usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(), 57106677ce1SPaolo Bonzini link_args: config_host['USB_REDIR_LIBS'].split()) 57206677ce1SPaolo Bonziniendif 57306677ce1SPaolo Bonzinilibusb = not_found 57406677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host 57506677ce1SPaolo Bonzini libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(), 57606677ce1SPaolo Bonzini link_args: config_host['LIBUSB_LIBS'].split()) 57706677ce1SPaolo Bonziniendif 578c9322ab5SMarc-André Lureaulibpmem = not_found 579c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host 580c9322ab5SMarc-André Lureau libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), 581c9322ab5SMarc-André Lureau link_args: config_host['LIBPMEM_LIBS'].split()) 582c9322ab5SMarc-André Lureauendif 583c7c91a74SBruce Rogerslibdaxctl = not_found 584c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host 585c7c91a74SBruce Rogers libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) 586c7c91a74SBruce Rogersendif 5878ce0a45fSMarc-André Lureautasn1 = not_found 5888ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host 5898ce0a45fSMarc-André Lureau tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), 5908ce0a45fSMarc-André Lureau link_args: config_host['TASN1_LIBS'].split()) 5918ce0a45fSMarc-André Lureauendif 592af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false, 593af04e89dSMarc-André Lureau method: 'pkg-config', static: enable_static) 594a81df1b6SPaolo Bonzini 5953909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid') 5963909def8SMarc-André Lureau 597aa087962SPaolo Bonzini# Malloc tests 598aa087962SPaolo Bonzini 599aa087962SPaolo Bonzinimalloc = [] 600aa087962SPaolo Bonziniif get_option('malloc') == 'system' 601aa087962SPaolo Bonzini has_malloc_trim = \ 602aa087962SPaolo Bonzini not get_option('malloc_trim').disabled() and \ 603aa087962SPaolo Bonzini cc.links('''#include <malloc.h> 604aa087962SPaolo Bonzini int main(void) { malloc_trim(0); return 0; }''') 605aa087962SPaolo Bonzinielse 606aa087962SPaolo Bonzini has_malloc_trim = false 607aa087962SPaolo Bonzini malloc = cc.find_library(get_option('malloc'), required: true) 608aa087962SPaolo Bonziniendif 609aa087962SPaolo Bonziniif not has_malloc_trim and get_option('malloc_trim').enabled() 610aa087962SPaolo Bonzini if get_option('malloc') == 'system' 611aa087962SPaolo Bonzini error('malloc_trim not available on this platform.') 612aa087962SPaolo Bonzini else 613aa087962SPaolo Bonzini error('malloc_trim not available with non-libc memory allocator') 614aa087962SPaolo Bonzini endif 615aa087962SPaolo Bonziniendif 616aa087962SPaolo Bonzini 617*a0c9162cSPaolo Bonzini################# 618*a0c9162cSPaolo Bonzini# config-host.h # 619*a0c9162cSPaolo Bonzini################# 620859aef02SPaolo Bonzini 621b4e312e9SPaolo Bonziniconfig_host_data.set('CONFIG_COCOA', cocoa.found()) 622f01496a3SPaolo Bonziniconfig_host_data.set('CONFIG_LIBUDEV', libudev.found()) 6236ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH', mpathpersist.found()) 6246ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api) 62535be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found()) 62635be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) 627a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found()) 628a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) 629a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found()) 630a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found()) 6314113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) 632af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found()) 6333909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid) 634aa087962SPaolo Bonziniconfig_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim) 635859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version())) 636859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]) 637859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1]) 638859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]) 639859aef02SPaolo Bonzini 640765686d6SPaolo Bonziniignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target 641859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST'] 642f4f5ed2cSPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'bindir', 'prefix', 'qemu_confdir', 'qemu_datadir', 643859aef02SPaolo Bonzini 'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir', 644f4f5ed2cSPaolo Bonzini 'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath', 'sysconfdir'] 645859aef02SPaolo Bonziniforeach k, v: config_host 646765686d6SPaolo Bonzini if ignored.contains(k) 647765686d6SPaolo Bonzini # do nothing 648765686d6SPaolo Bonzini elif arrays.contains(k) 649859aef02SPaolo Bonzini if v != '' 650859aef02SPaolo Bonzini v = '"' + '", "'.join(v.split()) + '", ' 651859aef02SPaolo Bonzini endif 652859aef02SPaolo Bonzini config_host_data.set(k, v) 653859aef02SPaolo Bonzini elif k == 'ARCH' 654859aef02SPaolo Bonzini config_host_data.set('HOST_' + v.to_upper(), 1) 655859aef02SPaolo Bonzini elif strings.contains(k) 656859aef02SPaolo Bonzini if not k.startswith('CONFIG_') 657859aef02SPaolo Bonzini k = 'CONFIG_' + k.to_upper() 658859aef02SPaolo Bonzini endif 659859aef02SPaolo Bonzini config_host_data.set_quoted(k, v) 660859aef02SPaolo Bonzini elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_') 661859aef02SPaolo Bonzini config_host_data.set(k, v == 'y' ? 1 : v) 662859aef02SPaolo Bonzini endif 663859aef02SPaolo Bonziniendforeach 664859aef02SPaolo Bonzini 665*a0c9162cSPaolo Bonzini######################## 666*a0c9162cSPaolo Bonzini# Target configuration # 667*a0c9162cSPaolo Bonzini######################## 668*a0c9162cSPaolo Bonzini 6692becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 67005512f55SPaolo Bonziniconfig_all = {} 671a98006bcSPaolo Bonziniconfig_all_devices = {} 672ca0fc784SPaolo Bonziniconfig_all_disas = {} 6732becc36aSPaolo Bonziniconfig_devices_mak_list = [] 6742becc36aSPaolo Bonziniconfig_devices_h = {} 675859aef02SPaolo Bonziniconfig_target_h = {} 6762becc36aSPaolo Bonziniconfig_target_mak = {} 677ca0fc784SPaolo Bonzini 678ca0fc784SPaolo Bonzinidisassemblers = { 679ca0fc784SPaolo Bonzini 'alpha' : ['CONFIG_ALPHA_DIS'], 680ca0fc784SPaolo Bonzini 'arm' : ['CONFIG_ARM_DIS'], 681ca0fc784SPaolo Bonzini 'avr' : ['CONFIG_AVR_DIS'], 682ca0fc784SPaolo Bonzini 'cris' : ['CONFIG_CRIS_DIS'], 683ca0fc784SPaolo Bonzini 'hppa' : ['CONFIG_HPPA_DIS'], 684ca0fc784SPaolo Bonzini 'i386' : ['CONFIG_I386_DIS'], 685ca0fc784SPaolo Bonzini 'x86_64' : ['CONFIG_I386_DIS'], 686ca0fc784SPaolo Bonzini 'x32' : ['CONFIG_I386_DIS'], 687ca0fc784SPaolo Bonzini 'lm32' : ['CONFIG_LM32_DIS'], 688ca0fc784SPaolo Bonzini 'm68k' : ['CONFIG_M68K_DIS'], 689ca0fc784SPaolo Bonzini 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], 690ca0fc784SPaolo Bonzini 'mips' : ['CONFIG_MIPS_DIS'], 691ca0fc784SPaolo Bonzini 'moxie' : ['CONFIG_MOXIE_DIS'], 692ca0fc784SPaolo Bonzini 'nios2' : ['CONFIG_NIOS2_DIS'], 693ca0fc784SPaolo Bonzini 'or1k' : ['CONFIG_OPENRISC_DIS'], 694ca0fc784SPaolo Bonzini 'ppc' : ['CONFIG_PPC_DIS'], 695ca0fc784SPaolo Bonzini 'riscv' : ['CONFIG_RISCV_DIS'], 696ca0fc784SPaolo Bonzini 'rx' : ['CONFIG_RX_DIS'], 697ca0fc784SPaolo Bonzini 's390' : ['CONFIG_S390_DIS'], 698ca0fc784SPaolo Bonzini 'sh4' : ['CONFIG_SH4_DIS'], 699ca0fc784SPaolo Bonzini 'sparc' : ['CONFIG_SPARC_DIS'], 700ca0fc784SPaolo Bonzini 'xtensa' : ['CONFIG_XTENSA_DIS'], 701ca0fc784SPaolo Bonzini} 702ca0fc784SPaolo Bonziniif link_language == 'cpp' 703ca0fc784SPaolo Bonzini disassemblers += { 704ca0fc784SPaolo Bonzini 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], 705ca0fc784SPaolo Bonzini 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], 706ca0fc784SPaolo Bonzini 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], 707ca0fc784SPaolo Bonzini } 708ca0fc784SPaolo Bonziniendif 709ca0fc784SPaolo Bonzini 7102becc36aSPaolo Bonzinikconfig_external_symbols = [ 7112becc36aSPaolo Bonzini 'CONFIG_KVM', 7122becc36aSPaolo Bonzini 'CONFIG_XEN', 7132becc36aSPaolo Bonzini 'CONFIG_TPM', 7142becc36aSPaolo Bonzini 'CONFIG_SPICE', 7152becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 7162becc36aSPaolo Bonzini 'CONFIG_OPENGL', 7172becc36aSPaolo Bonzini 'CONFIG_X11', 7182becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 71940bc0ca9SLaurent Vivier 'CONFIG_VHOST_VDPA', 7202becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 7212becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 7222becc36aSPaolo Bonzini 'CONFIG_LINUX', 7232becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 7242becc36aSPaolo Bonzini] 725a9a74907SPaolo Bonziniignored = [ 'TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_ARCH' ] 726ca0fc784SPaolo Bonzini 727fdb75aefSPaolo Bonzinidefault_targets = 'CONFIG_DEFAULT_TARGETS' in config_host 728fdb75aefSPaolo Bonziniactual_target_dirs = [] 729fbb4121dSPaolo Bonzinifdt_required = [] 730a81df1b6SPaolo Bonziniforeach target : target_dirs 731765686d6SPaolo Bonzini config_target = { 'TARGET_NAME': target.split('-')[0] } 732765686d6SPaolo Bonzini if target.endswith('linux-user') 733fdb75aefSPaolo Bonzini if targetos != 'linux' 734fdb75aefSPaolo Bonzini if default_targets 735fdb75aefSPaolo Bonzini continue 736fdb75aefSPaolo Bonzini endif 737fdb75aefSPaolo Bonzini error('Target @0@ is only available on a Linux host'.format(target)) 738fdb75aefSPaolo Bonzini endif 739765686d6SPaolo Bonzini config_target += { 'CONFIG_LINUX_USER': 'y' } 740765686d6SPaolo Bonzini elif target.endswith('bsd-user') 741fdb75aefSPaolo Bonzini if 'CONFIG_BSD' not in config_host 742fdb75aefSPaolo Bonzini if default_targets 743fdb75aefSPaolo Bonzini continue 744fdb75aefSPaolo Bonzini endif 745fdb75aefSPaolo Bonzini error('Target @0@ is only available on a BSD host'.format(target)) 746fdb75aefSPaolo Bonzini endif 747765686d6SPaolo Bonzini config_target += { 'CONFIG_BSD_USER': 'y' } 748765686d6SPaolo Bonzini elif target.endswith('softmmu') 749765686d6SPaolo Bonzini config_target += { 'CONFIG_SOFTMMU': 'y' } 750765686d6SPaolo Bonzini endif 751765686d6SPaolo Bonzini if target.endswith('-user') 752765686d6SPaolo Bonzini config_target += { 753765686d6SPaolo Bonzini 'CONFIG_USER_ONLY': 'y', 754765686d6SPaolo Bonzini 'CONFIG_QEMU_INTERP_PREFIX': 755765686d6SPaolo Bonzini config_host['CONFIG_QEMU_INTERP_PREFIX'].format(config_target['TARGET_NAME']) 756765686d6SPaolo Bonzini } 757765686d6SPaolo Bonzini endif 758859aef02SPaolo Bonzini 7598a19980eSPaolo Bonzini have_accel = false 7608a19980eSPaolo Bonzini foreach sym: accelerators 7618a19980eSPaolo Bonzini if sym == 'CONFIG_TCG' or target in accelerator_targets.get(sym, []) 7628a19980eSPaolo Bonzini config_target += { sym: 'y' } 7638a19980eSPaolo Bonzini config_all += { sym: 'y' } 7648a19980eSPaolo Bonzini if sym == 'CONFIG_XEN' and have_xen_pci_passthrough 7658a19980eSPaolo Bonzini config_target += { 'CONFIG_XEN_PCI_PASSTHROUGH': 'y' } 7668a19980eSPaolo Bonzini endif 7678a19980eSPaolo Bonzini have_accel = true 7688a19980eSPaolo Bonzini endif 7698a19980eSPaolo Bonzini endforeach 770fdb75aefSPaolo Bonzini if not have_accel 771fdb75aefSPaolo Bonzini if default_targets 772fdb75aefSPaolo Bonzini continue 773fdb75aefSPaolo Bonzini endif 774fdb75aefSPaolo Bonzini error('No accelerator available for target @0@'.format(target)) 775fdb75aefSPaolo Bonzini endif 7768a19980eSPaolo Bonzini 777fdb75aefSPaolo Bonzini actual_target_dirs += target 778765686d6SPaolo Bonzini config_target += keyval.load('default-configs/targets' / target + '.mak') 779a9a74907SPaolo Bonzini config_target += { 'TARGET_' + config_target['TARGET_ARCH'].to_upper(): 'y' } 780765686d6SPaolo Bonzini 781fbb4121dSPaolo Bonzini if 'TARGET_NEED_FDT' in config_target 782fbb4121dSPaolo Bonzini fdt_required += target 783fbb4121dSPaolo Bonzini endif 784fbb4121dSPaolo Bonzini 785fa73168bSPaolo Bonzini # Add default keys 786fa73168bSPaolo Bonzini if 'TARGET_BASE_ARCH' not in config_target 787fa73168bSPaolo Bonzini config_target += {'TARGET_BASE_ARCH': config_target['TARGET_ARCH']} 788fa73168bSPaolo Bonzini endif 789fa73168bSPaolo Bonzini if 'TARGET_ABI_DIR' not in config_target 790fa73168bSPaolo Bonzini config_target += {'TARGET_ABI_DIR': config_target['TARGET_ARCH']} 791fa73168bSPaolo Bonzini endif 792859aef02SPaolo Bonzini 793ca0fc784SPaolo Bonzini foreach k, v: disassemblers 794ca0fc784SPaolo Bonzini if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) 795ca0fc784SPaolo Bonzini foreach sym: v 796ca0fc784SPaolo Bonzini config_target += { sym: 'y' } 797ca0fc784SPaolo Bonzini config_all_disas += { sym: 'y' } 798ca0fc784SPaolo Bonzini endforeach 799ca0fc784SPaolo Bonzini endif 800ca0fc784SPaolo Bonzini endforeach 801ca0fc784SPaolo Bonzini 802859aef02SPaolo Bonzini config_target_data = configuration_data() 803859aef02SPaolo Bonzini foreach k, v: config_target 804859aef02SPaolo Bonzini if not k.startswith('TARGET_') and not k.startswith('CONFIG_') 805859aef02SPaolo Bonzini # do nothing 806859aef02SPaolo Bonzini elif ignored.contains(k) 807859aef02SPaolo Bonzini # do nothing 808859aef02SPaolo Bonzini elif k == 'TARGET_BASE_ARCH' 809a9a74907SPaolo Bonzini # Note that TARGET_BASE_ARCH ends up in config-target.h but it is 810a9a74907SPaolo Bonzini # not used to select files from sourcesets. 811859aef02SPaolo Bonzini config_target_data.set('TARGET_' + v.to_upper(), 1) 812765686d6SPaolo Bonzini elif k == 'TARGET_NAME' or k == 'CONFIG_QEMU_INTERP_PREFIX' 813859aef02SPaolo Bonzini config_target_data.set_quoted(k, v) 814859aef02SPaolo Bonzini elif v == 'y' 815859aef02SPaolo Bonzini config_target_data.set(k, 1) 816859aef02SPaolo Bonzini else 817859aef02SPaolo Bonzini config_target_data.set(k, v) 818859aef02SPaolo Bonzini endif 819859aef02SPaolo Bonzini endforeach 820859aef02SPaolo Bonzini config_target_h += {target: configure_file(output: target + '-config-target.h', 821859aef02SPaolo Bonzini configuration: config_target_data)} 8222becc36aSPaolo Bonzini 8232becc36aSPaolo Bonzini if target.endswith('-softmmu') 8242becc36aSPaolo Bonzini base_kconfig = [] 8252becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 826859aef02SPaolo Bonzini if sym in config_target or sym in config_host 8272becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 8282becc36aSPaolo Bonzini endif 8292becc36aSPaolo Bonzini endforeach 8302becc36aSPaolo Bonzini 8312becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 8322becc36aSPaolo Bonzini config_devices_mak = configure_file( 8331bb4cb1cSPaolo Bonzini input: ['default-configs/devices' / target + '.mak', 'Kconfig'], 8342becc36aSPaolo Bonzini output: config_devices_mak, 8352becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 8362becc36aSPaolo Bonzini capture: true, 8372becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 8382becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 8392becc36aSPaolo Bonzini base_kconfig]) 840859aef02SPaolo Bonzini 841859aef02SPaolo Bonzini config_devices_data = configuration_data() 842859aef02SPaolo Bonzini config_devices = keyval.load(config_devices_mak) 843859aef02SPaolo Bonzini foreach k, v: config_devices 844859aef02SPaolo Bonzini config_devices_data.set(k, 1) 845859aef02SPaolo Bonzini endforeach 8462becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 847859aef02SPaolo Bonzini config_devices_h += {target: configure_file(output: target + '-config-devices.h', 848859aef02SPaolo Bonzini configuration: config_devices_data)} 849859aef02SPaolo Bonzini config_target += config_devices 850a98006bcSPaolo Bonzini config_all_devices += config_devices 8512becc36aSPaolo Bonzini endif 8522becc36aSPaolo Bonzini config_target_mak += {target: config_target} 853a81df1b6SPaolo Bonziniendforeach 854fdb75aefSPaolo Bonzinitarget_dirs = actual_target_dirs 855a81df1b6SPaolo Bonzini 8562becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 8572becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 8582becc36aSPaolo Bonzini# static_library target. 8592becc36aSPaolo Bonzini# 8602becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 8612becc36aSPaolo Bonzini# build literally all source files, including devices only used by 8622becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 8632becc36aSPaolo Bonzini# pseudo symbol replaces it. 8642becc36aSPaolo Bonzini 86505512f55SPaolo Bonziniconfig_all += config_all_devices 8662becc36aSPaolo Bonziniconfig_all += config_host 8672becc36aSPaolo Bonziniconfig_all += config_all_disas 8682becc36aSPaolo Bonziniconfig_all += { 8692becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 8702becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 8712becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 8722becc36aSPaolo Bonzini 'CONFIG_ALL': true, 8732becc36aSPaolo Bonzini} 8742becc36aSPaolo Bonzini 875*a0c9162cSPaolo Bonzini############## 876*a0c9162cSPaolo Bonzini# Submodules # 877*a0c9162cSPaolo Bonzini############## 8788b18cdbfSRichard Henderson 8798b18cdbfSRichard Hendersoncapstone = not_found 8808b18cdbfSRichard Hendersoncapstone_opt = get_option('capstone') 8818b18cdbfSRichard Hendersonif capstone_opt in ['enabled', 'auto', 'system'] 8828b18cdbfSRichard Henderson have_internal = fs.exists(meson.current_source_dir() / 'capstone/Makefile') 883bcf36862SRichard Henderson capstone = dependency('capstone', version: '>=4.0', 884bcf36862SRichard Henderson static: enable_static, method: 'pkg-config', 8858b18cdbfSRichard Henderson required: capstone_opt == 'system' or 8868b18cdbfSRichard Henderson capstone_opt == 'enabled' and not have_internal) 8878b18cdbfSRichard Henderson if capstone.found() 8888b18cdbfSRichard Henderson capstone_opt = 'system' 8898b18cdbfSRichard Henderson elif have_internal 8908b18cdbfSRichard Henderson capstone_opt = 'internal' 8918b18cdbfSRichard Henderson else 8928b18cdbfSRichard Henderson capstone_opt = 'disabled' 8938b18cdbfSRichard Henderson endif 8948b18cdbfSRichard Hendersonendif 8958b18cdbfSRichard Hendersonif capstone_opt == 'internal' 8968b18cdbfSRichard Henderson capstone_data = configuration_data() 8978b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_USE_SYS_DYN_MEM', '1') 8988b18cdbfSRichard Henderson 8998b18cdbfSRichard Henderson capstone_files = files( 9008b18cdbfSRichard Henderson 'capstone/cs.c', 9018b18cdbfSRichard Henderson 'capstone/MCInst.c', 9028b18cdbfSRichard Henderson 'capstone/MCInstrDesc.c', 9038b18cdbfSRichard Henderson 'capstone/MCRegisterInfo.c', 9048b18cdbfSRichard Henderson 'capstone/SStream.c', 9058b18cdbfSRichard Henderson 'capstone/utils.c' 9068b18cdbfSRichard Henderson ) 9078b18cdbfSRichard Henderson 9088b18cdbfSRichard Henderson if 'CONFIG_ARM_DIS' in config_all_disas 9098b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_ARM', '1') 9108b18cdbfSRichard Henderson capstone_files += files( 9118b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMDisassembler.c', 9128b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMInstPrinter.c', 9138b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMMapping.c', 9148b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMModule.c' 9158b18cdbfSRichard Henderson ) 9168b18cdbfSRichard Henderson endif 9178b18cdbfSRichard Henderson 9188b18cdbfSRichard Henderson # FIXME: This config entry currently depends on a c++ compiler. 9198b18cdbfSRichard Henderson # Which is needed for building libvixl, but not for capstone. 9208b18cdbfSRichard Henderson if 'CONFIG_ARM_A64_DIS' in config_all_disas 9218b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_ARM64', '1') 9228b18cdbfSRichard Henderson capstone_files += files( 9238b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64BaseInfo.c', 9248b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64Disassembler.c', 9258b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64InstPrinter.c', 9268b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64Mapping.c', 9278b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64Module.c' 9288b18cdbfSRichard Henderson ) 9298b18cdbfSRichard Henderson endif 9308b18cdbfSRichard Henderson 9318b18cdbfSRichard Henderson if 'CONFIG_PPC_DIS' in config_all_disas 9328b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_POWERPC', '1') 9338b18cdbfSRichard Henderson capstone_files += files( 9348b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCDisassembler.c', 9358b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCInstPrinter.c', 9368b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCMapping.c', 9378b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCModule.c' 9388b18cdbfSRichard Henderson ) 9398b18cdbfSRichard Henderson endif 9408b18cdbfSRichard Henderson 9413d562845SRichard Henderson if 'CONFIG_S390_DIS' in config_all_disas 9423d562845SRichard Henderson capstone_data.set('CAPSTONE_HAS_SYSZ', '1') 9433d562845SRichard Henderson capstone_files += files( 9443d562845SRichard Henderson 'capstone/arch/SystemZ/SystemZDisassembler.c', 9453d562845SRichard Henderson 'capstone/arch/SystemZ/SystemZInstPrinter.c', 9463d562845SRichard Henderson 'capstone/arch/SystemZ/SystemZMapping.c', 9473d562845SRichard Henderson 'capstone/arch/SystemZ/SystemZModule.c', 9483d562845SRichard Henderson 'capstone/arch/SystemZ/SystemZMCTargetDesc.c' 9493d562845SRichard Henderson ) 9503d562845SRichard Henderson endif 9513d562845SRichard Henderson 9528b18cdbfSRichard Henderson if 'CONFIG_I386_DIS' in config_all_disas 9538b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_X86', 1) 9548b18cdbfSRichard Henderson capstone_files += files( 9558b18cdbfSRichard Henderson 'capstone/arch/X86/X86Disassembler.c', 9568b18cdbfSRichard Henderson 'capstone/arch/X86/X86DisassemblerDecoder.c', 9578b18cdbfSRichard Henderson 'capstone/arch/X86/X86ATTInstPrinter.c', 9588b18cdbfSRichard Henderson 'capstone/arch/X86/X86IntelInstPrinter.c', 959eef20e40SRichard Henderson 'capstone/arch/X86/X86InstPrinterCommon.c', 9608b18cdbfSRichard Henderson 'capstone/arch/X86/X86Mapping.c', 9618b18cdbfSRichard Henderson 'capstone/arch/X86/X86Module.c' 9628b18cdbfSRichard Henderson ) 9638b18cdbfSRichard Henderson endif 9648b18cdbfSRichard Henderson 9658b18cdbfSRichard Henderson configure_file(output: 'capstone-defs.h', configuration: capstone_data) 9668b18cdbfSRichard Henderson 9678b18cdbfSRichard Henderson capstone_cargs = [ 9688b18cdbfSRichard Henderson # FIXME: There does not seem to be a way to completely replace the c_args 9698b18cdbfSRichard Henderson # that come from add_project_arguments() -- we can only add to them. 9708b18cdbfSRichard Henderson # So: disable all warnings with a big hammer. 9718b18cdbfSRichard Henderson '-Wno-error', '-w', 9728b18cdbfSRichard Henderson 9738b18cdbfSRichard Henderson # Include all configuration defines via a header file, which will wind up 9748b18cdbfSRichard Henderson # as a dependency on the object file, and thus changes here will result 9758b18cdbfSRichard Henderson # in a rebuild. 9768b18cdbfSRichard Henderson '-include', 'capstone-defs.h' 9778b18cdbfSRichard Henderson ] 9788b18cdbfSRichard Henderson 9798b18cdbfSRichard Henderson libcapstone = static_library('capstone', 9808b18cdbfSRichard Henderson sources: capstone_files, 9818b18cdbfSRichard Henderson c_args: capstone_cargs, 9828b18cdbfSRichard Henderson include_directories: 'capstone/include') 9838b18cdbfSRichard Henderson capstone = declare_dependency(link_with: libcapstone, 984eef20e40SRichard Henderson include_directories: 'capstone/include/capstone') 9858b18cdbfSRichard Hendersonendif 9864d34a86bSPaolo Bonzini 9874d34a86bSPaolo Bonzinislirp = not_found 9884d34a86bSPaolo Bonzinislirp_opt = 'disabled' 9894d34a86bSPaolo Bonziniif have_system 9904d34a86bSPaolo Bonzini slirp_opt = get_option('slirp') 9914d34a86bSPaolo Bonzini if slirp_opt in ['enabled', 'auto', 'system'] 9924d34a86bSPaolo Bonzini have_internal = fs.exists(meson.current_source_dir() / 'slirp/meson.build') 9934d34a86bSPaolo Bonzini slirp = dependency('slirp', static: enable_static, 9944d34a86bSPaolo Bonzini method: 'pkg-config', 9954d34a86bSPaolo Bonzini required: slirp_opt == 'system' or 9964d34a86bSPaolo Bonzini slirp_opt == 'enabled' and not have_internal) 9974d34a86bSPaolo Bonzini if slirp.found() 9984d34a86bSPaolo Bonzini slirp_opt = 'system' 9994d34a86bSPaolo Bonzini elif have_internal 10004d34a86bSPaolo Bonzini slirp_opt = 'internal' 10014d34a86bSPaolo Bonzini else 10024d34a86bSPaolo Bonzini slirp_opt = 'disabled' 10034d34a86bSPaolo Bonzini endif 10044d34a86bSPaolo Bonzini endif 10054d34a86bSPaolo Bonzini if slirp_opt == 'internal' 10064d34a86bSPaolo Bonzini slirp_deps = [] 10074d34a86bSPaolo Bonzini if targetos == 'windows' 10084d34a86bSPaolo Bonzini slirp_deps = cc.find_library('iphlpapi') 10094d34a86bSPaolo Bonzini endif 10104d34a86bSPaolo Bonzini slirp_conf = configuration_data() 10114d34a86bSPaolo Bonzini slirp_conf.set('SLIRP_MAJOR_VERSION', meson.project_version().split('.')[0]) 10124d34a86bSPaolo Bonzini slirp_conf.set('SLIRP_MINOR_VERSION', meson.project_version().split('.')[1]) 10134d34a86bSPaolo Bonzini slirp_conf.set('SLIRP_MICRO_VERSION', meson.project_version().split('.')[2]) 10144d34a86bSPaolo Bonzini slirp_conf.set_quoted('SLIRP_VERSION_STRING', meson.project_version()) 10154d34a86bSPaolo Bonzini slirp_cargs = ['-DG_LOG_DOMAIN="Slirp"'] 10164d34a86bSPaolo Bonzini slirp_files = [ 10174d34a86bSPaolo Bonzini 'slirp/src/arp_table.c', 10184d34a86bSPaolo Bonzini 'slirp/src/bootp.c', 10194d34a86bSPaolo Bonzini 'slirp/src/cksum.c', 10204d34a86bSPaolo Bonzini 'slirp/src/dhcpv6.c', 10214d34a86bSPaolo Bonzini 'slirp/src/dnssearch.c', 10224d34a86bSPaolo Bonzini 'slirp/src/if.c', 10234d34a86bSPaolo Bonzini 'slirp/src/ip6_icmp.c', 10244d34a86bSPaolo Bonzini 'slirp/src/ip6_input.c', 10254d34a86bSPaolo Bonzini 'slirp/src/ip6_output.c', 10264d34a86bSPaolo Bonzini 'slirp/src/ip_icmp.c', 10274d34a86bSPaolo Bonzini 'slirp/src/ip_input.c', 10284d34a86bSPaolo Bonzini 'slirp/src/ip_output.c', 10294d34a86bSPaolo Bonzini 'slirp/src/mbuf.c', 10304d34a86bSPaolo Bonzini 'slirp/src/misc.c', 10314d34a86bSPaolo Bonzini 'slirp/src/ncsi.c', 10324d34a86bSPaolo Bonzini 'slirp/src/ndp_table.c', 10334d34a86bSPaolo Bonzini 'slirp/src/sbuf.c', 10344d34a86bSPaolo Bonzini 'slirp/src/slirp.c', 10354d34a86bSPaolo Bonzini 'slirp/src/socket.c', 10364d34a86bSPaolo Bonzini 'slirp/src/state.c', 10374d34a86bSPaolo Bonzini 'slirp/src/stream.c', 10384d34a86bSPaolo Bonzini 'slirp/src/tcp_input.c', 10394d34a86bSPaolo Bonzini 'slirp/src/tcp_output.c', 10404d34a86bSPaolo Bonzini 'slirp/src/tcp_subr.c', 10414d34a86bSPaolo Bonzini 'slirp/src/tcp_timer.c', 10424d34a86bSPaolo Bonzini 'slirp/src/tftp.c', 10434d34a86bSPaolo Bonzini 'slirp/src/udp.c', 10444d34a86bSPaolo Bonzini 'slirp/src/udp6.c', 10454d34a86bSPaolo Bonzini 'slirp/src/util.c', 10464d34a86bSPaolo Bonzini 'slirp/src/version.c', 10474d34a86bSPaolo Bonzini 'slirp/src/vmstate.c', 10484d34a86bSPaolo Bonzini ] 10494d34a86bSPaolo Bonzini 10504d34a86bSPaolo Bonzini configure_file( 10514d34a86bSPaolo Bonzini input : 'slirp/src/libslirp-version.h.in', 10524d34a86bSPaolo Bonzini output : 'libslirp-version.h', 10534d34a86bSPaolo Bonzini configuration: slirp_conf) 10544d34a86bSPaolo Bonzini 10554d34a86bSPaolo Bonzini slirp_inc = include_directories('slirp', 'slirp/src') 10564d34a86bSPaolo Bonzini libslirp = static_library('slirp', 10574d34a86bSPaolo Bonzini sources: slirp_files, 10584d34a86bSPaolo Bonzini c_args: slirp_cargs, 10594d34a86bSPaolo Bonzini include_directories: slirp_inc) 10604d34a86bSPaolo Bonzini slirp = declare_dependency(link_with: libslirp, 10614d34a86bSPaolo Bonzini dependencies: slirp_deps, 10624d34a86bSPaolo Bonzini include_directories: slirp_inc) 10634d34a86bSPaolo Bonzini endif 10644d34a86bSPaolo Bonziniendif 10654d34a86bSPaolo Bonzini 1066fbb4121dSPaolo Bonzinifdt = not_found 1067fbb4121dSPaolo Bonzinifdt_opt = get_option('fdt') 1068fbb4121dSPaolo Bonziniif have_system 1069fbb4121dSPaolo Bonzini if fdt_opt in ['enabled', 'auto', 'system'] 1070fbb4121dSPaolo Bonzini have_internal = fs.exists(meson.current_source_dir() / 'dtc/libfdt/Makefile.libfdt') 1071fbb4121dSPaolo Bonzini fdt = cc.find_library('fdt', static: enable_static, 1072fbb4121dSPaolo Bonzini required: fdt_opt == 'system' or 1073fbb4121dSPaolo Bonzini fdt_opt == 'enabled' and not have_internal) 1074fbb4121dSPaolo Bonzini if fdt.found() and cc.links(''' 1075fbb4121dSPaolo Bonzini #include <libfdt.h> 1076fbb4121dSPaolo Bonzini #include <libfdt_env.h> 1077fbb4121dSPaolo Bonzini int main(void) { fdt_check_full(NULL, 0); return 0; }''', 1078fbb4121dSPaolo Bonzini dependencies: fdt) 1079fbb4121dSPaolo Bonzini fdt_opt = 'system' 1080fbb4121dSPaolo Bonzini elif have_internal 1081fbb4121dSPaolo Bonzini fdt_opt = 'internal' 1082fbb4121dSPaolo Bonzini else 1083fbb4121dSPaolo Bonzini fdt_opt = 'disabled' 1084fbb4121dSPaolo Bonzini endif 1085fbb4121dSPaolo Bonzini endif 1086fbb4121dSPaolo Bonzini if fdt_opt == 'internal' 1087fbb4121dSPaolo Bonzini fdt_files = files( 1088fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt.c', 1089fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_ro.c', 1090fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_wip.c', 1091fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_sw.c', 1092fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_rw.c', 1093fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_strerror.c', 1094fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_empty_tree.c', 1095fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_addresses.c', 1096fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_overlay.c', 1097fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_check.c', 1098fbb4121dSPaolo Bonzini ) 1099fbb4121dSPaolo Bonzini 1100fbb4121dSPaolo Bonzini fdt_inc = include_directories('dtc/libfdt') 1101fbb4121dSPaolo Bonzini libfdt = static_library('fdt', 1102fbb4121dSPaolo Bonzini sources: fdt_files, 1103fbb4121dSPaolo Bonzini include_directories: fdt_inc) 1104fbb4121dSPaolo Bonzini fdt = declare_dependency(link_with: libfdt, 1105fbb4121dSPaolo Bonzini include_directories: fdt_inc) 1106fbb4121dSPaolo Bonzini endif 1107fbb4121dSPaolo Bonziniendif 1108fbb4121dSPaolo Bonziniif not fdt.found() and fdt_required.length() > 0 1109fbb4121dSPaolo Bonzini error('fdt not available but required by targets ' + ', '.join(fdt_required)) 1110fbb4121dSPaolo Bonziniendif 1111fbb4121dSPaolo Bonzini 11128b18cdbfSRichard Hendersonconfig_host_data.set('CONFIG_CAPSTONE', capstone.found()) 1113fbb4121dSPaolo Bonziniconfig_host_data.set('CONFIG_FDT', fdt.found()) 11144d34a86bSPaolo Bonziniconfig_host_data.set('CONFIG_SLIRP', slirp.found()) 11158b18cdbfSRichard Henderson 1116*a0c9162cSPaolo Bonzini##################### 1117*a0c9162cSPaolo Bonzini# Generated sources # 1118*a0c9162cSPaolo Bonzini##################### 11198b18cdbfSRichard Henderson 1120*a0c9162cSPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data) 1121a81df1b6SPaolo Bonzini 11223f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 1123650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 1124a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 1125a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 1126a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 1127a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 1128a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 1129a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 1130a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 1131a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 1132a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 1133a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 1134a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 1135a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 1136a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 1137a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 1138a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 1139a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 1140a81df1b6SPaolo Bonzini] 1141a81df1b6SPaolo Bonzini 1142a81df1b6SPaolo Bonzinitracetool = [ 1143a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 1144a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 1145a81df1b6SPaolo Bonzini] 1146a81df1b6SPaolo Bonzini 11472c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 11482c273f32SMarc-André Lureau meson.current_source_dir(), 1149859aef02SPaolo Bonzini config_host['PKGVERSION'], meson.project_version()] 11502c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 11512c273f32SMarc-André Lureau output: 'qemu-version.h', 11522c273f32SMarc-André Lureau command: qemu_version_cmd, 11532c273f32SMarc-André Lureau capture: true, 11542c273f32SMarc-André Lureau build_by_default: true, 11552c273f32SMarc-André Lureau build_always_stale: true) 11562c273f32SMarc-André Lureaugenh += qemu_version 11572c273f32SMarc-André Lureau 11583f885659SMarc-André Lureauhxdep = [] 11593f885659SMarc-André Lureauhx_headers = [ 11603f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 11613f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 11623f885659SMarc-André Lureau] 11633f885659SMarc-André Lureauif have_system 11643f885659SMarc-André Lureau hx_headers += [ 11653f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 11663f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 11673f885659SMarc-André Lureau ] 11683f885659SMarc-André Lureauendif 11693f885659SMarc-André Lureauforeach d : hx_headers 1170b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 11713f885659SMarc-André Lureau input: files(d[0]), 11723f885659SMarc-André Lureau output: d[1], 11733f885659SMarc-André Lureau capture: true, 11743f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 11753f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 11763f885659SMarc-André Lureauendforeach 11773f885659SMarc-André Lureaugenh += hxdep 11783f885659SMarc-André Lureau 1179eb937365SPeter MaydellSPHINX_ARGS = [config_host['SPHINX_BUILD'], 1180eb937365SPeter Maydell '-Dversion=' + meson.project_version(), 1181eb937365SPeter Maydell '-Drelease=' + config_host['PKGVERSION']] 1182eb937365SPeter Maydell 1183eb937365SPeter Maydellif get_option('werror') 1184eb937365SPeter Maydell SPHINX_ARGS += [ '-W' ] 1185eb937365SPeter Maydellendif 1186eb937365SPeter Maydell 1187b3f4830aSPeter Maydellsphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py', 1188b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/hxtool.py', 1189b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kerneldoc.py', 1190b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kernellog.py', 1191b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qapidoc.py', 1192b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qmp_lexer.py', 1193b3f4830aSPeter Maydell qapi_gen_depends ] 1194b3f4830aSPeter Maydell 1195*a0c9162cSPaolo Bonzini################### 1196*a0c9162cSPaolo Bonzini# Collect sources # 1197*a0c9162cSPaolo Bonzini################### 1198a81df1b6SPaolo Bonzini 119955567891SPhilippe Mathieu-Daudéauthz_ss = ss.source_set() 12007e2b888fSPhilippe Mathieu-Daudéblockdev_ss = ss.source_set() 12017e2b888fSPhilippe Mathieu-Daudéblock_ss = ss.source_set() 12027e2b888fSPhilippe Mathieu-Daudébsd_user_ss = ss.source_set() 1203c2306d71SPhilippe Mathieu-Daudéchardev_ss = ss.source_set() 12047e2b888fSPhilippe Mathieu-Daudécommon_ss = ss.source_set() 12052389304aSPhilippe Mathieu-Daudécrypto_ss = ss.source_set() 1206f78536b1SPhilippe Mathieu-Daudéio_ss = ss.source_set() 12077e2b888fSPhilippe Mathieu-Daudélinux_user_ss = ss.source_set() 12087e2b888fSPhilippe Mathieu-Daudéqmp_ss = ss.source_set() 1209da33fc09SPhilippe Mathieu-Daudéqom_ss = ss.source_set() 12107e2b888fSPhilippe Mathieu-Daudésoftmmu_ss = ss.source_set() 12117e2b888fSPhilippe Mathieu-Daudéspecific_fuzz_ss = ss.source_set() 12127e2b888fSPhilippe Mathieu-Daudéspecific_ss = ss.source_set() 1213a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 1214a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 12152becc36aSPaolo Bonziniuser_ss = ss.source_set() 12167e2b888fSPhilippe Mathieu-Daudéutil_ss = ss.source_set() 12172becc36aSPaolo Bonzini 12183154fee4SMarc-André Lureaumodules = {} 12192becc36aSPaolo Bonzinihw_arch = {} 12202becc36aSPaolo Bonzinitarget_arch = {} 12212becc36aSPaolo Bonzinitarget_softmmu_arch = {} 1222a81df1b6SPaolo Bonzini 1223a81df1b6SPaolo Bonzini############### 1224a81df1b6SPaolo Bonzini# Trace files # 1225a81df1b6SPaolo Bonzini############### 1226a81df1b6SPaolo Bonzini 1227c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once 1228c9322ab5SMarc-André Lureau# we have those 1229a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 1230a81df1b6SPaolo Bonzini 'accel/kvm', 1231a81df1b6SPaolo Bonzini 'accel/tcg', 1232a81df1b6SPaolo Bonzini 'crypto', 1233a81df1b6SPaolo Bonzini 'monitor', 1234a81df1b6SPaolo Bonzini] 1235a81df1b6SPaolo Bonziniif have_user 1236a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 1237a81df1b6SPaolo Bonziniendif 1238a81df1b6SPaolo Bonziniif have_block 1239a81df1b6SPaolo Bonzini trace_events_subdirs += [ 1240a81df1b6SPaolo Bonzini 'authz', 1241a81df1b6SPaolo Bonzini 'block', 1242a81df1b6SPaolo Bonzini 'io', 1243a81df1b6SPaolo Bonzini 'nbd', 1244a81df1b6SPaolo Bonzini 'scsi', 1245a81df1b6SPaolo Bonzini ] 1246a81df1b6SPaolo Bonziniendif 1247a81df1b6SPaolo Bonziniif have_system 1248a81df1b6SPaolo Bonzini trace_events_subdirs += [ 1249a81df1b6SPaolo Bonzini 'audio', 1250a81df1b6SPaolo Bonzini 'backends', 1251a81df1b6SPaolo Bonzini 'backends/tpm', 1252a81df1b6SPaolo Bonzini 'chardev', 1253a81df1b6SPaolo Bonzini 'hw/9pfs', 1254a81df1b6SPaolo Bonzini 'hw/acpi', 1255a81df1b6SPaolo Bonzini 'hw/alpha', 1256a81df1b6SPaolo Bonzini 'hw/arm', 1257a81df1b6SPaolo Bonzini 'hw/audio', 1258a81df1b6SPaolo Bonzini 'hw/block', 1259a81df1b6SPaolo Bonzini 'hw/block/dataplane', 1260a81df1b6SPaolo Bonzini 'hw/char', 1261a81df1b6SPaolo Bonzini 'hw/display', 1262a81df1b6SPaolo Bonzini 'hw/dma', 1263a81df1b6SPaolo Bonzini 'hw/hppa', 1264a81df1b6SPaolo Bonzini 'hw/hyperv', 1265a81df1b6SPaolo Bonzini 'hw/i2c', 1266a81df1b6SPaolo Bonzini 'hw/i386', 1267a81df1b6SPaolo Bonzini 'hw/i386/xen', 1268a81df1b6SPaolo Bonzini 'hw/ide', 1269a81df1b6SPaolo Bonzini 'hw/input', 1270a81df1b6SPaolo Bonzini 'hw/intc', 1271a81df1b6SPaolo Bonzini 'hw/isa', 1272a81df1b6SPaolo Bonzini 'hw/mem', 1273a81df1b6SPaolo Bonzini 'hw/mips', 1274a81df1b6SPaolo Bonzini 'hw/misc', 1275a81df1b6SPaolo Bonzini 'hw/misc/macio', 1276a81df1b6SPaolo Bonzini 'hw/net', 1277a81df1b6SPaolo Bonzini 'hw/nvram', 1278a81df1b6SPaolo Bonzini 'hw/pci', 1279a81df1b6SPaolo Bonzini 'hw/pci-host', 1280a81df1b6SPaolo Bonzini 'hw/ppc', 1281a81df1b6SPaolo Bonzini 'hw/rdma', 1282a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 1283a81df1b6SPaolo Bonzini 'hw/rtc', 1284a81df1b6SPaolo Bonzini 'hw/s390x', 1285a81df1b6SPaolo Bonzini 'hw/scsi', 1286a81df1b6SPaolo Bonzini 'hw/sd', 1287a81df1b6SPaolo Bonzini 'hw/sparc', 1288a81df1b6SPaolo Bonzini 'hw/sparc64', 1289a81df1b6SPaolo Bonzini 'hw/ssi', 1290a81df1b6SPaolo Bonzini 'hw/timer', 1291a81df1b6SPaolo Bonzini 'hw/tpm', 1292a81df1b6SPaolo Bonzini 'hw/usb', 1293a81df1b6SPaolo Bonzini 'hw/vfio', 1294a81df1b6SPaolo Bonzini 'hw/virtio', 1295a81df1b6SPaolo Bonzini 'hw/watchdog', 1296a81df1b6SPaolo Bonzini 'hw/xen', 1297a81df1b6SPaolo Bonzini 'hw/gpio', 1298a81df1b6SPaolo Bonzini 'migration', 1299a81df1b6SPaolo Bonzini 'net', 13008b7a5507SPhilippe Mathieu-Daudé 'softmmu', 1301a81df1b6SPaolo Bonzini 'ui', 1302a81df1b6SPaolo Bonzini ] 1303a81df1b6SPaolo Bonziniendif 1304a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 1305a81df1b6SPaolo Bonzini 'hw/core', 1306a81df1b6SPaolo Bonzini 'qapi', 1307a81df1b6SPaolo Bonzini 'qom', 1308a81df1b6SPaolo Bonzini 'target/arm', 1309a81df1b6SPaolo Bonzini 'target/hppa', 1310a81df1b6SPaolo Bonzini 'target/i386', 1311a81df1b6SPaolo Bonzini 'target/mips', 1312a81df1b6SPaolo Bonzini 'target/ppc', 1313a81df1b6SPaolo Bonzini 'target/riscv', 1314a81df1b6SPaolo Bonzini 'target/s390x', 1315a81df1b6SPaolo Bonzini 'target/sparc', 1316a81df1b6SPaolo Bonzini 'util', 1317a81df1b6SPaolo Bonzini] 1318a81df1b6SPaolo Bonzini 1319a81df1b6SPaolo Bonzinisubdir('qapi') 1320a81df1b6SPaolo Bonzinisubdir('qobject') 1321a81df1b6SPaolo Bonzinisubdir('stubs') 1322a81df1b6SPaolo Bonzinisubdir('trace') 1323a81df1b6SPaolo Bonzinisubdir('util') 13245582c58fSMarc-André Lureausubdir('qom') 13255582c58fSMarc-André Lureausubdir('authz') 1326a81df1b6SPaolo Bonzinisubdir('crypto') 13272d78b56eSMarc-André Lureausubdir('ui') 1328a81df1b6SPaolo Bonzini 13293154fee4SMarc-André Lureau 13303154fee4SMarc-André Lureauif enable_modules 13313154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 13323154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 13333154fee4SMarc-André Lureauendif 13343154fee4SMarc-André Lureau 13352becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 1336a81df1b6SPaolo Bonzini 1337a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 13382becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 1339a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 1340a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 1341aa087962SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket, malloc]) 1342a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 134304c6f1e7SMarc-André Lureau sources: genh + version_res) 1344a81df1b6SPaolo Bonzini 1345abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'), 1346abff1abfSPaolo Bonzini output: 'decode-@BASENAME@.c.inc', 1347abff1abfSPaolo Bonzini arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@']) 1348abff1abfSPaolo Bonzini 1349478e943fSPaolo Bonzinisubdir('audio') 13507fcfd456SMarc-André Lureausubdir('io') 1351848e8ff6SMarc-André Lureausubdir('chardev') 1352ec0d5893SMarc-André Lureausubdir('fsdev') 1353abff1abfSPaolo Bonzinisubdir('libdecnumber') 1354d3b18480SMarc-André Lureausubdir('target') 1355708eab42SMarc-André Lureausubdir('dump') 1356ec0d5893SMarc-André Lureau 13575e5733e5SMarc-André Lureaublock_ss.add(files( 13585e5733e5SMarc-André Lureau 'block.c', 135956ee8626SKevin Wolf 'blockdev-nbd.c', 13605e5733e5SMarc-André Lureau 'blockjob.c', 13615e5733e5SMarc-André Lureau 'job.c', 13625e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 13635e5733e5SMarc-André Lureau)) 13645e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 13655e5733e5SMarc-André Lureau 13665e5733e5SMarc-André Lureausubdir('nbd') 13675e5733e5SMarc-André Lureausubdir('scsi') 13685e5733e5SMarc-André Lureausubdir('block') 13695e5733e5SMarc-André Lureau 13704a96337dSPaolo Bonziniblockdev_ss.add(files( 13714a96337dSPaolo Bonzini 'blockdev.c', 13724a96337dSPaolo Bonzini 'iothread.c', 13734a96337dSPaolo Bonzini 'job-qmp.c', 13744a96337dSPaolo Bonzini)) 13754a96337dSPaolo Bonzini 13764a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 13774a96337dSPaolo Bonzini# os-win32.c does not 13784a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 13794a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 13804a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 13814a96337dSPaolo Bonzini 13824a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 13834a96337dSPaolo Bonzini 13845d3ea0e1SPaolo Bonzinisubdir('softmmu') 1385c9322ab5SMarc-André Lureau 1386f343346bSRichard Hendersoncommon_ss.add(capstone) 1387d9f24bf5SPaolo Bonzinispecific_ss.add(files('cpu.c', 'disas.c', 'gdbstub.c'), capstone) 1388c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c')) 1389c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files( 1390c9322ab5SMarc-André Lureau 'fpu/softfloat.c', 1391c9322ab5SMarc-André Lureau 'tcg/optimize.c', 1392c9322ab5SMarc-André Lureau 'tcg/tcg-common.c', 1393c9322ab5SMarc-André Lureau 'tcg/tcg-op-gvec.c', 1394c9322ab5SMarc-André Lureau 'tcg/tcg-op-vec.c', 1395c9322ab5SMarc-André Lureau 'tcg/tcg-op.c', 1396c9322ab5SMarc-André Lureau 'tcg/tcg.c', 1397c9322ab5SMarc-André Lureau)) 1398c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c')) 1399c9322ab5SMarc-André Lureau 1400ab318051SMarc-André Lureausubdir('backends') 1401c574e161SMarc-André Lureausubdir('disas') 140255166230SMarc-André Lureausubdir('migration') 1403ff219dcaSPaolo Bonzinisubdir('monitor') 1404cdaf0722SMarc-André Lureausubdir('net') 140517ef2af6SMarc-André Lureausubdir('replay') 1406582ea95fSMarc-André Lureausubdir('hw') 14071a82878aSMarc-André Lureausubdir('accel') 1408f556b4a1SPaolo Bonzinisubdir('plugins') 1409b309c321SMarc-André Lureausubdir('bsd-user') 14103a30446aSMarc-André Lureausubdir('linux-user') 14113a30446aSMarc-André Lureau 1412b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c')) 1413b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss) 1414b309c321SMarc-André Lureau 14153a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c')) 14163a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss) 14175d3ea0e1SPaolo Bonzini 1418a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 1419a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 142064ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz') 1421a2ce7dbdSPaolo Bonzini 1422*a0c9162cSPaolo Bonzini######################## 1423*a0c9162cSPaolo Bonzini# Library dependencies # 1424*a0c9162cSPaolo Bonzini######################## 1425*a0c9162cSPaolo Bonzini 14263154fee4SMarc-André Lureaublock_mods = [] 14273154fee4SMarc-André Lureausoftmmu_mods = [] 14283154fee4SMarc-André Lureauforeach d, list : modules 14293154fee4SMarc-André Lureau foreach m, module_ss : list 14303154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 14313e292c51SGerd Hoffmann module_ss = module_ss.apply(config_all, strict: false) 14323154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 14333154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 14343154fee4SMarc-André Lureau if d == 'block' 14353154fee4SMarc-André Lureau block_mods += sl 14363154fee4SMarc-André Lureau else 14373154fee4SMarc-André Lureau softmmu_mods += sl 14383154fee4SMarc-André Lureau endif 14393154fee4SMarc-André Lureau else 14403154fee4SMarc-André Lureau if d == 'block' 14413154fee4SMarc-André Lureau block_ss.add_all(module_ss) 14423154fee4SMarc-André Lureau else 14433154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 14443154fee4SMarc-André Lureau endif 14453154fee4SMarc-André Lureau endif 14463154fee4SMarc-André Lureau endforeach 14473154fee4SMarc-André Lureauendforeach 14483154fee4SMarc-André Lureau 14493154fee4SMarc-André Lureaunm = find_program('nm') 1450604f3e4eSYonggang Luoundefsym = find_program('scripts/undefsym.py') 14513154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 14523154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 14533154fee4SMarc-André Lureau capture: true, 14543154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 14553154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 14563154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 14573154fee4SMarc-André Lureau capture: true, 14583154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 14593154fee4SMarc-André Lureau 1460da33fc09SPhilippe Mathieu-Daudéqom_ss = qom_ss.apply(config_host, strict: false) 1461da33fc09SPhilippe Mathieu-Daudélibqom = static_library('qom', qom_ss.sources() + genh, 1462da33fc09SPhilippe Mathieu-Daudé dependencies: [qom_ss.dependencies()], 1463da33fc09SPhilippe Mathieu-Daudé name_suffix: 'fa') 1464da33fc09SPhilippe Mathieu-Daudé 1465da33fc09SPhilippe Mathieu-Daudéqom = declare_dependency(link_whole: libqom) 1466da33fc09SPhilippe Mathieu-Daudé 146755567891SPhilippe Mathieu-Daudéauthz_ss = authz_ss.apply(config_host, strict: false) 146855567891SPhilippe Mathieu-Daudélibauthz = static_library('authz', authz_ss.sources() + genh, 146955567891SPhilippe Mathieu-Daudé dependencies: [authz_ss.dependencies()], 147055567891SPhilippe Mathieu-Daudé name_suffix: 'fa', 147155567891SPhilippe Mathieu-Daudé build_by_default: false) 147255567891SPhilippe Mathieu-Daudé 147355567891SPhilippe Mathieu-Daudéauthz = declare_dependency(link_whole: libauthz, 147455567891SPhilippe Mathieu-Daudé dependencies: qom) 147555567891SPhilippe Mathieu-Daudé 14762389304aSPhilippe Mathieu-Daudécrypto_ss = crypto_ss.apply(config_host, strict: false) 14772389304aSPhilippe Mathieu-Daudélibcrypto = static_library('crypto', crypto_ss.sources() + genh, 14782389304aSPhilippe Mathieu-Daudé dependencies: [crypto_ss.dependencies()], 14792389304aSPhilippe Mathieu-Daudé name_suffix: 'fa', 14802389304aSPhilippe Mathieu-Daudé build_by_default: false) 14812389304aSPhilippe Mathieu-Daudé 14822389304aSPhilippe Mathieu-Daudécrypto = declare_dependency(link_whole: libcrypto, 14832389304aSPhilippe Mathieu-Daudé dependencies: [authz, qom]) 14842389304aSPhilippe Mathieu-Daudé 1485f78536b1SPhilippe Mathieu-Daudéio_ss = io_ss.apply(config_host, strict: false) 1486f78536b1SPhilippe Mathieu-Daudélibio = static_library('io', io_ss.sources() + genh, 1487f78536b1SPhilippe Mathieu-Daudé dependencies: [io_ss.dependencies()], 1488f78536b1SPhilippe Mathieu-Daudé link_with: libqemuutil, 1489f78536b1SPhilippe Mathieu-Daudé name_suffix: 'fa', 1490f78536b1SPhilippe Mathieu-Daudé build_by_default: false) 1491f78536b1SPhilippe Mathieu-Daudé 1492f78536b1SPhilippe Mathieu-Daudéio = declare_dependency(link_whole: libio, dependencies: [crypto, qom]) 1493f78536b1SPhilippe Mathieu-Daudé 14947e6edef3SPhilippe Mathieu-Daudélibmigration = static_library('migration', sources: migration_files + genh, 14957e6edef3SPhilippe Mathieu-Daudé name_suffix: 'fa', 14967e6edef3SPhilippe Mathieu-Daudé build_by_default: false) 14977e6edef3SPhilippe Mathieu-Daudémigration = declare_dependency(link_with: libmigration, 14987e6edef3SPhilippe Mathieu-Daudé dependencies: [zlib, qom, io]) 14997e6edef3SPhilippe Mathieu-Daudésoftmmu_ss.add(migration) 15007e6edef3SPhilippe Mathieu-Daudé 15015e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 15025e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 15035e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 15045e5733e5SMarc-André Lureau link_depends: block_syms, 15055e5733e5SMarc-André Lureau name_suffix: 'fa', 15065e5733e5SMarc-André Lureau build_by_default: false) 15075e5733e5SMarc-André Lureau 15085e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 1509b7c70bf2SMarc-André Lureau link_args: '@block.syms', 1510b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 15115e5733e5SMarc-André Lureau 1512ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 1513ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 1514ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 1515ff219dcaSPaolo Bonzini name_suffix: 'fa', 1516ff219dcaSPaolo Bonzini build_by_default: false) 1517ff219dcaSPaolo Bonzini 1518ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 1519ff219dcaSPaolo Bonzini 1520c2306d71SPhilippe Mathieu-Daudélibchardev = static_library('chardev', chardev_ss.sources() + genh, 1521c2306d71SPhilippe Mathieu-Daudé name_suffix: 'fa', 1522c2306d71SPhilippe Mathieu-Daudé build_by_default: false) 1523c2306d71SPhilippe Mathieu-Daudé 1524c2306d71SPhilippe Mathieu-Daudéchardev = declare_dependency(link_whole: libchardev) 1525c2306d71SPhilippe Mathieu-Daudé 1526e28ab096SPhilippe Mathieu-Daudélibhwcore = static_library('hwcore', sources: hwcore_files + genh, 1527e28ab096SPhilippe Mathieu-Daudé name_suffix: 'fa', 1528e28ab096SPhilippe Mathieu-Daudé build_by_default: false) 1529e28ab096SPhilippe Mathieu-Daudéhwcore = declare_dependency(link_whole: libhwcore) 1530e28ab096SPhilippe Mathieu-Daudécommon_ss.add(hwcore) 1531e28ab096SPhilippe Mathieu-Daudé 1532064f8ee7SPhilippe Mathieu-Daudé########### 1533064f8ee7SPhilippe Mathieu-Daudé# Targets # 1534064f8ee7SPhilippe Mathieu-Daudé########### 1535064f8ee7SPhilippe Mathieu-Daudé 15363154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 15373154fee4SMarc-André Lureau shared_module(m.name(), 15383154fee4SMarc-André Lureau name_prefix: '', 15393154fee4SMarc-André Lureau link_whole: m, 15403154fee4SMarc-André Lureau install: true, 15413154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 15423154fee4SMarc-André Lureauendforeach 15433154fee4SMarc-André Lureau 154464ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp) 154564ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil) 154664ed6f92SPaolo Bonzini 154764ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss]) 15482becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 15492becc36aSPaolo Bonzini 15502becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 15512becc36aSPaolo Bonzinicommon_all = static_library('common', 15522becc36aSPaolo Bonzini build_by_default: false, 15532becc36aSPaolo Bonzini sources: common_all.sources() + genh, 15542becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 15552becc36aSPaolo Bonzini name_suffix: 'fa') 15562becc36aSPaolo Bonzini 1557c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh') 1558c9322ab5SMarc-André Lureau 1559fd5eef85SPaolo Bonziniemulators = {} 15602becc36aSPaolo Bonziniforeach target : target_dirs 15612becc36aSPaolo Bonzini config_target = config_target_mak[target] 15622becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 15632becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 1564859aef02SPaolo Bonzini arch_srcs = [config_target_h[target]] 156564ed6f92SPaolo Bonzini arch_deps = [] 156664ed6f92SPaolo Bonzini c_args = ['-DNEED_CPU_H', 156764ed6f92SPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 156864ed6f92SPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] 1569b6c7cfd4SPaolo Bonzini link_args = emulator_link_args 15702becc36aSPaolo Bonzini 1571859aef02SPaolo Bonzini config_target += config_host 15722becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 15732becc36aSPaolo Bonzini if targetos == 'linux' 15742becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 15752becc36aSPaolo Bonzini endif 15762becc36aSPaolo Bonzini if target.endswith('-softmmu') 15772becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 15782becc36aSPaolo Bonzini target_type='system' 1579abff1abfSPaolo Bonzini t = target_softmmu_arch[arch].apply(config_target, strict: false) 1580abff1abfSPaolo Bonzini arch_srcs += t.sources() 158164ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1582abff1abfSPaolo Bonzini 15832c44220dSMarc-André Lureau hw_dir = target_name == 'sparc64' ? 'sparc64' : arch 15842c44220dSMarc-André Lureau hw = hw_arch[hw_dir].apply(config_target, strict: false) 15852c44220dSMarc-André Lureau arch_srcs += hw.sources() 158664ed6f92SPaolo Bonzini arch_deps += hw.dependencies() 15872c44220dSMarc-André Lureau 15882becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 158964ed6f92SPaolo Bonzini link_args += ['@block.syms', '@qemu.syms'] 15902becc36aSPaolo Bonzini else 15913a30446aSMarc-André Lureau abi = config_target['TARGET_ABI_DIR'] 15922becc36aSPaolo Bonzini target_type='user' 15932becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 15942becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 15952becc36aSPaolo Bonzini base_dir = 'linux-user' 15962becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 15972becc36aSPaolo Bonzini else 15982becc36aSPaolo Bonzini base_dir = 'bsd-user' 15992becc36aSPaolo Bonzini endif 16002becc36aSPaolo Bonzini target_inc += include_directories( 16012becc36aSPaolo Bonzini base_dir, 16023a30446aSMarc-André Lureau base_dir / abi, 16032becc36aSPaolo Bonzini ) 16043a30446aSMarc-André Lureau if 'CONFIG_LINUX_USER' in config_target 16053a30446aSMarc-André Lureau dir = base_dir / abi 16063a30446aSMarc-André Lureau arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c') 16073a30446aSMarc-André Lureau if config_target.has_key('TARGET_SYSTBL_ABI') 16083a30446aSMarc-André Lureau arch_srcs += \ 16093a30446aSMarc-André Lureau syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'], 16103a30446aSMarc-André Lureau extra_args : config_target['TARGET_SYSTBL_ABI']) 16113a30446aSMarc-André Lureau endif 16123a30446aSMarc-André Lureau endif 16132becc36aSPaolo Bonzini endif 16142becc36aSPaolo Bonzini 1615c9322ab5SMarc-André Lureau if 'TARGET_XML_FILES' in config_target 1616c9322ab5SMarc-André Lureau gdbstub_xml = custom_target(target + '-gdbstub-xml.c', 1617c9322ab5SMarc-André Lureau output: target + '-gdbstub-xml.c', 1618c9322ab5SMarc-André Lureau input: files(config_target['TARGET_XML_FILES'].split()), 1619c9322ab5SMarc-André Lureau command: [feature_to_c, '@INPUT@'], 1620c9322ab5SMarc-André Lureau capture: true) 1621c9322ab5SMarc-André Lureau arch_srcs += gdbstub_xml 1622c9322ab5SMarc-André Lureau endif 1623c9322ab5SMarc-André Lureau 1624abff1abfSPaolo Bonzini t = target_arch[arch].apply(config_target, strict: false) 1625abff1abfSPaolo Bonzini arch_srcs += t.sources() 162664ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1627abff1abfSPaolo Bonzini 16282becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 16292becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 163064ed6f92SPaolo Bonzini deps = target_common.dependencies() 16312becc36aSPaolo Bonzini 16322becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 16332becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 163464ed6f92SPaolo Bonzini arch_deps += target_specific.dependencies() 16352becc36aSPaolo Bonzini 163664ed6f92SPaolo Bonzini lib = static_library('qemu-' + target, 1637859aef02SPaolo Bonzini sources: arch_srcs + genh, 1638b7612f45SPaolo Bonzini dependencies: arch_deps, 16392becc36aSPaolo Bonzini objects: objects, 16402becc36aSPaolo Bonzini include_directories: target_inc, 164164ed6f92SPaolo Bonzini c_args: c_args, 164264ed6f92SPaolo Bonzini build_by_default: false, 16432becc36aSPaolo Bonzini name_suffix: 'fa') 164464ed6f92SPaolo Bonzini 164564ed6f92SPaolo Bonzini if target.endswith('-softmmu') 164664ed6f92SPaolo Bonzini execs = [{ 164764ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name, 164864ed6f92SPaolo Bonzini 'gui': false, 164964ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 165064ed6f92SPaolo Bonzini 'dependencies': [] 165164ed6f92SPaolo Bonzini }] 165235be72baSPaolo Bonzini if targetos == 'windows' and (sdl.found() or gtk.found()) 165364ed6f92SPaolo Bonzini execs += [{ 165464ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name + 'w', 165564ed6f92SPaolo Bonzini 'gui': true, 165664ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 165764ed6f92SPaolo Bonzini 'dependencies': [] 165864ed6f92SPaolo Bonzini }] 165964ed6f92SPaolo Bonzini endif 166064ed6f92SPaolo Bonzini if config_host.has_key('CONFIG_FUZZ') 166164ed6f92SPaolo Bonzini specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false) 166264ed6f92SPaolo Bonzini execs += [{ 166364ed6f92SPaolo Bonzini 'name': 'qemu-fuzz-' + target_name, 166464ed6f92SPaolo Bonzini 'gui': false, 166564ed6f92SPaolo Bonzini 'sources': specific_fuzz.sources(), 166664ed6f92SPaolo Bonzini 'dependencies': specific_fuzz.dependencies(), 166764ed6f92SPaolo Bonzini }] 166864ed6f92SPaolo Bonzini endif 166964ed6f92SPaolo Bonzini else 167064ed6f92SPaolo Bonzini execs = [{ 167164ed6f92SPaolo Bonzini 'name': 'qemu-' + target_name, 167264ed6f92SPaolo Bonzini 'gui': false, 167364ed6f92SPaolo Bonzini 'sources': [], 167464ed6f92SPaolo Bonzini 'dependencies': [] 167564ed6f92SPaolo Bonzini }] 167664ed6f92SPaolo Bonzini endif 167764ed6f92SPaolo Bonzini foreach exe: execs 1678fd5eef85SPaolo Bonzini emulators += {exe['name']: 1679fd5eef85SPaolo Bonzini executable(exe['name'], exe['sources'], 168064ed6f92SPaolo Bonzini install: true, 168164ed6f92SPaolo Bonzini c_args: c_args, 168264ed6f92SPaolo Bonzini dependencies: arch_deps + deps + exe['dependencies'], 168364ed6f92SPaolo Bonzini objects: lib.extract_all_objects(recursive: true), 168464ed6f92SPaolo Bonzini link_language: link_language, 168564ed6f92SPaolo Bonzini link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []), 168664ed6f92SPaolo Bonzini link_args: link_args, 168764ed6f92SPaolo Bonzini gui_app: exe['gui']) 1688fd5eef85SPaolo Bonzini } 168910e1d263SMarc-André Lureau 169010e1d263SMarc-André Lureau if 'CONFIG_TRACE_SYSTEMTAP' in config_host 169110e1d263SMarc-André Lureau foreach stp: [ 1692bd5f973aSStefan Hajnoczi {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, 1693bd5f973aSStefan Hajnoczi {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, 169410e1d263SMarc-André Lureau {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, 169510e1d263SMarc-André Lureau {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, 169610e1d263SMarc-André Lureau ] 1697bd5f973aSStefan Hajnoczi custom_target(exe['name'] + stp['ext'], 169810e1d263SMarc-André Lureau input: trace_events_all, 1699bd5f973aSStefan Hajnoczi output: exe['name'] + stp['ext'], 170010e1d263SMarc-André Lureau capture: true, 170110e1d263SMarc-André Lureau install: stp['install'], 1702ab4c0996SMarc-André Lureau install_dir: qemu_datadir / '../systemtap/tapset', 170310e1d263SMarc-André Lureau command: [ 170410e1d263SMarc-André Lureau tracetool, '--group=all', '--format=' + stp['fmt'], 170510e1d263SMarc-André Lureau '--binary=' + stp['bin'], 170610e1d263SMarc-André Lureau '--target-name=' + target_name, 170710e1d263SMarc-André Lureau '--target-type=' + target_type, 170810e1d263SMarc-André Lureau '--probe-prefix=qemu.' + target_type + '.' + target_name, 170910e1d263SMarc-André Lureau '@INPUT@', 171010e1d263SMarc-André Lureau ]) 171110e1d263SMarc-André Lureau endforeach 171210e1d263SMarc-André Lureau endif 171364ed6f92SPaolo Bonzini endforeach 17142becc36aSPaolo Bonziniendforeach 17152becc36aSPaolo Bonzini 1716931049b4SPaolo Bonzini# Other build targets 1717897b5afaSMarc-André Lureau 1718f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 1719f556b4a1SPaolo Bonzini install_headers('include/qemu/qemu-plugin.h') 1720f556b4a1SPaolo Bonziniendif 1721f556b4a1SPaolo Bonzini 1722f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 1723f15bff25SPaolo Bonzini subdir('qga') 1724f15bff25SPaolo Bonziniendif 1725f15bff25SPaolo Bonzini 17269755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled 17279755c94aSLaurent Vivier# when we don't build tools or system 17284113f4cfSLaurent Vivierif xkbcommon.found() 172928742467SMarc-André Lureau # used for the update-keymaps target, so include rules even if !have_tools 173028742467SMarc-André Lureau qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, 173128742467SMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: have_tools) 173228742467SMarc-André Lureauendif 173328742467SMarc-André Lureau 1734931049b4SPaolo Bonziniif have_tools 1735b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 1736b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 1737b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 1738b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1739b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 1740b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1741b7c70bf2SMarc-André Lureau 17427c58bb76SPaolo Bonzini subdir('storage-daemon') 1743a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 17441d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 1745a9c9727cSPaolo Bonzini 1746157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 1747157e7b13SMarc-André Lureau dependencies: qemuutil, 1748157e7b13SMarc-André Lureau install: true) 1749157e7b13SMarc-André Lureau 1750931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 1751931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 17522d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 1753ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 175432fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 175599650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 1756931049b4SPaolo Bonzini endif 17578f51e01cSMarc-André Lureau 17588f51e01cSMarc-André Lureau if targetos == 'linux' 17598f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 17608f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 17618f51e01cSMarc-André Lureau install: true, 17628f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 1763897b5afaSMarc-André Lureau 1764897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 1765897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 17666ec0e15dSPaolo Bonzini libcap_ng, mpathpersist], 1767897b5afaSMarc-André Lureau install: true) 17688f51e01cSMarc-André Lureau endif 17698f51e01cSMarc-André Lureau 17705ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 17715ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 17725ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 17735ee24e78SMarc-André Lureau endif 1774931049b4SPaolo Bonziniendif 1775931049b4SPaolo Bonzini 1776f5aa6320SMarc-André Lureausubdir('scripts') 17773f99cf57SPaolo Bonzinisubdir('tools') 1778bdcbea7aSMarc-André Lureausubdir('pc-bios') 1779ce1c1e7aSPaolo Bonzinisubdir('tests') 1780f8aa24eaSPaolo Bonzinisubdir('docs') 1781e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host 1782e8f3bd71SMarc-André Lureau subdir('po') 1783e8f3bd71SMarc-André Lureauendif 17843f99cf57SPaolo Bonzini 17858adfeba9SMarc-André Lureauif host_machine.system() == 'windows' 17868adfeba9SMarc-André Lureau nsis_cmd = [ 17878adfeba9SMarc-André Lureau find_program('scripts/nsis.py'), 17888adfeba9SMarc-André Lureau '@OUTPUT@', 17898adfeba9SMarc-André Lureau get_option('prefix'), 17908adfeba9SMarc-André Lureau meson.current_source_dir(), 17918adfeba9SMarc-André Lureau host_machine.cpu_family(), 17928adfeba9SMarc-André Lureau '--', 17938adfeba9SMarc-André Lureau '-DDISPLAYVERSION=' + meson.project_version(), 17948adfeba9SMarc-André Lureau ] 17958adfeba9SMarc-André Lureau if build_docs 17968adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_DOCUMENTATION=y' 17978adfeba9SMarc-André Lureau endif 17988adfeba9SMarc-André Lureau if 'CONFIG_GTK' in config_host 17998adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_GTK=y' 18008adfeba9SMarc-André Lureau endif 18018adfeba9SMarc-André Lureau 18028adfeba9SMarc-André Lureau nsis = custom_target('nsis', 18038adfeba9SMarc-André Lureau output: 'qemu-setup-' + meson.project_version() + '.exe', 18048adfeba9SMarc-André Lureau input: files('qemu.nsi'), 18058adfeba9SMarc-André Lureau build_always_stale: true, 18068adfeba9SMarc-André Lureau command: nsis_cmd + ['@INPUT@']) 18078adfeba9SMarc-André Lureau alias_target('installer', nsis) 18088adfeba9SMarc-André Lureauendif 18098adfeba9SMarc-André Lureau 1810*a0c9162cSPaolo Bonzini######################### 1811*a0c9162cSPaolo Bonzini# Configuration summary # 1812*a0c9162cSPaolo Bonzini######################### 1813*a0c9162cSPaolo Bonzini 1814f9332757SPaolo Bonzinisummary_info = {} 1815f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 1816f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 1817f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 1818f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 1819f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 1820f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 1821f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 1822f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 1823f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 1824f9332757SPaolo Bonziniif targetos != 'windows' 1825f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 1826b81efab7SMarc-André Lureau summary_info += {'Manual directory': get_option('mandir')} 1827f9332757SPaolo Bonzinielse 1828f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 1829f9332757SPaolo Bonziniendif 1830491e74c1SMarc-André Lureausummary_info += {'Doc directory': get_option('docdir')} 1831f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 1832f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 1833f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 1834f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 1835f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 1836f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 1837f9332757SPaolo Bonziniif link_language == 'cpp' 1838f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 1839f9332757SPaolo Bonzinielse 1840f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 1841f9332757SPaolo Bonziniendif 1842f9332757SPaolo Bonziniif targetos == 'darwin' 1843f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 1844f9332757SPaolo Bonziniendif 1845f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 184647b30835SPaolo Bonzinisummary_info += {'CFLAGS': ' '.join(get_option('c_args') 184747b30835SPaolo Bonzini + ['-O' + get_option('optimization')] 184847b30835SPaolo Bonzini + (get_option('debug') ? ['-g'] : []))} 184947b30835SPaolo Bonziniif link_language == 'cpp' 185047b30835SPaolo Bonzini summary_info += {'CXXFLAGS': ' '.join(get_option('cpp_args') 185147b30835SPaolo Bonzini + ['-O' + get_option('optimization')] 185247b30835SPaolo Bonzini + (get_option('debug') ? ['-g'] : []))} 185347b30835SPaolo Bonziniendif 185447b30835SPaolo Bonzinilink_args = get_option(link_language + '_link_args') 185547b30835SPaolo Bonziniif link_args.length() > 0 185647b30835SPaolo Bonzini summary_info += {'LDFLAGS': ' '.join(link_args)} 185747b30835SPaolo Bonziniendif 1858f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 1859f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 1860f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 1861f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 1862f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 1863f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 1864f9332757SPaolo Bonzini# TODO: add back version 18654d34a86bSPaolo Bonzinisummary_info += {'slirp support': slirp_opt == 'disabled' ? false : slirp_opt} 18664d34a86bSPaolo Bonziniif slirp_opt != 'disabled' 1867f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 1868f9332757SPaolo Bonziniendif 1869f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 1870f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 1871f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 1872f9332757SPaolo Bonziniendif 1873f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 1874f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 1875fdb75aefSPaolo Bonzinisummary_info += {'target list': ' '.join(target_dirs)} 1876f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 1877deb62371SPaolo Bonzinisummary_info += {'sparse enabled': sparse.found()} 1878f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 1879f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 18803e8529ddSLaurent Viviersummary_info += {'static build': config_host.has_key('CONFIG_STATIC')} 1881f9332757SPaolo Bonziniif targetos == 'darwin' 1882f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 1883f9332757SPaolo Bonziniendif 1884f9332757SPaolo Bonzini# TODO: add back version 188535be72baSPaolo Bonzinisummary_info += {'SDL support': sdl.found()} 188635be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()} 1887f9332757SPaolo Bonzini# TODO: add back version 1888f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 1889f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 1890b7612f45SPaolo Bonzinisummary_info += {'pixman': pixman.found()} 1891f9332757SPaolo Bonzini# TODO: add back version 1892f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 1893f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 1894f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 1895f9332757SPaolo Bonzini# TODO: add back version 1896f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 1897f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 1898f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 1899f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1900f9332757SPaolo Bonziniendif 1901f9332757SPaolo Bonzini# TODO: add back version 1902f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 1903f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 1904f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1905f9332757SPaolo Bonziniendif 1906f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 1907f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 1908f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 1909f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 1910f9332757SPaolo Bonzini# TODO: add back version 1911f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 1912f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 1913f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 1914f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 1915f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 1916f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 1917f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 19186ec0e15dSPaolo Bonzinisummary_info += {'Multipath support': mpathpersist.found()} 1919a0b93237SPaolo Bonzinisummary_info += {'VNC support': vnc.found()} 1920a0b93237SPaolo Bonziniif vnc.found() 1921a0b93237SPaolo Bonzini summary_info += {'VNC SASL support': sasl.found()} 1922a0b93237SPaolo Bonzini summary_info += {'VNC JPEG support': jpeg.found()} 1923a0b93237SPaolo Bonzini summary_info += {'VNC PNG support': png.found()} 1924f9332757SPaolo Bonziniendif 1925f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 1926f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 1927f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 1928f9332757SPaolo Bonziniendif 1929f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 1930f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 1931f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 1932f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 1933f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 1934f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 1935f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 1936f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 1937f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 193805512f55SPaolo Bonzinisummary_info += {'KVM support': config_all.has_key('CONFIG_KVM')} 193905512f55SPaolo Bonzinisummary_info += {'HAX support': config_all.has_key('CONFIG_HAX')} 194005512f55SPaolo Bonzinisummary_info += {'HVF support': config_all.has_key('CONFIG_HVF')} 194105512f55SPaolo Bonzinisummary_info += {'WHPX support': config_all.has_key('CONFIG_WHPX')} 194205512f55SPaolo Bonzinisummary_info += {'TCG support': config_all.has_key('CONFIG_TCG')} 194305512f55SPaolo Bonziniif config_all.has_key('CONFIG_TCG') 194405512f55SPaolo Bonzini summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 194505512f55SPaolo Bonzini summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 194605512f55SPaolo Bonziniendif 1947aa087962SPaolo Bonzinisummary_info += {'malloc trim support': has_malloc_trim} 1948f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 1949f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 1950fbb4121dSPaolo Bonzinisummary_info += {'fdt support': fdt_opt == 'disabled' ? false : fdt_opt} 1951f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 1952f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 1953f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 1954f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 1955f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 1956f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 1957f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 1958f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 1959f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 1960f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 1961f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 1962f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 1963f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 1964f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 1965f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 1966f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 1967f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 1968f9332757SPaolo Bonziniendif 1969f9332757SPaolo Bonzini# TODO: add back protocol and server version 1970f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 1971f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 1972f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 1973f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 19740a40bcb7SCésar Belleysummary_info += {'U2F support': u2f.found()} 1975f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 1976f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 1977f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 1978f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 1979f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 1980f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 1981f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 1982f9332757SPaolo Bonziniif targetos == 'windows' 1983f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 1984f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 1985f9332757SPaolo Bonzini endif 1986f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 1987f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 19884bad7c3bSStefan Hajnoczi summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI')} 1989f9332757SPaolo Bonziniendif 1990f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 1991f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 1992f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 1993f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 1994f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 1995f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 1996f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 1997bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 1998f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 1999f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 2000f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 2001f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 2002f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 2003f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 2004f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 2005f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 2006f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 2007f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 2008f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 2009aa087962SPaolo Bonzinisummary_info += {'memory allocator': get_option('malloc')} 2010f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 2011f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 2012f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 2013f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 2014f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 2015f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 2016f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 2017f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 2018f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 2019f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 2020f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 2021f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 20228b18cdbfSRichard Hendersonsummary_info += {'capstone': capstone_opt == 'disabled' ? false : capstone_opt} 2023f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 2024f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 2025f01496a3SPaolo Bonzinisummary_info += {'libudev': libudev.found()} 2026f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 2027f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 2028f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 2029f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 2030f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 2031f9332757SPaolo Bonziniendif 2032f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 2033f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 2034f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 2035f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 2036f9332757SPaolo Bonzini 2037f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 2038f9332757SPaolo Bonzini message() 2039f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 2040f9332757SPaolo Bonzini message() 2041f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 2042f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 2043f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 2044f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 2045f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 2046f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 2047f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 2048f9332757SPaolo Bonziniendif 2049f9332757SPaolo Bonzini 2050f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 2051f9332757SPaolo Bonzini message() 2052f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 2053f9332757SPaolo Bonzini message() 2054f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 2055f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 2056f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 2057f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 2058f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 2059f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 2060f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 2061f9332757SPaolo Bonziniendif 2062