1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0', 290756b2fSGerd Hoffmann default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 33e0e5190SPaolo Bonzini 'b_colorout=auto'], 4a5665051SPaolo Bonzini version: run_command('head', meson.source_root() / 'VERSION').stdout().strip()) 5a5665051SPaolo Bonzini 6a5665051SPaolo Bonzininot_found = dependency('', required: false) 7b29b40f4SPaolo Bonziniif meson.version().version_compare('>=0.56.0') 8b29b40f4SPaolo Bonzini keyval = import('keyval') 9b29b40f4SPaolo Bonzinielse 10a5665051SPaolo Bonzini keyval = import('unstable-keyval') 11b29b40f4SPaolo Bonziniendif 12a81df1b6SPaolo Bonziniss = import('sourceset') 13a81df1b6SPaolo Bonzini 14ce1c1e7aSPaolo Bonzinish = find_program('sh') 15a81df1b6SPaolo Bonzinicc = meson.get_compiler('c') 16a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak') 173154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host 1835be72baSPaolo Bonzinienable_static = 'CONFIG_STATIC' in config_host 19f8aa24eaSPaolo Bonzinibuild_docs = 'BUILD_DOCS' in config_host 208fe11232SMarc-André Lureau 218fe11232SMarc-André Lureauif get_option('qemu_suffix').startswith('/') 228fe11232SMarc-André Lureau error('qemu_suffix cannot start with a /') 238fe11232SMarc-André Lureauendif 248fe11232SMarc-André Lureau 25ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix') 26491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix') 27859aef02SPaolo Bonziniconfig_host_data = configuration_data() 28859aef02SPaolo Bonzinigenh = [] 29a5665051SPaolo Bonzini 30760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 31760e4327SPaolo Bonzinihave_user = false 32760e4327SPaolo Bonzinihave_system = false 33760e4327SPaolo Bonziniforeach target : target_dirs 34760e4327SPaolo Bonzini have_user = have_user or target.endswith('-user') 35760e4327SPaolo Bonzini have_system = have_system or target.endswith('-softmmu') 36760e4327SPaolo Bonziniendforeach 37760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 38760e4327SPaolo Bonzinihave_block = have_system or have_tools 39760e4327SPaolo Bonzini 40201e8ed7SPaolo Bonzinipython = import('python').find_installation() 41201e8ed7SPaolo Bonzini 42201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 43201e8ed7SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', 44201e8ed7SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 45201e8ed7SPaolo Bonzini 46201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family() 47201e8ed7SPaolo Bonzinitargetos = host_machine.system() 48201e8ed7SPaolo Bonzini 49201e8ed7SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'), 50201e8ed7SPaolo Bonzini output: 'ninjatool', 51201e8ed7SPaolo Bonzini configuration: config_host) 52201e8ed7SPaolo Bonzini 53201e8ed7SPaolo Bonzini################## 54201e8ed7SPaolo Bonzini# Compiler flags # 55201e8ed7SPaolo Bonzini################## 56201e8ed7SPaolo Bonzini 57*ff9ed62bSAlexander Bulekov# Specify linker-script with add_project_link_arguments so that it is not placed 58*ff9ed62bSAlexander Bulekov# within a linker --start-group/--end-group pair 59*ff9ed62bSAlexander Bulekovif 'CONFIG_FUZZ' in config_host 60*ff9ed62bSAlexander Bulekov add_project_link_arguments(['-Wl,-T,', 61*ff9ed62bSAlexander Bulekov (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')], 62*ff9ed62bSAlexander Bulekov native: false, language: ['c', 'cpp', 'objc']) 63*ff9ed62bSAlexander Bulekovendif 64*ff9ed62bSAlexander Bulekov 65a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 66a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 67a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 68a5665051SPaolo Bonzini native: false, language: 'cpp') 69a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 70a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 71a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 72a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 73a5665051SPaolo Bonzini 74c46f76d1SAlexander Bulekov 75fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 76fc929892SMarc-André Lureauif link_language == 'cpp' 77fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 78fc929892SMarc-André Lureauendif 79a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 80a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 81a5665051SPaolo Bonziniendif 82a5665051SPaolo Bonzini 83968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host 84968b4db3SPaolo Bonzini run_target('sparse', 85968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 86968b4db3SPaolo Bonzini config_host['SPARSE_CFLAGS'].split(), 87968b4db3SPaolo Bonzini 'compile_commands.json']) 88968b4db3SPaolo Bonziniendif 89968b4db3SPaolo Bonzini 906ec0e15dSPaolo Bonzini########################################### 916ec0e15dSPaolo Bonzini# Target-specific checks and dependencies # 926ec0e15dSPaolo Bonzini########################################### 936ec0e15dSPaolo Bonzini 946ec0e15dSPaolo Bonziniif targetos != 'linux' and get_option('mpath').enabled() 956ec0e15dSPaolo Bonzini error('Multipath is supported only on Linux') 966ec0e15dSPaolo Bonziniendif 976ec0e15dSPaolo Bonzini 98a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 99a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 1004a96337dSPaolo Bonziniwinmm = [] 101a81df1b6SPaolo Bonzinisocket = [] 10204c6f1e7SMarc-André Lureauversion_res = [] 103d92989aaSMarc-André Lureaucoref = [] 104d92989aaSMarc-André Lureauiokit = [] 105b4e312e9SPaolo Bonzinicocoa = not_found 106d92989aaSMarc-André Lureauhvf = [] 107a81df1b6SPaolo Bonziniif targetos == 'windows' 108a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 1094a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 11004c6f1e7SMarc-André Lureau 11104c6f1e7SMarc-André Lureau win = import('windows') 11204c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 11304c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 11404c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 115d92989aaSMarc-André Lureauelif targetos == 'darwin' 116d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 117d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 118b4e312e9SPaolo Bonzini cocoa = dependency('appleframeworks', modules: 'Cocoa', required: get_option('cocoa')) 119d92989aaSMarc-André Lureau hvf = dependency('appleframeworks', modules: 'Hypervisor') 120cfad62f1SPaolo Bonzinielif targetos == 'sunos' 121cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 122cfad62f1SPaolo Bonzini cc.find_library('nsl'), 123cfad62f1SPaolo Bonzini cc.find_library('resolv')] 124cfad62f1SPaolo Bonzinielif targetos == 'haiku' 125cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 126cfad62f1SPaolo Bonzini cc.find_library('network'), 127cfad62f1SPaolo Bonzini cc.find_library('bsd')] 128a81df1b6SPaolo Bonziniendif 1296ec0e15dSPaolo Bonzini 130b4e312e9SPaolo Bonziniif not cocoa.found() and get_option('cocoa').enabled() 131b4e312e9SPaolo Bonzini error('Cocoa not available on this platform') 132b4e312e9SPaolo Bonziniendif 133b4e312e9SPaolo Bonzini 1346ec0e15dSPaolo Bonzini################ 1356ec0e15dSPaolo Bonzini# Dependencies # 1366ec0e15dSPaolo Bonzini################ 1376ec0e15dSPaolo Bonzini 138215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands. This was 139215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles. 140215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(), 141215b0c2fSPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 142215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split()) 143a81df1b6SPaolo Bonzinigio = not_found 144a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 145a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 146a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 147a81df1b6SPaolo Bonziniendif 148a81df1b6SPaolo Bonzinilttng = not_found 149a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 150a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 151a81df1b6SPaolo Bonziniendif 152a81df1b6SPaolo Bonziniurcubp = not_found 153a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 154a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 155a81df1b6SPaolo Bonziniendif 15646859d93SDaniel P. Berrangégcrypt = not_found 15746859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host 15846859d93SDaniel P. Berrangé gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), 15946859d93SDaniel P. Berrangé link_args: config_host['GCRYPT_LIBS'].split()) 16046859d93SDaniel P. Berrangéendif 161a81df1b6SPaolo Bonzininettle = not_found 162a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 163a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 164a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 165a81df1b6SPaolo Bonziniendif 166a81df1b6SPaolo Bonzinignutls = not_found 167a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 168a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 169a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 170a81df1b6SPaolo Bonziniendif 171b7612f45SPaolo Bonzinipixman = not_found 172b7612f45SPaolo Bonziniif have_system or have_tools 173b7612f45SPaolo Bonzini pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', 1741a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 175b7612f45SPaolo Bonziniendif 1765e7fbd25SMarc-André Lureaupam = not_found 1775e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 1785e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 1795e7fbd25SMarc-André Lureauendif 1805e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 1811ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static) 1825e5733e5SMarc-André Lureaulinux_io_uring = not_found 1835e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 1845e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 1855e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 1865e5733e5SMarc-André Lureauendif 1875e5733e5SMarc-André Lureaulibxml2 = not_found 1885e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 1895e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 1905e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 1915e5733e5SMarc-André Lureauendif 1925e5733e5SMarc-André Lureaulibnfs = not_found 1935e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 1945e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 1955e5733e5SMarc-André Lureauendif 196ec0d5893SMarc-André Lureaulibattr = not_found 197ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 198ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 199ec0d5893SMarc-André Lureauendif 2003f99cf57SPaolo Bonziniseccomp = not_found 2013f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 2023f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 2033f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 2043f99cf57SPaolo Bonziniendif 2053f99cf57SPaolo Bonzinilibcap_ng = not_found 2063f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 2073f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 2083f99cf57SPaolo Bonziniendif 2091917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools 2101917ec6dSPaolo Bonzini xkbcommon = not_found 2111917ec6dSPaolo Bonzinielse 2121917ec6dSPaolo Bonzini xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), 2131a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 214ade60d4fSMarc-André Lureauendif 215cdaf0722SMarc-André Lureauslirp = not_found 216cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP') 217cdaf0722SMarc-André Lureau slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(), 218cdaf0722SMarc-André Lureau link_args: config_host['SLIRP_LIBS'].split()) 219cdaf0722SMarc-André Lureauendif 220cdaf0722SMarc-André Lureauvde = not_found 221cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE') 222cdaf0722SMarc-André Lureau vde = declare_dependency(link_args: config_host['VDE_LIBS'].split()) 223cdaf0722SMarc-André Lureauendif 224478e943fSPaolo Bonzinipulse = not_found 225478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 226478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 227478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 228478e943fSPaolo Bonziniendif 229478e943fSPaolo Bonzinialsa = not_found 230478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 231478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 232478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 233478e943fSPaolo Bonziniendif 234478e943fSPaolo Bonzinijack = not_found 235478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 236478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 237478e943fSPaolo Bonziniendif 2382634733cSPaolo Bonzinispice = not_found 2392634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 2402634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 2412634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 2422634733cSPaolo Bonziniendif 2435ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 244ccf7afa5SPaolo Bonzinilibdl = not_found 245ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 246ccf7afa5SPaolo Bonzini libdl = cc.find_library('dl', required: true) 247ccf7afa5SPaolo Bonziniendif 24899650b62SPaolo Bonzinilibiscsi = not_found 24999650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 25099650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 25199650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 25299650b62SPaolo Bonziniendif 2535e5733e5SMarc-André Lureauzstd = not_found 2545e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 2555e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 2565e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 2575e5733e5SMarc-André Lureauendif 258ea458960SMarc-André Lureaugbm = not_found 259ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 260ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 261ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 262ea458960SMarc-André Lureauendif 263ea458960SMarc-André Lureauvirgl = not_found 264ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 265ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 266ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 267ea458960SMarc-André Lureauendif 2681d7bb6abSMarc-André Lureaucurl = not_found 2691d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 2701d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 2711d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 2721d7bb6abSMarc-André Lureauendif 273f15bff25SPaolo Bonzinilibudev = not_found 274f01496a3SPaolo Bonziniif targetos == 'linux' and (have_system or have_tools) 2756ec0e15dSPaolo Bonzini libudev = dependency('libudev', 2766ec0e15dSPaolo Bonzini required: get_option('mpath').enabled(), 2776ec0e15dSPaolo Bonzini static: enable_static) 278f15bff25SPaolo Bonziniendif 2796ec0e15dSPaolo Bonzini 2806ec0e15dSPaolo Bonzinimpathpersist = not_found 2816ec0e15dSPaolo Bonzinimpathpersist_new_api = false 2826ec0e15dSPaolo Bonziniif targetos == 'linux' and have_tools and not get_option('mpath').disabled() 2836ec0e15dSPaolo Bonzini mpath_test_source_new = ''' 2846ec0e15dSPaolo Bonzini #include <libudev.h> 2856ec0e15dSPaolo Bonzini #include <mpath_persist.h> 2866ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 2876ec0e15dSPaolo Bonzini int logsink; 2886ec0e15dSPaolo Bonzini static struct config *multipath_conf; 2896ec0e15dSPaolo Bonzini extern struct udev *udev; 2906ec0e15dSPaolo Bonzini extern struct config *get_multipath_config(void); 2916ec0e15dSPaolo Bonzini extern void put_multipath_config(struct config *conf); 2926ec0e15dSPaolo Bonzini struct udev *udev; 2936ec0e15dSPaolo Bonzini struct config *get_multipath_config(void) { return multipath_conf; } 2946ec0e15dSPaolo Bonzini void put_multipath_config(struct config *conf) { } 2956ec0e15dSPaolo Bonzini int main(void) { 2966ec0e15dSPaolo Bonzini udev = udev_new(); 2976ec0e15dSPaolo Bonzini multipath_conf = mpath_lib_init(); 2986ec0e15dSPaolo Bonzini return 0; 2996ec0e15dSPaolo Bonzini }''' 3006ec0e15dSPaolo Bonzini mpath_test_source_old = ''' 3016ec0e15dSPaolo Bonzini #include <libudev.h> 3026ec0e15dSPaolo Bonzini #include <mpath_persist.h> 3036ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 3046ec0e15dSPaolo Bonzini int logsink; 3056ec0e15dSPaolo Bonzini int main(void) { 3066ec0e15dSPaolo Bonzini struct udev *udev = udev_new(); 3076ec0e15dSPaolo Bonzini mpath_lib_init(udev); 3086ec0e15dSPaolo Bonzini return 0; 3096ec0e15dSPaolo Bonzini }''' 31043b43a40SPaolo Bonzini mpathlibs = [libudev] 31143b43a40SPaolo Bonzini if enable_static 31243b43a40SPaolo Bonzini mpathlibs += cc.find_library('devmapper', 3136ec0e15dSPaolo Bonzini required: get_option('mpath'), 3146ec0e15dSPaolo Bonzini static: enable_static) 31543b43a40SPaolo Bonzini endif 31643b43a40SPaolo Bonzini mpathlibs += cc.find_library('multipath', 3176ec0e15dSPaolo Bonzini required: get_option('mpath'), 3186ec0e15dSPaolo Bonzini static: enable_static) 31943b43a40SPaolo Bonzini mpathlibs += cc.find_library('mpathpersist', 32043b43a40SPaolo Bonzini required: get_option('mpath'), 32143b43a40SPaolo Bonzini static: enable_static) 32243b43a40SPaolo Bonzini foreach lib: mpathlibs 32343b43a40SPaolo Bonzini if not lib.found() 32443b43a40SPaolo Bonzini mpathlibs = [] 32543b43a40SPaolo Bonzini break 32643b43a40SPaolo Bonzini endif 32743b43a40SPaolo Bonzini endforeach 32843b43a40SPaolo Bonzini if mpathlibs.length() > 0 3296ec0e15dSPaolo Bonzini if cc.links(mpath_test_source_new, dependencies: mpathlibs) 3306ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 3316ec0e15dSPaolo Bonzini mpathpersist_new_api = true 3326ec0e15dSPaolo Bonzini elif cc.links(mpath_test_source_old, dependencies: mpathlibs) 3336ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 3346ec0e15dSPaolo Bonzini else 3356ec0e15dSPaolo Bonzini if get_option('mpath').enabled() 3366ec0e15dSPaolo Bonzini error('Cannot detect libmpathpersist API') 3376ec0e15dSPaolo Bonzini else 3386ec0e15dSPaolo Bonzini warning('Cannot detect libmpathpersist API, disabling') 3396ec0e15dSPaolo Bonzini endif 3406ec0e15dSPaolo Bonzini endif 3416ec0e15dSPaolo Bonzini endif 3426ec0e15dSPaolo Bonziniendif 3436ec0e15dSPaolo Bonzini 3442634733cSPaolo Bonzinibrlapi = not_found 3452634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 3462634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 3472634733cSPaolo Bonziniendif 34835be72baSPaolo Bonzini 349760e4327SPaolo Bonzinisdl = not_found 350760e4327SPaolo Bonziniif have_system 351363743daSYonggang Luo sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) 35235be72baSPaolo Bonzini sdl_image = not_found 353760e4327SPaolo Bonziniendif 35435be72baSPaolo Bonziniif sdl.found() 35535be72baSPaolo Bonzini # work around 2.0.8 bug 35635be72baSPaolo Bonzini sdl = declare_dependency(compile_args: '-Wno-undef', 35735be72baSPaolo Bonzini dependencies: sdl) 3587161a433SVolker Rümelin sdl_image = dependency('SDL2_image', required: get_option('sdl_image'), 3591a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 36035be72baSPaolo Bonzinielse 36135be72baSPaolo Bonzini if get_option('sdl_image').enabled() 362a8dc2aceSSergei Trofimovich error('sdl-image required, but SDL was @0@'.format( 363a8dc2aceSSergei Trofimovich get_option('sdl').disabled() ? 'disabled' : 'not found')) 3642634733cSPaolo Bonzini endif 36535be72baSPaolo Bonzini sdl_image = not_found 36635be72baSPaolo Bonziniendif 36735be72baSPaolo Bonzini 3685e5733e5SMarc-André Lureaurbd = not_found 3695e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 3705e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 3715e5733e5SMarc-André Lureauendif 3725e5733e5SMarc-André Lureauglusterfs = not_found 3735e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 3745e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 3755e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 3765e5733e5SMarc-André Lureauendif 3775e5733e5SMarc-André Lureaulibssh = not_found 3785e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 3795e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 3805e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 3815e5733e5SMarc-André Lureauendif 3825e5733e5SMarc-André Lureaulibbzip2 = not_found 3835e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 3845e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 3855e5733e5SMarc-André Lureauendif 3865e5733e5SMarc-André Lureauliblzfse = not_found 3875e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 3885e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 3895e5733e5SMarc-André Lureauendif 390478e943fSPaolo Bonzinioss = not_found 391478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 392478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 393478e943fSPaolo Bonziniendif 394478e943fSPaolo Bonzinidsound = not_found 395478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 396478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 397478e943fSPaolo Bonziniendif 398478e943fSPaolo Bonzinicoreaudio = not_found 399478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 400478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 401478e943fSPaolo Bonziniendif 4022b1ccdf4SMarc-André Lureauopengl = not_found 4032b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 404de2d3005SPaolo Bonzini opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(), 405de2d3005SPaolo Bonzini link_args: config_host['OPENGL_LIBS'].split()) 4062b1ccdf4SMarc-André Lureauendif 4072b1ccdf4SMarc-André Lureaugtk = not_found 4082b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host 4092b1ccdf4SMarc-André Lureau gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(), 4102b1ccdf4SMarc-André Lureau link_args: config_host['GTK_LIBS'].split()) 4112b1ccdf4SMarc-André Lureauendif 4122b1ccdf4SMarc-André Lureauvte = not_found 4132b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 4142b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 4152b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 4162b1ccdf4SMarc-André Lureauendif 4172b1ccdf4SMarc-André Lureaux11 = not_found 4182b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host 4192b1ccdf4SMarc-André Lureau x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(), 4202b1ccdf4SMarc-André Lureau link_args: config_host['X11_LIBS'].split()) 4212b1ccdf4SMarc-André Lureauendif 4222b1ccdf4SMarc-André Lureaucurses = not_found 4232b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host 4242b1ccdf4SMarc-André Lureau curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(), 4252b1ccdf4SMarc-André Lureau link_args: config_host['CURSES_LIBS'].split()) 4262b1ccdf4SMarc-André Lureauendif 4272b1ccdf4SMarc-André Lureauiconv = not_found 4282b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host 4292b1ccdf4SMarc-André Lureau iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(), 4302b1ccdf4SMarc-André Lureau link_args: config_host['ICONV_LIBS'].split()) 4312b1ccdf4SMarc-André Lureauendif 432a0b93237SPaolo Bonzinivnc = not_found 4332b1ccdf4SMarc-André Lureaupng = not_found 4342b1ccdf4SMarc-André Lureaujpeg = not_found 4352b1ccdf4SMarc-André Lureausasl = not_found 436a0b93237SPaolo Bonziniif get_option('vnc').enabled() 437a0b93237SPaolo Bonzini vnc = declare_dependency() # dummy dependency 438a0b93237SPaolo Bonzini png = dependency('libpng', required: get_option('vnc_png'), 4391a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 440a0b93237SPaolo Bonzini jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'], 441a0b93237SPaolo Bonzini required: get_option('vnc_jpeg'), 442a0b93237SPaolo Bonzini static: enable_static) 443a0b93237SPaolo Bonzini sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'], 444a0b93237SPaolo Bonzini required: get_option('vnc_sasl'), 445a0b93237SPaolo Bonzini static: enable_static) 446a0b93237SPaolo Bonzini if sasl.found() 447a0b93237SPaolo Bonzini sasl = declare_dependency(dependencies: sasl, 448a0b93237SPaolo Bonzini compile_args: '-DSTRUCT_IOVEC_DEFINED') 449a0b93237SPaolo Bonzini endif 4502b1ccdf4SMarc-André Lureauendif 4514a96337dSPaolo Bonzinifdt = not_found 4524a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host 4534a96337dSPaolo Bonzini fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(), 4544a96337dSPaolo Bonzini link_args: config_host['FDT_LIBS'].split()) 4554a96337dSPaolo Bonziniendif 456708eab42SMarc-André Lureausnappy = not_found 457708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host 458708eab42SMarc-André Lureau snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split()) 459708eab42SMarc-André Lureauendif 460708eab42SMarc-André Lureaulzo = not_found 461708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host 462708eab42SMarc-André Lureau lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split()) 463708eab42SMarc-André Lureauendif 46455166230SMarc-André Lureaurdma = not_found 46555166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host 46655166230SMarc-André Lureau rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split()) 46755166230SMarc-André Lureauendif 468ab318051SMarc-André Lureaunuma = not_found 469ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host 470ab318051SMarc-André Lureau numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split()) 471ab318051SMarc-André Lureauendif 472582ea95fSMarc-André Lureauxen = not_found 473582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host 474582ea95fSMarc-André Lureau xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(), 475582ea95fSMarc-André Lureau link_args: config_host['XEN_LIBS'].split()) 476582ea95fSMarc-André Lureauendif 47706677ce1SPaolo Bonzinicacard = not_found 47806677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host 47906677ce1SPaolo Bonzini cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(), 48006677ce1SPaolo Bonzini link_args: config_host['SMARTCARD_LIBS'].split()) 48106677ce1SPaolo Bonziniendif 4820a40bcb7SCésar Belleyu2f = not_found 4830a40bcb7SCésar Belleyif have_system 4840a40bcb7SCésar Belley u2f = dependency('u2f-emu', required: get_option('u2f'), 4850a40bcb7SCésar Belley method: 'pkg-config', 4860a40bcb7SCésar Belley static: enable_static) 4870a40bcb7SCésar Belleyendif 48806677ce1SPaolo Bonziniusbredir = not_found 48906677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host 49006677ce1SPaolo Bonzini usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(), 49106677ce1SPaolo Bonzini link_args: config_host['USB_REDIR_LIBS'].split()) 49206677ce1SPaolo Bonziniendif 49306677ce1SPaolo Bonzinilibusb = not_found 49406677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host 49506677ce1SPaolo Bonzini libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(), 49606677ce1SPaolo Bonzini link_args: config_host['LIBUSB_LIBS'].split()) 49706677ce1SPaolo Bonziniendif 498c9322ab5SMarc-André Lureaucapstone = not_found 499c9322ab5SMarc-André Lureauif 'CONFIG_CAPSTONE' in config_host 500c9322ab5SMarc-André Lureau capstone = declare_dependency(compile_args: config_host['CAPSTONE_CFLAGS'].split(), 501c9322ab5SMarc-André Lureau link_args: config_host['CAPSTONE_LIBS'].split()) 502c9322ab5SMarc-André Lureauendif 503c9322ab5SMarc-André Lureaulibpmem = not_found 504c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host 505c9322ab5SMarc-André Lureau libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), 506c9322ab5SMarc-André Lureau link_args: config_host['LIBPMEM_LIBS'].split()) 507c9322ab5SMarc-André Lureauendif 508c7c91a74SBruce Rogerslibdaxctl = not_found 509c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host 510c7c91a74SBruce Rogers libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) 511c7c91a74SBruce Rogersendif 5128ce0a45fSMarc-André Lureautasn1 = not_found 5138ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host 5148ce0a45fSMarc-André Lureau tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), 5158ce0a45fSMarc-André Lureau link_args: config_host['TASN1_LIBS'].split()) 5168ce0a45fSMarc-André Lureauendif 517af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false, 518af04e89dSMarc-André Lureau method: 'pkg-config', static: enable_static) 519a81df1b6SPaolo Bonzini 5203909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid') 5213909def8SMarc-André Lureau 522aa087962SPaolo Bonzini# Malloc tests 523aa087962SPaolo Bonzini 524aa087962SPaolo Bonzinimalloc = [] 525aa087962SPaolo Bonziniif get_option('malloc') == 'system' 526aa087962SPaolo Bonzini has_malloc_trim = \ 527aa087962SPaolo Bonzini not get_option('malloc_trim').disabled() and \ 528aa087962SPaolo Bonzini cc.links('''#include <malloc.h> 529aa087962SPaolo Bonzini int main(void) { malloc_trim(0); return 0; }''') 530aa087962SPaolo Bonzinielse 531aa087962SPaolo Bonzini has_malloc_trim = false 532aa087962SPaolo Bonzini malloc = cc.find_library(get_option('malloc'), required: true) 533aa087962SPaolo Bonziniendif 534aa087962SPaolo Bonziniif not has_malloc_trim and get_option('malloc_trim').enabled() 535aa087962SPaolo Bonzini if get_option('malloc') == 'system' 536aa087962SPaolo Bonzini error('malloc_trim not available on this platform.') 537aa087962SPaolo Bonzini else 538aa087962SPaolo Bonzini error('malloc_trim not available with non-libc memory allocator') 539aa087962SPaolo Bonzini endif 540aa087962SPaolo Bonziniendif 541aa087962SPaolo Bonzini 542859aef02SPaolo Bonzini# Create config-host.h 543859aef02SPaolo Bonzini 544b4e312e9SPaolo Bonziniconfig_host_data.set('CONFIG_COCOA', cocoa.found()) 545f01496a3SPaolo Bonziniconfig_host_data.set('CONFIG_LIBUDEV', libudev.found()) 5466ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH', mpathpersist.found()) 5476ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api) 54835be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found()) 54935be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) 550a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found()) 551a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) 552a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found()) 553a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found()) 5544113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) 555af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found()) 5563909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid) 557aa087962SPaolo Bonziniconfig_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim) 558859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version())) 559859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]) 560859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1]) 561859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]) 562859aef02SPaolo Bonzini 563859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST'] 564f4f5ed2cSPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'bindir', 'prefix', 'qemu_confdir', 'qemu_datadir', 565859aef02SPaolo Bonzini 'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir', 566f4f5ed2cSPaolo Bonzini 'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath', 'sysconfdir'] 567859aef02SPaolo Bonziniforeach k, v: config_host 568859aef02SPaolo Bonzini if arrays.contains(k) 569859aef02SPaolo Bonzini if v != '' 570859aef02SPaolo Bonzini v = '"' + '", "'.join(v.split()) + '", ' 571859aef02SPaolo Bonzini endif 572859aef02SPaolo Bonzini config_host_data.set(k, v) 573859aef02SPaolo Bonzini elif k == 'ARCH' 574859aef02SPaolo Bonzini config_host_data.set('HOST_' + v.to_upper(), 1) 575859aef02SPaolo Bonzini elif strings.contains(k) 576859aef02SPaolo Bonzini if not k.startswith('CONFIG_') 577859aef02SPaolo Bonzini k = 'CONFIG_' + k.to_upper() 578859aef02SPaolo Bonzini endif 579859aef02SPaolo Bonzini config_host_data.set_quoted(k, v) 580859aef02SPaolo Bonzini elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_') 581859aef02SPaolo Bonzini config_host_data.set(k, v == 'y' ? 1 : v) 582859aef02SPaolo Bonzini endif 583859aef02SPaolo Bonziniendforeach 584859aef02SPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data) 585859aef02SPaolo Bonzini 5862becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 58705512f55SPaolo Bonziniconfig_all = {} 588a98006bcSPaolo Bonziniconfig_all_devices = {} 589ca0fc784SPaolo Bonziniconfig_all_disas = {} 5902becc36aSPaolo Bonziniconfig_devices_mak_list = [] 5912becc36aSPaolo Bonziniconfig_devices_h = {} 592859aef02SPaolo Bonziniconfig_target_h = {} 5932becc36aSPaolo Bonziniconfig_target_mak = {} 594ca0fc784SPaolo Bonzini 595ca0fc784SPaolo Bonzinidisassemblers = { 596ca0fc784SPaolo Bonzini 'alpha' : ['CONFIG_ALPHA_DIS'], 597ca0fc784SPaolo Bonzini 'arm' : ['CONFIG_ARM_DIS'], 598ca0fc784SPaolo Bonzini 'avr' : ['CONFIG_AVR_DIS'], 599ca0fc784SPaolo Bonzini 'cris' : ['CONFIG_CRIS_DIS'], 600ca0fc784SPaolo Bonzini 'hppa' : ['CONFIG_HPPA_DIS'], 601ca0fc784SPaolo Bonzini 'i386' : ['CONFIG_I386_DIS'], 602ca0fc784SPaolo Bonzini 'x86_64' : ['CONFIG_I386_DIS'], 603ca0fc784SPaolo Bonzini 'x32' : ['CONFIG_I386_DIS'], 604ca0fc784SPaolo Bonzini 'lm32' : ['CONFIG_LM32_DIS'], 605ca0fc784SPaolo Bonzini 'm68k' : ['CONFIG_M68K_DIS'], 606ca0fc784SPaolo Bonzini 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], 607ca0fc784SPaolo Bonzini 'mips' : ['CONFIG_MIPS_DIS'], 608ca0fc784SPaolo Bonzini 'moxie' : ['CONFIG_MOXIE_DIS'], 609ca0fc784SPaolo Bonzini 'nios2' : ['CONFIG_NIOS2_DIS'], 610ca0fc784SPaolo Bonzini 'or1k' : ['CONFIG_OPENRISC_DIS'], 611ca0fc784SPaolo Bonzini 'ppc' : ['CONFIG_PPC_DIS'], 612ca0fc784SPaolo Bonzini 'riscv' : ['CONFIG_RISCV_DIS'], 613ca0fc784SPaolo Bonzini 'rx' : ['CONFIG_RX_DIS'], 614ca0fc784SPaolo Bonzini 's390' : ['CONFIG_S390_DIS'], 615ca0fc784SPaolo Bonzini 'sh4' : ['CONFIG_SH4_DIS'], 616ca0fc784SPaolo Bonzini 'sparc' : ['CONFIG_SPARC_DIS'], 617ca0fc784SPaolo Bonzini 'xtensa' : ['CONFIG_XTENSA_DIS'], 618ca0fc784SPaolo Bonzini} 619ca0fc784SPaolo Bonziniif link_language == 'cpp' 620ca0fc784SPaolo Bonzini disassemblers += { 621ca0fc784SPaolo Bonzini 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], 622ca0fc784SPaolo Bonzini 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], 623ca0fc784SPaolo Bonzini 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], 624ca0fc784SPaolo Bonzini } 625ca0fc784SPaolo Bonziniendif 626ca0fc784SPaolo Bonzini 6272becc36aSPaolo Bonzinikconfig_external_symbols = [ 6282becc36aSPaolo Bonzini 'CONFIG_KVM', 6292becc36aSPaolo Bonzini 'CONFIG_XEN', 6302becc36aSPaolo Bonzini 'CONFIG_TPM', 6312becc36aSPaolo Bonzini 'CONFIG_SPICE', 6322becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 6332becc36aSPaolo Bonzini 'CONFIG_OPENGL', 6342becc36aSPaolo Bonzini 'CONFIG_X11', 6352becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 63640bc0ca9SLaurent Vivier 'CONFIG_VHOST_VDPA', 6372becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 6382becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 6392becc36aSPaolo Bonzini 'CONFIG_LINUX', 6402becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 6412becc36aSPaolo Bonzini] 642859aef02SPaolo Bonziniignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS'] 643ca0fc784SPaolo Bonzini 64405512f55SPaolo Bonziniaccel_symbols = [ 64505512f55SPaolo Bonzini 'CONFIG_KVM', 64605512f55SPaolo Bonzini 'CONFIG_HAX', 64705512f55SPaolo Bonzini 'CONFIG_HVF', 64805512f55SPaolo Bonzini 'CONFIG_TCG', 64905512f55SPaolo Bonzini 'CONFIG_WHPX' 65005512f55SPaolo Bonzini] 65105512f55SPaolo Bonzini 652a81df1b6SPaolo Bonziniforeach target : target_dirs 653859aef02SPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') 654859aef02SPaolo Bonzini 655ca0fc784SPaolo Bonzini foreach k, v: disassemblers 656ca0fc784SPaolo Bonzini if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) 657ca0fc784SPaolo Bonzini foreach sym: v 658ca0fc784SPaolo Bonzini config_target += { sym: 'y' } 659ca0fc784SPaolo Bonzini config_all_disas += { sym: 'y' } 660ca0fc784SPaolo Bonzini endforeach 661ca0fc784SPaolo Bonzini endif 662ca0fc784SPaolo Bonzini endforeach 663ca0fc784SPaolo Bonzini 664859aef02SPaolo Bonzini config_target_data = configuration_data() 665859aef02SPaolo Bonzini foreach k, v: config_target 666859aef02SPaolo Bonzini if not k.startswith('TARGET_') and not k.startswith('CONFIG_') 667859aef02SPaolo Bonzini # do nothing 668859aef02SPaolo Bonzini elif ignored.contains(k) 669859aef02SPaolo Bonzini # do nothing 670859aef02SPaolo Bonzini elif k == 'TARGET_BASE_ARCH' 671859aef02SPaolo Bonzini config_target_data.set('TARGET_' + v.to_upper(), 1) 672859aef02SPaolo Bonzini elif k == 'TARGET_NAME' 673859aef02SPaolo Bonzini config_target_data.set_quoted(k, v) 674859aef02SPaolo Bonzini elif v == 'y' 675859aef02SPaolo Bonzini config_target_data.set(k, 1) 676859aef02SPaolo Bonzini else 677859aef02SPaolo Bonzini config_target_data.set(k, v) 678859aef02SPaolo Bonzini endif 679859aef02SPaolo Bonzini endforeach 68005512f55SPaolo Bonzini foreach sym: accel_symbols 68105512f55SPaolo Bonzini if config_target.has_key(sym) 68205512f55SPaolo Bonzini config_all += { sym: 'y' } 68305512f55SPaolo Bonzini endif 68405512f55SPaolo Bonzini endforeach 685859aef02SPaolo Bonzini config_target_h += {target: configure_file(output: target + '-config-target.h', 686859aef02SPaolo Bonzini configuration: config_target_data)} 6872becc36aSPaolo Bonzini 6882becc36aSPaolo Bonzini if target.endswith('-softmmu') 6892becc36aSPaolo Bonzini base_kconfig = [] 6902becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 691859aef02SPaolo Bonzini if sym in config_target or sym in config_host 6922becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 6932becc36aSPaolo Bonzini endif 6942becc36aSPaolo Bonzini endforeach 6952becc36aSPaolo Bonzini 6962becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 6972becc36aSPaolo Bonzini config_devices_mak = configure_file( 6982becc36aSPaolo Bonzini input: ['default-configs' / target + '.mak', 'Kconfig'], 6992becc36aSPaolo Bonzini output: config_devices_mak, 7002becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 7012becc36aSPaolo Bonzini capture: true, 7022becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 7032becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 7042becc36aSPaolo Bonzini base_kconfig]) 705859aef02SPaolo Bonzini 706859aef02SPaolo Bonzini config_devices_data = configuration_data() 707859aef02SPaolo Bonzini config_devices = keyval.load(config_devices_mak) 708859aef02SPaolo Bonzini foreach k, v: config_devices 709859aef02SPaolo Bonzini config_devices_data.set(k, 1) 710859aef02SPaolo Bonzini endforeach 7112becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 712859aef02SPaolo Bonzini config_devices_h += {target: configure_file(output: target + '-config-devices.h', 713859aef02SPaolo Bonzini configuration: config_devices_data)} 714859aef02SPaolo Bonzini config_target += config_devices 715a98006bcSPaolo Bonzini config_all_devices += config_devices 7162becc36aSPaolo Bonzini endif 7172becc36aSPaolo Bonzini config_target_mak += {target: config_target} 718a81df1b6SPaolo Bonziniendforeach 719a81df1b6SPaolo Bonzini 7202becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 7212becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 7222becc36aSPaolo Bonzini# static_library target. 7232becc36aSPaolo Bonzini# 7242becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 7252becc36aSPaolo Bonzini# build literally all source files, including devices only used by 7262becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 7272becc36aSPaolo Bonzini# pseudo symbol replaces it. 7282becc36aSPaolo Bonzini 72905512f55SPaolo Bonziniconfig_all += config_all_devices 7302becc36aSPaolo Bonziniconfig_all += config_host 7312becc36aSPaolo Bonziniconfig_all += config_all_disas 7322becc36aSPaolo Bonziniconfig_all += { 7332becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 7342becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 7352becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 7362becc36aSPaolo Bonzini 'CONFIG_ALL': true, 7372becc36aSPaolo Bonzini} 7382becc36aSPaolo Bonzini 739a81df1b6SPaolo Bonzini# Generators 740a81df1b6SPaolo Bonzini 7413f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 742650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 743a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 744a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 745a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 746a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 747a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 748a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 749a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 750a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 751a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 752a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 753a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 754a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 755a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 756a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 757a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 758a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 759a81df1b6SPaolo Bonzini] 760a81df1b6SPaolo Bonzini 761a81df1b6SPaolo Bonzinitracetool = [ 762a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 763a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 764a81df1b6SPaolo Bonzini] 765a81df1b6SPaolo Bonzini 7662c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 7672c273f32SMarc-André Lureau meson.current_source_dir(), 768859aef02SPaolo Bonzini config_host['PKGVERSION'], meson.project_version()] 7692c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 7702c273f32SMarc-André Lureau output: 'qemu-version.h', 7712c273f32SMarc-André Lureau command: qemu_version_cmd, 7722c273f32SMarc-André Lureau capture: true, 7732c273f32SMarc-André Lureau build_by_default: true, 7742c273f32SMarc-André Lureau build_always_stale: true) 7752c273f32SMarc-André Lureaugenh += qemu_version 7762c273f32SMarc-André Lureau 7773f885659SMarc-André Lureauhxdep = [] 7783f885659SMarc-André Lureauhx_headers = [ 7793f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 7803f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 7813f885659SMarc-André Lureau] 7823f885659SMarc-André Lureauif have_system 7833f885659SMarc-André Lureau hx_headers += [ 7843f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 7853f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 7863f885659SMarc-André Lureau ] 7873f885659SMarc-André Lureauendif 7883f885659SMarc-André Lureauforeach d : hx_headers 789b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 7903f885659SMarc-André Lureau input: files(d[0]), 7913f885659SMarc-André Lureau output: d[1], 7923f885659SMarc-André Lureau capture: true, 7933f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 7943f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 7953f885659SMarc-André Lureauendforeach 7963f885659SMarc-André Lureaugenh += hxdep 7973f885659SMarc-André Lureau 798eb937365SPeter MaydellSPHINX_ARGS = [config_host['SPHINX_BUILD'], 799eb937365SPeter Maydell '-Dversion=' + meson.project_version(), 800eb937365SPeter Maydell '-Drelease=' + config_host['PKGVERSION']] 801eb937365SPeter Maydell 802eb937365SPeter Maydellif get_option('werror') 803eb937365SPeter Maydell SPHINX_ARGS += [ '-W' ] 804eb937365SPeter Maydellendif 805eb937365SPeter Maydell 806b3f4830aSPeter Maydellsphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py', 807b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/hxtool.py', 808b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kerneldoc.py', 809b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kernellog.py', 810b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qapidoc.py', 811b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qmp_lexer.py', 812b3f4830aSPeter Maydell qapi_gen_depends ] 813b3f4830aSPeter Maydell 814a81df1b6SPaolo Bonzini# Collect sourcesets. 815a81df1b6SPaolo Bonzini 816a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 817a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 818a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 8193154fee4SMarc-André Lureaublock_ss = ss.source_set() 8204a96337dSPaolo Bonziniblockdev_ss = ss.source_set() 821ff219dcaSPaolo Bonziniqmp_ss = ss.source_set() 8222becc36aSPaolo Bonzinicommon_ss = ss.source_set() 8232becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 8242becc36aSPaolo Bonziniuser_ss = ss.source_set() 8252becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 8262becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 8272becc36aSPaolo Bonzinispecific_ss = ss.source_set() 82864ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set() 8292becc36aSPaolo Bonzini 8303154fee4SMarc-André Lureaumodules = {} 8312becc36aSPaolo Bonzinihw_arch = {} 8322becc36aSPaolo Bonzinitarget_arch = {} 8332becc36aSPaolo Bonzinitarget_softmmu_arch = {} 834a81df1b6SPaolo Bonzini 835a81df1b6SPaolo Bonzini############### 836a81df1b6SPaolo Bonzini# Trace files # 837a81df1b6SPaolo Bonzini############### 838a81df1b6SPaolo Bonzini 839c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once 840c9322ab5SMarc-André Lureau# we have those 841a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 842a81df1b6SPaolo Bonzini 'accel/kvm', 843a81df1b6SPaolo Bonzini 'accel/tcg', 844a81df1b6SPaolo Bonzini 'crypto', 845a81df1b6SPaolo Bonzini 'monitor', 846a81df1b6SPaolo Bonzini] 847a81df1b6SPaolo Bonziniif have_user 848a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 849a81df1b6SPaolo Bonziniendif 850a81df1b6SPaolo Bonziniif have_block 851a81df1b6SPaolo Bonzini trace_events_subdirs += [ 852a81df1b6SPaolo Bonzini 'authz', 853a81df1b6SPaolo Bonzini 'block', 854a81df1b6SPaolo Bonzini 'io', 855a81df1b6SPaolo Bonzini 'nbd', 856a81df1b6SPaolo Bonzini 'scsi', 857a81df1b6SPaolo Bonzini ] 858a81df1b6SPaolo Bonziniendif 859a81df1b6SPaolo Bonziniif have_system 860a81df1b6SPaolo Bonzini trace_events_subdirs += [ 861a81df1b6SPaolo Bonzini 'audio', 862a81df1b6SPaolo Bonzini 'backends', 863a81df1b6SPaolo Bonzini 'backends/tpm', 864a81df1b6SPaolo Bonzini 'chardev', 865a81df1b6SPaolo Bonzini 'hw/9pfs', 866a81df1b6SPaolo Bonzini 'hw/acpi', 867a81df1b6SPaolo Bonzini 'hw/alpha', 868a81df1b6SPaolo Bonzini 'hw/arm', 869a81df1b6SPaolo Bonzini 'hw/audio', 870a81df1b6SPaolo Bonzini 'hw/block', 871a81df1b6SPaolo Bonzini 'hw/block/dataplane', 872a81df1b6SPaolo Bonzini 'hw/char', 873a81df1b6SPaolo Bonzini 'hw/display', 874a81df1b6SPaolo Bonzini 'hw/dma', 875a81df1b6SPaolo Bonzini 'hw/hppa', 876a81df1b6SPaolo Bonzini 'hw/hyperv', 877a81df1b6SPaolo Bonzini 'hw/i2c', 878a81df1b6SPaolo Bonzini 'hw/i386', 879a81df1b6SPaolo Bonzini 'hw/i386/xen', 880a81df1b6SPaolo Bonzini 'hw/ide', 881a81df1b6SPaolo Bonzini 'hw/input', 882a81df1b6SPaolo Bonzini 'hw/intc', 883a81df1b6SPaolo Bonzini 'hw/isa', 884a81df1b6SPaolo Bonzini 'hw/mem', 885a81df1b6SPaolo Bonzini 'hw/mips', 886a81df1b6SPaolo Bonzini 'hw/misc', 887a81df1b6SPaolo Bonzini 'hw/misc/macio', 888a81df1b6SPaolo Bonzini 'hw/net', 889a81df1b6SPaolo Bonzini 'hw/nvram', 890a81df1b6SPaolo Bonzini 'hw/pci', 891a81df1b6SPaolo Bonzini 'hw/pci-host', 892a81df1b6SPaolo Bonzini 'hw/ppc', 893a81df1b6SPaolo Bonzini 'hw/rdma', 894a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 895a81df1b6SPaolo Bonzini 'hw/rtc', 896a81df1b6SPaolo Bonzini 'hw/s390x', 897a81df1b6SPaolo Bonzini 'hw/scsi', 898a81df1b6SPaolo Bonzini 'hw/sd', 899a81df1b6SPaolo Bonzini 'hw/sparc', 900a81df1b6SPaolo Bonzini 'hw/sparc64', 901a81df1b6SPaolo Bonzini 'hw/ssi', 902a81df1b6SPaolo Bonzini 'hw/timer', 903a81df1b6SPaolo Bonzini 'hw/tpm', 904a81df1b6SPaolo Bonzini 'hw/usb', 905a81df1b6SPaolo Bonzini 'hw/vfio', 906a81df1b6SPaolo Bonzini 'hw/virtio', 907a81df1b6SPaolo Bonzini 'hw/watchdog', 908a81df1b6SPaolo Bonzini 'hw/xen', 909a81df1b6SPaolo Bonzini 'hw/gpio', 910a81df1b6SPaolo Bonzini 'migration', 911a81df1b6SPaolo Bonzini 'net', 9128b7a5507SPhilippe Mathieu-Daudé 'softmmu', 913a81df1b6SPaolo Bonzini 'ui', 914a81df1b6SPaolo Bonzini ] 915a81df1b6SPaolo Bonziniendif 916a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 917a81df1b6SPaolo Bonzini 'hw/core', 918a81df1b6SPaolo Bonzini 'qapi', 919a81df1b6SPaolo Bonzini 'qom', 920a81df1b6SPaolo Bonzini 'target/arm', 921a81df1b6SPaolo Bonzini 'target/hppa', 922a81df1b6SPaolo Bonzini 'target/i386', 923a81df1b6SPaolo Bonzini 'target/mips', 924a81df1b6SPaolo Bonzini 'target/ppc', 925a81df1b6SPaolo Bonzini 'target/riscv', 926a81df1b6SPaolo Bonzini 'target/s390x', 927a81df1b6SPaolo Bonzini 'target/sparc', 928a81df1b6SPaolo Bonzini 'util', 929a81df1b6SPaolo Bonzini] 930a81df1b6SPaolo Bonzini 931a81df1b6SPaolo Bonzinisubdir('qapi') 932a81df1b6SPaolo Bonzinisubdir('qobject') 933a81df1b6SPaolo Bonzinisubdir('stubs') 934a81df1b6SPaolo Bonzinisubdir('trace') 935a81df1b6SPaolo Bonzinisubdir('util') 9365582c58fSMarc-André Lureausubdir('qom') 9375582c58fSMarc-André Lureausubdir('authz') 938a81df1b6SPaolo Bonzinisubdir('crypto') 9392d78b56eSMarc-André Lureausubdir('ui') 940a81df1b6SPaolo Bonzini 9413154fee4SMarc-André Lureau 9423154fee4SMarc-André Lureauif enable_modules 9433154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 9443154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 9453154fee4SMarc-André Lureauendif 9463154fee4SMarc-André Lureau 947a81df1b6SPaolo Bonzini# Build targets from sourcesets 948a81df1b6SPaolo Bonzini 9492becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 950a81df1b6SPaolo Bonzini 951a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 9522becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 953a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 954a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 955aa087962SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket, malloc]) 956a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 95704c6f1e7SMarc-André Lureau sources: genh + version_res) 958a81df1b6SPaolo Bonzini 959abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'), 960abff1abfSPaolo Bonzini output: 'decode-@BASENAME@.c.inc', 961abff1abfSPaolo Bonzini arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@']) 962abff1abfSPaolo Bonzini 963478e943fSPaolo Bonzinisubdir('audio') 9647fcfd456SMarc-André Lureausubdir('io') 965848e8ff6SMarc-André Lureausubdir('chardev') 966ec0d5893SMarc-André Lureausubdir('fsdev') 967abff1abfSPaolo Bonzinisubdir('libdecnumber') 968d3b18480SMarc-André Lureausubdir('target') 969708eab42SMarc-André Lureausubdir('dump') 970ec0d5893SMarc-André Lureau 9715e5733e5SMarc-André Lureaublock_ss.add(files( 9725e5733e5SMarc-André Lureau 'block.c', 9735e5733e5SMarc-André Lureau 'blockjob.c', 9745e5733e5SMarc-André Lureau 'job.c', 9755e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 9765e5733e5SMarc-André Lureau)) 9775e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 9785e5733e5SMarc-André Lureau 9795e5733e5SMarc-André Lureausubdir('nbd') 9805e5733e5SMarc-André Lureausubdir('scsi') 9815e5733e5SMarc-André Lureausubdir('block') 9825e5733e5SMarc-André Lureau 9834a96337dSPaolo Bonziniblockdev_ss.add(files( 9844a96337dSPaolo Bonzini 'blockdev.c', 9854a96337dSPaolo Bonzini 'blockdev-nbd.c', 9864a96337dSPaolo Bonzini 'iothread.c', 9874a96337dSPaolo Bonzini 'job-qmp.c', 9884a96337dSPaolo Bonzini)) 9894a96337dSPaolo Bonzini 9904a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 9914a96337dSPaolo Bonzini# os-win32.c does not 9924a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 9934a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 9944a96337dSPaolo Bonzini 9954a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 9964a96337dSPaolo Bonzinisoftmmu_ss.add(files( 9974a96337dSPaolo Bonzini 'bootdevice.c', 9984a96337dSPaolo Bonzini 'dma-helpers.c', 9994a96337dSPaolo Bonzini 'qdev-monitor.c', 10004a96337dSPaolo Bonzini), sdl) 10014a96337dSPaolo Bonzini 10024a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c')) 10034a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp]) 10044a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')]) 10054a96337dSPaolo Bonzini 10064a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 10074a96337dSPaolo Bonzini 10085d3ea0e1SPaolo Bonzinisubdir('softmmu') 1009c9322ab5SMarc-André Lureau 1010c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl) 1011c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c')) 1012c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files( 1013c9322ab5SMarc-André Lureau 'fpu/softfloat.c', 1014c9322ab5SMarc-André Lureau 'tcg/optimize.c', 1015c9322ab5SMarc-André Lureau 'tcg/tcg-common.c', 1016c9322ab5SMarc-André Lureau 'tcg/tcg-op-gvec.c', 1017c9322ab5SMarc-André Lureau 'tcg/tcg-op-vec.c', 1018c9322ab5SMarc-André Lureau 'tcg/tcg-op.c', 1019c9322ab5SMarc-André Lureau 'tcg/tcg.c', 1020c9322ab5SMarc-André Lureau)) 1021c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c')) 1022c9322ab5SMarc-André Lureau 1023ab318051SMarc-André Lureausubdir('backends') 1024c574e161SMarc-André Lureausubdir('disas') 102555166230SMarc-André Lureausubdir('migration') 1026ff219dcaSPaolo Bonzinisubdir('monitor') 1027cdaf0722SMarc-André Lureausubdir('net') 102817ef2af6SMarc-André Lureausubdir('replay') 1029582ea95fSMarc-André Lureausubdir('hw') 10301a82878aSMarc-André Lureausubdir('accel') 1031f556b4a1SPaolo Bonzinisubdir('plugins') 1032b309c321SMarc-André Lureausubdir('bsd-user') 10333a30446aSMarc-André Lureausubdir('linux-user') 10343a30446aSMarc-André Lureau 1035b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c')) 1036b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss) 1037b309c321SMarc-André Lureau 10383a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c')) 10393a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss) 10405d3ea0e1SPaolo Bonzini 1041a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 1042a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 104364ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz') 1044a2ce7dbdSPaolo Bonzini 10453154fee4SMarc-André Lureaublock_mods = [] 10463154fee4SMarc-André Lureausoftmmu_mods = [] 10473154fee4SMarc-André Lureauforeach d, list : modules 10483154fee4SMarc-André Lureau foreach m, module_ss : list 10493154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 10503e292c51SGerd Hoffmann module_ss = module_ss.apply(config_all, strict: false) 10513154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 10523154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 10533154fee4SMarc-André Lureau if d == 'block' 10543154fee4SMarc-André Lureau block_mods += sl 10553154fee4SMarc-André Lureau else 10563154fee4SMarc-André Lureau softmmu_mods += sl 10573154fee4SMarc-André Lureau endif 10583154fee4SMarc-André Lureau else 10593154fee4SMarc-André Lureau if d == 'block' 10603154fee4SMarc-André Lureau block_ss.add_all(module_ss) 10613154fee4SMarc-André Lureau else 10623154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 10633154fee4SMarc-André Lureau endif 10643154fee4SMarc-André Lureau endif 10653154fee4SMarc-André Lureau endforeach 10663154fee4SMarc-André Lureauendforeach 10673154fee4SMarc-André Lureau 10683154fee4SMarc-André Lureaunm = find_program('nm') 1069604f3e4eSYonggang Luoundefsym = find_program('scripts/undefsym.py') 10703154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 10713154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 10723154fee4SMarc-André Lureau capture: true, 10733154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 10743154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 10753154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 10763154fee4SMarc-André Lureau capture: true, 10773154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 10783154fee4SMarc-André Lureau 10795e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 10805e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 10815e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 10825e5733e5SMarc-André Lureau link_depends: block_syms, 10835e5733e5SMarc-André Lureau name_suffix: 'fa', 10845e5733e5SMarc-André Lureau build_by_default: false) 10855e5733e5SMarc-André Lureau 10865e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 1087b7c70bf2SMarc-André Lureau link_args: '@block.syms', 1088b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 10895e5733e5SMarc-André Lureau 1090ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 1091ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 1092ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 1093ff219dcaSPaolo Bonzini name_suffix: 'fa', 1094ff219dcaSPaolo Bonzini build_by_default: false) 1095ff219dcaSPaolo Bonzini 1096ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 1097ff219dcaSPaolo Bonzini 10983154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 10993154fee4SMarc-André Lureau shared_module(m.name(), 11003154fee4SMarc-André Lureau name_prefix: '', 11013154fee4SMarc-André Lureau link_whole: m, 11023154fee4SMarc-André Lureau install: true, 11033154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 11043154fee4SMarc-André Lureauendforeach 11053154fee4SMarc-André Lureau 110664ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp) 110764ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil) 110864ed6f92SPaolo Bonzini 110964ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss]) 11102becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 11112becc36aSPaolo Bonzini 11122becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 11132becc36aSPaolo Bonzinicommon_all = static_library('common', 11142becc36aSPaolo Bonzini build_by_default: false, 11152becc36aSPaolo Bonzini sources: common_all.sources() + genh, 11162becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 11172becc36aSPaolo Bonzini name_suffix: 'fa') 11182becc36aSPaolo Bonzini 1119c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh') 1120c9322ab5SMarc-André Lureau 1121fd5eef85SPaolo Bonziniemulators = {} 11222becc36aSPaolo Bonziniforeach target : target_dirs 11232becc36aSPaolo Bonzini config_target = config_target_mak[target] 11242becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 11252becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 1126859aef02SPaolo Bonzini arch_srcs = [config_target_h[target]] 112764ed6f92SPaolo Bonzini arch_deps = [] 112864ed6f92SPaolo Bonzini c_args = ['-DNEED_CPU_H', 112964ed6f92SPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 113064ed6f92SPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] 113164ed6f92SPaolo Bonzini link_args = [] 11322becc36aSPaolo Bonzini 1133859aef02SPaolo Bonzini config_target += config_host 11342becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 11352becc36aSPaolo Bonzini if targetos == 'linux' 11362becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 11372becc36aSPaolo Bonzini endif 11382becc36aSPaolo Bonzini if target.endswith('-softmmu') 11392becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 11402becc36aSPaolo Bonzini target_type='system' 1141abff1abfSPaolo Bonzini t = target_softmmu_arch[arch].apply(config_target, strict: false) 1142abff1abfSPaolo Bonzini arch_srcs += t.sources() 114364ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1144abff1abfSPaolo Bonzini 11452c44220dSMarc-André Lureau hw_dir = target_name == 'sparc64' ? 'sparc64' : arch 11462c44220dSMarc-André Lureau hw = hw_arch[hw_dir].apply(config_target, strict: false) 11472c44220dSMarc-André Lureau arch_srcs += hw.sources() 114864ed6f92SPaolo Bonzini arch_deps += hw.dependencies() 11492c44220dSMarc-André Lureau 11502becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 115164ed6f92SPaolo Bonzini link_args += ['@block.syms', '@qemu.syms'] 11522becc36aSPaolo Bonzini else 11533a30446aSMarc-André Lureau abi = config_target['TARGET_ABI_DIR'] 11542becc36aSPaolo Bonzini target_type='user' 11552becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 11562becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 11572becc36aSPaolo Bonzini base_dir = 'linux-user' 11582becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 11592becc36aSPaolo Bonzini else 11602becc36aSPaolo Bonzini base_dir = 'bsd-user' 11612becc36aSPaolo Bonzini endif 11622becc36aSPaolo Bonzini target_inc += include_directories( 11632becc36aSPaolo Bonzini base_dir, 11643a30446aSMarc-André Lureau base_dir / abi, 11652becc36aSPaolo Bonzini ) 11663a30446aSMarc-André Lureau if 'CONFIG_LINUX_USER' in config_target 11673a30446aSMarc-André Lureau dir = base_dir / abi 11683a30446aSMarc-André Lureau arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c') 11693a30446aSMarc-André Lureau if config_target.has_key('TARGET_SYSTBL_ABI') 11703a30446aSMarc-André Lureau arch_srcs += \ 11713a30446aSMarc-André Lureau syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'], 11723a30446aSMarc-André Lureau extra_args : config_target['TARGET_SYSTBL_ABI']) 11733a30446aSMarc-André Lureau endif 11743a30446aSMarc-André Lureau endif 11752becc36aSPaolo Bonzini endif 11762becc36aSPaolo Bonzini 1177c9322ab5SMarc-André Lureau if 'TARGET_XML_FILES' in config_target 1178c9322ab5SMarc-André Lureau gdbstub_xml = custom_target(target + '-gdbstub-xml.c', 1179c9322ab5SMarc-André Lureau output: target + '-gdbstub-xml.c', 1180c9322ab5SMarc-André Lureau input: files(config_target['TARGET_XML_FILES'].split()), 1181c9322ab5SMarc-André Lureau command: [feature_to_c, '@INPUT@'], 1182c9322ab5SMarc-André Lureau capture: true) 1183c9322ab5SMarc-André Lureau arch_srcs += gdbstub_xml 1184c9322ab5SMarc-André Lureau endif 1185c9322ab5SMarc-André Lureau 1186abff1abfSPaolo Bonzini t = target_arch[arch].apply(config_target, strict: false) 1187abff1abfSPaolo Bonzini arch_srcs += t.sources() 118864ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1189abff1abfSPaolo Bonzini 11902becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 11912becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 119264ed6f92SPaolo Bonzini deps = target_common.dependencies() 11932becc36aSPaolo Bonzini 11942becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 11952becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 119664ed6f92SPaolo Bonzini arch_deps += target_specific.dependencies() 11972becc36aSPaolo Bonzini 119864ed6f92SPaolo Bonzini lib = static_library('qemu-' + target, 1199859aef02SPaolo Bonzini sources: arch_srcs + genh, 1200b7612f45SPaolo Bonzini dependencies: arch_deps, 12012becc36aSPaolo Bonzini objects: objects, 12022becc36aSPaolo Bonzini include_directories: target_inc, 120364ed6f92SPaolo Bonzini c_args: c_args, 120464ed6f92SPaolo Bonzini build_by_default: false, 12052becc36aSPaolo Bonzini name_suffix: 'fa') 120664ed6f92SPaolo Bonzini 120764ed6f92SPaolo Bonzini if target.endswith('-softmmu') 120864ed6f92SPaolo Bonzini execs = [{ 120964ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name, 121064ed6f92SPaolo Bonzini 'gui': false, 121164ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 121264ed6f92SPaolo Bonzini 'dependencies': [] 121364ed6f92SPaolo Bonzini }] 121435be72baSPaolo Bonzini if targetos == 'windows' and (sdl.found() or gtk.found()) 121564ed6f92SPaolo Bonzini execs += [{ 121664ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name + 'w', 121764ed6f92SPaolo Bonzini 'gui': true, 121864ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 121964ed6f92SPaolo Bonzini 'dependencies': [] 122064ed6f92SPaolo Bonzini }] 122164ed6f92SPaolo Bonzini endif 122264ed6f92SPaolo Bonzini if config_host.has_key('CONFIG_FUZZ') 122364ed6f92SPaolo Bonzini specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false) 122464ed6f92SPaolo Bonzini execs += [{ 122564ed6f92SPaolo Bonzini 'name': 'qemu-fuzz-' + target_name, 122664ed6f92SPaolo Bonzini 'gui': false, 122764ed6f92SPaolo Bonzini 'sources': specific_fuzz.sources(), 122864ed6f92SPaolo Bonzini 'dependencies': specific_fuzz.dependencies(), 122964ed6f92SPaolo Bonzini }] 123064ed6f92SPaolo Bonzini endif 123164ed6f92SPaolo Bonzini else 123264ed6f92SPaolo Bonzini execs = [{ 123364ed6f92SPaolo Bonzini 'name': 'qemu-' + target_name, 123464ed6f92SPaolo Bonzini 'gui': false, 123564ed6f92SPaolo Bonzini 'sources': [], 123664ed6f92SPaolo Bonzini 'dependencies': [] 123764ed6f92SPaolo Bonzini }] 123864ed6f92SPaolo Bonzini endif 123964ed6f92SPaolo Bonzini foreach exe: execs 1240fd5eef85SPaolo Bonzini emulators += {exe['name']: 1241fd5eef85SPaolo Bonzini executable(exe['name'], exe['sources'], 124264ed6f92SPaolo Bonzini install: true, 124364ed6f92SPaolo Bonzini c_args: c_args, 124464ed6f92SPaolo Bonzini dependencies: arch_deps + deps + exe['dependencies'], 124564ed6f92SPaolo Bonzini objects: lib.extract_all_objects(recursive: true), 124664ed6f92SPaolo Bonzini link_language: link_language, 124764ed6f92SPaolo Bonzini link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []), 124864ed6f92SPaolo Bonzini link_args: link_args, 124964ed6f92SPaolo Bonzini gui_app: exe['gui']) 1250fd5eef85SPaolo Bonzini } 125110e1d263SMarc-André Lureau 125210e1d263SMarc-André Lureau if 'CONFIG_TRACE_SYSTEMTAP' in config_host 125310e1d263SMarc-André Lureau foreach stp: [ 1254bd5f973aSStefan Hajnoczi {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, 1255bd5f973aSStefan Hajnoczi {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, 125610e1d263SMarc-André Lureau {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, 125710e1d263SMarc-André Lureau {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, 125810e1d263SMarc-André Lureau ] 1259bd5f973aSStefan Hajnoczi custom_target(exe['name'] + stp['ext'], 126010e1d263SMarc-André Lureau input: trace_events_all, 1261bd5f973aSStefan Hajnoczi output: exe['name'] + stp['ext'], 126210e1d263SMarc-André Lureau capture: true, 126310e1d263SMarc-André Lureau install: stp['install'], 1264ab4c0996SMarc-André Lureau install_dir: qemu_datadir / '../systemtap/tapset', 126510e1d263SMarc-André Lureau command: [ 126610e1d263SMarc-André Lureau tracetool, '--group=all', '--format=' + stp['fmt'], 126710e1d263SMarc-André Lureau '--binary=' + stp['bin'], 126810e1d263SMarc-André Lureau '--target-name=' + target_name, 126910e1d263SMarc-André Lureau '--target-type=' + target_type, 127010e1d263SMarc-André Lureau '--probe-prefix=qemu.' + target_type + '.' + target_name, 127110e1d263SMarc-André Lureau '@INPUT@', 127210e1d263SMarc-André Lureau ]) 127310e1d263SMarc-André Lureau endforeach 127410e1d263SMarc-André Lureau endif 127564ed6f92SPaolo Bonzini endforeach 12762becc36aSPaolo Bonziniendforeach 12772becc36aSPaolo Bonzini 1278931049b4SPaolo Bonzini# Other build targets 1279897b5afaSMarc-André Lureau 1280f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 1281f556b4a1SPaolo Bonzini install_headers('include/qemu/qemu-plugin.h') 1282f556b4a1SPaolo Bonziniendif 1283f556b4a1SPaolo Bonzini 1284f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 1285f15bff25SPaolo Bonzini subdir('qga') 1286f15bff25SPaolo Bonziniendif 1287f15bff25SPaolo Bonzini 12889755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled 12899755c94aSLaurent Vivier# when we don't build tools or system 12904113f4cfSLaurent Vivierif xkbcommon.found() 129128742467SMarc-André Lureau # used for the update-keymaps target, so include rules even if !have_tools 129228742467SMarc-André Lureau qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, 129328742467SMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: have_tools) 129428742467SMarc-André Lureauendif 129528742467SMarc-André Lureau 1296931049b4SPaolo Bonziniif have_tools 1297b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 1298b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 1299b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 1300b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1301b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 1302b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1303b7c70bf2SMarc-André Lureau 13047c58bb76SPaolo Bonzini subdir('storage-daemon') 1305a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 13061d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 1307a9c9727cSPaolo Bonzini 1308157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 1309157e7b13SMarc-André Lureau dependencies: qemuutil, 1310157e7b13SMarc-André Lureau install: true) 1311157e7b13SMarc-André Lureau 1312931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 1313931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 13142d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 1315ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 131632fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 131799650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 1318931049b4SPaolo Bonzini endif 13198f51e01cSMarc-André Lureau 13208f51e01cSMarc-André Lureau if targetos == 'linux' 13218f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 13228f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 13238f51e01cSMarc-André Lureau install: true, 13248f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 1325897b5afaSMarc-André Lureau 1326897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 1327897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 13286ec0e15dSPaolo Bonzini libcap_ng, mpathpersist], 1329897b5afaSMarc-André Lureau install: true) 13308f51e01cSMarc-André Lureau endif 13318f51e01cSMarc-André Lureau 13325ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 13335ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 13345ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 13355ee24e78SMarc-André Lureau endif 1336931049b4SPaolo Bonziniendif 1337931049b4SPaolo Bonzini 1338f5aa6320SMarc-André Lureausubdir('scripts') 13393f99cf57SPaolo Bonzinisubdir('tools') 1340bdcbea7aSMarc-André Lureausubdir('pc-bios') 1341ce1c1e7aSPaolo Bonzinisubdir('tests') 1342f8aa24eaSPaolo Bonzinisubdir('docs') 1343e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host 1344e8f3bd71SMarc-André Lureau subdir('po') 1345e8f3bd71SMarc-André Lureauendif 13463f99cf57SPaolo Bonzini 13478adfeba9SMarc-André Lureauif host_machine.system() == 'windows' 13488adfeba9SMarc-André Lureau nsis_cmd = [ 13498adfeba9SMarc-André Lureau find_program('scripts/nsis.py'), 13508adfeba9SMarc-André Lureau '@OUTPUT@', 13518adfeba9SMarc-André Lureau get_option('prefix'), 13528adfeba9SMarc-André Lureau meson.current_source_dir(), 13538adfeba9SMarc-André Lureau host_machine.cpu_family(), 13548adfeba9SMarc-André Lureau '--', 13558adfeba9SMarc-André Lureau '-DDISPLAYVERSION=' + meson.project_version(), 13568adfeba9SMarc-André Lureau ] 13578adfeba9SMarc-André Lureau if build_docs 13588adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_DOCUMENTATION=y' 13598adfeba9SMarc-André Lureau endif 13608adfeba9SMarc-André Lureau if 'CONFIG_GTK' in config_host 13618adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_GTK=y' 13628adfeba9SMarc-André Lureau endif 13638adfeba9SMarc-André Lureau 13648adfeba9SMarc-André Lureau nsis = custom_target('nsis', 13658adfeba9SMarc-André Lureau output: 'qemu-setup-' + meson.project_version() + '.exe', 13668adfeba9SMarc-André Lureau input: files('qemu.nsi'), 13678adfeba9SMarc-André Lureau build_always_stale: true, 13688adfeba9SMarc-André Lureau command: nsis_cmd + ['@INPUT@']) 13698adfeba9SMarc-André Lureau alias_target('installer', nsis) 13708adfeba9SMarc-André Lureauendif 13718adfeba9SMarc-André Lureau 1372f9332757SPaolo Bonzinisummary_info = {} 1373f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 1374f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 1375f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 1376f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 1377f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 1378f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 1379f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 1380f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 1381f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 1382f9332757SPaolo Bonziniif targetos != 'windows' 1383f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 1384b81efab7SMarc-André Lureau summary_info += {'Manual directory': get_option('mandir')} 1385f9332757SPaolo Bonzinielse 1386f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 1387f9332757SPaolo Bonziniendif 1388491e74c1SMarc-André Lureausummary_info += {'Doc directory': get_option('docdir')} 1389f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 1390f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 1391f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 1392f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 1393f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 1394f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 1395f9332757SPaolo Bonziniif link_language == 'cpp' 1396f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 1397f9332757SPaolo Bonzinielse 1398f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 1399f9332757SPaolo Bonziniendif 1400f9332757SPaolo Bonziniif targetos == 'darwin' 1401f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 1402f9332757SPaolo Bonziniendif 1403f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 1404f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 1405f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 1406f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 1407f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 1408f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 1409f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 1410f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 1411f9332757SPaolo Bonzini# TODO: add back version 1412f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 1413f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 1414f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 1415f9332757SPaolo Bonziniendif 1416f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 1417f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 1418f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 1419f9332757SPaolo Bonziniendif 1420f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 1421f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 1422f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 1423f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 1424f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 1425f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 1426f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 14273e8529ddSLaurent Viviersummary_info += {'static build': config_host.has_key('CONFIG_STATIC')} 1428f9332757SPaolo Bonziniif targetos == 'darwin' 1429f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 1430f9332757SPaolo Bonziniendif 1431f9332757SPaolo Bonzini# TODO: add back version 143235be72baSPaolo Bonzinisummary_info += {'SDL support': sdl.found()} 143335be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()} 1434f9332757SPaolo Bonzini# TODO: add back version 1435f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 1436f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 1437b7612f45SPaolo Bonzinisummary_info += {'pixman': pixman.found()} 1438f9332757SPaolo Bonzini# TODO: add back version 1439f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 1440f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 1441f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 1442f9332757SPaolo Bonzini# TODO: add back version 1443f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 1444f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 1445f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 1446f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1447f9332757SPaolo Bonziniendif 1448f9332757SPaolo Bonzini# TODO: add back version 1449f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 1450f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 1451f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1452f9332757SPaolo Bonziniendif 1453f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 1454f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 1455f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 1456f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 1457f9332757SPaolo Bonzini# TODO: add back version 1458f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 1459f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 1460f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 1461f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 1462f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 1463f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 1464f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 14656ec0e15dSPaolo Bonzinisummary_info += {'Multipath support': mpathpersist.found()} 1466a0b93237SPaolo Bonzinisummary_info += {'VNC support': vnc.found()} 1467a0b93237SPaolo Bonziniif vnc.found() 1468a0b93237SPaolo Bonzini summary_info += {'VNC SASL support': sasl.found()} 1469a0b93237SPaolo Bonzini summary_info += {'VNC JPEG support': jpeg.found()} 1470a0b93237SPaolo Bonzini summary_info += {'VNC PNG support': png.found()} 1471f9332757SPaolo Bonziniendif 1472f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 1473f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 1474f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 1475f9332757SPaolo Bonziniendif 1476f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 1477f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 1478f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 1479f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 1480f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 1481f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 1482f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 1483f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 1484f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 148505512f55SPaolo Bonzinisummary_info += {'KVM support': config_all.has_key('CONFIG_KVM')} 148605512f55SPaolo Bonzinisummary_info += {'HAX support': config_all.has_key('CONFIG_HAX')} 148705512f55SPaolo Bonzinisummary_info += {'HVF support': config_all.has_key('CONFIG_HVF')} 148805512f55SPaolo Bonzinisummary_info += {'WHPX support': config_all.has_key('CONFIG_WHPX')} 148905512f55SPaolo Bonzinisummary_info += {'TCG support': config_all.has_key('CONFIG_TCG')} 149005512f55SPaolo Bonziniif config_all.has_key('CONFIG_TCG') 149105512f55SPaolo Bonzini summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 149205512f55SPaolo Bonzini summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 149305512f55SPaolo Bonziniendif 1494aa087962SPaolo Bonzinisummary_info += {'malloc trim support': has_malloc_trim} 1495f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 1496f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 1497f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 1498f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 1499f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 1500f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 1501f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 1502f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 1503f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 1504f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 1505f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 1506f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 1507f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 1508f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 1509f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 1510f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 1511f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 1512f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 1513f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 1514f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 1515f9332757SPaolo Bonziniendif 1516f9332757SPaolo Bonzini# TODO: add back protocol and server version 1517f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 1518f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 1519f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 1520f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 15210a40bcb7SCésar Belleysummary_info += {'U2F support': u2f.found()} 1522f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 1523f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 1524f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 1525f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 1526f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 1527f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 1528f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 1529f9332757SPaolo Bonziniif targetos == 'windows' 1530f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 1531f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 1532f9332757SPaolo Bonzini endif 1533f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 1534f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 15354bad7c3bSStefan Hajnoczi summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI')} 1536f9332757SPaolo Bonziniendif 1537f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 1538f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 1539f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 1540f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 1541f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 1542f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 1543f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 1544bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 1545f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 1546f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 1547f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 1548f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 1549f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 1550f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 1551f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 1552f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 1553f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 1554f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 1555f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 1556aa087962SPaolo Bonzinisummary_info += {'memory allocator': get_option('malloc')} 1557f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 1558f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 1559f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 1560f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 1561f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 1562f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 1563f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 1564f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 1565f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 1566f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 1567f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 1568f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 1569f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 1570f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 1571f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 1572f01496a3SPaolo Bonzinisummary_info += {'libudev': libudev.found()} 1573f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 1574f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 1575f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 1576f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 1577f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 1578f9332757SPaolo Bonziniendif 1579f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 1580f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 1581f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 1582f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 1583f9332757SPaolo Bonzini 1584f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 1585f9332757SPaolo Bonzini message() 1586f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 1587f9332757SPaolo Bonzini message() 1588f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 1589f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 1590f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1591f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1592f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1593f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1594f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1595f9332757SPaolo Bonziniendif 1596f9332757SPaolo Bonzini 1597f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 1598f9332757SPaolo Bonzini message() 1599f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 1600f9332757SPaolo Bonzini message() 1601f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 1602f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 1603f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1604f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1605f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1606f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1607f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1608f9332757SPaolo Bonziniendif 1609