1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0', 2a5cb7c5aSPaolo Bonzini default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 'b_colorout=auto'] + 3a5cb7c5aSPaolo Bonzini (meson.version().version_compare('>=0.56.0') ? [ 'b_staticpic=false' ] : []), 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 20e3667660SYonggang Luo 21e3667660SYonggang Luo# Temporary directory used for files created while 22e3667660SYonggang Luo# configure runs. Since it is in the build directory 23e3667660SYonggang Luo# we can safely blow away any previous version of it 24e3667660SYonggang Luo# (and we need not jump through hoops to try to delete 25e3667660SYonggang Luo# it when configure exits.) 26e3667660SYonggang Luotmpdir = meson.current_build_dir() / 'meson-private/temp' 278fe11232SMarc-André Lureau 288fe11232SMarc-André Lureauif get_option('qemu_suffix').startswith('/') 298fe11232SMarc-André Lureau error('qemu_suffix cannot start with a /') 308fe11232SMarc-André Lureauendif 318fe11232SMarc-André Lureau 3216bf7a33SPaolo Bonziniqemu_confdir = get_option('sysconfdir') / get_option('qemu_suffix') 33ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix') 34491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix') 3516bf7a33SPaolo Bonziniqemu_moddir = get_option('libdir') / get_option('qemu_suffix') 3616bf7a33SPaolo Bonzini 3716bf7a33SPaolo Bonziniqemu_desktopdir = get_option('datadir') / 'applications' 3816bf7a33SPaolo Bonziniqemu_icondir = get_option('datadir') / 'icons' 3916bf7a33SPaolo Bonzini 40859aef02SPaolo Bonziniconfig_host_data = configuration_data() 41859aef02SPaolo Bonzinigenh = [] 42a5665051SPaolo Bonzini 43760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 44760e4327SPaolo Bonzinihave_user = false 45760e4327SPaolo Bonzinihave_system = false 46760e4327SPaolo Bonziniforeach target : target_dirs 47760e4327SPaolo Bonzini have_user = have_user or target.endswith('-user') 48760e4327SPaolo Bonzini have_system = have_system or target.endswith('-softmmu') 49760e4327SPaolo Bonziniendforeach 50760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 51760e4327SPaolo Bonzinihave_block = have_system or have_tools 52760e4327SPaolo Bonzini 53201e8ed7SPaolo Bonzinipython = import('python').find_installation() 54201e8ed7SPaolo Bonzini 55201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 566125673eSSergei Trofimovichsupported_cpus = ['ppc', 'ppc64', 's390x', 'riscv32', 'riscv64', 'x86', 'x86_64', 57201e8ed7SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 58201e8ed7SPaolo Bonzini 59201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family() 60201e8ed7SPaolo Bonzinitargetos = host_machine.system() 61201e8ed7SPaolo Bonzini 628a19980eSPaolo Bonziniif cpu in ['x86', 'x86_64'] 638a19980eSPaolo Bonzini kvm_targets = ['i386-softmmu', 'x86_64-softmmu'] 648a19980eSPaolo Bonzinielif cpu == 'aarch64' 658a19980eSPaolo Bonzini kvm_targets = ['aarch64-softmmu'] 668a19980eSPaolo Bonzinielif cpu == 's390x' 678a19980eSPaolo Bonzini kvm_targets = ['s390x-softmmu'] 688a19980eSPaolo Bonzinielif cpu in ['ppc', 'ppc64'] 698a19980eSPaolo Bonzini kvm_targets = ['ppc-softmmu', 'ppc64-softmmu'] 70fbc5884cSHuacai Chenelif cpu in ['mips', 'mips64'] 71fbc5884cSHuacai Chen kvm_targets = ['mips-softmmu', 'mipsel-softmmu', 'mips64-softmmu', 'mips64el-softmmu'] 728a19980eSPaolo Bonzinielse 738a19980eSPaolo Bonzini kvm_targets = [] 748a19980eSPaolo Bonziniendif 758a19980eSPaolo Bonzini 768a19980eSPaolo Bonziniaccelerator_targets = { 'CONFIG_KVM': kvm_targets } 770c3e41d4SAlex Bennéeif cpu in ['x86', 'x86_64', 'arm', 'aarch64'] 780c3e41d4SAlex Bennée # i368 emulator provides xenpv machine type for multiple architectures 790c3e41d4SAlex Bennée accelerator_targets += { 800c3e41d4SAlex Bennée 'CONFIG_XEN': ['i386-softmmu', 'x86_64-softmmu'], 810c3e41d4SAlex Bennée } 820c3e41d4SAlex Bennéeendif 838a19980eSPaolo Bonziniif cpu in ['x86', 'x86_64'] 848a19980eSPaolo Bonzini accelerator_targets += { 858a19980eSPaolo Bonzini 'CONFIG_HAX': ['i386-softmmu', 'x86_64-softmmu'], 868a19980eSPaolo Bonzini 'CONFIG_HVF': ['x86_64-softmmu'], 878a19980eSPaolo Bonzini 'CONFIG_WHPX': ['i386-softmmu', 'x86_64-softmmu'], 888a19980eSPaolo Bonzini } 898a19980eSPaolo Bonziniendif 908a19980eSPaolo Bonzini 91201e8ed7SPaolo Bonzini################## 92201e8ed7SPaolo Bonzini# Compiler flags # 93201e8ed7SPaolo Bonzini################## 94201e8ed7SPaolo Bonzini 95ff9ed62bSAlexander Bulekov# Specify linker-script with add_project_link_arguments so that it is not placed 96ff9ed62bSAlexander Bulekov# within a linker --start-group/--end-group pair 97ff9ed62bSAlexander Bulekovif 'CONFIG_FUZZ' in config_host 98ff9ed62bSAlexander Bulekov add_project_link_arguments(['-Wl,-T,', 99ff9ed62bSAlexander Bulekov (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')], 100ff9ed62bSAlexander Bulekov native: false, language: ['c', 'cpp', 'objc']) 101ff9ed62bSAlexander Bulekovendif 102ff9ed62bSAlexander Bulekov 103a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 104a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 105a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 106a5665051SPaolo Bonzini native: false, language: 'cpp') 107a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 108a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 109a5665051SPaolo Bonzini 1101e6e616dSPaolo Bonziniif targetos == 'linux' 1111e6e616dSPaolo Bonzini add_project_arguments('-isystem', meson.current_source_dir() / 'linux-headers', 1121e6e616dSPaolo Bonzini '-isystem', 'linux-headers', 1131e6e616dSPaolo Bonzini language: ['c', 'cpp']) 1141e6e616dSPaolo Bonziniendif 1151e6e616dSPaolo Bonzini 1161e6e616dSPaolo Bonziniif 'CONFIG_TCG_INTERPRETER' in config_host 1171e6e616dSPaolo Bonzini tcg_arch = 'tci' 1181e6e616dSPaolo Bonzinielif config_host['ARCH'] == 'sparc64' 1191e6e616dSPaolo Bonzini tcg_arch = 'sparc' 1201e6e616dSPaolo Bonzinielif config_host['ARCH'] == 's390x' 1211e6e616dSPaolo Bonzini tcg_arch = 's390' 1221e6e616dSPaolo Bonzinielif config_host['ARCH'] in ['x86_64', 'x32'] 1231e6e616dSPaolo Bonzini tcg_arch = 'i386' 1241e6e616dSPaolo Bonzinielif config_host['ARCH'] == 'ppc64' 1251e6e616dSPaolo Bonzini tcg_arch = 'ppc' 1261e6e616dSPaolo Bonzinielif config_host['ARCH'] in ['riscv32', 'riscv64'] 1271e6e616dSPaolo Bonzini tcg_arch = 'riscv' 1281e6e616dSPaolo Bonzinielse 1291e6e616dSPaolo Bonzini tcg_arch = config_host['ARCH'] 1301e6e616dSPaolo Bonziniendif 1311e6e616dSPaolo Bonziniadd_project_arguments('-iquote', meson.current_source_dir() / 'tcg' / tcg_arch, 1321e6e616dSPaolo Bonzini '-iquote', '.', 1331e6e616dSPaolo Bonzini '-iquote', meson.current_source_dir(), 1341e6e616dSPaolo Bonzini '-iquote', meson.current_source_dir() / 'accel/tcg', 1351e6e616dSPaolo Bonzini '-iquote', meson.current_source_dir() / 'include', 1361e6e616dSPaolo Bonzini '-iquote', meson.current_source_dir() / 'disas/libvixl', 1371e6e616dSPaolo Bonzini language: ['c', 'cpp', 'objc']) 138c46f76d1SAlexander Bulekov 139fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 140fc929892SMarc-André Lureauif link_language == 'cpp' 141fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 142fc929892SMarc-André Lureauendif 143a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 144a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 145a5665051SPaolo Bonziniendif 146a5665051SPaolo Bonzini 147deb62371SPaolo Bonzinisparse = find_program('cgcc', required: get_option('sparse')) 148deb62371SPaolo Bonziniif sparse.found() 149968b4db3SPaolo Bonzini run_target('sparse', 150968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 151deb62371SPaolo Bonzini 'compile_commands.json', sparse.full_path(), '-Wbitwise', 152deb62371SPaolo Bonzini '-Wno-transparent-union', '-Wno-old-initializer', 153deb62371SPaolo Bonzini '-Wno-non-pointer-null']) 154968b4db3SPaolo Bonziniendif 155968b4db3SPaolo Bonzini 1566ec0e15dSPaolo Bonzini########################################### 1576ec0e15dSPaolo Bonzini# Target-specific checks and dependencies # 1586ec0e15dSPaolo Bonzini########################################### 1596ec0e15dSPaolo Bonzini 1606ec0e15dSPaolo Bonziniif targetos != 'linux' and get_option('mpath').enabled() 1616ec0e15dSPaolo Bonzini error('Multipath is supported only on Linux') 1626ec0e15dSPaolo Bonziniendif 1636ec0e15dSPaolo Bonzini 164a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 165a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 1664a96337dSPaolo Bonziniwinmm = [] 167a81df1b6SPaolo Bonzinisocket = [] 16804c6f1e7SMarc-André Lureauversion_res = [] 169d92989aaSMarc-André Lureaucoref = [] 170d92989aaSMarc-André Lureauiokit = [] 171b6c7cfd4SPaolo Bonziniemulator_link_args = [] 1728a19980eSPaolo Bonzinihvf = not_found 173a81df1b6SPaolo Bonziniif targetos == 'windows' 174a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 1754a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 17604c6f1e7SMarc-André Lureau 17704c6f1e7SMarc-André Lureau win = import('windows') 17804c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 17904c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 18004c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 181d92989aaSMarc-André Lureauelif targetos == 'darwin' 182d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 183d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 184cfad62f1SPaolo Bonzinielif targetos == 'sunos' 185cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 186cfad62f1SPaolo Bonzini cc.find_library('nsl'), 187cfad62f1SPaolo Bonzini cc.find_library('resolv')] 188cfad62f1SPaolo Bonzinielif targetos == 'haiku' 189cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 190cfad62f1SPaolo Bonzini cc.find_library('network'), 191cfad62f1SPaolo Bonzini cc.find_library('bsd')] 192b6c7cfd4SPaolo Bonzinielif targetos == 'openbsd' 193b6c7cfd4SPaolo Bonzini if not get_option('tcg').disabled() and target_dirs.length() > 0 194b6c7cfd4SPaolo Bonzini # Disable OpenBSD W^X if available 195b6c7cfd4SPaolo Bonzini emulator_link_args = cc.get_supported_link_arguments('-Wl,-z,wxneeded') 196b6c7cfd4SPaolo Bonzini endif 197a81df1b6SPaolo Bonziniendif 1986ec0e15dSPaolo Bonzini 1998a19980eSPaolo Bonziniaccelerators = [] 2008a19980eSPaolo Bonziniif not get_option('kvm').disabled() and targetos == 'linux' 2018a19980eSPaolo Bonzini accelerators += 'CONFIG_KVM' 2028a19980eSPaolo Bonziniendif 2038a19980eSPaolo Bonziniif not get_option('xen').disabled() and 'CONFIG_XEN_BACKEND' in config_host 2048a19980eSPaolo Bonzini accelerators += 'CONFIG_XEN' 2058a19980eSPaolo Bonzini have_xen_pci_passthrough = not get_option('xen_pci_passthrough').disabled() and targetos == 'linux' 2068a19980eSPaolo Bonzinielse 2078a19980eSPaolo Bonzini have_xen_pci_passthrough = false 2088a19980eSPaolo Bonziniendif 2098a19980eSPaolo Bonziniif not get_option('whpx').disabled() and targetos == 'windows' 21057e2a1f8SSunil Muthuswamy if get_option('whpx').enabled() and host_machine.cpu() != 'x86_64' 2118a19980eSPaolo Bonzini error('WHPX requires 64-bit host') 2128a19980eSPaolo Bonzini elif cc.has_header('WinHvPlatform.h', required: get_option('whpx')) and \ 2138a19980eSPaolo Bonzini cc.has_header('WinHvEmulation.h', required: get_option('whpx')) 2148a19980eSPaolo Bonzini accelerators += 'CONFIG_WHPX' 2158a19980eSPaolo Bonzini endif 2168a19980eSPaolo Bonziniendif 2178a19980eSPaolo Bonziniif not get_option('hvf').disabled() 2188a19980eSPaolo Bonzini hvf = dependency('appleframeworks', modules: 'Hypervisor', 2198a19980eSPaolo Bonzini required: get_option('hvf')) 2208a19980eSPaolo Bonzini if hvf.found() 2218a19980eSPaolo Bonzini accelerators += 'CONFIG_HVF' 2228a19980eSPaolo Bonzini endif 2238a19980eSPaolo Bonziniendif 2248a19980eSPaolo Bonziniif not get_option('hax').disabled() 2258a19980eSPaolo Bonzini if get_option('hax').enabled() or targetos in ['windows', 'darwin', 'netbsd'] 2268a19980eSPaolo Bonzini accelerators += 'CONFIG_HAX' 2278a19980eSPaolo Bonzini endif 2288a19980eSPaolo Bonziniendif 2298a19980eSPaolo Bonziniif not get_option('tcg').disabled() 2308a19980eSPaolo Bonzini if cpu not in supported_cpus 2318a19980eSPaolo Bonzini if 'CONFIG_TCG_INTERPRETER' in config_host 2328a19980eSPaolo Bonzini warning('Unsupported CPU @0@, will use TCG with TCI (experimental)'.format(cpu)) 2338a19980eSPaolo Bonzini else 2348a19980eSPaolo Bonzini error('Unsupported CPU @0@, try --enable-tcg-interpreter'.format(cpu)) 2358a19980eSPaolo Bonzini endif 2368a19980eSPaolo Bonzini endif 2378a19980eSPaolo Bonzini accelerators += 'CONFIG_TCG' 2388a19980eSPaolo Bonzini config_host += { 'CONFIG_TCG': 'y' } 2398a19980eSPaolo Bonziniendif 2408a19980eSPaolo Bonzini 2418a19980eSPaolo Bonziniif 'CONFIG_KVM' not in accelerators and get_option('kvm').enabled() 2428a19980eSPaolo Bonzini error('KVM not available on this platform') 2438a19980eSPaolo Bonziniendif 2448a19980eSPaolo Bonziniif 'CONFIG_HVF' not in accelerators and get_option('hvf').enabled() 2458a19980eSPaolo Bonzini error('HVF not available on this platform') 2468a19980eSPaolo Bonziniendif 2478a19980eSPaolo Bonziniif 'CONFIG_WHPX' not in accelerators and get_option('whpx').enabled() 2488a19980eSPaolo Bonzini error('WHPX not available on this platform') 2498a19980eSPaolo Bonziniendif 2508a19980eSPaolo Bonziniif not have_xen_pci_passthrough and get_option('xen_pci_passthrough').enabled() 2518a19980eSPaolo Bonzini if 'CONFIG_XEN' in accelerators 2528a19980eSPaolo Bonzini error('Xen PCI passthrough not available on this platform') 2538a19980eSPaolo Bonzini else 2548a19980eSPaolo Bonzini error('Xen PCI passthrough requested but Xen not enabled') 2558a19980eSPaolo Bonzini endif 2568a19980eSPaolo Bonziniendif 257b4e312e9SPaolo Bonzini 2586ec0e15dSPaolo Bonzini################ 2596ec0e15dSPaolo Bonzini# Dependencies # 2606ec0e15dSPaolo Bonzini################ 2616ec0e15dSPaolo Bonzini 262215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands. This was 263215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles. 264215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(), 265215b0c2fSPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 266953d5a9eSMarc-André Lureauglib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(), 267953d5a9eSMarc-André Lureau link_args: config_host['GLIB_LIBS'].split()) 268953d5a9eSMarc-André Lureau# override glib dep with the configure results (for subprojects) 269953d5a9eSMarc-André Lureaumeson.override_dependency('glib-2.0', glib) 270953d5a9eSMarc-André Lureau 271a81df1b6SPaolo Bonzinigio = not_found 272a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 273a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 274a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 275a81df1b6SPaolo Bonziniendif 276a81df1b6SPaolo Bonzinilttng = not_found 277a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 278a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 279a81df1b6SPaolo Bonziniendif 280a81df1b6SPaolo Bonziniurcubp = not_found 281a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 282a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 283a81df1b6SPaolo Bonziniendif 28446859d93SDaniel P. Berrangégcrypt = not_found 28546859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host 28646859d93SDaniel P. Berrangé gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), 28746859d93SDaniel P. Berrangé link_args: config_host['GCRYPT_LIBS'].split()) 28846859d93SDaniel P. Berrangéendif 289a81df1b6SPaolo Bonzininettle = not_found 290a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 291a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 292a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 293a81df1b6SPaolo Bonziniendif 294a81df1b6SPaolo Bonzinignutls = not_found 295a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 296a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 297a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 298a81df1b6SPaolo Bonziniendif 299b7612f45SPaolo Bonzinipixman = not_found 300b7612f45SPaolo Bonziniif have_system or have_tools 301b7612f45SPaolo Bonzini pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', 3021a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 303b7612f45SPaolo Bonziniendif 3045e7fbd25SMarc-André Lureaupam = not_found 3055e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 3065e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 3075e7fbd25SMarc-André Lureauendif 3085e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 3091ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static) 3105e5733e5SMarc-André Lureaulinux_io_uring = not_found 3115e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 3125e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 3135e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 3145e5733e5SMarc-André Lureauendif 3155e5733e5SMarc-André Lureaulibxml2 = not_found 3165e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 3175e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 3185e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 3195e5733e5SMarc-André Lureauendif 3205e5733e5SMarc-André Lureaulibnfs = not_found 32130045c05SPaolo Bonziniif not get_option('libnfs').auto() or have_block 32230045c05SPaolo Bonzini libnfs = dependency('libnfs', version: '>=1.9.3', 32330045c05SPaolo Bonzini required: get_option('libnfs'), 32430045c05SPaolo Bonzini method: 'pkg-config', static: enable_static) 3255e5733e5SMarc-André Lureauendif 326f7f2d651SPaolo Bonzini 327f7f2d651SPaolo Bonzinilibattr_test = ''' 328f7f2d651SPaolo Bonzini #include <stddef.h> 329f7f2d651SPaolo Bonzini #include <sys/types.h> 330f7f2d651SPaolo Bonzini #ifdef CONFIG_LIBATTR 331f7f2d651SPaolo Bonzini #include <attr/xattr.h> 332f7f2d651SPaolo Bonzini #else 333f7f2d651SPaolo Bonzini #include <sys/xattr.h> 334f7f2d651SPaolo Bonzini #endif 335f7f2d651SPaolo Bonzini int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }''' 336f7f2d651SPaolo Bonzini 337ec0d5893SMarc-André Lureaulibattr = not_found 338f7f2d651SPaolo Bonzinihave_old_libattr = false 339f7f2d651SPaolo Bonziniif not get_option('attr').disabled() 340f7f2d651SPaolo Bonzini if cc.links(libattr_test) 341f7f2d651SPaolo Bonzini libattr = declare_dependency() 342f7f2d651SPaolo Bonzini else 343f7f2d651SPaolo Bonzini libattr = cc.find_library('attr', has_headers: ['attr/xattr.h'], 344f7f2d651SPaolo Bonzini required: get_option('attr'), 345f7f2d651SPaolo Bonzini static: enable_static) 346f7f2d651SPaolo Bonzini if libattr.found() and not \ 347f7f2d651SPaolo Bonzini cc.links(libattr_test, dependencies: libattr, args: '-DCONFIG_LIBATTR') 348f7f2d651SPaolo Bonzini libattr = not_found 349f7f2d651SPaolo Bonzini if get_option('attr').enabled() 350f7f2d651SPaolo Bonzini error('could not link libattr') 351f7f2d651SPaolo Bonzini else 352f7f2d651SPaolo Bonzini warning('could not link libattr, disabling') 353ec0d5893SMarc-André Lureau endif 354f7f2d651SPaolo Bonzini else 355f7f2d651SPaolo Bonzini have_old_libattr = libattr.found() 356f7f2d651SPaolo Bonzini endif 357f7f2d651SPaolo Bonzini endif 358f7f2d651SPaolo Bonziniendif 359f7f2d651SPaolo Bonzini 360*c1ec4941SPaolo Bonzinicocoa = dependency('appleframeworks', modules: 'Cocoa', required: get_option('cocoa')) 361*c1ec4941SPaolo Bonziniif cocoa.found() and get_option('sdl').enabled() 362*c1ec4941SPaolo Bonzini error('Cocoa and SDL cannot be enabled at the same time') 363*c1ec4941SPaolo Bonziniendif 364*c1ec4941SPaolo Bonziniif cocoa.found() and get_option('gtk').enabled() 365*c1ec4941SPaolo Bonzini error('Cocoa and GTK+ cannot be enabled at the same time') 366*c1ec4941SPaolo Bonziniendif 367*c1ec4941SPaolo Bonzini 3683f99cf57SPaolo Bonziniseccomp = not_found 36990835c2bSPaolo Bonziniif not get_option('seccomp').auto() or have_system or have_tools 37090835c2bSPaolo Bonzini seccomp = dependency('libseccomp', version: '>=2.3.0', 37190835c2bSPaolo Bonzini required: get_option('seccomp'), 37290835c2bSPaolo Bonzini method: 'pkg-config', static: enable_static) 3733f99cf57SPaolo Bonziniendif 374727c8bb8SPaolo Bonzini 3753f99cf57SPaolo Bonzinilibcap_ng = not_found 376727c8bb8SPaolo Bonziniif not get_option('cap_ng').auto() or have_system or have_tools 377727c8bb8SPaolo Bonzini libcap_ng = cc.find_library('cap-ng', has_headers: ['cap-ng.h'], 378727c8bb8SPaolo Bonzini required: get_option('cap_ng'), 379727c8bb8SPaolo Bonzini static: enable_static) 3803f99cf57SPaolo Bonziniendif 381727c8bb8SPaolo Bonziniif libcap_ng.found() and not cc.links(''' 382727c8bb8SPaolo Bonzini #include <cap-ng.h> 383727c8bb8SPaolo Bonzini int main(void) 384727c8bb8SPaolo Bonzini { 385727c8bb8SPaolo Bonzini capng_capability_to_name(CAPNG_EFFECTIVE); 386727c8bb8SPaolo Bonzini return 0; 387727c8bb8SPaolo Bonzini }''', dependencies: libcap_ng) 388727c8bb8SPaolo Bonzini libcap_ng = not_found 389727c8bb8SPaolo Bonzini if get_option('cap_ng').enabled() 390727c8bb8SPaolo Bonzini error('could not link libcap-ng') 391727c8bb8SPaolo Bonzini else 392727c8bb8SPaolo Bonzini warning('could not link libcap-ng, disabling') 393727c8bb8SPaolo Bonzini endif 394727c8bb8SPaolo Bonziniendif 395727c8bb8SPaolo Bonzini 3961917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools 3971917ec6dSPaolo Bonzini xkbcommon = not_found 3981917ec6dSPaolo Bonzinielse 3991917ec6dSPaolo Bonzini xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), 4001a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 401ade60d4fSMarc-André Lureauendif 402cdaf0722SMarc-André Lureauvde = not_found 403cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE') 404cdaf0722SMarc-André Lureau vde = declare_dependency(link_args: config_host['VDE_LIBS'].split()) 405cdaf0722SMarc-André Lureauendif 406478e943fSPaolo Bonzinipulse = not_found 407478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 408478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 409478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 410478e943fSPaolo Bonziniendif 411478e943fSPaolo Bonzinialsa = not_found 412478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 413478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 414478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 415478e943fSPaolo Bonziniendif 416478e943fSPaolo Bonzinijack = not_found 417478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 418478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 419478e943fSPaolo Bonziniendif 4202634733cSPaolo Bonzinispice = not_found 421d72c34ccSGerd Hoffmannspice_headers = not_found 4222634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 4232634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 4242634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 425d72c34ccSGerd Hoffmann spice_headers = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split()) 4262634733cSPaolo Bonziniendif 4275ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 428ccf7afa5SPaolo Bonzinilibdl = not_found 429ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 430ccf7afa5SPaolo Bonzini libdl = cc.find_library('dl', required: true) 431ccf7afa5SPaolo Bonziniendif 43299650b62SPaolo Bonzinilibiscsi = not_found 4339db405a3SPaolo Bonziniif not get_option('libiscsi').auto() or have_block 4349db405a3SPaolo Bonzini libiscsi = dependency('libiscsi', version: '>=1.9.0', 4359db405a3SPaolo Bonzini required: get_option('libiscsi'), 4369db405a3SPaolo Bonzini method: 'pkg-config', static: enable_static) 43799650b62SPaolo Bonziniendif 4385e5733e5SMarc-André Lureauzstd = not_found 439b1def33dSPaolo Bonziniif not get_option('zstd').auto() or have_block 440b1def33dSPaolo Bonzini zstd = dependency('libzstd', version: '>=1.4.0', 441b1def33dSPaolo Bonzini required: get_option('zstd'), 442b1def33dSPaolo Bonzini method: 'pkg-config', static: enable_static) 4435e5733e5SMarc-André Lureauendif 444ea458960SMarc-André Lureaugbm = not_found 445ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 446ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 447ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 448ea458960SMarc-André Lureauendif 449ea458960SMarc-André Lureauvirgl = not_found 450ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 451ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 452ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 453ea458960SMarc-André Lureauendif 4541d7bb6abSMarc-André Lureaucurl = not_found 455f9cd86feSPaolo Bonziniif not get_option('curl').auto() or have_block 456f9cd86feSPaolo Bonzini curl = dependency('libcurl', version: '>=7.29.0', 457f9cd86feSPaolo Bonzini method: 'pkg-config', 458f9cd86feSPaolo Bonzini required: get_option('curl'), 459f9cd86feSPaolo Bonzini static: enable_static) 4601d7bb6abSMarc-André Lureauendif 461f15bff25SPaolo Bonzinilibudev = not_found 462f01496a3SPaolo Bonziniif targetos == 'linux' and (have_system or have_tools) 4636ec0e15dSPaolo Bonzini libudev = dependency('libudev', 464a0fbbb6eSPaolo Bonzini method: 'pkg-config', 4655c53015aSPaolo Bonzini required: get_option('libudev'), 4666ec0e15dSPaolo Bonzini static: enable_static) 467f15bff25SPaolo Bonziniendif 4686ec0e15dSPaolo Bonzini 4695c53015aSPaolo Bonzinimpathlibs = [libudev] 4706ec0e15dSPaolo Bonzinimpathpersist = not_found 4716ec0e15dSPaolo Bonzinimpathpersist_new_api = false 4726ec0e15dSPaolo Bonziniif targetos == 'linux' and have_tools and not get_option('mpath').disabled() 4736ec0e15dSPaolo Bonzini mpath_test_source_new = ''' 4746ec0e15dSPaolo Bonzini #include <libudev.h> 4756ec0e15dSPaolo Bonzini #include <mpath_persist.h> 4766ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 4776ec0e15dSPaolo Bonzini int logsink; 4786ec0e15dSPaolo Bonzini static struct config *multipath_conf; 4796ec0e15dSPaolo Bonzini extern struct udev *udev; 4806ec0e15dSPaolo Bonzini extern struct config *get_multipath_config(void); 4816ec0e15dSPaolo Bonzini extern void put_multipath_config(struct config *conf); 4826ec0e15dSPaolo Bonzini struct udev *udev; 4836ec0e15dSPaolo Bonzini struct config *get_multipath_config(void) { return multipath_conf; } 4846ec0e15dSPaolo Bonzini void put_multipath_config(struct config *conf) { } 4856ec0e15dSPaolo Bonzini int main(void) { 4866ec0e15dSPaolo Bonzini udev = udev_new(); 4876ec0e15dSPaolo Bonzini multipath_conf = mpath_lib_init(); 4886ec0e15dSPaolo Bonzini return 0; 4896ec0e15dSPaolo Bonzini }''' 4906ec0e15dSPaolo Bonzini mpath_test_source_old = ''' 4916ec0e15dSPaolo Bonzini #include <libudev.h> 4926ec0e15dSPaolo Bonzini #include <mpath_persist.h> 4936ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 4946ec0e15dSPaolo Bonzini int logsink; 4956ec0e15dSPaolo Bonzini int main(void) { 4966ec0e15dSPaolo Bonzini struct udev *udev = udev_new(); 4976ec0e15dSPaolo Bonzini mpath_lib_init(udev); 4986ec0e15dSPaolo Bonzini return 0; 4996ec0e15dSPaolo Bonzini }''' 5005c53015aSPaolo Bonzini libmpathpersist = cc.find_library('mpathpersist', 5015c53015aSPaolo Bonzini required: get_option('mpath'), 5025c53015aSPaolo Bonzini static: enable_static) 5035c53015aSPaolo Bonzini if libmpathpersist.found() 5045c53015aSPaolo Bonzini mpathlibs += libmpathpersist 50543b43a40SPaolo Bonzini if enable_static 50643b43a40SPaolo Bonzini mpathlibs += cc.find_library('devmapper', 5076ec0e15dSPaolo Bonzini required: get_option('mpath'), 5086ec0e15dSPaolo Bonzini static: enable_static) 50943b43a40SPaolo Bonzini endif 51043b43a40SPaolo Bonzini mpathlibs += cc.find_library('multipath', 5116ec0e15dSPaolo Bonzini required: get_option('mpath'), 5126ec0e15dSPaolo Bonzini static: enable_static) 51343b43a40SPaolo Bonzini foreach lib: mpathlibs 51443b43a40SPaolo Bonzini if not lib.found() 51543b43a40SPaolo Bonzini mpathlibs = [] 51643b43a40SPaolo Bonzini break 51743b43a40SPaolo Bonzini endif 51843b43a40SPaolo Bonzini endforeach 5195c53015aSPaolo Bonzini if mpathlibs.length() == 0 5205c53015aSPaolo Bonzini msg = 'Dependencies missing for libmpathpersist' 5215c53015aSPaolo Bonzini elif cc.links(mpath_test_source_new, dependencies: mpathlibs) 5226ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 5236ec0e15dSPaolo Bonzini mpathpersist_new_api = true 5246ec0e15dSPaolo Bonzini elif cc.links(mpath_test_source_old, dependencies: mpathlibs) 5256ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 5266ec0e15dSPaolo Bonzini else 5275c53015aSPaolo Bonzini msg = 'Cannot detect libmpathpersist API' 5285c53015aSPaolo Bonzini endif 5295c53015aSPaolo Bonzini if not mpathpersist.found() 5306ec0e15dSPaolo Bonzini if get_option('mpath').enabled() 5315c53015aSPaolo Bonzini error(msg) 5326ec0e15dSPaolo Bonzini else 5335c53015aSPaolo Bonzini warning(msg + ', disabling') 5346ec0e15dSPaolo Bonzini endif 5356ec0e15dSPaolo Bonzini endif 5366ec0e15dSPaolo Bonzini endif 5376ec0e15dSPaolo Bonziniendif 5386ec0e15dSPaolo Bonzini 5395285e593SYonggang Luoiconv = not_found 54030fe76b1SPaolo Bonzinicurses = not_found 54130fe76b1SPaolo Bonziniif have_system and not get_option('curses').disabled() 5425285e593SYonggang Luo curses_test = ''' 5435285e593SYonggang Luo #include <locale.h> 5445285e593SYonggang Luo #include <curses.h> 5455285e593SYonggang Luo #include <wchar.h> 5465285e593SYonggang Luo int main(void) { 5475285e593SYonggang Luo wchar_t wch = L'w'; 5485285e593SYonggang Luo setlocale(LC_ALL, ""); 5495285e593SYonggang Luo resize_term(0, 0); 5505285e593SYonggang Luo addwstr(L"wide chars\n"); 5515285e593SYonggang Luo addnwstr(&wch, 1); 5525285e593SYonggang Luo add_wch(WACS_DEGREE); 5535285e593SYonggang Luo return 0; 5545285e593SYonggang Luo }''' 555925a40dfSPaolo Bonzini 556ca31e307SYonggang Luo curses_dep_list = targetos == 'windows' ? ['ncurses', 'ncursesw'] : ['ncursesw'] 557ca31e307SYonggang Luo foreach curses_dep : curses_dep_list 558ca31e307SYonggang Luo if not curses.found() 559ca31e307SYonggang Luo curses = dependency(curses_dep, 5605285e593SYonggang Luo required: false, 5615285e593SYonggang Luo method: 'pkg-config', 5625285e593SYonggang Luo static: enable_static) 563ca31e307SYonggang Luo endif 564ca31e307SYonggang Luo endforeach 565925a40dfSPaolo Bonzini msg = get_option('curses').enabled() ? 'curses library not found' : '' 5660dbce6efSPaolo Bonzini curses_compile_args = ['-DNCURSES_WIDECHAR'] 567925a40dfSPaolo Bonzini if curses.found() 5680dbce6efSPaolo Bonzini if cc.links(curses_test, args: curses_compile_args, dependencies: [curses]) 5690dbce6efSPaolo Bonzini curses = declare_dependency(compile_args: curses_compile_args, dependencies: [curses]) 570925a40dfSPaolo Bonzini else 571925a40dfSPaolo Bonzini msg = 'curses package not usable' 572925a40dfSPaolo Bonzini curses = not_found 5735285e593SYonggang Luo endif 574925a40dfSPaolo Bonzini endif 575925a40dfSPaolo Bonzini if not curses.found() 576925a40dfSPaolo Bonzini has_curses_h = cc.has_header('curses.h', args: curses_compile_args) 577925a40dfSPaolo Bonzini if targetos != 'windows' and not has_curses_h 578925a40dfSPaolo Bonzini message('Trying with /usr/include/ncursesw') 579925a40dfSPaolo Bonzini curses_compile_args += ['-I/usr/include/ncursesw'] 580925a40dfSPaolo Bonzini has_curses_h = cc.has_header('curses.h', args: curses_compile_args) 581925a40dfSPaolo Bonzini endif 582925a40dfSPaolo Bonzini if has_curses_h 583925a40dfSPaolo Bonzini curses_libname_list = (targetos == 'windows' ? ['pdcurses'] : ['ncursesw', 'cursesw']) 584925a40dfSPaolo Bonzini foreach curses_libname : curses_libname_list 5855285e593SYonggang Luo libcurses = cc.find_library(curses_libname, 5865285e593SYonggang Luo required: false, 5875285e593SYonggang Luo static: enable_static) 5885285e593SYonggang Luo if libcurses.found() 589925a40dfSPaolo Bonzini if cc.links(curses_test, args: curses_compile_args, dependencies: libcurses) 590925a40dfSPaolo Bonzini curses = declare_dependency(compile_args: curses_compile_args, 591925a40dfSPaolo Bonzini dependencies: [libcurses]) 5925285e593SYonggang Luo break 593925a40dfSPaolo Bonzini else 594925a40dfSPaolo Bonzini msg = 'curses library not usable' 5955285e593SYonggang Luo endif 5965285e593SYonggang Luo endif 5975285e593SYonggang Luo endforeach 5985285e593SYonggang Luo endif 59930fe76b1SPaolo Bonzini endif 600925a40dfSPaolo Bonzini if not get_option('iconv').disabled() 601925a40dfSPaolo Bonzini foreach link_args : [ ['-liconv'], [] ] 602925a40dfSPaolo Bonzini # Programs will be linked with glib and this will bring in libiconv on FreeBSD. 603925a40dfSPaolo Bonzini # We need to use libiconv if available because mixing libiconv's headers with 604925a40dfSPaolo Bonzini # the system libc does not work. 605925a40dfSPaolo Bonzini # However, without adding glib to the dependencies -L/usr/local/lib will not be 606925a40dfSPaolo Bonzini # included in the command line and libiconv will not be found. 607925a40dfSPaolo Bonzini if cc.links(''' 608925a40dfSPaolo Bonzini #include <iconv.h> 609925a40dfSPaolo Bonzini int main(void) { 610925a40dfSPaolo Bonzini iconv_t conv = iconv_open("WCHAR_T", "UCS-2"); 611925a40dfSPaolo Bonzini return conv != (iconv_t) -1; 612925a40dfSPaolo Bonzini }''', args: config_host['GLIB_CFLAGS'].split() + config_host['GLIB_LIBS'].split() + link_args) 613925a40dfSPaolo Bonzini iconv = declare_dependency(link_args: link_args, dependencies: glib) 614925a40dfSPaolo Bonzini break 615925a40dfSPaolo Bonzini endif 616925a40dfSPaolo Bonzini endforeach 617925a40dfSPaolo Bonzini endif 618925a40dfSPaolo Bonzini if curses.found() and not iconv.found() 619925a40dfSPaolo Bonzini if get_option('iconv').enabled() 620925a40dfSPaolo Bonzini error('iconv not available') 621925a40dfSPaolo Bonzini endif 622925a40dfSPaolo Bonzini msg = 'iconv required for curses UI but not available' 623925a40dfSPaolo Bonzini curses = not_found 624925a40dfSPaolo Bonzini endif 625925a40dfSPaolo Bonzini if not curses.found() and msg != '' 626925a40dfSPaolo Bonzini if get_option('curses').enabled() 627925a40dfSPaolo Bonzini error(msg) 6285285e593SYonggang Luo else 629925a40dfSPaolo Bonzini warning(msg + ', disabling') 63030fe76b1SPaolo Bonzini endif 6315285e593SYonggang Luo endif 6325285e593SYonggang Luoendif 6335285e593SYonggang Luo 6342634733cSPaolo Bonzinibrlapi = not_found 6358c6d4ff4SPaolo Bonziniif not get_option('brlapi').auto() or have_system 6368c6d4ff4SPaolo Bonzini brlapi = cc.find_library('brlapi', has_headers: ['brlapi.h'], 6378c6d4ff4SPaolo Bonzini required: get_option('brlapi'), 6388c6d4ff4SPaolo Bonzini static: enable_static) 6398c6d4ff4SPaolo Bonzini if brlapi.found() and not cc.links(''' 6408c6d4ff4SPaolo Bonzini #include <brlapi.h> 6418c6d4ff4SPaolo Bonzini #include <stddef.h> 6428c6d4ff4SPaolo Bonzini int main(void) { return brlapi__openConnection (NULL, NULL, NULL); }''', dependencies: brlapi) 6438c6d4ff4SPaolo Bonzini brlapi = not_found 6448c6d4ff4SPaolo Bonzini if get_option('brlapi').enabled() 6458c6d4ff4SPaolo Bonzini error('could not link brlapi') 6468c6d4ff4SPaolo Bonzini else 6478c6d4ff4SPaolo Bonzini warning('could not link brlapi, disabling') 6488c6d4ff4SPaolo Bonzini endif 6498c6d4ff4SPaolo Bonzini endif 6502634733cSPaolo Bonziniendif 65135be72baSPaolo Bonzini 652760e4327SPaolo Bonzinisdl = not_found 653*c1ec4941SPaolo Bonziniif not get_option('sdl').auto() or (have_system and not cocoa.found()) 654363743daSYonggang Luo sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) 65535be72baSPaolo Bonzini sdl_image = not_found 656760e4327SPaolo Bonziniendif 65735be72baSPaolo Bonziniif sdl.found() 65835be72baSPaolo Bonzini # work around 2.0.8 bug 65935be72baSPaolo Bonzini sdl = declare_dependency(compile_args: '-Wno-undef', 66035be72baSPaolo Bonzini dependencies: sdl) 6617161a433SVolker Rümelin sdl_image = dependency('SDL2_image', required: get_option('sdl_image'), 6621a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 66335be72baSPaolo Bonzinielse 66435be72baSPaolo Bonzini if get_option('sdl_image').enabled() 665a8dc2aceSSergei Trofimovich error('sdl-image required, but SDL was @0@'.format( 666a8dc2aceSSergei Trofimovich get_option('sdl').disabled() ? 'disabled' : 'not found')) 6672634733cSPaolo Bonzini endif 66835be72baSPaolo Bonzini sdl_image = not_found 66935be72baSPaolo Bonziniendif 67035be72baSPaolo Bonzini 6715e5733e5SMarc-André Lureaurbd = not_found 672fabd1e93SPaolo Bonziniif not get_option('rbd').auto() or have_block 673fabd1e93SPaolo Bonzini librados = cc.find_library('rados', required: get_option('rbd'), 674fabd1e93SPaolo Bonzini static: enable_static) 675fabd1e93SPaolo Bonzini librbd = cc.find_library('rbd', has_headers: ['rbd/librbd.h'], 676fabd1e93SPaolo Bonzini required: get_option('rbd'), 677fabd1e93SPaolo Bonzini static: enable_static) 678fabd1e93SPaolo Bonzini if librados.found() and librbd.found() and cc.links(''' 679fabd1e93SPaolo Bonzini #include <stdio.h> 680fabd1e93SPaolo Bonzini #include <rbd/librbd.h> 681fabd1e93SPaolo Bonzini int main(void) { 682fabd1e93SPaolo Bonzini rados_t cluster; 683fabd1e93SPaolo Bonzini rados_create(&cluster, NULL); 684fabd1e93SPaolo Bonzini return 0; 685fabd1e93SPaolo Bonzini }''', dependencies: [librbd, librados]) 686fabd1e93SPaolo Bonzini rbd = declare_dependency(dependencies: [librbd, librados]) 6875e5733e5SMarc-André Lureau endif 688fabd1e93SPaolo Bonziniendif 689fabd1e93SPaolo Bonzini 6905e5733e5SMarc-André Lureauglusterfs = not_found 69108821ca2SPaolo Bonziniglusterfs_ftruncate_has_stat = false 69208821ca2SPaolo Bonziniglusterfs_iocb_has_stat = false 69308821ca2SPaolo Bonziniif not get_option('glusterfs').auto() or have_block 69408821ca2SPaolo Bonzini glusterfs = dependency('glusterfs-api', version: '>=3', 69508821ca2SPaolo Bonzini required: get_option('glusterfs'), 69608821ca2SPaolo Bonzini method: 'pkg-config', static: enable_static) 69708821ca2SPaolo Bonzini if glusterfs.found() 69808821ca2SPaolo Bonzini glusterfs_ftruncate_has_stat = cc.links(''' 69908821ca2SPaolo Bonzini #include <glusterfs/api/glfs.h> 70008821ca2SPaolo Bonzini 70108821ca2SPaolo Bonzini int 70208821ca2SPaolo Bonzini main(void) 70308821ca2SPaolo Bonzini { 70408821ca2SPaolo Bonzini /* new glfs_ftruncate() passes two additional args */ 70508821ca2SPaolo Bonzini return glfs_ftruncate(NULL, 0, NULL, NULL); 70608821ca2SPaolo Bonzini } 70708821ca2SPaolo Bonzini ''', dependencies: glusterfs) 70808821ca2SPaolo Bonzini glusterfs_iocb_has_stat = cc.links(''' 70908821ca2SPaolo Bonzini #include <glusterfs/api/glfs.h> 71008821ca2SPaolo Bonzini 71108821ca2SPaolo Bonzini /* new glfs_io_cbk() passes two additional glfs_stat structs */ 71208821ca2SPaolo Bonzini static void 71308821ca2SPaolo Bonzini glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 71408821ca2SPaolo Bonzini {} 71508821ca2SPaolo Bonzini 71608821ca2SPaolo Bonzini int 71708821ca2SPaolo Bonzini main(void) 71808821ca2SPaolo Bonzini { 71908821ca2SPaolo Bonzini glfs_io_cbk iocb = &glusterfs_iocb; 72008821ca2SPaolo Bonzini iocb(NULL, 0 , NULL, NULL, NULL); 72108821ca2SPaolo Bonzini return 0; 72208821ca2SPaolo Bonzini } 72308821ca2SPaolo Bonzini ''', dependencies: glusterfs) 72408821ca2SPaolo Bonzini endif 7255e5733e5SMarc-André Lureauendif 7265e5733e5SMarc-André Lureaulibssh = not_found 7275e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 7285e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 7295e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 7305e5733e5SMarc-André Lureauendif 7315e5733e5SMarc-André Lureaulibbzip2 = not_found 73229ba6116SPaolo Bonziniif not get_option('bzip2').auto() or have_block 73329ba6116SPaolo Bonzini libbzip2 = cc.find_library('bz2', has_headers: ['bzlib.h'], 73429ba6116SPaolo Bonzini required: get_option('bzip2'), 73529ba6116SPaolo Bonzini static: enable_static) 73629ba6116SPaolo Bonzini if libbzip2.found() and not cc.links(''' 73729ba6116SPaolo Bonzini #include <bzlib.h> 73829ba6116SPaolo Bonzini int main(void) { BZ2_bzlibVersion(); return 0; }''', dependencies: libbzip2) 73929ba6116SPaolo Bonzini libbzip2 = not_found 74029ba6116SPaolo Bonzini if get_option('bzip2').enabled() 74129ba6116SPaolo Bonzini error('could not link libbzip2') 74229ba6116SPaolo Bonzini else 74329ba6116SPaolo Bonzini warning('could not link libbzip2, disabling') 7445e5733e5SMarc-André Lureau endif 74529ba6116SPaolo Bonzini endif 7465e5733e5SMarc-André Lureauendif 747ecea3696SPaolo Bonzini 7485e5733e5SMarc-André Lureauliblzfse = not_found 749ecea3696SPaolo Bonziniif not get_option('lzfse').auto() or have_block 750ecea3696SPaolo Bonzini liblzfse = cc.find_library('lzfse', has_headers: ['lzfse.h'], 751ecea3696SPaolo Bonzini required: get_option('lzfse'), 752ecea3696SPaolo Bonzini static: enable_static) 7535e5733e5SMarc-André Lureauendif 754ecea3696SPaolo Bonziniif liblzfse.found() and not cc.links(''' 755ecea3696SPaolo Bonzini #include <lzfse.h> 756ecea3696SPaolo Bonzini int main(void) { lzfse_decode_scratch_size(); return 0; }''', dependencies: liblzfse) 757ecea3696SPaolo Bonzini liblzfse = not_found 758ecea3696SPaolo Bonzini if get_option('lzfse').enabled() 759ecea3696SPaolo Bonzini error('could not link liblzfse') 760ecea3696SPaolo Bonzini else 761ecea3696SPaolo Bonzini warning('could not link liblzfse, disabling') 762ecea3696SPaolo Bonzini endif 763ecea3696SPaolo Bonziniendif 764ecea3696SPaolo Bonzini 765478e943fSPaolo Bonzinioss = not_found 766478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 767478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 768478e943fSPaolo Bonziniendif 769478e943fSPaolo Bonzinidsound = not_found 770478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 771478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 772478e943fSPaolo Bonziniendif 773478e943fSPaolo Bonzinicoreaudio = not_found 774478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 775478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 776478e943fSPaolo Bonziniendif 7772b1ccdf4SMarc-André Lureauopengl = not_found 7782b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 779de2d3005SPaolo Bonzini opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(), 780de2d3005SPaolo Bonzini link_args: config_host['OPENGL_LIBS'].split()) 7812b1ccdf4SMarc-André Lureauendif 7821b695471SPaolo Bonzini 7832b1ccdf4SMarc-André Lureaugtk = not_found 7841b695471SPaolo Bonzinigtkx11 = not_found 785*c1ec4941SPaolo Bonziniif not get_option('gtk').auto() or (have_system and not cocoa.found()) 7861b695471SPaolo Bonzini gtk = dependency('gtk+-3.0', version: '>=3.22.0', 7871b695471SPaolo Bonzini method: 'pkg-config', 7881b695471SPaolo Bonzini required: get_option('gtk'), 7891b695471SPaolo Bonzini static: enable_static) 7901b695471SPaolo Bonzini if gtk.found() 7911b695471SPaolo Bonzini gtkx11 = dependency('gtk+-x11-3.0', version: '>=3.22.0', 7921b695471SPaolo Bonzini method: 'pkg-config', 7931b695471SPaolo Bonzini required: false, 7941b695471SPaolo Bonzini static: enable_static) 7951b695471SPaolo Bonzini gtk = declare_dependency(dependencies: [gtk, gtkx11]) 7962b1ccdf4SMarc-André Lureau endif 7971b695471SPaolo Bonziniendif 7981b695471SPaolo Bonzini 7992b1ccdf4SMarc-André Lureauvte = not_found 8002b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 8012b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 8022b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 8032b1ccdf4SMarc-André Lureauendif 8042b1ccdf4SMarc-André Lureaux11 = not_found 8051b695471SPaolo Bonziniif gtkx11.found() or 'lm32-softmmu' in target_dirs 8061b695471SPaolo Bonzini x11 = dependency('x11', method: 'pkg-config', required: gtkx11.found(), 8079d71037fSPaolo Bonzini static: enable_static) 8082b1ccdf4SMarc-André Lureauendif 809a0b93237SPaolo Bonzinivnc = not_found 8102b1ccdf4SMarc-André Lureaupng = not_found 8112b1ccdf4SMarc-André Lureaujpeg = not_found 8122b1ccdf4SMarc-André Lureausasl = not_found 813a0b93237SPaolo Bonziniif get_option('vnc').enabled() 814a0b93237SPaolo Bonzini vnc = declare_dependency() # dummy dependency 815a0b93237SPaolo Bonzini png = dependency('libpng', required: get_option('vnc_png'), 8161a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 8178e242b3cSPaolo Bonzini jpeg = dependency('libjpeg', required: get_option('vnc_jpeg'), 8188e242b3cSPaolo Bonzini method: 'pkg-config', static: enable_static) 819a0b93237SPaolo Bonzini sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'], 820a0b93237SPaolo Bonzini required: get_option('vnc_sasl'), 821a0b93237SPaolo Bonzini static: enable_static) 822a0b93237SPaolo Bonzini if sasl.found() 823a0b93237SPaolo Bonzini sasl = declare_dependency(dependencies: sasl, 824a0b93237SPaolo Bonzini compile_args: '-DSTRUCT_IOVEC_DEFINED') 825a0b93237SPaolo Bonzini endif 8262b1ccdf4SMarc-André Lureauendif 827241611eaSPaolo Bonzini 828708eab42SMarc-André Lureausnappy = not_found 829241611eaSPaolo Bonziniif not get_option('snappy').auto() or have_system 830241611eaSPaolo Bonzini snappy = cc.find_library('snappy', has_headers: ['snappy-c.h'], 831241611eaSPaolo Bonzini required: get_option('snappy'), 832241611eaSPaolo Bonzini static: enable_static) 833708eab42SMarc-André Lureauendif 834241611eaSPaolo Bonziniif snappy.found() and not cc.links(''' 835241611eaSPaolo Bonzini #include <snappy-c.h> 836241611eaSPaolo Bonzini int main(void) { snappy_max_compressed_length(4096); return 0; }''', dependencies: snappy) 837241611eaSPaolo Bonzini snappy = not_found 838241611eaSPaolo Bonzini if get_option('snappy').enabled() 839241611eaSPaolo Bonzini error('could not link libsnappy') 840241611eaSPaolo Bonzini else 841241611eaSPaolo Bonzini warning('could not link libsnappy, disabling') 842241611eaSPaolo Bonzini endif 843708eab42SMarc-André Lureauendif 8440c32a0aeSPaolo Bonzini 845708eab42SMarc-André Lureaulzo = not_found 8460c32a0aeSPaolo Bonziniif not get_option('lzo').auto() or have_system 8470c32a0aeSPaolo Bonzini lzo = cc.find_library('lzo2', has_headers: ['lzo/lzo1x.h'], 8480c32a0aeSPaolo Bonzini required: get_option('lzo'), 8490c32a0aeSPaolo Bonzini static: enable_static) 850708eab42SMarc-André Lureauendif 8510c32a0aeSPaolo Bonziniif lzo.found() and not cc.links(''' 8520c32a0aeSPaolo Bonzini #include <lzo/lzo1x.h> 8530c32a0aeSPaolo Bonzini int main(void) { lzo_version(); return 0; }''', dependencies: lzo) 8540c32a0aeSPaolo Bonzini lzo = not_found 8550c32a0aeSPaolo Bonzini if get_option('lzo').enabled() 8560c32a0aeSPaolo Bonzini error('could not link liblzo2') 8570c32a0aeSPaolo Bonzini else 8580c32a0aeSPaolo Bonzini warning('could not link liblzo2, disabling') 8590c32a0aeSPaolo Bonzini endif 8600c32a0aeSPaolo Bonziniendif 8610c32a0aeSPaolo Bonzini 86255166230SMarc-André Lureaurdma = not_found 86355166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host 86455166230SMarc-André Lureau rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split()) 86555166230SMarc-André Lureauendif 866ab318051SMarc-André Lureaunuma = not_found 867ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host 868ab318051SMarc-André Lureau numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split()) 869ab318051SMarc-André Lureauendif 870582ea95fSMarc-André Lureauxen = not_found 871582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host 872582ea95fSMarc-André Lureau xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(), 873582ea95fSMarc-André Lureau link_args: config_host['XEN_LIBS'].split()) 874582ea95fSMarc-André Lureauendif 87506677ce1SPaolo Bonzinicacard = not_found 87606677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host 87706677ce1SPaolo Bonzini cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(), 87806677ce1SPaolo Bonzini link_args: config_host['SMARTCARD_LIBS'].split()) 87906677ce1SPaolo Bonziniendif 8800a40bcb7SCésar Belleyu2f = not_found 8810a40bcb7SCésar Belleyif have_system 8820a40bcb7SCésar Belley u2f = dependency('u2f-emu', required: get_option('u2f'), 8830a40bcb7SCésar Belley method: 'pkg-config', 8840a40bcb7SCésar Belley static: enable_static) 8850a40bcb7SCésar Belleyendif 88606677ce1SPaolo Bonziniusbredir = not_found 88706677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host 88806677ce1SPaolo Bonzini usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(), 88906677ce1SPaolo Bonzini link_args: config_host['USB_REDIR_LIBS'].split()) 89006677ce1SPaolo Bonziniendif 89106677ce1SPaolo Bonzinilibusb = not_found 89206677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host 89306677ce1SPaolo Bonzini libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(), 89406677ce1SPaolo Bonzini link_args: config_host['LIBUSB_LIBS'].split()) 89506677ce1SPaolo Bonziniendif 896c9322ab5SMarc-André Lureaulibpmem = not_found 897c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host 898c9322ab5SMarc-André Lureau libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), 899c9322ab5SMarc-André Lureau link_args: config_host['LIBPMEM_LIBS'].split()) 900c9322ab5SMarc-André Lureauendif 901c7c91a74SBruce Rogerslibdaxctl = not_found 902c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host 903c7c91a74SBruce Rogers libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) 904c7c91a74SBruce Rogersendif 9058ce0a45fSMarc-André Lureautasn1 = not_found 9068ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host 9078ce0a45fSMarc-André Lureau tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), 9088ce0a45fSMarc-André Lureau link_args: config_host['TASN1_LIBS'].split()) 9098ce0a45fSMarc-André Lureauendif 910af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false, 911af04e89dSMarc-André Lureau method: 'pkg-config', static: enable_static) 912a81df1b6SPaolo Bonzini 9133909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid') 9143909def8SMarc-André Lureau 915aa087962SPaolo Bonzini# Malloc tests 916aa087962SPaolo Bonzini 917aa087962SPaolo Bonzinimalloc = [] 918aa087962SPaolo Bonziniif get_option('malloc') == 'system' 919aa087962SPaolo Bonzini has_malloc_trim = \ 920aa087962SPaolo Bonzini not get_option('malloc_trim').disabled() and \ 921aa087962SPaolo Bonzini cc.links('''#include <malloc.h> 922aa087962SPaolo Bonzini int main(void) { malloc_trim(0); return 0; }''') 923aa087962SPaolo Bonzinielse 924aa087962SPaolo Bonzini has_malloc_trim = false 925aa087962SPaolo Bonzini malloc = cc.find_library(get_option('malloc'), required: true) 926aa087962SPaolo Bonziniendif 927aa087962SPaolo Bonziniif not has_malloc_trim and get_option('malloc_trim').enabled() 928aa087962SPaolo Bonzini if get_option('malloc') == 'system' 929aa087962SPaolo Bonzini error('malloc_trim not available on this platform.') 930aa087962SPaolo Bonzini else 931aa087962SPaolo Bonzini error('malloc_trim not available with non-libc memory allocator') 932aa087962SPaolo Bonzini endif 933aa087962SPaolo Bonziniendif 934aa087962SPaolo Bonzini 93584e319a5SMax Reitz# Check whether the glibc provides statx() 93684e319a5SMax Reitz 93784e319a5SMax Reitzstatx_test = ''' 93884e319a5SMax Reitz #ifndef _GNU_SOURCE 93984e319a5SMax Reitz #define _GNU_SOURCE 94084e319a5SMax Reitz #endif 94184e319a5SMax Reitz #include <sys/stat.h> 94284e319a5SMax Reitz int main(void) { 94384e319a5SMax Reitz struct statx statxbuf; 94484e319a5SMax Reitz statx(0, "", 0, STATX_BASIC_STATS, &statxbuf); 94584e319a5SMax Reitz return 0; 94684e319a5SMax Reitz }''' 94784e319a5SMax Reitz 94884e319a5SMax Reitzhas_statx = cc.links(statx_test) 94984e319a5SMax Reitz 950eb6a3886SStefan Hajnoczihave_vhost_user_blk_server = (targetos == 'linux' and 951eb6a3886SStefan Hajnoczi 'CONFIG_VHOST_USER' in config_host) 952e5e856c1SStefan Hajnoczi 953e5e856c1SStefan Hajnocziif get_option('vhost_user_blk_server').enabled() 954e5e856c1SStefan Hajnoczi if targetos != 'linux' 955e5e856c1SStefan Hajnoczi error('vhost_user_blk_server requires linux') 956eb6a3886SStefan Hajnoczi elif 'CONFIG_VHOST_USER' not in config_host 957eb6a3886SStefan Hajnoczi error('vhost_user_blk_server requires vhost-user support') 958e5e856c1SStefan Hajnoczi endif 959e5e856c1SStefan Hajnoczielif get_option('vhost_user_blk_server').disabled() or not have_system 960e5e856c1SStefan Hajnoczi have_vhost_user_blk_server = false 961e5e856c1SStefan Hajnocziendif 962e5e856c1SStefan Hajnoczi 9639e62ba48SDaniele Buono 964df4ea709SMax Reitzif get_option('fuse').disabled() and get_option('fuse_lseek').enabled() 965df4ea709SMax Reitz error('Cannot enable fuse-lseek while fuse is disabled') 966df4ea709SMax Reitzendif 967df4ea709SMax Reitz 968a484a719SMax Reitzfuse = dependency('fuse3', required: get_option('fuse'), 969a484a719SMax Reitz version: '>=3.1', method: 'pkg-config', 970a484a719SMax Reitz static: enable_static) 971a484a719SMax Reitz 972df4ea709SMax Reitzfuse_lseek = not_found 973df4ea709SMax Reitzif not get_option('fuse_lseek').disabled() 974df4ea709SMax Reitz if fuse.version().version_compare('>=3.8') 975df4ea709SMax Reitz # Dummy dependency 976df4ea709SMax Reitz fuse_lseek = declare_dependency() 977df4ea709SMax Reitz elif get_option('fuse_lseek').enabled() 978df4ea709SMax Reitz if fuse.found() 979df4ea709SMax Reitz error('fuse-lseek requires libfuse >=3.8, found ' + fuse.version()) 980df4ea709SMax Reitz else 981df4ea709SMax Reitz error('fuse-lseek requires libfuse, which was not found') 982df4ea709SMax Reitz endif 983df4ea709SMax Reitz endif 984df4ea709SMax Reitzendif 985df4ea709SMax Reitz 9869e62ba48SDaniele Buonoif get_option('cfi') 9879e62ba48SDaniele Buono cfi_flags=[] 9889e62ba48SDaniele Buono # Check for dependency on LTO 9899e62ba48SDaniele Buono if not get_option('b_lto') 9909e62ba48SDaniele Buono error('Selected Control-Flow Integrity but LTO is disabled') 9919e62ba48SDaniele Buono endif 9929e62ba48SDaniele Buono if config_host.has_key('CONFIG_MODULES') 9939e62ba48SDaniele Buono error('Selected Control-Flow Integrity is not compatible with modules') 9949e62ba48SDaniele Buono endif 9959e62ba48SDaniele Buono # Check for cfi flags. CFI requires LTO so we can't use 9969e62ba48SDaniele Buono # get_supported_arguments, but need a more complex "compiles" which allows 9979e62ba48SDaniele Buono # custom arguments 9989e62ba48SDaniele Buono if cc.compiles('int main () { return 0; }', name: '-fsanitize=cfi-icall', 9999e62ba48SDaniele Buono args: ['-flto', '-fsanitize=cfi-icall'] ) 10009e62ba48SDaniele Buono cfi_flags += '-fsanitize=cfi-icall' 10019e62ba48SDaniele Buono else 10029e62ba48SDaniele Buono error('-fsanitize=cfi-icall is not supported by the compiler') 10039e62ba48SDaniele Buono endif 10049e62ba48SDaniele Buono if cc.compiles('int main () { return 0; }', 10059e62ba48SDaniele Buono name: '-fsanitize-cfi-icall-generalize-pointers', 10069e62ba48SDaniele Buono args: ['-flto', '-fsanitize=cfi-icall', 10079e62ba48SDaniele Buono '-fsanitize-cfi-icall-generalize-pointers'] ) 10089e62ba48SDaniele Buono cfi_flags += '-fsanitize-cfi-icall-generalize-pointers' 10099e62ba48SDaniele Buono else 10109e62ba48SDaniele Buono error('-fsanitize-cfi-icall-generalize-pointers is not supported by the compiler') 10119e62ba48SDaniele Buono endif 10129e62ba48SDaniele Buono if get_option('cfi_debug') 10139e62ba48SDaniele Buono if cc.compiles('int main () { return 0; }', 10149e62ba48SDaniele Buono name: '-fno-sanitize-trap=cfi-icall', 10159e62ba48SDaniele Buono args: ['-flto', '-fsanitize=cfi-icall', 10169e62ba48SDaniele Buono '-fno-sanitize-trap=cfi-icall'] ) 10179e62ba48SDaniele Buono cfi_flags += '-fno-sanitize-trap=cfi-icall' 10189e62ba48SDaniele Buono else 10199e62ba48SDaniele Buono error('-fno-sanitize-trap=cfi-icall is not supported by the compiler') 10209e62ba48SDaniele Buono endif 10219e62ba48SDaniele Buono endif 10229e62ba48SDaniele Buono add_project_arguments(cfi_flags, native: false, language: ['c', 'cpp', 'objc']) 10239e62ba48SDaniele Buono add_project_link_arguments(cfi_flags, native: false, language: ['c', 'cpp', 'objc']) 10249e62ba48SDaniele Buonoendif 10259e62ba48SDaniele Buono 1026a0c9162cSPaolo Bonzini################# 1027a0c9162cSPaolo Bonzini# config-host.h # 1028a0c9162cSPaolo Bonzini################# 1029859aef02SPaolo Bonzini 103069202b40SPaolo Bonzinihave_virtfs = (targetos == 'linux' and 103169202b40SPaolo Bonzini have_system and 103269202b40SPaolo Bonzini libattr.found() and 103369202b40SPaolo Bonzini libcap_ng.found()) 103469202b40SPaolo Bonzini 103569202b40SPaolo Bonziniif get_option('virtfs').enabled() 103669202b40SPaolo Bonzini if not have_virtfs 103769202b40SPaolo Bonzini if targetos != 'linux' 103869202b40SPaolo Bonzini error('virtio-9p (virtfs) requires Linux') 103969202b40SPaolo Bonzini elif not libcap_ng.found() or not libattr.found() 104069202b40SPaolo Bonzini error('virtio-9p (virtfs) requires libcap-ng-devel and libattr-devel') 104169202b40SPaolo Bonzini elif not have_system 104269202b40SPaolo Bonzini error('virtio-9p (virtfs) needs system emulation support') 104369202b40SPaolo Bonzini endif 104469202b40SPaolo Bonzini endif 104569202b40SPaolo Bonzinielif get_option('virtfs').disabled() 104669202b40SPaolo Bonzini have_virtfs = false 104769202b40SPaolo Bonziniendif 104869202b40SPaolo Bonzini 104916bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_BINDIR', get_option('prefix') / get_option('bindir')) 105016bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix')) 105116bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_QEMU_CONFDIR', get_option('prefix') / qemu_confdir) 105216bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_QEMU_DATADIR', get_option('prefix') / qemu_datadir) 105316bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_QEMU_DESKTOPDIR', get_option('prefix') / qemu_desktopdir) 105416bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_QEMU_FIRMWAREPATH', get_option('qemu_firmwarepath')) 105516bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_QEMU_HELPERDIR', get_option('prefix') / get_option('libexecdir')) 105616bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_QEMU_ICONDIR', get_option('prefix') / qemu_icondir) 105716bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_QEMU_LOCALEDIR', get_option('prefix') / get_option('localedir')) 105816bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_QEMU_LOCALSTATEDIR', get_option('prefix') / get_option('localstatedir')) 105916bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_QEMU_MODDIR', get_option('prefix') / qemu_moddir) 106016bf7a33SPaolo Bonziniconfig_host_data.set_quoted('CONFIG_SYSCONFDIR', get_option('prefix') / get_option('sysconfdir')) 106116bf7a33SPaolo Bonzini 1062f7f2d651SPaolo Bonziniconfig_host_data.set('CONFIG_ATTR', libattr.found()) 10638c6d4ff4SPaolo Bonziniconfig_host_data.set('CONFIG_BRLAPI', brlapi.found()) 1064b4e312e9SPaolo Bonziniconfig_host_data.set('CONFIG_COCOA', cocoa.found()) 1065f01496a3SPaolo Bonziniconfig_host_data.set('CONFIG_LIBUDEV', libudev.found()) 10660c32a0aeSPaolo Bonziniconfig_host_data.set('CONFIG_LZO', lzo.found()) 10676ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH', mpathpersist.found()) 10686ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api) 1069f9cd86feSPaolo Bonziniconfig_host_data.set('CONFIG_CURL', curl.found()) 10705285e593SYonggang Luoconfig_host_data.set('CONFIG_CURSES', curses.found()) 107108821ca2SPaolo Bonziniconfig_host_data.set('CONFIG_GLUSTERFS', glusterfs.found()) 107208821ca2SPaolo Bonziniif glusterfs.found() 107308821ca2SPaolo Bonzini config_host_data.set('CONFIG_GLUSTERFS_XLATOR_OPT', glusterfs.version().version_compare('>=4')) 107408821ca2SPaolo Bonzini config_host_data.set('CONFIG_GLUSTERFS_DISCARD', glusterfs.version().version_compare('>=5')) 107508821ca2SPaolo Bonzini config_host_data.set('CONFIG_GLUSTERFS_FALLOCATE', glusterfs.version().version_compare('>=6')) 107608821ca2SPaolo Bonzini config_host_data.set('CONFIG_GLUSTERFS_ZEROFILL', glusterfs.version().version_compare('>=6')) 107708821ca2SPaolo Bonzini config_host_data.set('CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT', glusterfs_ftruncate_has_stat) 107808821ca2SPaolo Bonzini config_host_data.set('CONFIG_GLUSTERFS_IOCB_HAS_STAT', glusterfs_iocb_has_stat) 107908821ca2SPaolo Bonziniendif 10801b695471SPaolo Bonziniconfig_host_data.set('CONFIG_GTK', gtk.found()) 1081f7f2d651SPaolo Bonziniconfig_host_data.set('CONFIG_LIBATTR', have_old_libattr) 1082727c8bb8SPaolo Bonziniconfig_host_data.set('CONFIG_LIBCAP_NG', libcap_ng.found()) 10839db405a3SPaolo Bonziniconfig_host_data.set('CONFIG_LIBISCSI', libiscsi.found()) 108430045c05SPaolo Bonziniconfig_host_data.set('CONFIG_LIBNFS', libnfs.found()) 1085fabd1e93SPaolo Bonziniconfig_host_data.set('CONFIG_RBD', rbd.found()) 108635be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found()) 108735be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) 108890835c2bSPaolo Bonziniconfig_host_data.set('CONFIG_SECCOMP', seccomp.found()) 1089241611eaSPaolo Bonziniconfig_host_data.set('CONFIG_SNAPPY', snappy.found()) 1090e5e856c1SStefan Hajnocziconfig_host_data.set('CONFIG_VHOST_USER_BLK_SERVER', have_vhost_user_blk_server) 1091a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found()) 1092a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) 1093a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found()) 1094a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found()) 109569202b40SPaolo Bonziniconfig_host_data.set('CONFIG_VIRTFS', have_virtfs) 10964113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) 1097af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found()) 10983909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid) 1099aa087962SPaolo Bonziniconfig_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim) 110084e319a5SMax Reitzconfig_host_data.set('CONFIG_STATX', has_statx) 1101b1def33dSPaolo Bonziniconfig_host_data.set('CONFIG_ZSTD', zstd.found()) 1102a484a719SMax Reitzconfig_host_data.set('CONFIG_FUSE', fuse.found()) 1103df4ea709SMax Reitzconfig_host_data.set('CONFIG_FUSE_LSEEK', fuse_lseek.found()) 11049d71037fSPaolo Bonziniconfig_host_data.set('CONFIG_X11', x11.found()) 11059e62ba48SDaniele Buonoconfig_host_data.set('CONFIG_CFI', get_option('cfi')) 1106859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version())) 1107859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]) 1108859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1]) 1109859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]) 1110859aef02SPaolo Bonzini 111148f670ecSThomas Huthconfig_host_data.set('HAVE_BTRFS_H', cc.has_header('linux/btrfs.h')) 11122964be52SThomas Huthconfig_host_data.set('HAVE_DRM_H', cc.has_header('libdrm/drm.h')) 11132802d91dSThomas Huthconfig_host_data.set('HAVE_PTY_H', cc.has_header('pty.h')) 1114ded5d78cSThomas Huthconfig_host_data.set('HAVE_SYS_IOCCOM_H', cc.has_header('sys/ioccom.h')) 11154a9d5f89SThomas Huthconfig_host_data.set('HAVE_SYS_KCOV_H', cc.has_header('sys/kcov.h')) 111688c78f16SThomas Huthconfig_host_data.set('HAVE_SYS_SIGNAL_H', cc.has_header('sys/signal.h')) 1117ded5d78cSThomas Huth 1118765686d6SPaolo Bonziniignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target 1119859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST'] 112016bf7a33SPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL'] 1121859aef02SPaolo Bonziniforeach k, v: config_host 1122765686d6SPaolo Bonzini if ignored.contains(k) 1123765686d6SPaolo Bonzini # do nothing 1124765686d6SPaolo Bonzini elif arrays.contains(k) 1125859aef02SPaolo Bonzini if v != '' 1126859aef02SPaolo Bonzini v = '"' + '", "'.join(v.split()) + '", ' 1127859aef02SPaolo Bonzini endif 1128859aef02SPaolo Bonzini config_host_data.set(k, v) 1129859aef02SPaolo Bonzini elif k == 'ARCH' 1130859aef02SPaolo Bonzini config_host_data.set('HOST_' + v.to_upper(), 1) 1131859aef02SPaolo Bonzini elif strings.contains(k) 1132859aef02SPaolo Bonzini if not k.startswith('CONFIG_') 1133859aef02SPaolo Bonzini k = 'CONFIG_' + k.to_upper() 1134859aef02SPaolo Bonzini endif 1135859aef02SPaolo Bonzini config_host_data.set_quoted(k, v) 1136859aef02SPaolo Bonzini elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_') 1137859aef02SPaolo Bonzini config_host_data.set(k, v == 'y' ? 1 : v) 1138859aef02SPaolo Bonzini endif 1139859aef02SPaolo Bonziniendforeach 1140859aef02SPaolo Bonzini 1141a0c9162cSPaolo Bonzini######################## 1142a0c9162cSPaolo Bonzini# Target configuration # 1143a0c9162cSPaolo Bonzini######################## 1144a0c9162cSPaolo Bonzini 11452becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 114605512f55SPaolo Bonziniconfig_all = {} 1147a98006bcSPaolo Bonziniconfig_all_devices = {} 1148ca0fc784SPaolo Bonziniconfig_all_disas = {} 11492becc36aSPaolo Bonziniconfig_devices_mak_list = [] 11502becc36aSPaolo Bonziniconfig_devices_h = {} 1151859aef02SPaolo Bonziniconfig_target_h = {} 11522becc36aSPaolo Bonziniconfig_target_mak = {} 1153ca0fc784SPaolo Bonzini 1154ca0fc784SPaolo Bonzinidisassemblers = { 1155ca0fc784SPaolo Bonzini 'alpha' : ['CONFIG_ALPHA_DIS'], 1156ca0fc784SPaolo Bonzini 'arm' : ['CONFIG_ARM_DIS'], 1157ca0fc784SPaolo Bonzini 'avr' : ['CONFIG_AVR_DIS'], 1158ca0fc784SPaolo Bonzini 'cris' : ['CONFIG_CRIS_DIS'], 1159ca0fc784SPaolo Bonzini 'hppa' : ['CONFIG_HPPA_DIS'], 1160ca0fc784SPaolo Bonzini 'i386' : ['CONFIG_I386_DIS'], 1161ca0fc784SPaolo Bonzini 'x86_64' : ['CONFIG_I386_DIS'], 1162ca0fc784SPaolo Bonzini 'x32' : ['CONFIG_I386_DIS'], 1163ca0fc784SPaolo Bonzini 'lm32' : ['CONFIG_LM32_DIS'], 1164ca0fc784SPaolo Bonzini 'm68k' : ['CONFIG_M68K_DIS'], 1165ca0fc784SPaolo Bonzini 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], 1166ca0fc784SPaolo Bonzini 'mips' : ['CONFIG_MIPS_DIS'], 1167ca0fc784SPaolo Bonzini 'moxie' : ['CONFIG_MOXIE_DIS'], 1168ca0fc784SPaolo Bonzini 'nios2' : ['CONFIG_NIOS2_DIS'], 1169ca0fc784SPaolo Bonzini 'or1k' : ['CONFIG_OPENRISC_DIS'], 1170ca0fc784SPaolo Bonzini 'ppc' : ['CONFIG_PPC_DIS'], 1171ca0fc784SPaolo Bonzini 'riscv' : ['CONFIG_RISCV_DIS'], 1172ca0fc784SPaolo Bonzini 'rx' : ['CONFIG_RX_DIS'], 1173ca0fc784SPaolo Bonzini 's390' : ['CONFIG_S390_DIS'], 1174ca0fc784SPaolo Bonzini 'sh4' : ['CONFIG_SH4_DIS'], 1175ca0fc784SPaolo Bonzini 'sparc' : ['CONFIG_SPARC_DIS'], 1176ca0fc784SPaolo Bonzini 'xtensa' : ['CONFIG_XTENSA_DIS'], 1177ca0fc784SPaolo Bonzini} 1178ca0fc784SPaolo Bonziniif link_language == 'cpp' 1179ca0fc784SPaolo Bonzini disassemblers += { 1180ca0fc784SPaolo Bonzini 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], 1181ca0fc784SPaolo Bonzini 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], 1182ca0fc784SPaolo Bonzini 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], 1183ca0fc784SPaolo Bonzini } 1184ca0fc784SPaolo Bonziniendif 1185ca0fc784SPaolo Bonzini 11860a189110SPaolo Bonzinihost_kconfig = \ 11870a189110SPaolo Bonzini ('CONFIG_TPM' in config_host ? ['CONFIG_TPM=y'] : []) + \ 11880a189110SPaolo Bonzini ('CONFIG_SPICE' in config_host ? ['CONFIG_SPICE=y'] : []) + \ 11890a189110SPaolo Bonzini ('CONFIG_IVSHMEM' in config_host ? ['CONFIG_IVSHMEM=y'] : []) + \ 11900a189110SPaolo Bonzini ('CONFIG_OPENGL' in config_host ? ['CONFIG_OPENGL=y'] : []) + \ 11919d71037fSPaolo Bonzini (x11.found() ? ['CONFIG_X11=y'] : []) + \ 11920a189110SPaolo Bonzini ('CONFIG_VHOST_USER' in config_host ? ['CONFIG_VHOST_USER=y'] : []) + \ 11930a189110SPaolo Bonzini ('CONFIG_VHOST_VDPA' in config_host ? ['CONFIG_VHOST_VDPA=y'] : []) + \ 11940a189110SPaolo Bonzini ('CONFIG_VHOST_KERNEL' in config_host ? ['CONFIG_VHOST_KERNEL=y'] : []) + \ 119569202b40SPaolo Bonzini (have_virtfs ? ['CONFIG_VIRTFS=y'] : []) + \ 11960a189110SPaolo Bonzini ('CONFIG_LINUX' in config_host ? ['CONFIG_LINUX=y'] : []) + \ 11970a189110SPaolo Bonzini ('CONFIG_PVRDMA' in config_host ? ['CONFIG_PVRDMA=y'] : []) 11980a189110SPaolo Bonzini 1199a9a74907SPaolo Bonziniignored = [ 'TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_ARCH' ] 1200ca0fc784SPaolo Bonzini 1201fdb75aefSPaolo Bonzinidefault_targets = 'CONFIG_DEFAULT_TARGETS' in config_host 1202fdb75aefSPaolo Bonziniactual_target_dirs = [] 1203fbb4121dSPaolo Bonzinifdt_required = [] 1204a81df1b6SPaolo Bonziniforeach target : target_dirs 1205765686d6SPaolo Bonzini config_target = { 'TARGET_NAME': target.split('-')[0] } 1206765686d6SPaolo Bonzini if target.endswith('linux-user') 1207fdb75aefSPaolo Bonzini if targetos != 'linux' 1208fdb75aefSPaolo Bonzini if default_targets 1209fdb75aefSPaolo Bonzini continue 1210fdb75aefSPaolo Bonzini endif 1211fdb75aefSPaolo Bonzini error('Target @0@ is only available on a Linux host'.format(target)) 1212fdb75aefSPaolo Bonzini endif 1213765686d6SPaolo Bonzini config_target += { 'CONFIG_LINUX_USER': 'y' } 1214765686d6SPaolo Bonzini elif target.endswith('bsd-user') 1215fdb75aefSPaolo Bonzini if 'CONFIG_BSD' not in config_host 1216fdb75aefSPaolo Bonzini if default_targets 1217fdb75aefSPaolo Bonzini continue 1218fdb75aefSPaolo Bonzini endif 1219fdb75aefSPaolo Bonzini error('Target @0@ is only available on a BSD host'.format(target)) 1220fdb75aefSPaolo Bonzini endif 1221765686d6SPaolo Bonzini config_target += { 'CONFIG_BSD_USER': 'y' } 1222765686d6SPaolo Bonzini elif target.endswith('softmmu') 1223765686d6SPaolo Bonzini config_target += { 'CONFIG_SOFTMMU': 'y' } 1224765686d6SPaolo Bonzini endif 1225765686d6SPaolo Bonzini if target.endswith('-user') 1226765686d6SPaolo Bonzini config_target += { 1227765686d6SPaolo Bonzini 'CONFIG_USER_ONLY': 'y', 1228765686d6SPaolo Bonzini 'CONFIG_QEMU_INTERP_PREFIX': 1229765686d6SPaolo Bonzini config_host['CONFIG_QEMU_INTERP_PREFIX'].format(config_target['TARGET_NAME']) 1230765686d6SPaolo Bonzini } 1231765686d6SPaolo Bonzini endif 1232859aef02SPaolo Bonzini 12330a189110SPaolo Bonzini accel_kconfig = [] 12348a19980eSPaolo Bonzini foreach sym: accelerators 12358a19980eSPaolo Bonzini if sym == 'CONFIG_TCG' or target in accelerator_targets.get(sym, []) 12368a19980eSPaolo Bonzini config_target += { sym: 'y' } 12378a19980eSPaolo Bonzini config_all += { sym: 'y' } 12388a19980eSPaolo Bonzini if sym == 'CONFIG_XEN' and have_xen_pci_passthrough 12398a19980eSPaolo Bonzini config_target += { 'CONFIG_XEN_PCI_PASSTHROUGH': 'y' } 12408a19980eSPaolo Bonzini endif 12410a189110SPaolo Bonzini accel_kconfig += [ sym + '=y' ] 12428a19980eSPaolo Bonzini endif 12438a19980eSPaolo Bonzini endforeach 12440a189110SPaolo Bonzini if accel_kconfig.length() == 0 1245fdb75aefSPaolo Bonzini if default_targets 1246fdb75aefSPaolo Bonzini continue 1247fdb75aefSPaolo Bonzini endif 1248fdb75aefSPaolo Bonzini error('No accelerator available for target @0@'.format(target)) 1249fdb75aefSPaolo Bonzini endif 12508a19980eSPaolo Bonzini 1251fdb75aefSPaolo Bonzini actual_target_dirs += target 1252765686d6SPaolo Bonzini config_target += keyval.load('default-configs/targets' / target + '.mak') 1253a9a74907SPaolo Bonzini config_target += { 'TARGET_' + config_target['TARGET_ARCH'].to_upper(): 'y' } 1254765686d6SPaolo Bonzini 1255fbb4121dSPaolo Bonzini if 'TARGET_NEED_FDT' in config_target 1256fbb4121dSPaolo Bonzini fdt_required += target 1257fbb4121dSPaolo Bonzini endif 1258fbb4121dSPaolo Bonzini 1259fa73168bSPaolo Bonzini # Add default keys 1260fa73168bSPaolo Bonzini if 'TARGET_BASE_ARCH' not in config_target 1261fa73168bSPaolo Bonzini config_target += {'TARGET_BASE_ARCH': config_target['TARGET_ARCH']} 1262fa73168bSPaolo Bonzini endif 1263fa73168bSPaolo Bonzini if 'TARGET_ABI_DIR' not in config_target 1264fa73168bSPaolo Bonzini config_target += {'TARGET_ABI_DIR': config_target['TARGET_ARCH']} 1265fa73168bSPaolo Bonzini endif 1266859aef02SPaolo Bonzini 1267ca0fc784SPaolo Bonzini foreach k, v: disassemblers 1268ca0fc784SPaolo Bonzini if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) 1269ca0fc784SPaolo Bonzini foreach sym: v 1270ca0fc784SPaolo Bonzini config_target += { sym: 'y' } 1271ca0fc784SPaolo Bonzini config_all_disas += { sym: 'y' } 1272ca0fc784SPaolo Bonzini endforeach 1273ca0fc784SPaolo Bonzini endif 1274ca0fc784SPaolo Bonzini endforeach 1275ca0fc784SPaolo Bonzini 1276859aef02SPaolo Bonzini config_target_data = configuration_data() 1277859aef02SPaolo Bonzini foreach k, v: config_target 1278859aef02SPaolo Bonzini if not k.startswith('TARGET_') and not k.startswith('CONFIG_') 1279859aef02SPaolo Bonzini # do nothing 1280859aef02SPaolo Bonzini elif ignored.contains(k) 1281859aef02SPaolo Bonzini # do nothing 1282859aef02SPaolo Bonzini elif k == 'TARGET_BASE_ARCH' 1283a9a74907SPaolo Bonzini # Note that TARGET_BASE_ARCH ends up in config-target.h but it is 1284a9a74907SPaolo Bonzini # not used to select files from sourcesets. 1285859aef02SPaolo Bonzini config_target_data.set('TARGET_' + v.to_upper(), 1) 1286765686d6SPaolo Bonzini elif k == 'TARGET_NAME' or k == 'CONFIG_QEMU_INTERP_PREFIX' 1287859aef02SPaolo Bonzini config_target_data.set_quoted(k, v) 1288859aef02SPaolo Bonzini elif v == 'y' 1289859aef02SPaolo Bonzini config_target_data.set(k, 1) 1290859aef02SPaolo Bonzini else 1291859aef02SPaolo Bonzini config_target_data.set(k, v) 1292859aef02SPaolo Bonzini endif 1293859aef02SPaolo Bonzini endforeach 1294859aef02SPaolo Bonzini config_target_h += {target: configure_file(output: target + '-config-target.h', 1295859aef02SPaolo Bonzini configuration: config_target_data)} 12962becc36aSPaolo Bonzini 12972becc36aSPaolo Bonzini if target.endswith('-softmmu') 12982becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 12992becc36aSPaolo Bonzini config_devices_mak = configure_file( 13001bb4cb1cSPaolo Bonzini input: ['default-configs/devices' / target + '.mak', 'Kconfig'], 13012becc36aSPaolo Bonzini output: config_devices_mak, 13022becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 13032becc36aSPaolo Bonzini capture: true, 13047bc3ca7fSPaolo Bonzini command: [minikconf, 13057bc3ca7fSPaolo Bonzini get_option('default_devices') ? '--defconfig' : '--allnoconfig', 13062becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 13070a189110SPaolo Bonzini host_kconfig, accel_kconfig]) 1308859aef02SPaolo Bonzini 1309859aef02SPaolo Bonzini config_devices_data = configuration_data() 1310859aef02SPaolo Bonzini config_devices = keyval.load(config_devices_mak) 1311859aef02SPaolo Bonzini foreach k, v: config_devices 1312859aef02SPaolo Bonzini config_devices_data.set(k, 1) 1313859aef02SPaolo Bonzini endforeach 13142becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 1315859aef02SPaolo Bonzini config_devices_h += {target: configure_file(output: target + '-config-devices.h', 1316859aef02SPaolo Bonzini configuration: config_devices_data)} 1317859aef02SPaolo Bonzini config_target += config_devices 1318a98006bcSPaolo Bonzini config_all_devices += config_devices 13192becc36aSPaolo Bonzini endif 13202becc36aSPaolo Bonzini config_target_mak += {target: config_target} 1321a81df1b6SPaolo Bonziniendforeach 1322fdb75aefSPaolo Bonzinitarget_dirs = actual_target_dirs 1323a81df1b6SPaolo Bonzini 13242becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 13252becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 13262becc36aSPaolo Bonzini# static_library target. 13272becc36aSPaolo Bonzini# 13282becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 13292becc36aSPaolo Bonzini# build literally all source files, including devices only used by 13302becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 13312becc36aSPaolo Bonzini# pseudo symbol replaces it. 13322becc36aSPaolo Bonzini 133305512f55SPaolo Bonziniconfig_all += config_all_devices 13342becc36aSPaolo Bonziniconfig_all += config_host 13352becc36aSPaolo Bonziniconfig_all += config_all_disas 13362becc36aSPaolo Bonziniconfig_all += { 13372becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 13382becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 13392becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 13402becc36aSPaolo Bonzini 'CONFIG_ALL': true, 13412becc36aSPaolo Bonzini} 13422becc36aSPaolo Bonzini 1343a0c9162cSPaolo Bonzini############## 1344a0c9162cSPaolo Bonzini# Submodules # 1345a0c9162cSPaolo Bonzini############## 13468b18cdbfSRichard Henderson 13478b18cdbfSRichard Hendersoncapstone = not_found 13488b18cdbfSRichard Hendersoncapstone_opt = get_option('capstone') 13498b18cdbfSRichard Hendersonif capstone_opt in ['enabled', 'auto', 'system'] 13508b18cdbfSRichard Henderson have_internal = fs.exists(meson.current_source_dir() / 'capstone/Makefile') 1351bcf36862SRichard Henderson capstone = dependency('capstone', version: '>=4.0', 1352bcf36862SRichard Henderson static: enable_static, method: 'pkg-config', 13538b18cdbfSRichard Henderson required: capstone_opt == 'system' or 13548b18cdbfSRichard Henderson capstone_opt == 'enabled' and not have_internal) 13558b18cdbfSRichard Henderson if capstone.found() 13568b18cdbfSRichard Henderson capstone_opt = 'system' 13578b18cdbfSRichard Henderson elif have_internal 13588b18cdbfSRichard Henderson capstone_opt = 'internal' 13598b18cdbfSRichard Henderson else 13608b18cdbfSRichard Henderson capstone_opt = 'disabled' 13618b18cdbfSRichard Henderson endif 13628b18cdbfSRichard Hendersonendif 13638b18cdbfSRichard Hendersonif capstone_opt == 'internal' 13648b18cdbfSRichard Henderson capstone_data = configuration_data() 13658b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_USE_SYS_DYN_MEM', '1') 13668b18cdbfSRichard Henderson 13678b18cdbfSRichard Henderson capstone_files = files( 13688b18cdbfSRichard Henderson 'capstone/cs.c', 13698b18cdbfSRichard Henderson 'capstone/MCInst.c', 13708b18cdbfSRichard Henderson 'capstone/MCInstrDesc.c', 13718b18cdbfSRichard Henderson 'capstone/MCRegisterInfo.c', 13728b18cdbfSRichard Henderson 'capstone/SStream.c', 13738b18cdbfSRichard Henderson 'capstone/utils.c' 13748b18cdbfSRichard Henderson ) 13758b18cdbfSRichard Henderson 13768b18cdbfSRichard Henderson if 'CONFIG_ARM_DIS' in config_all_disas 13778b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_ARM', '1') 13788b18cdbfSRichard Henderson capstone_files += files( 13798b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMDisassembler.c', 13808b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMInstPrinter.c', 13818b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMMapping.c', 13828b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMModule.c' 13838b18cdbfSRichard Henderson ) 13848b18cdbfSRichard Henderson endif 13858b18cdbfSRichard Henderson 13868b18cdbfSRichard Henderson # FIXME: This config entry currently depends on a c++ compiler. 13878b18cdbfSRichard Henderson # Which is needed for building libvixl, but not for capstone. 13888b18cdbfSRichard Henderson if 'CONFIG_ARM_A64_DIS' in config_all_disas 13898b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_ARM64', '1') 13908b18cdbfSRichard Henderson capstone_files += files( 13918b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64BaseInfo.c', 13928b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64Disassembler.c', 13938b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64InstPrinter.c', 13948b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64Mapping.c', 13958b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64Module.c' 13968b18cdbfSRichard Henderson ) 13978b18cdbfSRichard Henderson endif 13988b18cdbfSRichard Henderson 13998b18cdbfSRichard Henderson if 'CONFIG_PPC_DIS' in config_all_disas 14008b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_POWERPC', '1') 14018b18cdbfSRichard Henderson capstone_files += files( 14028b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCDisassembler.c', 14038b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCInstPrinter.c', 14048b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCMapping.c', 14058b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCModule.c' 14068b18cdbfSRichard Henderson ) 14078b18cdbfSRichard Henderson endif 14088b18cdbfSRichard Henderson 14093d562845SRichard Henderson if 'CONFIG_S390_DIS' in config_all_disas 14103d562845SRichard Henderson capstone_data.set('CAPSTONE_HAS_SYSZ', '1') 14113d562845SRichard Henderson capstone_files += files( 14123d562845SRichard Henderson 'capstone/arch/SystemZ/SystemZDisassembler.c', 14133d562845SRichard Henderson 'capstone/arch/SystemZ/SystemZInstPrinter.c', 14143d562845SRichard Henderson 'capstone/arch/SystemZ/SystemZMapping.c', 14153d562845SRichard Henderson 'capstone/arch/SystemZ/SystemZModule.c', 14163d562845SRichard Henderson 'capstone/arch/SystemZ/SystemZMCTargetDesc.c' 14173d562845SRichard Henderson ) 14183d562845SRichard Henderson endif 14193d562845SRichard Henderson 14208b18cdbfSRichard Henderson if 'CONFIG_I386_DIS' in config_all_disas 14218b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_X86', 1) 14228b18cdbfSRichard Henderson capstone_files += files( 14238b18cdbfSRichard Henderson 'capstone/arch/X86/X86Disassembler.c', 14248b18cdbfSRichard Henderson 'capstone/arch/X86/X86DisassemblerDecoder.c', 14258b18cdbfSRichard Henderson 'capstone/arch/X86/X86ATTInstPrinter.c', 14268b18cdbfSRichard Henderson 'capstone/arch/X86/X86IntelInstPrinter.c', 1427eef20e40SRichard Henderson 'capstone/arch/X86/X86InstPrinterCommon.c', 14288b18cdbfSRichard Henderson 'capstone/arch/X86/X86Mapping.c', 14298b18cdbfSRichard Henderson 'capstone/arch/X86/X86Module.c' 14308b18cdbfSRichard Henderson ) 14318b18cdbfSRichard Henderson endif 14328b18cdbfSRichard Henderson 14338b18cdbfSRichard Henderson configure_file(output: 'capstone-defs.h', configuration: capstone_data) 14348b18cdbfSRichard Henderson 14358b18cdbfSRichard Henderson capstone_cargs = [ 14368b18cdbfSRichard Henderson # FIXME: There does not seem to be a way to completely replace the c_args 14378b18cdbfSRichard Henderson # that come from add_project_arguments() -- we can only add to them. 14388b18cdbfSRichard Henderson # So: disable all warnings with a big hammer. 14398b18cdbfSRichard Henderson '-Wno-error', '-w', 14408b18cdbfSRichard Henderson 14418b18cdbfSRichard Henderson # Include all configuration defines via a header file, which will wind up 14428b18cdbfSRichard Henderson # as a dependency on the object file, and thus changes here will result 14438b18cdbfSRichard Henderson # in a rebuild. 14448b18cdbfSRichard Henderson '-include', 'capstone-defs.h' 14458b18cdbfSRichard Henderson ] 14468b18cdbfSRichard Henderson 14478b18cdbfSRichard Henderson libcapstone = static_library('capstone', 14488b18cdbfSRichard Henderson sources: capstone_files, 14498b18cdbfSRichard Henderson c_args: capstone_cargs, 14508b18cdbfSRichard Henderson include_directories: 'capstone/include') 14518b18cdbfSRichard Henderson capstone = declare_dependency(link_with: libcapstone, 1452eef20e40SRichard Henderson include_directories: 'capstone/include/capstone') 14538b18cdbfSRichard Hendersonendif 14544d34a86bSPaolo Bonzini 14554d34a86bSPaolo Bonzinislirp = not_found 14564d34a86bSPaolo Bonzinislirp_opt = 'disabled' 14574d34a86bSPaolo Bonziniif have_system 14584d34a86bSPaolo Bonzini slirp_opt = get_option('slirp') 14594d34a86bSPaolo Bonzini if slirp_opt in ['enabled', 'auto', 'system'] 14604d34a86bSPaolo Bonzini have_internal = fs.exists(meson.current_source_dir() / 'slirp/meson.build') 14614d34a86bSPaolo Bonzini slirp = dependency('slirp', static: enable_static, 14624d34a86bSPaolo Bonzini method: 'pkg-config', 14634d34a86bSPaolo Bonzini required: slirp_opt == 'system' or 14644d34a86bSPaolo Bonzini slirp_opt == 'enabled' and not have_internal) 14654d34a86bSPaolo Bonzini if slirp.found() 14664d34a86bSPaolo Bonzini slirp_opt = 'system' 14674d34a86bSPaolo Bonzini elif have_internal 14684d34a86bSPaolo Bonzini slirp_opt = 'internal' 14694d34a86bSPaolo Bonzini else 14704d34a86bSPaolo Bonzini slirp_opt = 'disabled' 14714d34a86bSPaolo Bonzini endif 14724d34a86bSPaolo Bonzini endif 14734d34a86bSPaolo Bonzini if slirp_opt == 'internal' 14744d34a86bSPaolo Bonzini slirp_deps = [] 14754d34a86bSPaolo Bonzini if targetos == 'windows' 14764d34a86bSPaolo Bonzini slirp_deps = cc.find_library('iphlpapi') 14774d34a86bSPaolo Bonzini endif 14784d34a86bSPaolo Bonzini slirp_conf = configuration_data() 14794d34a86bSPaolo Bonzini slirp_conf.set('SLIRP_MAJOR_VERSION', meson.project_version().split('.')[0]) 14804d34a86bSPaolo Bonzini slirp_conf.set('SLIRP_MINOR_VERSION', meson.project_version().split('.')[1]) 14814d34a86bSPaolo Bonzini slirp_conf.set('SLIRP_MICRO_VERSION', meson.project_version().split('.')[2]) 14824d34a86bSPaolo Bonzini slirp_conf.set_quoted('SLIRP_VERSION_STRING', meson.project_version()) 14834d34a86bSPaolo Bonzini slirp_cargs = ['-DG_LOG_DOMAIN="Slirp"'] 14844d34a86bSPaolo Bonzini slirp_files = [ 14854d34a86bSPaolo Bonzini 'slirp/src/arp_table.c', 14864d34a86bSPaolo Bonzini 'slirp/src/bootp.c', 14874d34a86bSPaolo Bonzini 'slirp/src/cksum.c', 14884d34a86bSPaolo Bonzini 'slirp/src/dhcpv6.c', 14894d34a86bSPaolo Bonzini 'slirp/src/dnssearch.c', 14904d34a86bSPaolo Bonzini 'slirp/src/if.c', 14914d34a86bSPaolo Bonzini 'slirp/src/ip6_icmp.c', 14924d34a86bSPaolo Bonzini 'slirp/src/ip6_input.c', 14934d34a86bSPaolo Bonzini 'slirp/src/ip6_output.c', 14944d34a86bSPaolo Bonzini 'slirp/src/ip_icmp.c', 14954d34a86bSPaolo Bonzini 'slirp/src/ip_input.c', 14964d34a86bSPaolo Bonzini 'slirp/src/ip_output.c', 14974d34a86bSPaolo Bonzini 'slirp/src/mbuf.c', 14984d34a86bSPaolo Bonzini 'slirp/src/misc.c', 14994d34a86bSPaolo Bonzini 'slirp/src/ncsi.c', 15004d34a86bSPaolo Bonzini 'slirp/src/ndp_table.c', 15014d34a86bSPaolo Bonzini 'slirp/src/sbuf.c', 15024d34a86bSPaolo Bonzini 'slirp/src/slirp.c', 15034d34a86bSPaolo Bonzini 'slirp/src/socket.c', 15044d34a86bSPaolo Bonzini 'slirp/src/state.c', 15054d34a86bSPaolo Bonzini 'slirp/src/stream.c', 15064d34a86bSPaolo Bonzini 'slirp/src/tcp_input.c', 15074d34a86bSPaolo Bonzini 'slirp/src/tcp_output.c', 15084d34a86bSPaolo Bonzini 'slirp/src/tcp_subr.c', 15094d34a86bSPaolo Bonzini 'slirp/src/tcp_timer.c', 15104d34a86bSPaolo Bonzini 'slirp/src/tftp.c', 15114d34a86bSPaolo Bonzini 'slirp/src/udp.c', 15124d34a86bSPaolo Bonzini 'slirp/src/udp6.c', 15134d34a86bSPaolo Bonzini 'slirp/src/util.c', 15144d34a86bSPaolo Bonzini 'slirp/src/version.c', 15154d34a86bSPaolo Bonzini 'slirp/src/vmstate.c', 15164d34a86bSPaolo Bonzini ] 15174d34a86bSPaolo Bonzini 15184d34a86bSPaolo Bonzini configure_file( 15194d34a86bSPaolo Bonzini input : 'slirp/src/libslirp-version.h.in', 15204d34a86bSPaolo Bonzini output : 'libslirp-version.h', 15214d34a86bSPaolo Bonzini configuration: slirp_conf) 15224d34a86bSPaolo Bonzini 15234d34a86bSPaolo Bonzini slirp_inc = include_directories('slirp', 'slirp/src') 15244d34a86bSPaolo Bonzini libslirp = static_library('slirp', 15254d34a86bSPaolo Bonzini sources: slirp_files, 15264d34a86bSPaolo Bonzini c_args: slirp_cargs, 15274d34a86bSPaolo Bonzini include_directories: slirp_inc) 15284d34a86bSPaolo Bonzini slirp = declare_dependency(link_with: libslirp, 15294d34a86bSPaolo Bonzini dependencies: slirp_deps, 15304d34a86bSPaolo Bonzini include_directories: slirp_inc) 15314d34a86bSPaolo Bonzini endif 15324d34a86bSPaolo Bonziniendif 15334d34a86bSPaolo Bonzini 1534fbb4121dSPaolo Bonzinifdt = not_found 1535fbb4121dSPaolo Bonzinifdt_opt = get_option('fdt') 1536fbb4121dSPaolo Bonziniif have_system 1537fbb4121dSPaolo Bonzini if fdt_opt in ['enabled', 'auto', 'system'] 1538fbb4121dSPaolo Bonzini have_internal = fs.exists(meson.current_source_dir() / 'dtc/libfdt/Makefile.libfdt') 1539fbb4121dSPaolo Bonzini fdt = cc.find_library('fdt', static: enable_static, 1540fbb4121dSPaolo Bonzini required: fdt_opt == 'system' or 1541fbb4121dSPaolo Bonzini fdt_opt == 'enabled' and not have_internal) 1542fbb4121dSPaolo Bonzini if fdt.found() and cc.links(''' 1543fbb4121dSPaolo Bonzini #include <libfdt.h> 1544fbb4121dSPaolo Bonzini #include <libfdt_env.h> 1545fbb4121dSPaolo Bonzini int main(void) { fdt_check_full(NULL, 0); return 0; }''', 1546fbb4121dSPaolo Bonzini dependencies: fdt) 1547fbb4121dSPaolo Bonzini fdt_opt = 'system' 1548fbb4121dSPaolo Bonzini elif have_internal 1549fbb4121dSPaolo Bonzini fdt_opt = 'internal' 1550fbb4121dSPaolo Bonzini else 1551fbb4121dSPaolo Bonzini fdt_opt = 'disabled' 1552fbb4121dSPaolo Bonzini endif 1553fbb4121dSPaolo Bonzini endif 1554fbb4121dSPaolo Bonzini if fdt_opt == 'internal' 1555fbb4121dSPaolo Bonzini fdt_files = files( 1556fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt.c', 1557fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_ro.c', 1558fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_wip.c', 1559fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_sw.c', 1560fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_rw.c', 1561fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_strerror.c', 1562fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_empty_tree.c', 1563fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_addresses.c', 1564fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_overlay.c', 1565fbb4121dSPaolo Bonzini 'dtc/libfdt/fdt_check.c', 1566fbb4121dSPaolo Bonzini ) 1567fbb4121dSPaolo Bonzini 1568fbb4121dSPaolo Bonzini fdt_inc = include_directories('dtc/libfdt') 1569fbb4121dSPaolo Bonzini libfdt = static_library('fdt', 1570fbb4121dSPaolo Bonzini sources: fdt_files, 1571fbb4121dSPaolo Bonzini include_directories: fdt_inc) 1572fbb4121dSPaolo Bonzini fdt = declare_dependency(link_with: libfdt, 1573fbb4121dSPaolo Bonzini include_directories: fdt_inc) 1574fbb4121dSPaolo Bonzini endif 1575fbb4121dSPaolo Bonziniendif 1576fbb4121dSPaolo Bonziniif not fdt.found() and fdt_required.length() > 0 1577fbb4121dSPaolo Bonzini error('fdt not available but required by targets ' + ', '.join(fdt_required)) 1578fbb4121dSPaolo Bonziniendif 1579fbb4121dSPaolo Bonzini 15808b18cdbfSRichard Hendersonconfig_host_data.set('CONFIG_CAPSTONE', capstone.found()) 1581fbb4121dSPaolo Bonziniconfig_host_data.set('CONFIG_FDT', fdt.found()) 15824d34a86bSPaolo Bonziniconfig_host_data.set('CONFIG_SLIRP', slirp.found()) 15838b18cdbfSRichard Henderson 1584a0c9162cSPaolo Bonzini##################### 1585a0c9162cSPaolo Bonzini# Generated sources # 1586a0c9162cSPaolo Bonzini##################### 15878b18cdbfSRichard Henderson 1588a0c9162cSPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data) 1589a81df1b6SPaolo Bonzini 15903f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 1591650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 1592a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 1593a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 1594a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 1595a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 1596a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 1597a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 1598a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 1599a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 1600a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 1601a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 1602a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 1603a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 1604a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 1605a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 1606a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 1607a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 1608a81df1b6SPaolo Bonzini] 1609a81df1b6SPaolo Bonzini 1610a81df1b6SPaolo Bonzinitracetool = [ 1611a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 1612a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 1613a81df1b6SPaolo Bonzini] 1614a81df1b6SPaolo Bonzini 16152c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 16162c273f32SMarc-André Lureau meson.current_source_dir(), 1617859aef02SPaolo Bonzini config_host['PKGVERSION'], meson.project_version()] 16182c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 16192c273f32SMarc-André Lureau output: 'qemu-version.h', 16202c273f32SMarc-André Lureau command: qemu_version_cmd, 16212c273f32SMarc-André Lureau capture: true, 16222c273f32SMarc-André Lureau build_by_default: true, 16232c273f32SMarc-André Lureau build_always_stale: true) 16242c273f32SMarc-André Lureaugenh += qemu_version 16252c273f32SMarc-André Lureau 16263f885659SMarc-André Lureauhxdep = [] 16273f885659SMarc-André Lureauhx_headers = [ 16283f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 16293f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 16303f885659SMarc-André Lureau] 16313f885659SMarc-André Lureauif have_system 16323f885659SMarc-André Lureau hx_headers += [ 16333f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 16343f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 16353f885659SMarc-André Lureau ] 16363f885659SMarc-André Lureauendif 16373f885659SMarc-André Lureauforeach d : hx_headers 1638b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 16393f885659SMarc-André Lureau input: files(d[0]), 16403f885659SMarc-André Lureau output: d[1], 16413f885659SMarc-André Lureau capture: true, 16423f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 16433f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 16443f885659SMarc-André Lureauendforeach 16453f885659SMarc-André Lureaugenh += hxdep 16463f885659SMarc-André Lureau 1647a0c9162cSPaolo Bonzini################### 1648a0c9162cSPaolo Bonzini# Collect sources # 1649a0c9162cSPaolo Bonzini################### 1650a81df1b6SPaolo Bonzini 165155567891SPhilippe Mathieu-Daudéauthz_ss = ss.source_set() 16527e2b888fSPhilippe Mathieu-Daudéblockdev_ss = ss.source_set() 16537e2b888fSPhilippe Mathieu-Daudéblock_ss = ss.source_set() 16547e2b888fSPhilippe Mathieu-Daudébsd_user_ss = ss.source_set() 1655c2306d71SPhilippe Mathieu-Daudéchardev_ss = ss.source_set() 16567e2b888fSPhilippe Mathieu-Daudécommon_ss = ss.source_set() 16572389304aSPhilippe Mathieu-Daudécrypto_ss = ss.source_set() 1658f78536b1SPhilippe Mathieu-Daudéio_ss = ss.source_set() 16597e2b888fSPhilippe Mathieu-Daudélinux_user_ss = ss.source_set() 16607e2b888fSPhilippe Mathieu-Daudéqmp_ss = ss.source_set() 1661da33fc09SPhilippe Mathieu-Daudéqom_ss = ss.source_set() 16627e2b888fSPhilippe Mathieu-Daudésoftmmu_ss = ss.source_set() 16637e2b888fSPhilippe Mathieu-Daudéspecific_fuzz_ss = ss.source_set() 16647e2b888fSPhilippe Mathieu-Daudéspecific_ss = ss.source_set() 1665a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 1666a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 16672becc36aSPaolo Bonziniuser_ss = ss.source_set() 16687e2b888fSPhilippe Mathieu-Daudéutil_ss = ss.source_set() 16692becc36aSPaolo Bonzini 16703154fee4SMarc-André Lureaumodules = {} 16712becc36aSPaolo Bonzinihw_arch = {} 16722becc36aSPaolo Bonzinitarget_arch = {} 16732becc36aSPaolo Bonzinitarget_softmmu_arch = {} 1674a81df1b6SPaolo Bonzini 1675a81df1b6SPaolo Bonzini############### 1676a81df1b6SPaolo Bonzini# Trace files # 1677a81df1b6SPaolo Bonzini############### 1678a81df1b6SPaolo Bonzini 1679c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once 1680c9322ab5SMarc-André Lureau# we have those 1681a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 1682a81df1b6SPaolo Bonzini 'accel/kvm', 1683a81df1b6SPaolo Bonzini 'accel/tcg', 1684a81df1b6SPaolo Bonzini 'crypto', 1685a81df1b6SPaolo Bonzini 'monitor', 1686a81df1b6SPaolo Bonzini] 1687a81df1b6SPaolo Bonziniif have_user 1688a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 1689a81df1b6SPaolo Bonziniendif 1690a81df1b6SPaolo Bonziniif have_block 1691a81df1b6SPaolo Bonzini trace_events_subdirs += [ 1692a81df1b6SPaolo Bonzini 'authz', 1693a81df1b6SPaolo Bonzini 'block', 1694a81df1b6SPaolo Bonzini 'io', 1695a81df1b6SPaolo Bonzini 'nbd', 1696a81df1b6SPaolo Bonzini 'scsi', 1697a81df1b6SPaolo Bonzini ] 1698a81df1b6SPaolo Bonziniendif 1699a81df1b6SPaolo Bonziniif have_system 1700a81df1b6SPaolo Bonzini trace_events_subdirs += [ 1701a81df1b6SPaolo Bonzini 'audio', 1702a81df1b6SPaolo Bonzini 'backends', 1703a81df1b6SPaolo Bonzini 'backends/tpm', 1704a81df1b6SPaolo Bonzini 'chardev', 1705a81df1b6SPaolo Bonzini 'hw/9pfs', 1706a81df1b6SPaolo Bonzini 'hw/acpi', 1707a81df1b6SPaolo Bonzini 'hw/alpha', 1708a81df1b6SPaolo Bonzini 'hw/arm', 1709a81df1b6SPaolo Bonzini 'hw/audio', 1710a81df1b6SPaolo Bonzini 'hw/block', 1711a81df1b6SPaolo Bonzini 'hw/block/dataplane', 1712a81df1b6SPaolo Bonzini 'hw/char', 1713a81df1b6SPaolo Bonzini 'hw/display', 1714a81df1b6SPaolo Bonzini 'hw/dma', 1715a81df1b6SPaolo Bonzini 'hw/hppa', 1716a81df1b6SPaolo Bonzini 'hw/hyperv', 1717a81df1b6SPaolo Bonzini 'hw/i2c', 1718a81df1b6SPaolo Bonzini 'hw/i386', 1719a81df1b6SPaolo Bonzini 'hw/i386/xen', 1720a81df1b6SPaolo Bonzini 'hw/ide', 1721a81df1b6SPaolo Bonzini 'hw/input', 1722a81df1b6SPaolo Bonzini 'hw/intc', 1723a81df1b6SPaolo Bonzini 'hw/isa', 1724a81df1b6SPaolo Bonzini 'hw/mem', 1725a81df1b6SPaolo Bonzini 'hw/mips', 1726a81df1b6SPaolo Bonzini 'hw/misc', 1727a81df1b6SPaolo Bonzini 'hw/misc/macio', 1728a81df1b6SPaolo Bonzini 'hw/net', 172998e5d7a2SVikram Garhwal 'hw/net/can', 1730a81df1b6SPaolo Bonzini 'hw/nvram', 1731a81df1b6SPaolo Bonzini 'hw/pci', 1732a81df1b6SPaolo Bonzini 'hw/pci-host', 1733a81df1b6SPaolo Bonzini 'hw/ppc', 1734a81df1b6SPaolo Bonzini 'hw/rdma', 1735a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 1736a81df1b6SPaolo Bonzini 'hw/rtc', 1737a81df1b6SPaolo Bonzini 'hw/s390x', 1738a81df1b6SPaolo Bonzini 'hw/scsi', 1739a81df1b6SPaolo Bonzini 'hw/sd', 1740a81df1b6SPaolo Bonzini 'hw/sparc', 1741a81df1b6SPaolo Bonzini 'hw/sparc64', 1742a81df1b6SPaolo Bonzini 'hw/ssi', 1743a81df1b6SPaolo Bonzini 'hw/timer', 1744a81df1b6SPaolo Bonzini 'hw/tpm', 1745a81df1b6SPaolo Bonzini 'hw/usb', 1746a81df1b6SPaolo Bonzini 'hw/vfio', 1747a81df1b6SPaolo Bonzini 'hw/virtio', 1748a81df1b6SPaolo Bonzini 'hw/watchdog', 1749a81df1b6SPaolo Bonzini 'hw/xen', 1750a81df1b6SPaolo Bonzini 'hw/gpio', 1751a81df1b6SPaolo Bonzini 'migration', 1752a81df1b6SPaolo Bonzini 'net', 17538b7a5507SPhilippe Mathieu-Daudé 'softmmu', 1754a81df1b6SPaolo Bonzini 'ui', 1755a81df1b6SPaolo Bonzini ] 1756a81df1b6SPaolo Bonziniendif 1757a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 1758a81df1b6SPaolo Bonzini 'hw/core', 1759a81df1b6SPaolo Bonzini 'qapi', 1760a81df1b6SPaolo Bonzini 'qom', 1761a81df1b6SPaolo Bonzini 'target/arm', 1762a81df1b6SPaolo Bonzini 'target/hppa', 1763a81df1b6SPaolo Bonzini 'target/i386', 1764a9dc68d9SClaudio Fontana 'target/i386/kvm', 1765a81df1b6SPaolo Bonzini 'target/mips', 1766a81df1b6SPaolo Bonzini 'target/ppc', 1767a81df1b6SPaolo Bonzini 'target/riscv', 1768a81df1b6SPaolo Bonzini 'target/s390x', 1769a81df1b6SPaolo Bonzini 'target/sparc', 1770a81df1b6SPaolo Bonzini 'util', 1771a81df1b6SPaolo Bonzini] 1772a81df1b6SPaolo Bonzini 17730df750e9SMarc-André Lureauvhost_user = not_found 17740df750e9SMarc-André Lureauif 'CONFIG_VHOST_USER' in config_host 17750df750e9SMarc-André Lureau libvhost_user = subproject('libvhost-user') 17760df750e9SMarc-André Lureau vhost_user = libvhost_user.get_variable('vhost_user_dep') 17770df750e9SMarc-André Lureauendif 17780df750e9SMarc-André Lureau 1779a81df1b6SPaolo Bonzinisubdir('qapi') 1780a81df1b6SPaolo Bonzinisubdir('qobject') 1781a81df1b6SPaolo Bonzinisubdir('stubs') 1782a81df1b6SPaolo Bonzinisubdir('trace') 1783a81df1b6SPaolo Bonzinisubdir('util') 17845582c58fSMarc-André Lureausubdir('qom') 17855582c58fSMarc-André Lureausubdir('authz') 1786a81df1b6SPaolo Bonzinisubdir('crypto') 17872d78b56eSMarc-André Lureausubdir('ui') 1788a81df1b6SPaolo Bonzini 17893154fee4SMarc-André Lureau 17903154fee4SMarc-André Lureauif enable_modules 17913154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 17923154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 17933154fee4SMarc-André Lureauendif 17943154fee4SMarc-André Lureau 17952becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 1796a81df1b6SPaolo Bonzini 1797a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 17982becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 1799a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 1800a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 1801aa087962SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket, malloc]) 1802a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 180304c6f1e7SMarc-André Lureau sources: genh + version_res) 1804a81df1b6SPaolo Bonzini 1805abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'), 1806abff1abfSPaolo Bonzini output: 'decode-@BASENAME@.c.inc', 1807abff1abfSPaolo Bonzini arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@']) 1808abff1abfSPaolo Bonzini 1809478e943fSPaolo Bonzinisubdir('audio') 18107fcfd456SMarc-André Lureausubdir('io') 1811848e8ff6SMarc-André Lureausubdir('chardev') 1812ec0d5893SMarc-André Lureausubdir('fsdev') 1813abff1abfSPaolo Bonzinisubdir('libdecnumber') 1814d3b18480SMarc-André Lureausubdir('target') 1815708eab42SMarc-André Lureausubdir('dump') 1816ec0d5893SMarc-André Lureau 18175e5733e5SMarc-André Lureaublock_ss.add(files( 18185e5733e5SMarc-André Lureau 'block.c', 18195e5733e5SMarc-André Lureau 'blockjob.c', 18205e5733e5SMarc-André Lureau 'job.c', 18215e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 18225e5733e5SMarc-André Lureau)) 18235e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 18245e5733e5SMarc-André Lureau 18255e5733e5SMarc-André Lureausubdir('nbd') 18265e5733e5SMarc-André Lureausubdir('scsi') 18275e5733e5SMarc-André Lureausubdir('block') 18285e5733e5SMarc-André Lureau 18294a96337dSPaolo Bonziniblockdev_ss.add(files( 18304a96337dSPaolo Bonzini 'blockdev.c', 1831cbc20bfbSStefan Hajnoczi 'blockdev-nbd.c', 18324a96337dSPaolo Bonzini 'iothread.c', 18334a96337dSPaolo Bonzini 'job-qmp.c', 18343eacf70bSRoman Bolshakov), gnutls) 18354a96337dSPaolo Bonzini 18364a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 18374a96337dSPaolo Bonzini# os-win32.c does not 18384a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 18394a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 18404a96337dSPaolo Bonzini 18414a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 18424a96337dSPaolo Bonzini 18435d3ea0e1SPaolo Bonzinisubdir('softmmu') 1844c9322ab5SMarc-André Lureau 1845f343346bSRichard Hendersoncommon_ss.add(capstone) 1846d9f24bf5SPaolo Bonzinispecific_ss.add(files('cpu.c', 'disas.c', 'gdbstub.c'), capstone) 1847c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c')) 1848c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files( 1849c9322ab5SMarc-André Lureau 'fpu/softfloat.c', 1850c9322ab5SMarc-André Lureau 'tcg/optimize.c', 1851c9322ab5SMarc-André Lureau 'tcg/tcg-common.c', 1852c9322ab5SMarc-André Lureau 'tcg/tcg-op-gvec.c', 1853c9322ab5SMarc-André Lureau 'tcg/tcg-op-vec.c', 1854c9322ab5SMarc-André Lureau 'tcg/tcg-op.c', 1855c9322ab5SMarc-André Lureau 'tcg/tcg.c', 1856c9322ab5SMarc-André Lureau)) 1857c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c')) 1858c9322ab5SMarc-André Lureau 1859ab318051SMarc-André Lureausubdir('backends') 1860c574e161SMarc-André Lureausubdir('disas') 186155166230SMarc-André Lureausubdir('migration') 1862ff219dcaSPaolo Bonzinisubdir('monitor') 1863cdaf0722SMarc-André Lureausubdir('net') 186417ef2af6SMarc-André Lureausubdir('replay') 1865582ea95fSMarc-André Lureausubdir('hw') 18661a82878aSMarc-André Lureausubdir('accel') 1867f556b4a1SPaolo Bonzinisubdir('plugins') 1868b309c321SMarc-André Lureausubdir('bsd-user') 18693a30446aSMarc-André Lureausubdir('linux-user') 18703a30446aSMarc-André Lureau 1871b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c')) 1872b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss) 1873b309c321SMarc-André Lureau 18743a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c')) 18753a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss) 18765d3ea0e1SPaolo Bonzini 1877a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 1878a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 187964ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz') 1880a2ce7dbdSPaolo Bonzini 1881a0c9162cSPaolo Bonzini######################## 1882a0c9162cSPaolo Bonzini# Library dependencies # 1883a0c9162cSPaolo Bonzini######################## 1884a0c9162cSPaolo Bonzini 18853154fee4SMarc-André Lureaublock_mods = [] 18863154fee4SMarc-André Lureausoftmmu_mods = [] 18873154fee4SMarc-André Lureauforeach d, list : modules 18883154fee4SMarc-André Lureau foreach m, module_ss : list 18893154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 18903e292c51SGerd Hoffmann module_ss = module_ss.apply(config_all, strict: false) 18913154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 18923154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 18933154fee4SMarc-André Lureau if d == 'block' 18943154fee4SMarc-André Lureau block_mods += sl 18953154fee4SMarc-André Lureau else 18963154fee4SMarc-André Lureau softmmu_mods += sl 18973154fee4SMarc-André Lureau endif 18983154fee4SMarc-André Lureau else 18993154fee4SMarc-André Lureau if d == 'block' 19003154fee4SMarc-André Lureau block_ss.add_all(module_ss) 19013154fee4SMarc-André Lureau else 19023154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 19033154fee4SMarc-André Lureau endif 19043154fee4SMarc-André Lureau endif 19053154fee4SMarc-André Lureau endforeach 19063154fee4SMarc-André Lureauendforeach 19073154fee4SMarc-André Lureau 19083154fee4SMarc-André Lureaunm = find_program('nm') 1909604f3e4eSYonggang Luoundefsym = find_program('scripts/undefsym.py') 19103154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 19113154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 19123154fee4SMarc-André Lureau capture: true, 19133154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 19143154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 19153154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 19163154fee4SMarc-André Lureau capture: true, 19173154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 19183154fee4SMarc-André Lureau 1919da33fc09SPhilippe Mathieu-Daudéqom_ss = qom_ss.apply(config_host, strict: false) 1920da33fc09SPhilippe Mathieu-Daudélibqom = static_library('qom', qom_ss.sources() + genh, 1921da33fc09SPhilippe Mathieu-Daudé dependencies: [qom_ss.dependencies()], 1922da33fc09SPhilippe Mathieu-Daudé name_suffix: 'fa') 1923da33fc09SPhilippe Mathieu-Daudé 1924da33fc09SPhilippe Mathieu-Daudéqom = declare_dependency(link_whole: libqom) 1925da33fc09SPhilippe Mathieu-Daudé 192655567891SPhilippe Mathieu-Daudéauthz_ss = authz_ss.apply(config_host, strict: false) 192755567891SPhilippe Mathieu-Daudélibauthz = static_library('authz', authz_ss.sources() + genh, 192855567891SPhilippe Mathieu-Daudé dependencies: [authz_ss.dependencies()], 192955567891SPhilippe Mathieu-Daudé name_suffix: 'fa', 193055567891SPhilippe Mathieu-Daudé build_by_default: false) 193155567891SPhilippe Mathieu-Daudé 193255567891SPhilippe Mathieu-Daudéauthz = declare_dependency(link_whole: libauthz, 193355567891SPhilippe Mathieu-Daudé dependencies: qom) 193455567891SPhilippe Mathieu-Daudé 19352389304aSPhilippe Mathieu-Daudécrypto_ss = crypto_ss.apply(config_host, strict: false) 19362389304aSPhilippe Mathieu-Daudélibcrypto = static_library('crypto', crypto_ss.sources() + genh, 19372389304aSPhilippe Mathieu-Daudé dependencies: [crypto_ss.dependencies()], 19382389304aSPhilippe Mathieu-Daudé name_suffix: 'fa', 19392389304aSPhilippe Mathieu-Daudé build_by_default: false) 19402389304aSPhilippe Mathieu-Daudé 19412389304aSPhilippe Mathieu-Daudécrypto = declare_dependency(link_whole: libcrypto, 19422389304aSPhilippe Mathieu-Daudé dependencies: [authz, qom]) 19432389304aSPhilippe Mathieu-Daudé 1944f78536b1SPhilippe Mathieu-Daudéio_ss = io_ss.apply(config_host, strict: false) 1945f78536b1SPhilippe Mathieu-Daudélibio = static_library('io', io_ss.sources() + genh, 1946f78536b1SPhilippe Mathieu-Daudé dependencies: [io_ss.dependencies()], 1947f78536b1SPhilippe Mathieu-Daudé link_with: libqemuutil, 1948f78536b1SPhilippe Mathieu-Daudé name_suffix: 'fa', 1949f78536b1SPhilippe Mathieu-Daudé build_by_default: false) 1950f78536b1SPhilippe Mathieu-Daudé 1951f78536b1SPhilippe Mathieu-Daudéio = declare_dependency(link_whole: libio, dependencies: [crypto, qom]) 1952f78536b1SPhilippe Mathieu-Daudé 19537e6edef3SPhilippe Mathieu-Daudélibmigration = static_library('migration', sources: migration_files + genh, 19547e6edef3SPhilippe Mathieu-Daudé name_suffix: 'fa', 19557e6edef3SPhilippe Mathieu-Daudé build_by_default: false) 19567e6edef3SPhilippe Mathieu-Daudémigration = declare_dependency(link_with: libmigration, 19577e6edef3SPhilippe Mathieu-Daudé dependencies: [zlib, qom, io]) 19587e6edef3SPhilippe Mathieu-Daudésoftmmu_ss.add(migration) 19597e6edef3SPhilippe Mathieu-Daudé 19605e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 19615e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 19625e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 19635e5733e5SMarc-André Lureau link_depends: block_syms, 19645e5733e5SMarc-André Lureau name_suffix: 'fa', 19655e5733e5SMarc-André Lureau build_by_default: false) 19665e5733e5SMarc-André Lureau 19675e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 1968b7c70bf2SMarc-André Lureau link_args: '@block.syms', 1969b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 19705e5733e5SMarc-André Lureau 19714fb9071fSStefan Hajnocziblockdev_ss = blockdev_ss.apply(config_host, strict: false) 19724fb9071fSStefan Hajnoczilibblockdev = static_library('blockdev', blockdev_ss.sources() + genh, 19734fb9071fSStefan Hajnoczi dependencies: blockdev_ss.dependencies(), 19744fb9071fSStefan Hajnoczi name_suffix: 'fa', 19754fb9071fSStefan Hajnoczi build_by_default: false) 19764fb9071fSStefan Hajnoczi 19774fb9071fSStefan Hajnocziblockdev = declare_dependency(link_whole: [libblockdev], 19784fb9071fSStefan Hajnoczi dependencies: [block]) 19794fb9071fSStefan Hajnoczi 1980ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 1981ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 1982ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 1983ff219dcaSPaolo Bonzini name_suffix: 'fa', 1984ff219dcaSPaolo Bonzini build_by_default: false) 1985ff219dcaSPaolo Bonzini 1986ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 1987ff219dcaSPaolo Bonzini 1988c2306d71SPhilippe Mathieu-Daudélibchardev = static_library('chardev', chardev_ss.sources() + genh, 1989c2306d71SPhilippe Mathieu-Daudé name_suffix: 'fa', 19903eacf70bSRoman Bolshakov dependencies: [gnutls], 1991c2306d71SPhilippe Mathieu-Daudé build_by_default: false) 1992c2306d71SPhilippe Mathieu-Daudé 1993c2306d71SPhilippe Mathieu-Daudéchardev = declare_dependency(link_whole: libchardev) 1994c2306d71SPhilippe Mathieu-Daudé 1995e28ab096SPhilippe Mathieu-Daudélibhwcore = static_library('hwcore', sources: hwcore_files + genh, 1996e28ab096SPhilippe Mathieu-Daudé name_suffix: 'fa', 1997e28ab096SPhilippe Mathieu-Daudé build_by_default: false) 1998e28ab096SPhilippe Mathieu-Daudéhwcore = declare_dependency(link_whole: libhwcore) 1999e28ab096SPhilippe Mathieu-Daudécommon_ss.add(hwcore) 2000e28ab096SPhilippe Mathieu-Daudé 2001064f8ee7SPhilippe Mathieu-Daudé########### 2002064f8ee7SPhilippe Mathieu-Daudé# Targets # 2003064f8ee7SPhilippe Mathieu-Daudé########### 2004064f8ee7SPhilippe Mathieu-Daudé 20053154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 20063154fee4SMarc-André Lureau shared_module(m.name(), 20073154fee4SMarc-André Lureau name_prefix: '', 20083154fee4SMarc-André Lureau link_whole: m, 20093154fee4SMarc-André Lureau install: true, 201016bf7a33SPaolo Bonzini install_dir: qemu_moddir) 20113154fee4SMarc-André Lureauendforeach 20123154fee4SMarc-André Lureau 20134fb9071fSStefan Hajnoczisoftmmu_ss.add(authz, blockdev, chardev, crypto, io, qmp) 201464ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil) 201564ed6f92SPaolo Bonzini 201664ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss]) 20172becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 20182becc36aSPaolo Bonzini 20192becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 20202becc36aSPaolo Bonzinicommon_all = static_library('common', 20212becc36aSPaolo Bonzini build_by_default: false, 20222becc36aSPaolo Bonzini sources: common_all.sources() + genh, 20232becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 20242becc36aSPaolo Bonzini name_suffix: 'fa') 20252becc36aSPaolo Bonzini 2026c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh') 2027c9322ab5SMarc-André Lureau 2028fd5eef85SPaolo Bonziniemulators = {} 20292becc36aSPaolo Bonziniforeach target : target_dirs 20302becc36aSPaolo Bonzini config_target = config_target_mak[target] 20312becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 20322becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 2033859aef02SPaolo Bonzini arch_srcs = [config_target_h[target]] 203464ed6f92SPaolo Bonzini arch_deps = [] 203564ed6f92SPaolo Bonzini c_args = ['-DNEED_CPU_H', 203664ed6f92SPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 203764ed6f92SPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] 2038b6c7cfd4SPaolo Bonzini link_args = emulator_link_args 20392becc36aSPaolo Bonzini 2040859aef02SPaolo Bonzini config_target += config_host 20412becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 20422becc36aSPaolo Bonzini if targetos == 'linux' 20432becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 20442becc36aSPaolo Bonzini endif 20452becc36aSPaolo Bonzini if target.endswith('-softmmu') 20462becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 20472becc36aSPaolo Bonzini target_type='system' 2048abff1abfSPaolo Bonzini t = target_softmmu_arch[arch].apply(config_target, strict: false) 2049abff1abfSPaolo Bonzini arch_srcs += t.sources() 205064ed6f92SPaolo Bonzini arch_deps += t.dependencies() 2051abff1abfSPaolo Bonzini 20522c44220dSMarc-André Lureau hw_dir = target_name == 'sparc64' ? 'sparc64' : arch 20532c44220dSMarc-André Lureau hw = hw_arch[hw_dir].apply(config_target, strict: false) 20542c44220dSMarc-André Lureau arch_srcs += hw.sources() 205564ed6f92SPaolo Bonzini arch_deps += hw.dependencies() 20562c44220dSMarc-André Lureau 20572becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 205864ed6f92SPaolo Bonzini link_args += ['@block.syms', '@qemu.syms'] 20592becc36aSPaolo Bonzini else 20603a30446aSMarc-André Lureau abi = config_target['TARGET_ABI_DIR'] 20612becc36aSPaolo Bonzini target_type='user' 20622becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 20632becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 20642becc36aSPaolo Bonzini base_dir = 'linux-user' 20652becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 20662becc36aSPaolo Bonzini else 20672becc36aSPaolo Bonzini base_dir = 'bsd-user' 2068ea1ab4cfSStacey Son target_inc += include_directories('bsd-user/freebsd') 20692becc36aSPaolo Bonzini endif 20702becc36aSPaolo Bonzini target_inc += include_directories( 20712becc36aSPaolo Bonzini base_dir, 20723a30446aSMarc-André Lureau base_dir / abi, 20732becc36aSPaolo Bonzini ) 20743a30446aSMarc-André Lureau if 'CONFIG_LINUX_USER' in config_target 20753a30446aSMarc-André Lureau dir = base_dir / abi 20763a30446aSMarc-André Lureau arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c') 20773a30446aSMarc-André Lureau if config_target.has_key('TARGET_SYSTBL_ABI') 20783a30446aSMarc-André Lureau arch_srcs += \ 20793a30446aSMarc-André Lureau syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'], 20803a30446aSMarc-André Lureau extra_args : config_target['TARGET_SYSTBL_ABI']) 20813a30446aSMarc-André Lureau endif 20823a30446aSMarc-André Lureau endif 20832becc36aSPaolo Bonzini endif 20842becc36aSPaolo Bonzini 2085c9322ab5SMarc-André Lureau if 'TARGET_XML_FILES' in config_target 2086c9322ab5SMarc-André Lureau gdbstub_xml = custom_target(target + '-gdbstub-xml.c', 2087c9322ab5SMarc-André Lureau output: target + '-gdbstub-xml.c', 2088c9322ab5SMarc-André Lureau input: files(config_target['TARGET_XML_FILES'].split()), 2089c9322ab5SMarc-André Lureau command: [feature_to_c, '@INPUT@'], 2090c9322ab5SMarc-André Lureau capture: true) 2091c9322ab5SMarc-André Lureau arch_srcs += gdbstub_xml 2092c9322ab5SMarc-André Lureau endif 2093c9322ab5SMarc-André Lureau 2094abff1abfSPaolo Bonzini t = target_arch[arch].apply(config_target, strict: false) 2095abff1abfSPaolo Bonzini arch_srcs += t.sources() 209664ed6f92SPaolo Bonzini arch_deps += t.dependencies() 2097abff1abfSPaolo Bonzini 20982becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 20992becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 210064ed6f92SPaolo Bonzini deps = target_common.dependencies() 21012becc36aSPaolo Bonzini 21022becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 21032becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 210464ed6f92SPaolo Bonzini arch_deps += target_specific.dependencies() 21052becc36aSPaolo Bonzini 210664ed6f92SPaolo Bonzini lib = static_library('qemu-' + target, 2107859aef02SPaolo Bonzini sources: arch_srcs + genh, 2108b7612f45SPaolo Bonzini dependencies: arch_deps, 21092becc36aSPaolo Bonzini objects: objects, 21102becc36aSPaolo Bonzini include_directories: target_inc, 211164ed6f92SPaolo Bonzini c_args: c_args, 211264ed6f92SPaolo Bonzini build_by_default: false, 21132becc36aSPaolo Bonzini name_suffix: 'fa') 211464ed6f92SPaolo Bonzini 211564ed6f92SPaolo Bonzini if target.endswith('-softmmu') 211664ed6f92SPaolo Bonzini execs = [{ 211764ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name, 211864ed6f92SPaolo Bonzini 'gui': false, 211964ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 212064ed6f92SPaolo Bonzini 'dependencies': [] 212164ed6f92SPaolo Bonzini }] 212235be72baSPaolo Bonzini if targetos == 'windows' and (sdl.found() or gtk.found()) 212364ed6f92SPaolo Bonzini execs += [{ 212464ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name + 'w', 212564ed6f92SPaolo Bonzini 'gui': true, 212664ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 212764ed6f92SPaolo Bonzini 'dependencies': [] 212864ed6f92SPaolo Bonzini }] 212964ed6f92SPaolo Bonzini endif 213064ed6f92SPaolo Bonzini if config_host.has_key('CONFIG_FUZZ') 213164ed6f92SPaolo Bonzini specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false) 213264ed6f92SPaolo Bonzini execs += [{ 213364ed6f92SPaolo Bonzini 'name': 'qemu-fuzz-' + target_name, 213464ed6f92SPaolo Bonzini 'gui': false, 213564ed6f92SPaolo Bonzini 'sources': specific_fuzz.sources(), 213664ed6f92SPaolo Bonzini 'dependencies': specific_fuzz.dependencies(), 213764ed6f92SPaolo Bonzini }] 213864ed6f92SPaolo Bonzini endif 213964ed6f92SPaolo Bonzini else 214064ed6f92SPaolo Bonzini execs = [{ 214164ed6f92SPaolo Bonzini 'name': 'qemu-' + target_name, 214264ed6f92SPaolo Bonzini 'gui': false, 214364ed6f92SPaolo Bonzini 'sources': [], 214464ed6f92SPaolo Bonzini 'dependencies': [] 214564ed6f92SPaolo Bonzini }] 214664ed6f92SPaolo Bonzini endif 214764ed6f92SPaolo Bonzini foreach exe: execs 2148fd5eef85SPaolo Bonzini emulators += {exe['name']: 2149fd5eef85SPaolo Bonzini executable(exe['name'], exe['sources'], 215064ed6f92SPaolo Bonzini install: true, 215164ed6f92SPaolo Bonzini c_args: c_args, 215264ed6f92SPaolo Bonzini dependencies: arch_deps + deps + exe['dependencies'], 215364ed6f92SPaolo Bonzini objects: lib.extract_all_objects(recursive: true), 215464ed6f92SPaolo Bonzini link_language: link_language, 215564ed6f92SPaolo Bonzini link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []), 215664ed6f92SPaolo Bonzini link_args: link_args, 215764ed6f92SPaolo Bonzini gui_app: exe['gui']) 2158fd5eef85SPaolo Bonzini } 215910e1d263SMarc-André Lureau 216010e1d263SMarc-André Lureau if 'CONFIG_TRACE_SYSTEMTAP' in config_host 216110e1d263SMarc-André Lureau foreach stp: [ 2162bd5f973aSStefan Hajnoczi {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, 2163bd5f973aSStefan Hajnoczi {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, 216410e1d263SMarc-André Lureau {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, 216510e1d263SMarc-André Lureau {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, 216610e1d263SMarc-André Lureau ] 2167bd5f973aSStefan Hajnoczi custom_target(exe['name'] + stp['ext'], 216810e1d263SMarc-André Lureau input: trace_events_all, 2169bd5f973aSStefan Hajnoczi output: exe['name'] + stp['ext'], 217010e1d263SMarc-André Lureau install: stp['install'], 217116bf7a33SPaolo Bonzini install_dir: get_option('datadir') / 'systemtap/tapset', 217210e1d263SMarc-André Lureau command: [ 217310e1d263SMarc-André Lureau tracetool, '--group=all', '--format=' + stp['fmt'], 217410e1d263SMarc-André Lureau '--binary=' + stp['bin'], 217510e1d263SMarc-André Lureau '--target-name=' + target_name, 217610e1d263SMarc-André Lureau '--target-type=' + target_type, 217710e1d263SMarc-André Lureau '--probe-prefix=qemu.' + target_type + '.' + target_name, 2178c05012a3SStefan Hajnoczi '@INPUT@', '@OUTPUT@' 217910e1d263SMarc-André Lureau ]) 218010e1d263SMarc-André Lureau endforeach 218110e1d263SMarc-André Lureau endif 218264ed6f92SPaolo Bonzini endforeach 21832becc36aSPaolo Bonziniendforeach 21842becc36aSPaolo Bonzini 2185931049b4SPaolo Bonzini# Other build targets 2186897b5afaSMarc-André Lureau 2187f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 2188f556b4a1SPaolo Bonzini install_headers('include/qemu/qemu-plugin.h') 2189f556b4a1SPaolo Bonziniendif 2190f556b4a1SPaolo Bonzini 2191f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 2192f15bff25SPaolo Bonzini subdir('qga') 2193f15bff25SPaolo Bonziniendif 2194f15bff25SPaolo Bonzini 21959755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled 21969755c94aSLaurent Vivier# when we don't build tools or system 21974113f4cfSLaurent Vivierif xkbcommon.found() 219828742467SMarc-André Lureau # used for the update-keymaps target, so include rules even if !have_tools 219928742467SMarc-André Lureau qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, 220028742467SMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: have_tools) 220128742467SMarc-André Lureauendif 220228742467SMarc-André Lureau 2203931049b4SPaolo Bonziniif have_tools 2204b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 2205b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 2206b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 2207b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 2208b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 22093eacf70bSRoman Bolshakov dependencies: [blockdev, qemuutil, gnutls], install: true) 2210b7c70bf2SMarc-André Lureau 22117c58bb76SPaolo Bonzini subdir('storage-daemon') 2212a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 22131d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 2214a9c9727cSPaolo Bonzini 2215157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 2216157e7b13SMarc-André Lureau dependencies: qemuutil, 2217157e7b13SMarc-André Lureau install: true) 2218157e7b13SMarc-André Lureau 2219931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 22202d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 2221ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 222232fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 222399650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 2224931049b4SPaolo Bonzini endif 22258f51e01cSMarc-André Lureau 22268f51e01cSMarc-André Lureau if targetos == 'linux' 22278f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 22288f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 22298f51e01cSMarc-André Lureau install: true, 22308f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 2231897b5afaSMarc-André Lureau 2232897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 2233897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 22346ec0e15dSPaolo Bonzini libcap_ng, mpathpersist], 2235897b5afaSMarc-André Lureau install: true) 22368f51e01cSMarc-André Lureau endif 22378f51e01cSMarc-André Lureau 22385ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 22395ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 22405ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 22415ee24e78SMarc-André Lureau endif 2242931049b4SPaolo Bonziniendif 2243931049b4SPaolo Bonzini 2244f5aa6320SMarc-André Lureausubdir('scripts') 22453f99cf57SPaolo Bonzinisubdir('tools') 2246bdcbea7aSMarc-André Lureausubdir('pc-bios') 2247f8aa24eaSPaolo Bonzinisubdir('docs') 2248e3667660SYonggang Luosubdir('tests') 22491b695471SPaolo Bonziniif gtk.found() 2250e8f3bd71SMarc-André Lureau subdir('po') 2251e8f3bd71SMarc-André Lureauendif 22523f99cf57SPaolo Bonzini 22538adfeba9SMarc-André Lureauif host_machine.system() == 'windows' 22548adfeba9SMarc-André Lureau nsis_cmd = [ 22558adfeba9SMarc-André Lureau find_program('scripts/nsis.py'), 22568adfeba9SMarc-André Lureau '@OUTPUT@', 22578adfeba9SMarc-André Lureau get_option('prefix'), 22588adfeba9SMarc-André Lureau meson.current_source_dir(), 225924bdcc96SStefan Weil host_machine.cpu(), 22608adfeba9SMarc-André Lureau '--', 22618adfeba9SMarc-André Lureau '-DDISPLAYVERSION=' + meson.project_version(), 22628adfeba9SMarc-André Lureau ] 22638adfeba9SMarc-André Lureau if build_docs 22648adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_DOCUMENTATION=y' 22658adfeba9SMarc-André Lureau endif 22661b695471SPaolo Bonzini if gtk.found() 22678adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_GTK=y' 22688adfeba9SMarc-André Lureau endif 22698adfeba9SMarc-André Lureau 22708adfeba9SMarc-André Lureau nsis = custom_target('nsis', 22718adfeba9SMarc-André Lureau output: 'qemu-setup-' + meson.project_version() + '.exe', 22728adfeba9SMarc-André Lureau input: files('qemu.nsi'), 22738adfeba9SMarc-André Lureau build_always_stale: true, 22748adfeba9SMarc-André Lureau command: nsis_cmd + ['@INPUT@']) 22758adfeba9SMarc-André Lureau alias_target('installer', nsis) 22768adfeba9SMarc-André Lureauendif 22778adfeba9SMarc-André Lureau 2278a0c9162cSPaolo Bonzini######################### 2279a0c9162cSPaolo Bonzini# Configuration summary # 2280a0c9162cSPaolo Bonzini######################### 2281a0c9162cSPaolo Bonzini 2282f9332757SPaolo Bonzinisummary_info = {} 228316bf7a33SPaolo Bonzinisummary_info += {'Install prefix': get_option('prefix')} 228416bf7a33SPaolo Bonzinisummary_info += {'BIOS directory': qemu_datadir} 228516bf7a33SPaolo Bonzinisummary_info += {'firmware path': get_option('qemu_firmwarepath')} 228616bf7a33SPaolo Bonzinisummary_info += {'binary directory': get_option('bindir')} 228716bf7a33SPaolo Bonzinisummary_info += {'library directory': get_option('libdir')} 228816bf7a33SPaolo Bonzinisummary_info += {'module directory': qemu_moddir} 228916bf7a33SPaolo Bonzinisummary_info += {'libexec directory': get_option('libexecdir')} 229016bf7a33SPaolo Bonzinisummary_info += {'include directory': get_option('includedir')} 229116bf7a33SPaolo Bonzinisummary_info += {'config directory': get_option('sysconfdir')} 2292f9332757SPaolo Bonziniif targetos != 'windows' 229316bf7a33SPaolo Bonzini summary_info += {'local state directory': get_option('localstatedir')} 2294b81efab7SMarc-André Lureau summary_info += {'Manual directory': get_option('mandir')} 2295f9332757SPaolo Bonzinielse 2296f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 2297f9332757SPaolo Bonziniendif 2298491e74c1SMarc-André Lureausummary_info += {'Doc directory': get_option('docdir')} 2299f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 2300f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 2301f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 2302f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 2303f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 2304f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 2305f9332757SPaolo Bonziniif link_language == 'cpp' 2306f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 2307f9332757SPaolo Bonzinielse 2308f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 2309f9332757SPaolo Bonziniendif 2310f9332757SPaolo Bonziniif targetos == 'darwin' 2311f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 2312f9332757SPaolo Bonziniendif 2313f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 231447b30835SPaolo Bonzinisummary_info += {'CFLAGS': ' '.join(get_option('c_args') 231547b30835SPaolo Bonzini + ['-O' + get_option('optimization')] 231647b30835SPaolo Bonzini + (get_option('debug') ? ['-g'] : []))} 231747b30835SPaolo Bonziniif link_language == 'cpp' 231847b30835SPaolo Bonzini summary_info += {'CXXFLAGS': ' '.join(get_option('cpp_args') 231947b30835SPaolo Bonzini + ['-O' + get_option('optimization')] 232047b30835SPaolo Bonzini + (get_option('debug') ? ['-g'] : []))} 232147b30835SPaolo Bonziniendif 232247b30835SPaolo Bonzinilink_args = get_option(link_language + '_link_args') 232347b30835SPaolo Bonziniif link_args.length() > 0 232447b30835SPaolo Bonzini summary_info += {'LDFLAGS': ' '.join(link_args)} 232547b30835SPaolo Bonziniendif 2326f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 2327f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 2328f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 2329f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 2330e3667660SYonggang Luosummary_info += {'sphinx-build': sphinx_build.found()} 2331f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 2332f9332757SPaolo Bonzini# TODO: add back version 23334d34a86bSPaolo Bonzinisummary_info += {'slirp support': slirp_opt == 'disabled' ? false : slirp_opt} 23344d34a86bSPaolo Bonziniif slirp_opt != 'disabled' 2335f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 2336f9332757SPaolo Bonziniendif 2337f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 2338f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 2339f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 2340f9332757SPaolo Bonziniendif 2341f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 2342f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 2343fdb75aefSPaolo Bonzinisummary_info += {'target list': ' '.join(target_dirs)} 2344f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 2345deb62371SPaolo Bonzinisummary_info += {'sparse enabled': sparse.found()} 2346f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 2347f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 2348cdad781dSDaniele Buonosummary_info += {'link-time optimization (LTO)': get_option('b_lto')} 23493e8529ddSLaurent Viviersummary_info += {'static build': config_host.has_key('CONFIG_STATIC')} 2350f9332757SPaolo Bonziniif targetos == 'darwin' 2351cb7abd83SChris Hofstaedtler summary_info += {'Cocoa support': cocoa.found()} 2352f9332757SPaolo Bonziniendif 2353f9332757SPaolo Bonzini# TODO: add back version 235435be72baSPaolo Bonzinisummary_info += {'SDL support': sdl.found()} 235535be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()} 2356f9332757SPaolo Bonzini# TODO: add back version 23571b695471SPaolo Bonzinisummary_info += {'GTK support': gtk.found()} 2358b7612f45SPaolo Bonzinisummary_info += {'pixman': pixman.found()} 2359f9332757SPaolo Bonzini# TODO: add back version 2360f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 2361f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 2362f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 2363f9332757SPaolo Bonzini# TODO: add back version 2364f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 2365f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 2366f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 2367f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 2368f9332757SPaolo Bonziniendif 2369f9332757SPaolo Bonzini# TODO: add back version 2370f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 2371f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 2372f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 2373f9332757SPaolo Bonziniendif 2374f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 2375f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 23765285e593SYonggang Luosummary_info += {'iconv support': iconv.found()} 23775285e593SYonggang Luosummary_info += {'curses support': curses.found()} 2378f9332757SPaolo Bonzini# TODO: add back version 2379f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 2380f9cd86feSPaolo Bonzinisummary_info += {'curl support': curl.found()} 2381f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 2382f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 2383f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 2384f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 238569202b40SPaolo Bonzinisummary_info += {'VirtFS support': have_virtfs} 2386cece116cSMisono Tomohirosummary_info += {'build virtiofs daemon': have_virtiofsd} 23876ec0e15dSPaolo Bonzinisummary_info += {'Multipath support': mpathpersist.found()} 2388a0b93237SPaolo Bonzinisummary_info += {'VNC support': vnc.found()} 2389a0b93237SPaolo Bonziniif vnc.found() 2390a0b93237SPaolo Bonzini summary_info += {'VNC SASL support': sasl.found()} 2391a0b93237SPaolo Bonzini summary_info += {'VNC JPEG support': jpeg.found()} 2392a0b93237SPaolo Bonzini summary_info += {'VNC PNG support': png.found()} 2393f9332757SPaolo Bonziniendif 2394f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 2395f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 2396f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 2397f9332757SPaolo Bonziniendif 23988c6d4ff4SPaolo Bonzinisummary_info += {'brlapi support': brlapi.found()} 2399e3667660SYonggang Luosummary_info += {'Documentation': build_docs} 2400f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 2401f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 2402f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 2403f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 2404f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 2405f7f2d651SPaolo Bonzinisummary_info += {'ATTR/XATTR support': libattr.found()} 2406c8d5450bSPaolo Bonzinisummary_info += {'Install blobs': get_option('install_blobs')} 240705512f55SPaolo Bonzinisummary_info += {'KVM support': config_all.has_key('CONFIG_KVM')} 240805512f55SPaolo Bonzinisummary_info += {'HAX support': config_all.has_key('CONFIG_HAX')} 240905512f55SPaolo Bonzinisummary_info += {'HVF support': config_all.has_key('CONFIG_HVF')} 241005512f55SPaolo Bonzinisummary_info += {'WHPX support': config_all.has_key('CONFIG_WHPX')} 241105512f55SPaolo Bonzinisummary_info += {'TCG support': config_all.has_key('CONFIG_TCG')} 241205512f55SPaolo Bonziniif config_all.has_key('CONFIG_TCG') 241305512f55SPaolo Bonzini summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 241405512f55SPaolo Bonzini summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 241505512f55SPaolo Bonziniendif 2416aa087962SPaolo Bonzinisummary_info += {'malloc trim support': has_malloc_trim} 2417f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 2418f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 2419fbb4121dSPaolo Bonzinisummary_info += {'fdt support': fdt_opt == 'disabled' ? false : fdt_opt} 2420f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 2421f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 2422f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 2423f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 2424f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 2425f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 2426727c8bb8SPaolo Bonzinisummary_info += {'libcap-ng support': libcap_ng.found()} 2427b54b82dfSThomas Huthsummary_info += {'vhost-kernel support': config_host.has_key('CONFIG_VHOST_KERNEL')} 2428f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 2429f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 2430f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 2431f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 2432b54b82dfSThomas Huthsummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_USER')} 2433e5e856c1SStefan Hajnoczisummary_info += {'vhost-user-blk server support': have_vhost_user_blk_server} 2434f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 2435f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 2436f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 2437f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 2438f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 2439f9332757SPaolo Bonziniendif 2440f9332757SPaolo Bonzini# TODO: add back protocol and server version 2441f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 2442fabd1e93SPaolo Bonzinisummary_info += {'rbd support': rbd.found()} 2443f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 2444f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 24450a40bcb7SCésar Belleysummary_info += {'U2F support': u2f.found()} 2446f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 2447f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 2448f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 2449f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 24509db405a3SPaolo Bonzinisummary_info += {'libiscsi support': libiscsi.found()} 245130045c05SPaolo Bonzinisummary_info += {'libnfs support': libnfs.found()} 2452f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 2453f9332757SPaolo Bonziniif targetos == 'windows' 2454f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 2455f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 2456f9332757SPaolo Bonzini endif 2457f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 2458f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 24594bad7c3bSStefan Hajnoczi summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI')} 2460f9332757SPaolo Bonziniendif 246190835c2bSPaolo Bonzinisummary_info += {'seccomp support': seccomp.found()} 24629e62ba48SDaniele Buonosummary_info += {'CFI support': get_option('cfi')} 24639e62ba48SDaniele Buonosummary_info += {'CFI debug support': get_option('cfi_debug')} 2464f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 2465f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 2466f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 2467f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 2468f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 246908821ca2SPaolo Bonzinisummary_info += {'GlusterFS support': glusterfs.found()} 2470bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 2471f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 2472f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 2473f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 2474f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 24750c32a0aeSPaolo Bonzinisummary_info += {'lzo support': lzo.found()} 2476241611eaSPaolo Bonzinisummary_info += {'snappy support': snappy.found()} 247729ba6116SPaolo Bonzinisummary_info += {'bzip2 support': libbzip2.found()} 2478ecea3696SPaolo Bonzinisummary_info += {'lzfse support': liblzfse.found()} 2479b1def33dSPaolo Bonzinisummary_info += {'zstd support': zstd.found()} 2480f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 2481f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 2482aa087962SPaolo Bonzinisummary_info += {'memory allocator': get_option('malloc')} 2483f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 2484f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 2485f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 2486f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 2487f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 2488f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 2489f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 2490f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 2491f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 2492f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 2493f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 2494f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 24958b18cdbfSRichard Hendersonsummary_info += {'capstone': capstone_opt == 'disabled' ? false : capstone_opt} 2496f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 2497f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 2498f01496a3SPaolo Bonzinisummary_info += {'libudev': libudev.found()} 24997bc3ca7fSPaolo Bonzinisummary_info += {'default devices': get_option('default_devices')} 2500f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 2501f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 2502f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 2503f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 2504f9332757SPaolo Bonziniendif 2505f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 2506f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 2507f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 2508a484a719SMax Reitzsummary_info += {'FUSE exports': fuse.found()} 2509df4ea709SMax Reitzsummary_info += {'FUSE lseek': fuse_lseek.found()} 2510f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 2511f9332757SPaolo Bonzini 2512f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 2513f9332757SPaolo Bonzini message() 2514f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 2515f9332757SPaolo Bonzini message() 2516f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 2517f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 2518f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 2519f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 2520f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 2521f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 2522f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 2523f9332757SPaolo Bonziniendif 2524f9332757SPaolo Bonzini 2525f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 2526f9332757SPaolo Bonzini message() 2527f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 2528f9332757SPaolo Bonzini message() 2529f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 2530f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 2531f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 2532f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 2533f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 2534f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 2535f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 2536f9332757SPaolo Bonziniendif 2537