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 57a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 58a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 59a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 60a5665051SPaolo Bonzini native: false, language: 'cpp') 61a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 62a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 63a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 64a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 65a5665051SPaolo Bonzini 66c46f76d1SAlexander Bulekov# Specify linker-script with add_project_link_arguments so that it is not placed 67c46f76d1SAlexander Bulekov# within a linker --start-group/--end-group pair 68c46f76d1SAlexander Bulekovif 'CONFIG_FUZZ' in config_host 69c46f76d1SAlexander Bulekov add_project_link_arguments(['-Wl,-T,', 70c46f76d1SAlexander Bulekov (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')], 71c46f76d1SAlexander Bulekov native: false, language: ['c', 'cpp', 'objc']) 72c46f76d1SAlexander Bulekovendif 73c46f76d1SAlexander Bulekov 74fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 75fc929892SMarc-André Lureauif link_language == 'cpp' 76fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 77fc929892SMarc-André Lureauendif 78a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 79a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 80a5665051SPaolo Bonziniendif 81a5665051SPaolo Bonzini 82968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host 83968b4db3SPaolo Bonzini run_target('sparse', 84968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 85968b4db3SPaolo Bonzini config_host['SPARSE_CFLAGS'].split(), 86968b4db3SPaolo Bonzini 'compile_commands.json']) 87968b4db3SPaolo Bonziniendif 88968b4db3SPaolo Bonzini 896ec0e15dSPaolo Bonzini########################################### 906ec0e15dSPaolo Bonzini# Target-specific checks and dependencies # 916ec0e15dSPaolo Bonzini########################################### 926ec0e15dSPaolo Bonzini 936ec0e15dSPaolo Bonziniif targetos != 'linux' and get_option('mpath').enabled() 946ec0e15dSPaolo Bonzini error('Multipath is supported only on Linux') 956ec0e15dSPaolo Bonziniendif 966ec0e15dSPaolo Bonzini 97a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 98a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 994a96337dSPaolo Bonziniwinmm = [] 100a81df1b6SPaolo Bonzinisocket = [] 10104c6f1e7SMarc-André Lureauversion_res = [] 102d92989aaSMarc-André Lureaucoref = [] 103d92989aaSMarc-André Lureauiokit = [] 104d92989aaSMarc-André Lureaucocoa = [] 105d92989aaSMarc-André Lureauhvf = [] 106a81df1b6SPaolo Bonziniif targetos == 'windows' 107a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 1084a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 10904c6f1e7SMarc-André Lureau 11004c6f1e7SMarc-André Lureau win = import('windows') 11104c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 11204c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 11304c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 114d92989aaSMarc-André Lureauelif targetos == 'darwin' 115d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 116d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 117d92989aaSMarc-André Lureau cocoa = dependency('appleframeworks', modules: 'Cocoa') 118d92989aaSMarc-André Lureau hvf = dependency('appleframeworks', modules: 'Hypervisor') 119cfad62f1SPaolo Bonzinielif targetos == 'sunos' 120cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 121cfad62f1SPaolo Bonzini cc.find_library('nsl'), 122cfad62f1SPaolo Bonzini cc.find_library('resolv')] 123cfad62f1SPaolo Bonzinielif targetos == 'haiku' 124cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 125cfad62f1SPaolo Bonzini cc.find_library('network'), 126cfad62f1SPaolo Bonzini cc.find_library('bsd')] 127a81df1b6SPaolo Bonziniendif 1286ec0e15dSPaolo Bonzini 1296ec0e15dSPaolo Bonzini################ 1306ec0e15dSPaolo Bonzini# Dependencies # 1316ec0e15dSPaolo Bonzini################ 1326ec0e15dSPaolo Bonzini 133215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands. This was 134215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles. 135215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(), 136215b0c2fSPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 137215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split()) 138a81df1b6SPaolo Bonzinigio = not_found 139a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 140a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 141a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 142a81df1b6SPaolo Bonziniendif 143a81df1b6SPaolo Bonzinilttng = not_found 144a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 145a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 146a81df1b6SPaolo Bonziniendif 147a81df1b6SPaolo Bonziniurcubp = not_found 148a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 149a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 150a81df1b6SPaolo Bonziniendif 15146859d93SDaniel P. Berrangégcrypt = not_found 15246859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host 15346859d93SDaniel P. Berrangé gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), 15446859d93SDaniel P. Berrangé link_args: config_host['GCRYPT_LIBS'].split()) 15546859d93SDaniel P. Berrangéendif 156a81df1b6SPaolo Bonzininettle = not_found 157a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 158a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 159a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 160a81df1b6SPaolo Bonziniendif 161a81df1b6SPaolo Bonzinignutls = not_found 162a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 163a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 164a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 165a81df1b6SPaolo Bonziniendif 166b7612f45SPaolo Bonzinipixman = not_found 167b7612f45SPaolo Bonziniif have_system or have_tools 168b7612f45SPaolo Bonzini pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', 1691a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 170b7612f45SPaolo Bonziniendif 1715e7fbd25SMarc-André Lureaupam = not_found 1725e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 1735e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 1745e7fbd25SMarc-André Lureauendif 1755e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 1761ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static) 1775e5733e5SMarc-André Lureaulinux_io_uring = not_found 1785e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 1795e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 1805e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 1815e5733e5SMarc-André Lureauendif 1825e5733e5SMarc-André Lureaulibxml2 = not_found 1835e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 1845e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 1855e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 1865e5733e5SMarc-André Lureauendif 1875e5733e5SMarc-André Lureaulibnfs = not_found 1885e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 1895e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 1905e5733e5SMarc-André Lureauendif 191ec0d5893SMarc-André Lureaulibattr = not_found 192ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 193ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 194ec0d5893SMarc-André Lureauendif 1953f99cf57SPaolo Bonziniseccomp = not_found 1963f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 1973f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 1983f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 1993f99cf57SPaolo Bonziniendif 2003f99cf57SPaolo Bonzinilibcap_ng = not_found 2013f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 2023f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 2033f99cf57SPaolo Bonziniendif 2041917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools 2051917ec6dSPaolo Bonzini xkbcommon = not_found 2061917ec6dSPaolo Bonzinielse 2071917ec6dSPaolo Bonzini xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), 2081a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 209ade60d4fSMarc-André Lureauendif 210cdaf0722SMarc-André Lureauslirp = not_found 211cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP') 212cdaf0722SMarc-André Lureau slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(), 213cdaf0722SMarc-André Lureau link_args: config_host['SLIRP_LIBS'].split()) 214cdaf0722SMarc-André Lureauendif 215cdaf0722SMarc-André Lureauvde = not_found 216cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE') 217cdaf0722SMarc-André Lureau vde = declare_dependency(link_args: config_host['VDE_LIBS'].split()) 218cdaf0722SMarc-André Lureauendif 219478e943fSPaolo Bonzinipulse = not_found 220478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 221478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 222478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 223478e943fSPaolo Bonziniendif 224478e943fSPaolo Bonzinialsa = not_found 225478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 226478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 227478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 228478e943fSPaolo Bonziniendif 229478e943fSPaolo Bonzinijack = not_found 230478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 231478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 232478e943fSPaolo Bonziniendif 2332634733cSPaolo Bonzinispice = not_found 2342634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 2352634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 2362634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 2372634733cSPaolo Bonziniendif 2385ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 239ccf7afa5SPaolo Bonzinilibdl = not_found 240ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 241ccf7afa5SPaolo Bonzini libdl = cc.find_library('dl', required: true) 242ccf7afa5SPaolo Bonziniendif 24399650b62SPaolo Bonzinilibiscsi = not_found 24499650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 24599650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 24699650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 24799650b62SPaolo Bonziniendif 2485e5733e5SMarc-André Lureauzstd = not_found 2495e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 2505e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 2515e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 2525e5733e5SMarc-André Lureauendif 253ea458960SMarc-André Lureaugbm = not_found 254ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 255ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 256ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 257ea458960SMarc-André Lureauendif 258ea458960SMarc-André Lureauvirgl = not_found 259ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 260ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 261ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 262ea458960SMarc-André Lureauendif 2631d7bb6abSMarc-André Lureaucurl = not_found 2641d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 2651d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 2661d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 2671d7bb6abSMarc-André Lureauendif 268f15bff25SPaolo Bonzinilibudev = not_found 269f01496a3SPaolo Bonziniif targetos == 'linux' and (have_system or have_tools) 2706ec0e15dSPaolo Bonzini libudev = dependency('libudev', 2716ec0e15dSPaolo Bonzini required: get_option('mpath').enabled(), 2726ec0e15dSPaolo Bonzini static: enable_static) 273f15bff25SPaolo Bonziniendif 2746ec0e15dSPaolo Bonzini 2756ec0e15dSPaolo Bonzinimpathpersist = not_found 2766ec0e15dSPaolo Bonzinimpathpersist_new_api = false 2776ec0e15dSPaolo Bonziniif targetos == 'linux' and have_tools and not get_option('mpath').disabled() 2786ec0e15dSPaolo Bonzini mpath_test_source_new = ''' 2796ec0e15dSPaolo Bonzini #include <libudev.h> 2806ec0e15dSPaolo Bonzini #include <mpath_persist.h> 2816ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 2826ec0e15dSPaolo Bonzini int logsink; 2836ec0e15dSPaolo Bonzini static struct config *multipath_conf; 2846ec0e15dSPaolo Bonzini extern struct udev *udev; 2856ec0e15dSPaolo Bonzini extern struct config *get_multipath_config(void); 2866ec0e15dSPaolo Bonzini extern void put_multipath_config(struct config *conf); 2876ec0e15dSPaolo Bonzini struct udev *udev; 2886ec0e15dSPaolo Bonzini struct config *get_multipath_config(void) { return multipath_conf; } 2896ec0e15dSPaolo Bonzini void put_multipath_config(struct config *conf) { } 2906ec0e15dSPaolo Bonzini int main(void) { 2916ec0e15dSPaolo Bonzini udev = udev_new(); 2926ec0e15dSPaolo Bonzini multipath_conf = mpath_lib_init(); 2936ec0e15dSPaolo Bonzini return 0; 2946ec0e15dSPaolo Bonzini }''' 2956ec0e15dSPaolo Bonzini mpath_test_source_old = ''' 2966ec0e15dSPaolo Bonzini #include <libudev.h> 2976ec0e15dSPaolo Bonzini #include <mpath_persist.h> 2986ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 2996ec0e15dSPaolo Bonzini int logsink; 3006ec0e15dSPaolo Bonzini int main(void) { 3016ec0e15dSPaolo Bonzini struct udev *udev = udev_new(); 3026ec0e15dSPaolo Bonzini mpath_lib_init(udev); 3036ec0e15dSPaolo Bonzini return 0; 3046ec0e15dSPaolo Bonzini }''' 30543b43a40SPaolo Bonzini mpathlibs = [libudev] 30643b43a40SPaolo Bonzini if enable_static 30743b43a40SPaolo Bonzini mpathlibs += cc.find_library('devmapper', 3086ec0e15dSPaolo Bonzini required: get_option('mpath'), 3096ec0e15dSPaolo Bonzini static: enable_static) 31043b43a40SPaolo Bonzini endif 31143b43a40SPaolo Bonzini mpathlibs += cc.find_library('multipath', 3126ec0e15dSPaolo Bonzini required: get_option('mpath'), 3136ec0e15dSPaolo Bonzini static: enable_static) 31443b43a40SPaolo Bonzini mpathlibs += cc.find_library('mpathpersist', 31543b43a40SPaolo Bonzini required: get_option('mpath'), 31643b43a40SPaolo Bonzini static: enable_static) 31743b43a40SPaolo Bonzini foreach lib: mpathlibs 31843b43a40SPaolo Bonzini if not lib.found() 31943b43a40SPaolo Bonzini mpathlibs = [] 32043b43a40SPaolo Bonzini break 32143b43a40SPaolo Bonzini endif 32243b43a40SPaolo Bonzini endforeach 32343b43a40SPaolo Bonzini if mpathlibs.length() > 0 3246ec0e15dSPaolo Bonzini if cc.links(mpath_test_source_new, dependencies: mpathlibs) 3256ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 3266ec0e15dSPaolo Bonzini mpathpersist_new_api = true 3276ec0e15dSPaolo Bonzini elif cc.links(mpath_test_source_old, dependencies: mpathlibs) 3286ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 3296ec0e15dSPaolo Bonzini else 3306ec0e15dSPaolo Bonzini if get_option('mpath').enabled() 3316ec0e15dSPaolo Bonzini error('Cannot detect libmpathpersist API') 3326ec0e15dSPaolo Bonzini else 3336ec0e15dSPaolo Bonzini warning('Cannot detect libmpathpersist API, disabling') 3346ec0e15dSPaolo Bonzini endif 3356ec0e15dSPaolo Bonzini endif 3366ec0e15dSPaolo Bonzini endif 3376ec0e15dSPaolo Bonziniendif 3386ec0e15dSPaolo Bonzini 3392634733cSPaolo Bonzinibrlapi = not_found 3402634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 3412634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 3422634733cSPaolo Bonziniendif 34335be72baSPaolo Bonzini 344760e4327SPaolo Bonzinisdl = not_found 345760e4327SPaolo Bonziniif have_system 346363743daSYonggang Luo sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) 34735be72baSPaolo Bonzini sdl_image = not_found 348760e4327SPaolo Bonziniendif 34935be72baSPaolo Bonziniif sdl.found() 35035be72baSPaolo Bonzini # work around 2.0.8 bug 35135be72baSPaolo Bonzini sdl = declare_dependency(compile_args: '-Wno-undef', 35235be72baSPaolo Bonzini dependencies: sdl) 3537161a433SVolker Rümelin sdl_image = dependency('SDL2_image', required: get_option('sdl_image'), 3541a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 35535be72baSPaolo Bonzinielse 35635be72baSPaolo Bonzini if get_option('sdl_image').enabled() 357a8dc2aceSSergei Trofimovich error('sdl-image required, but SDL was @0@'.format( 358a8dc2aceSSergei Trofimovich get_option('sdl').disabled() ? 'disabled' : 'not found')) 3592634733cSPaolo Bonzini endif 36035be72baSPaolo Bonzini sdl_image = not_found 36135be72baSPaolo Bonziniendif 36235be72baSPaolo Bonzini 3635e5733e5SMarc-André Lureaurbd = not_found 3645e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 3655e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 3665e5733e5SMarc-André Lureauendif 3675e5733e5SMarc-André Lureauglusterfs = not_found 3685e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 3695e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 3705e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 3715e5733e5SMarc-André Lureauendif 3725e5733e5SMarc-André Lureaulibssh = not_found 3735e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 3745e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 3755e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 3765e5733e5SMarc-André Lureauendif 3775e5733e5SMarc-André Lureaulibbzip2 = not_found 3785e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 3795e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 3805e5733e5SMarc-André Lureauendif 3815e5733e5SMarc-André Lureauliblzfse = not_found 3825e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 3835e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 3845e5733e5SMarc-André Lureauendif 385478e943fSPaolo Bonzinioss = not_found 386478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 387478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 388478e943fSPaolo Bonziniendif 389478e943fSPaolo Bonzinidsound = not_found 390478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 391478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 392478e943fSPaolo Bonziniendif 393478e943fSPaolo Bonzinicoreaudio = not_found 394478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 395478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 396478e943fSPaolo Bonziniendif 3972b1ccdf4SMarc-André Lureauopengl = not_found 3982b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 399de2d3005SPaolo Bonzini opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(), 400de2d3005SPaolo Bonzini link_args: config_host['OPENGL_LIBS'].split()) 4012b1ccdf4SMarc-André Lureauendif 4022b1ccdf4SMarc-André Lureaugtk = not_found 4032b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host 4042b1ccdf4SMarc-André Lureau gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(), 4052b1ccdf4SMarc-André Lureau link_args: config_host['GTK_LIBS'].split()) 4062b1ccdf4SMarc-André Lureauendif 4072b1ccdf4SMarc-André Lureauvte = not_found 4082b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 4092b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 4102b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 4112b1ccdf4SMarc-André Lureauendif 4122b1ccdf4SMarc-André Lureaux11 = not_found 4132b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host 4142b1ccdf4SMarc-André Lureau x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(), 4152b1ccdf4SMarc-André Lureau link_args: config_host['X11_LIBS'].split()) 4162b1ccdf4SMarc-André Lureauendif 4172b1ccdf4SMarc-André Lureaucurses = not_found 4182b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host 4192b1ccdf4SMarc-André Lureau curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(), 4202b1ccdf4SMarc-André Lureau link_args: config_host['CURSES_LIBS'].split()) 4212b1ccdf4SMarc-André Lureauendif 4222b1ccdf4SMarc-André Lureauiconv = not_found 4232b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host 4242b1ccdf4SMarc-André Lureau iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(), 4252b1ccdf4SMarc-André Lureau link_args: config_host['ICONV_LIBS'].split()) 4262b1ccdf4SMarc-André Lureauendif 427a0b93237SPaolo Bonzinivnc = not_found 4282b1ccdf4SMarc-André Lureaupng = not_found 4292b1ccdf4SMarc-André Lureaujpeg = not_found 4302b1ccdf4SMarc-André Lureausasl = not_found 431a0b93237SPaolo Bonziniif get_option('vnc').enabled() 432a0b93237SPaolo Bonzini vnc = declare_dependency() # dummy dependency 433a0b93237SPaolo Bonzini png = dependency('libpng', required: get_option('vnc_png'), 4341a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 435a0b93237SPaolo Bonzini jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'], 436a0b93237SPaolo Bonzini required: get_option('vnc_jpeg'), 437a0b93237SPaolo Bonzini static: enable_static) 438a0b93237SPaolo Bonzini sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'], 439a0b93237SPaolo Bonzini required: get_option('vnc_sasl'), 440a0b93237SPaolo Bonzini static: enable_static) 441a0b93237SPaolo Bonzini if sasl.found() 442a0b93237SPaolo Bonzini sasl = declare_dependency(dependencies: sasl, 443a0b93237SPaolo Bonzini compile_args: '-DSTRUCT_IOVEC_DEFINED') 444a0b93237SPaolo Bonzini endif 4452b1ccdf4SMarc-André Lureauendif 4464a96337dSPaolo Bonzinifdt = not_found 4474a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host 4484a96337dSPaolo Bonzini fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(), 4494a96337dSPaolo Bonzini link_args: config_host['FDT_LIBS'].split()) 4504a96337dSPaolo Bonziniendif 451708eab42SMarc-André Lureausnappy = not_found 452708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host 453708eab42SMarc-André Lureau snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split()) 454708eab42SMarc-André Lureauendif 455708eab42SMarc-André Lureaulzo = not_found 456708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host 457708eab42SMarc-André Lureau lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split()) 458708eab42SMarc-André Lureauendif 45955166230SMarc-André Lureaurdma = not_found 46055166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host 46155166230SMarc-André Lureau rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split()) 46255166230SMarc-André Lureauendif 463ab318051SMarc-André Lureaunuma = not_found 464ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host 465ab318051SMarc-André Lureau numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split()) 466ab318051SMarc-André Lureauendif 467582ea95fSMarc-André Lureauxen = not_found 468582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host 469582ea95fSMarc-André Lureau xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(), 470582ea95fSMarc-André Lureau link_args: config_host['XEN_LIBS'].split()) 471582ea95fSMarc-André Lureauendif 47206677ce1SPaolo Bonzinicacard = not_found 47306677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host 47406677ce1SPaolo Bonzini cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(), 47506677ce1SPaolo Bonzini link_args: config_host['SMARTCARD_LIBS'].split()) 47606677ce1SPaolo Bonziniendif 4770a40bcb7SCésar Belleyu2f = not_found 4780a40bcb7SCésar Belleyif have_system 4790a40bcb7SCésar Belley u2f = dependency('u2f-emu', required: get_option('u2f'), 4800a40bcb7SCésar Belley method: 'pkg-config', 4810a40bcb7SCésar Belley static: enable_static) 4820a40bcb7SCésar Belleyendif 48306677ce1SPaolo Bonziniusbredir = not_found 48406677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host 48506677ce1SPaolo Bonzini usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(), 48606677ce1SPaolo Bonzini link_args: config_host['USB_REDIR_LIBS'].split()) 48706677ce1SPaolo Bonziniendif 48806677ce1SPaolo Bonzinilibusb = not_found 48906677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host 49006677ce1SPaolo Bonzini libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(), 49106677ce1SPaolo Bonzini link_args: config_host['LIBUSB_LIBS'].split()) 49206677ce1SPaolo Bonziniendif 493c9322ab5SMarc-André Lureaucapstone = not_found 494c9322ab5SMarc-André Lureauif 'CONFIG_CAPSTONE' in config_host 495c9322ab5SMarc-André Lureau capstone = declare_dependency(compile_args: config_host['CAPSTONE_CFLAGS'].split(), 496c9322ab5SMarc-André Lureau link_args: config_host['CAPSTONE_LIBS'].split()) 497c9322ab5SMarc-André Lureauendif 498c9322ab5SMarc-André Lureaulibpmem = not_found 499c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host 500c9322ab5SMarc-André Lureau libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), 501c9322ab5SMarc-André Lureau link_args: config_host['LIBPMEM_LIBS'].split()) 502c9322ab5SMarc-André Lureauendif 503c7c91a74SBruce Rogerslibdaxctl = not_found 504c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host 505c7c91a74SBruce Rogers libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) 506c7c91a74SBruce Rogersendif 5078ce0a45fSMarc-André Lureautasn1 = not_found 5088ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host 5098ce0a45fSMarc-André Lureau tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), 5108ce0a45fSMarc-André Lureau link_args: config_host['TASN1_LIBS'].split()) 5118ce0a45fSMarc-André Lureauendif 512af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false, 513af04e89dSMarc-André Lureau method: 'pkg-config', static: enable_static) 514a81df1b6SPaolo Bonzini 5153909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid') 5163909def8SMarc-André Lureau 517*aa087962SPaolo Bonzini# Malloc tests 518*aa087962SPaolo Bonzini 519*aa087962SPaolo Bonzinimalloc = [] 520*aa087962SPaolo Bonziniif get_option('malloc') == 'system' 521*aa087962SPaolo Bonzini has_malloc_trim = \ 522*aa087962SPaolo Bonzini not get_option('malloc_trim').disabled() and \ 523*aa087962SPaolo Bonzini cc.links('''#include <malloc.h> 524*aa087962SPaolo Bonzini int main(void) { malloc_trim(0); return 0; }''') 525*aa087962SPaolo Bonzinielse 526*aa087962SPaolo Bonzini has_malloc_trim = false 527*aa087962SPaolo Bonzini malloc = cc.find_library(get_option('malloc'), required: true) 528*aa087962SPaolo Bonziniendif 529*aa087962SPaolo Bonziniif not has_malloc_trim and get_option('malloc_trim').enabled() 530*aa087962SPaolo Bonzini if get_option('malloc') == 'system' 531*aa087962SPaolo Bonzini error('malloc_trim not available on this platform.') 532*aa087962SPaolo Bonzini else 533*aa087962SPaolo Bonzini error('malloc_trim not available with non-libc memory allocator') 534*aa087962SPaolo Bonzini endif 535*aa087962SPaolo Bonziniendif 536*aa087962SPaolo Bonzini 537859aef02SPaolo Bonzini# Create config-host.h 538859aef02SPaolo Bonzini 539f01496a3SPaolo Bonziniconfig_host_data.set('CONFIG_LIBUDEV', libudev.found()) 5406ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH', mpathpersist.found()) 5416ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api) 54235be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found()) 54335be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) 544a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found()) 545a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) 546a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found()) 547a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found()) 5484113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) 549af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found()) 5503909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid) 551*aa087962SPaolo Bonziniconfig_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim) 552859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version())) 553859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]) 554859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1]) 555859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]) 556859aef02SPaolo Bonzini 557859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST'] 558859aef02SPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'qemu_confdir', 'qemu_datadir', 559859aef02SPaolo Bonzini 'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir', 560859aef02SPaolo Bonzini 'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath'] 561859aef02SPaolo Bonziniforeach k, v: config_host 562859aef02SPaolo Bonzini if arrays.contains(k) 563859aef02SPaolo Bonzini if v != '' 564859aef02SPaolo Bonzini v = '"' + '", "'.join(v.split()) + '", ' 565859aef02SPaolo Bonzini endif 566859aef02SPaolo Bonzini config_host_data.set(k, v) 567859aef02SPaolo Bonzini elif k == 'ARCH' 568859aef02SPaolo Bonzini config_host_data.set('HOST_' + v.to_upper(), 1) 569859aef02SPaolo Bonzini elif strings.contains(k) 570859aef02SPaolo Bonzini if not k.startswith('CONFIG_') 571859aef02SPaolo Bonzini k = 'CONFIG_' + k.to_upper() 572859aef02SPaolo Bonzini endif 573859aef02SPaolo Bonzini config_host_data.set_quoted(k, v) 574859aef02SPaolo Bonzini elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_') 575859aef02SPaolo Bonzini config_host_data.set(k, v == 'y' ? 1 : v) 576859aef02SPaolo Bonzini endif 577859aef02SPaolo Bonziniendforeach 578859aef02SPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data) 579859aef02SPaolo Bonzini 5802becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 581a98006bcSPaolo Bonziniconfig_all_devices = {} 582ca0fc784SPaolo Bonziniconfig_all_disas = {} 5832becc36aSPaolo Bonziniconfig_devices_mak_list = [] 5842becc36aSPaolo Bonziniconfig_devices_h = {} 585859aef02SPaolo Bonziniconfig_target_h = {} 5862becc36aSPaolo Bonziniconfig_target_mak = {} 587ca0fc784SPaolo Bonzini 588ca0fc784SPaolo Bonzinidisassemblers = { 589ca0fc784SPaolo Bonzini 'alpha' : ['CONFIG_ALPHA_DIS'], 590ca0fc784SPaolo Bonzini 'arm' : ['CONFIG_ARM_DIS'], 591ca0fc784SPaolo Bonzini 'avr' : ['CONFIG_AVR_DIS'], 592ca0fc784SPaolo Bonzini 'cris' : ['CONFIG_CRIS_DIS'], 593ca0fc784SPaolo Bonzini 'hppa' : ['CONFIG_HPPA_DIS'], 594ca0fc784SPaolo Bonzini 'i386' : ['CONFIG_I386_DIS'], 595ca0fc784SPaolo Bonzini 'x86_64' : ['CONFIG_I386_DIS'], 596ca0fc784SPaolo Bonzini 'x32' : ['CONFIG_I386_DIS'], 597ca0fc784SPaolo Bonzini 'lm32' : ['CONFIG_LM32_DIS'], 598ca0fc784SPaolo Bonzini 'm68k' : ['CONFIG_M68K_DIS'], 599ca0fc784SPaolo Bonzini 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], 600ca0fc784SPaolo Bonzini 'mips' : ['CONFIG_MIPS_DIS'], 601ca0fc784SPaolo Bonzini 'moxie' : ['CONFIG_MOXIE_DIS'], 602ca0fc784SPaolo Bonzini 'nios2' : ['CONFIG_NIOS2_DIS'], 603ca0fc784SPaolo Bonzini 'or1k' : ['CONFIG_OPENRISC_DIS'], 604ca0fc784SPaolo Bonzini 'ppc' : ['CONFIG_PPC_DIS'], 605ca0fc784SPaolo Bonzini 'riscv' : ['CONFIG_RISCV_DIS'], 606ca0fc784SPaolo Bonzini 'rx' : ['CONFIG_RX_DIS'], 607ca0fc784SPaolo Bonzini 's390' : ['CONFIG_S390_DIS'], 608ca0fc784SPaolo Bonzini 'sh4' : ['CONFIG_SH4_DIS'], 609ca0fc784SPaolo Bonzini 'sparc' : ['CONFIG_SPARC_DIS'], 610ca0fc784SPaolo Bonzini 'xtensa' : ['CONFIG_XTENSA_DIS'], 611ca0fc784SPaolo Bonzini} 612ca0fc784SPaolo Bonziniif link_language == 'cpp' 613ca0fc784SPaolo Bonzini disassemblers += { 614ca0fc784SPaolo Bonzini 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], 615ca0fc784SPaolo Bonzini 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], 616ca0fc784SPaolo Bonzini 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], 617ca0fc784SPaolo Bonzini } 618ca0fc784SPaolo Bonziniendif 619ca0fc784SPaolo Bonzini 6202becc36aSPaolo Bonzinikconfig_external_symbols = [ 6212becc36aSPaolo Bonzini 'CONFIG_KVM', 6222becc36aSPaolo Bonzini 'CONFIG_XEN', 6232becc36aSPaolo Bonzini 'CONFIG_TPM', 6242becc36aSPaolo Bonzini 'CONFIG_SPICE', 6252becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 6262becc36aSPaolo Bonzini 'CONFIG_OPENGL', 6272becc36aSPaolo Bonzini 'CONFIG_X11', 6282becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 62940bc0ca9SLaurent Vivier 'CONFIG_VHOST_VDPA', 6302becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 6312becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 6322becc36aSPaolo Bonzini 'CONFIG_LINUX', 6332becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 6342becc36aSPaolo Bonzini] 635859aef02SPaolo Bonziniignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS'] 636ca0fc784SPaolo Bonzini 637a81df1b6SPaolo Bonziniforeach target : target_dirs 638859aef02SPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') 639859aef02SPaolo Bonzini 640ca0fc784SPaolo Bonzini foreach k, v: disassemblers 641ca0fc784SPaolo Bonzini if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) 642ca0fc784SPaolo Bonzini foreach sym: v 643ca0fc784SPaolo Bonzini config_target += { sym: 'y' } 644ca0fc784SPaolo Bonzini config_all_disas += { sym: 'y' } 645ca0fc784SPaolo Bonzini endforeach 646ca0fc784SPaolo Bonzini endif 647ca0fc784SPaolo Bonzini endforeach 648ca0fc784SPaolo Bonzini 649859aef02SPaolo Bonzini config_target_data = configuration_data() 650859aef02SPaolo Bonzini foreach k, v: config_target 651859aef02SPaolo Bonzini if not k.startswith('TARGET_') and not k.startswith('CONFIG_') 652859aef02SPaolo Bonzini # do nothing 653859aef02SPaolo Bonzini elif ignored.contains(k) 654859aef02SPaolo Bonzini # do nothing 655859aef02SPaolo Bonzini elif k == 'TARGET_BASE_ARCH' 656859aef02SPaolo Bonzini config_target_data.set('TARGET_' + v.to_upper(), 1) 657859aef02SPaolo Bonzini elif k == 'TARGET_NAME' 658859aef02SPaolo Bonzini config_target_data.set_quoted(k, v) 659859aef02SPaolo Bonzini elif v == 'y' 660859aef02SPaolo Bonzini config_target_data.set(k, 1) 661859aef02SPaolo Bonzini else 662859aef02SPaolo Bonzini config_target_data.set(k, v) 663859aef02SPaolo Bonzini endif 664859aef02SPaolo Bonzini endforeach 665859aef02SPaolo Bonzini config_target_h += {target: configure_file(output: target + '-config-target.h', 666859aef02SPaolo Bonzini configuration: config_target_data)} 6672becc36aSPaolo Bonzini 6682becc36aSPaolo Bonzini if target.endswith('-softmmu') 6692becc36aSPaolo Bonzini base_kconfig = [] 6702becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 671859aef02SPaolo Bonzini if sym in config_target or sym in config_host 6722becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 6732becc36aSPaolo Bonzini endif 6742becc36aSPaolo Bonzini endforeach 6752becc36aSPaolo Bonzini 6762becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 6772becc36aSPaolo Bonzini config_devices_mak = configure_file( 6782becc36aSPaolo Bonzini input: ['default-configs' / target + '.mak', 'Kconfig'], 6792becc36aSPaolo Bonzini output: config_devices_mak, 6802becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 6812becc36aSPaolo Bonzini capture: true, 6822becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 6832becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 6842becc36aSPaolo Bonzini base_kconfig]) 685859aef02SPaolo Bonzini 686859aef02SPaolo Bonzini config_devices_data = configuration_data() 687859aef02SPaolo Bonzini config_devices = keyval.load(config_devices_mak) 688859aef02SPaolo Bonzini foreach k, v: config_devices 689859aef02SPaolo Bonzini config_devices_data.set(k, 1) 690859aef02SPaolo Bonzini endforeach 6912becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 692859aef02SPaolo Bonzini config_devices_h += {target: configure_file(output: target + '-config-devices.h', 693859aef02SPaolo Bonzini configuration: config_devices_data)} 694859aef02SPaolo Bonzini config_target += config_devices 695a98006bcSPaolo Bonzini config_all_devices += config_devices 6962becc36aSPaolo Bonzini endif 6972becc36aSPaolo Bonzini config_target_mak += {target: config_target} 698a81df1b6SPaolo Bonziniendforeach 699a81df1b6SPaolo Bonzini 7002becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 7012becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 7022becc36aSPaolo Bonzini# static_library target. 7032becc36aSPaolo Bonzini# 7042becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 7052becc36aSPaolo Bonzini# build literally all source files, including devices only used by 7062becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 7072becc36aSPaolo Bonzini# pseudo symbol replaces it. 7082becc36aSPaolo Bonzini 7092becc36aSPaolo Bonziniconfig_all = config_all_devices 7102becc36aSPaolo Bonziniconfig_all += config_host 7112becc36aSPaolo Bonziniconfig_all += config_all_disas 7122becc36aSPaolo Bonziniconfig_all += { 7132becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 7142becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 7152becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 7162becc36aSPaolo Bonzini 'CONFIG_ALL': true, 7172becc36aSPaolo Bonzini} 7182becc36aSPaolo Bonzini 719a81df1b6SPaolo Bonzini# Generators 720a81df1b6SPaolo Bonzini 7213f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 722650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 723a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 724a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 725a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 726a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 727a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 728a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 729a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 730a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 731a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 732a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 733a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 734a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 735a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 736a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 737a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 738a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 739a81df1b6SPaolo Bonzini] 740a81df1b6SPaolo Bonzini 741a81df1b6SPaolo Bonzinitracetool = [ 742a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 743a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 744a81df1b6SPaolo Bonzini] 745a81df1b6SPaolo Bonzini 7462c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 7472c273f32SMarc-André Lureau meson.current_source_dir(), 748859aef02SPaolo Bonzini config_host['PKGVERSION'], meson.project_version()] 7492c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 7502c273f32SMarc-André Lureau output: 'qemu-version.h', 7512c273f32SMarc-André Lureau command: qemu_version_cmd, 7522c273f32SMarc-André Lureau capture: true, 7532c273f32SMarc-André Lureau build_by_default: true, 7542c273f32SMarc-André Lureau build_always_stale: true) 7552c273f32SMarc-André Lureaugenh += qemu_version 7562c273f32SMarc-André Lureau 7573f885659SMarc-André Lureauhxdep = [] 7583f885659SMarc-André Lureauhx_headers = [ 7593f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 7603f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 7613f885659SMarc-André Lureau] 7623f885659SMarc-André Lureauif have_system 7633f885659SMarc-André Lureau hx_headers += [ 7643f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 7653f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 7663f885659SMarc-André Lureau ] 7673f885659SMarc-André Lureauendif 7683f885659SMarc-André Lureauforeach d : hx_headers 769b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 7703f885659SMarc-André Lureau input: files(d[0]), 7713f885659SMarc-André Lureau output: d[1], 7723f885659SMarc-André Lureau capture: true, 7733f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 7743f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 7753f885659SMarc-André Lureauendforeach 7763f885659SMarc-André Lureaugenh += hxdep 7773f885659SMarc-André Lureau 778eb937365SPeter MaydellSPHINX_ARGS = [config_host['SPHINX_BUILD'], 779eb937365SPeter Maydell '-Dversion=' + meson.project_version(), 780eb937365SPeter Maydell '-Drelease=' + config_host['PKGVERSION']] 781eb937365SPeter Maydell 782eb937365SPeter Maydellif get_option('werror') 783eb937365SPeter Maydell SPHINX_ARGS += [ '-W' ] 784eb937365SPeter Maydellendif 785eb937365SPeter Maydell 786b3f4830aSPeter Maydellsphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py', 787b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/hxtool.py', 788b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kerneldoc.py', 789b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kernellog.py', 790b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qapidoc.py', 791b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qmp_lexer.py', 792b3f4830aSPeter Maydell qapi_gen_depends ] 793b3f4830aSPeter Maydell 794a81df1b6SPaolo Bonzini# Collect sourcesets. 795a81df1b6SPaolo Bonzini 796a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 797a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 798a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 7993154fee4SMarc-André Lureaublock_ss = ss.source_set() 8004a96337dSPaolo Bonziniblockdev_ss = ss.source_set() 801ff219dcaSPaolo Bonziniqmp_ss = ss.source_set() 8022becc36aSPaolo Bonzinicommon_ss = ss.source_set() 8032becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 8042becc36aSPaolo Bonziniuser_ss = ss.source_set() 8052becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 8062becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 8072becc36aSPaolo Bonzinispecific_ss = ss.source_set() 80864ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set() 8092becc36aSPaolo Bonzini 8103154fee4SMarc-André Lureaumodules = {} 8112becc36aSPaolo Bonzinihw_arch = {} 8122becc36aSPaolo Bonzinitarget_arch = {} 8132becc36aSPaolo Bonzinitarget_softmmu_arch = {} 814a81df1b6SPaolo Bonzini 815a81df1b6SPaolo Bonzini############### 816a81df1b6SPaolo Bonzini# Trace files # 817a81df1b6SPaolo Bonzini############### 818a81df1b6SPaolo Bonzini 819c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once 820c9322ab5SMarc-André Lureau# we have those 821a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 822a81df1b6SPaolo Bonzini 'accel/kvm', 823a81df1b6SPaolo Bonzini 'accel/tcg', 824a81df1b6SPaolo Bonzini 'crypto', 825a81df1b6SPaolo Bonzini 'monitor', 826a81df1b6SPaolo Bonzini] 827a81df1b6SPaolo Bonziniif have_user 828a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 829a81df1b6SPaolo Bonziniendif 830a81df1b6SPaolo Bonziniif have_block 831a81df1b6SPaolo Bonzini trace_events_subdirs += [ 832a81df1b6SPaolo Bonzini 'authz', 833a81df1b6SPaolo Bonzini 'block', 834a81df1b6SPaolo Bonzini 'io', 835a81df1b6SPaolo Bonzini 'nbd', 836a81df1b6SPaolo Bonzini 'scsi', 837a81df1b6SPaolo Bonzini ] 838a81df1b6SPaolo Bonziniendif 839a81df1b6SPaolo Bonziniif have_system 840a81df1b6SPaolo Bonzini trace_events_subdirs += [ 841a81df1b6SPaolo Bonzini 'audio', 842a81df1b6SPaolo Bonzini 'backends', 843a81df1b6SPaolo Bonzini 'backends/tpm', 844a81df1b6SPaolo Bonzini 'chardev', 845a81df1b6SPaolo Bonzini 'hw/9pfs', 846a81df1b6SPaolo Bonzini 'hw/acpi', 847a81df1b6SPaolo Bonzini 'hw/alpha', 848a81df1b6SPaolo Bonzini 'hw/arm', 849a81df1b6SPaolo Bonzini 'hw/audio', 850a81df1b6SPaolo Bonzini 'hw/block', 851a81df1b6SPaolo Bonzini 'hw/block/dataplane', 852a81df1b6SPaolo Bonzini 'hw/char', 853a81df1b6SPaolo Bonzini 'hw/display', 854a81df1b6SPaolo Bonzini 'hw/dma', 855a81df1b6SPaolo Bonzini 'hw/hppa', 856a81df1b6SPaolo Bonzini 'hw/hyperv', 857a81df1b6SPaolo Bonzini 'hw/i2c', 858a81df1b6SPaolo Bonzini 'hw/i386', 859a81df1b6SPaolo Bonzini 'hw/i386/xen', 860a81df1b6SPaolo Bonzini 'hw/ide', 861a81df1b6SPaolo Bonzini 'hw/input', 862a81df1b6SPaolo Bonzini 'hw/intc', 863a81df1b6SPaolo Bonzini 'hw/isa', 864a81df1b6SPaolo Bonzini 'hw/mem', 865a81df1b6SPaolo Bonzini 'hw/mips', 866a81df1b6SPaolo Bonzini 'hw/misc', 867a81df1b6SPaolo Bonzini 'hw/misc/macio', 868a81df1b6SPaolo Bonzini 'hw/net', 869a81df1b6SPaolo Bonzini 'hw/nvram', 870a81df1b6SPaolo Bonzini 'hw/pci', 871a81df1b6SPaolo Bonzini 'hw/pci-host', 872a81df1b6SPaolo Bonzini 'hw/ppc', 873a81df1b6SPaolo Bonzini 'hw/rdma', 874a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 875a81df1b6SPaolo Bonzini 'hw/rtc', 876a81df1b6SPaolo Bonzini 'hw/s390x', 877a81df1b6SPaolo Bonzini 'hw/scsi', 878a81df1b6SPaolo Bonzini 'hw/sd', 879a81df1b6SPaolo Bonzini 'hw/sparc', 880a81df1b6SPaolo Bonzini 'hw/sparc64', 881a81df1b6SPaolo Bonzini 'hw/ssi', 882a81df1b6SPaolo Bonzini 'hw/timer', 883a81df1b6SPaolo Bonzini 'hw/tpm', 884a81df1b6SPaolo Bonzini 'hw/usb', 885a81df1b6SPaolo Bonzini 'hw/vfio', 886a81df1b6SPaolo Bonzini 'hw/virtio', 887a81df1b6SPaolo Bonzini 'hw/watchdog', 888a81df1b6SPaolo Bonzini 'hw/xen', 889a81df1b6SPaolo Bonzini 'hw/gpio', 890a81df1b6SPaolo Bonzini 'migration', 891a81df1b6SPaolo Bonzini 'net', 8928b7a5507SPhilippe Mathieu-Daudé 'softmmu', 893a81df1b6SPaolo Bonzini 'ui', 894a81df1b6SPaolo Bonzini ] 895a81df1b6SPaolo Bonziniendif 896a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 897a81df1b6SPaolo Bonzini 'hw/core', 898a81df1b6SPaolo Bonzini 'qapi', 899a81df1b6SPaolo Bonzini 'qom', 900a81df1b6SPaolo Bonzini 'target/arm', 901a81df1b6SPaolo Bonzini 'target/hppa', 902a81df1b6SPaolo Bonzini 'target/i386', 903a81df1b6SPaolo Bonzini 'target/mips', 904a81df1b6SPaolo Bonzini 'target/ppc', 905a81df1b6SPaolo Bonzini 'target/riscv', 906a81df1b6SPaolo Bonzini 'target/s390x', 907a81df1b6SPaolo Bonzini 'target/sparc', 908a81df1b6SPaolo Bonzini 'util', 909a81df1b6SPaolo Bonzini] 910a81df1b6SPaolo Bonzini 911a81df1b6SPaolo Bonzinisubdir('qapi') 912a81df1b6SPaolo Bonzinisubdir('qobject') 913a81df1b6SPaolo Bonzinisubdir('stubs') 914a81df1b6SPaolo Bonzinisubdir('trace') 915a81df1b6SPaolo Bonzinisubdir('util') 9165582c58fSMarc-André Lureausubdir('qom') 9175582c58fSMarc-André Lureausubdir('authz') 918a81df1b6SPaolo Bonzinisubdir('crypto') 9192d78b56eSMarc-André Lureausubdir('ui') 920a81df1b6SPaolo Bonzini 9213154fee4SMarc-André Lureau 9223154fee4SMarc-André Lureauif enable_modules 9233154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 9243154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 9253154fee4SMarc-André Lureauendif 9263154fee4SMarc-André Lureau 927a81df1b6SPaolo Bonzini# Build targets from sourcesets 928a81df1b6SPaolo Bonzini 9292becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 930a81df1b6SPaolo Bonzini 931a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 9322becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 933a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 934a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 935*aa087962SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket, malloc]) 936a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 93704c6f1e7SMarc-André Lureau sources: genh + version_res) 938a81df1b6SPaolo Bonzini 939abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'), 940abff1abfSPaolo Bonzini output: 'decode-@BASENAME@.c.inc', 941abff1abfSPaolo Bonzini arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@']) 942abff1abfSPaolo Bonzini 943478e943fSPaolo Bonzinisubdir('audio') 9447fcfd456SMarc-André Lureausubdir('io') 945848e8ff6SMarc-André Lureausubdir('chardev') 946ec0d5893SMarc-André Lureausubdir('fsdev') 947abff1abfSPaolo Bonzinisubdir('libdecnumber') 948d3b18480SMarc-André Lureausubdir('target') 949708eab42SMarc-André Lureausubdir('dump') 950ec0d5893SMarc-André Lureau 9515e5733e5SMarc-André Lureaublock_ss.add(files( 9525e5733e5SMarc-André Lureau 'block.c', 9535e5733e5SMarc-André Lureau 'blockjob.c', 9545e5733e5SMarc-André Lureau 'job.c', 9555e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 9565e5733e5SMarc-André Lureau)) 9575e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 9585e5733e5SMarc-André Lureau 9595e5733e5SMarc-André Lureausubdir('nbd') 9605e5733e5SMarc-André Lureausubdir('scsi') 9615e5733e5SMarc-André Lureausubdir('block') 9625e5733e5SMarc-André Lureau 9634a96337dSPaolo Bonziniblockdev_ss.add(files( 9644a96337dSPaolo Bonzini 'blockdev.c', 9654a96337dSPaolo Bonzini 'blockdev-nbd.c', 9664a96337dSPaolo Bonzini 'iothread.c', 9674a96337dSPaolo Bonzini 'job-qmp.c', 9684a96337dSPaolo Bonzini)) 9694a96337dSPaolo Bonzini 9704a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 9714a96337dSPaolo Bonzini# os-win32.c does not 9724a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 9734a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 9744a96337dSPaolo Bonzini 9754a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 9764a96337dSPaolo Bonzinisoftmmu_ss.add(files( 9774a96337dSPaolo Bonzini 'bootdevice.c', 9784a96337dSPaolo Bonzini 'dma-helpers.c', 9794a96337dSPaolo Bonzini 'qdev-monitor.c', 9804a96337dSPaolo Bonzini), sdl) 9814a96337dSPaolo Bonzini 9824a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c')) 9834a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp]) 9844a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')]) 9854a96337dSPaolo Bonzini 9864a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 9874a96337dSPaolo Bonzini 9885d3ea0e1SPaolo Bonzinisubdir('softmmu') 989c9322ab5SMarc-André Lureau 990c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl) 991c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c')) 992c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files( 993c9322ab5SMarc-André Lureau 'fpu/softfloat.c', 994c9322ab5SMarc-André Lureau 'tcg/optimize.c', 995c9322ab5SMarc-André Lureau 'tcg/tcg-common.c', 996c9322ab5SMarc-André Lureau 'tcg/tcg-op-gvec.c', 997c9322ab5SMarc-André Lureau 'tcg/tcg-op-vec.c', 998c9322ab5SMarc-André Lureau 'tcg/tcg-op.c', 999c9322ab5SMarc-André Lureau 'tcg/tcg.c', 1000c9322ab5SMarc-André Lureau)) 1001c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c')) 1002c9322ab5SMarc-André Lureau 1003ab318051SMarc-André Lureausubdir('backends') 1004c574e161SMarc-André Lureausubdir('disas') 100555166230SMarc-André Lureausubdir('migration') 1006ff219dcaSPaolo Bonzinisubdir('monitor') 1007cdaf0722SMarc-André Lureausubdir('net') 100817ef2af6SMarc-André Lureausubdir('replay') 1009582ea95fSMarc-André Lureausubdir('hw') 10101a82878aSMarc-André Lureausubdir('accel') 1011f556b4a1SPaolo Bonzinisubdir('plugins') 1012b309c321SMarc-André Lureausubdir('bsd-user') 10133a30446aSMarc-André Lureausubdir('linux-user') 10143a30446aSMarc-André Lureau 1015b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c')) 1016b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss) 1017b309c321SMarc-André Lureau 10183a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c')) 10193a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss) 10205d3ea0e1SPaolo Bonzini 1021a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 1022a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 102364ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz') 1024a2ce7dbdSPaolo Bonzini 10253154fee4SMarc-André Lureaublock_mods = [] 10263154fee4SMarc-André Lureausoftmmu_mods = [] 10273154fee4SMarc-André Lureauforeach d, list : modules 10283154fee4SMarc-André Lureau foreach m, module_ss : list 10293154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 10303e292c51SGerd Hoffmann module_ss = module_ss.apply(config_all, strict: false) 10313154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 10323154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 10333154fee4SMarc-André Lureau if d == 'block' 10343154fee4SMarc-André Lureau block_mods += sl 10353154fee4SMarc-André Lureau else 10363154fee4SMarc-André Lureau softmmu_mods += sl 10373154fee4SMarc-André Lureau endif 10383154fee4SMarc-André Lureau else 10393154fee4SMarc-André Lureau if d == 'block' 10403154fee4SMarc-André Lureau block_ss.add_all(module_ss) 10413154fee4SMarc-André Lureau else 10423154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 10433154fee4SMarc-André Lureau endif 10443154fee4SMarc-André Lureau endif 10453154fee4SMarc-André Lureau endforeach 10463154fee4SMarc-André Lureauendforeach 10473154fee4SMarc-André Lureau 10483154fee4SMarc-André Lureaunm = find_program('nm') 1049604f3e4eSYonggang Luoundefsym = find_program('scripts/undefsym.py') 10503154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 10513154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 10523154fee4SMarc-André Lureau capture: true, 10533154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 10543154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 10553154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 10563154fee4SMarc-André Lureau capture: true, 10573154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 10583154fee4SMarc-André Lureau 10595e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 10605e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 10615e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 10625e5733e5SMarc-André Lureau link_depends: block_syms, 10635e5733e5SMarc-André Lureau name_suffix: 'fa', 10645e5733e5SMarc-André Lureau build_by_default: false) 10655e5733e5SMarc-André Lureau 10665e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 1067b7c70bf2SMarc-André Lureau link_args: '@block.syms', 1068b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 10695e5733e5SMarc-André Lureau 1070ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 1071ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 1072ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 1073ff219dcaSPaolo Bonzini name_suffix: 'fa', 1074ff219dcaSPaolo Bonzini build_by_default: false) 1075ff219dcaSPaolo Bonzini 1076ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 1077ff219dcaSPaolo Bonzini 10783154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 10793154fee4SMarc-André Lureau shared_module(m.name(), 10803154fee4SMarc-André Lureau name_prefix: '', 10813154fee4SMarc-André Lureau link_whole: m, 10823154fee4SMarc-André Lureau install: true, 10833154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 10843154fee4SMarc-André Lureauendforeach 10853154fee4SMarc-André Lureau 108664ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp) 108764ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil) 108864ed6f92SPaolo Bonzini 108964ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss]) 10902becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 10912becc36aSPaolo Bonzini 10922becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 10932becc36aSPaolo Bonzinicommon_all = static_library('common', 10942becc36aSPaolo Bonzini build_by_default: false, 10952becc36aSPaolo Bonzini sources: common_all.sources() + genh, 10962becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 10972becc36aSPaolo Bonzini name_suffix: 'fa') 10982becc36aSPaolo Bonzini 1099c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh') 1100c9322ab5SMarc-André Lureau 110164ed6f92SPaolo Bonziniemulators = [] 11022becc36aSPaolo Bonziniforeach target : target_dirs 11032becc36aSPaolo Bonzini config_target = config_target_mak[target] 11042becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 11052becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 1106859aef02SPaolo Bonzini arch_srcs = [config_target_h[target]] 110764ed6f92SPaolo Bonzini arch_deps = [] 110864ed6f92SPaolo Bonzini c_args = ['-DNEED_CPU_H', 110964ed6f92SPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 111064ed6f92SPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] 111164ed6f92SPaolo Bonzini link_args = [] 11122becc36aSPaolo Bonzini 1113859aef02SPaolo Bonzini config_target += config_host 11142becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 11152becc36aSPaolo Bonzini if targetos == 'linux' 11162becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 11172becc36aSPaolo Bonzini endif 11182becc36aSPaolo Bonzini if target.endswith('-softmmu') 11192becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 11202becc36aSPaolo Bonzini target_type='system' 1121abff1abfSPaolo Bonzini t = target_softmmu_arch[arch].apply(config_target, strict: false) 1122abff1abfSPaolo Bonzini arch_srcs += t.sources() 112364ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1124abff1abfSPaolo Bonzini 11252c44220dSMarc-André Lureau hw_dir = target_name == 'sparc64' ? 'sparc64' : arch 11262c44220dSMarc-André Lureau hw = hw_arch[hw_dir].apply(config_target, strict: false) 11272c44220dSMarc-André Lureau arch_srcs += hw.sources() 112864ed6f92SPaolo Bonzini arch_deps += hw.dependencies() 11292c44220dSMarc-André Lureau 11302becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 113164ed6f92SPaolo Bonzini link_args += ['@block.syms', '@qemu.syms'] 11322becc36aSPaolo Bonzini else 11333a30446aSMarc-André Lureau abi = config_target['TARGET_ABI_DIR'] 11342becc36aSPaolo Bonzini target_type='user' 11352becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 11362becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 11372becc36aSPaolo Bonzini base_dir = 'linux-user' 11382becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 11392becc36aSPaolo Bonzini else 11402becc36aSPaolo Bonzini base_dir = 'bsd-user' 11412becc36aSPaolo Bonzini endif 11422becc36aSPaolo Bonzini target_inc += include_directories( 11432becc36aSPaolo Bonzini base_dir, 11443a30446aSMarc-André Lureau base_dir / abi, 11452becc36aSPaolo Bonzini ) 11463a30446aSMarc-André Lureau if 'CONFIG_LINUX_USER' in config_target 11473a30446aSMarc-André Lureau dir = base_dir / abi 11483a30446aSMarc-André Lureau arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c') 11493a30446aSMarc-André Lureau if config_target.has_key('TARGET_SYSTBL_ABI') 11503a30446aSMarc-André Lureau arch_srcs += \ 11513a30446aSMarc-André Lureau syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'], 11523a30446aSMarc-André Lureau extra_args : config_target['TARGET_SYSTBL_ABI']) 11533a30446aSMarc-André Lureau endif 11543a30446aSMarc-André Lureau endif 11552becc36aSPaolo Bonzini endif 11562becc36aSPaolo Bonzini 1157c9322ab5SMarc-André Lureau if 'TARGET_XML_FILES' in config_target 1158c9322ab5SMarc-André Lureau gdbstub_xml = custom_target(target + '-gdbstub-xml.c', 1159c9322ab5SMarc-André Lureau output: target + '-gdbstub-xml.c', 1160c9322ab5SMarc-André Lureau input: files(config_target['TARGET_XML_FILES'].split()), 1161c9322ab5SMarc-André Lureau command: [feature_to_c, '@INPUT@'], 1162c9322ab5SMarc-André Lureau capture: true) 1163c9322ab5SMarc-André Lureau arch_srcs += gdbstub_xml 1164c9322ab5SMarc-André Lureau endif 1165c9322ab5SMarc-André Lureau 1166abff1abfSPaolo Bonzini t = target_arch[arch].apply(config_target, strict: false) 1167abff1abfSPaolo Bonzini arch_srcs += t.sources() 116864ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1169abff1abfSPaolo Bonzini 11702becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 11712becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 117264ed6f92SPaolo Bonzini deps = target_common.dependencies() 11732becc36aSPaolo Bonzini 11742becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 11752becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 117664ed6f92SPaolo Bonzini arch_deps += target_specific.dependencies() 11772becc36aSPaolo Bonzini 117864ed6f92SPaolo Bonzini lib = static_library('qemu-' + target, 1179859aef02SPaolo Bonzini sources: arch_srcs + genh, 1180b7612f45SPaolo Bonzini dependencies: arch_deps, 11812becc36aSPaolo Bonzini objects: objects, 11822becc36aSPaolo Bonzini include_directories: target_inc, 118364ed6f92SPaolo Bonzini c_args: c_args, 118464ed6f92SPaolo Bonzini build_by_default: false, 11852becc36aSPaolo Bonzini name_suffix: 'fa') 118664ed6f92SPaolo Bonzini 118764ed6f92SPaolo Bonzini if target.endswith('-softmmu') 118864ed6f92SPaolo Bonzini execs = [{ 118964ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name, 119064ed6f92SPaolo Bonzini 'gui': false, 119164ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 119264ed6f92SPaolo Bonzini 'dependencies': [] 119364ed6f92SPaolo Bonzini }] 119435be72baSPaolo Bonzini if targetos == 'windows' and (sdl.found() or gtk.found()) 119564ed6f92SPaolo Bonzini execs += [{ 119664ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name + 'w', 119764ed6f92SPaolo Bonzini 'gui': true, 119864ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 119964ed6f92SPaolo Bonzini 'dependencies': [] 120064ed6f92SPaolo Bonzini }] 120164ed6f92SPaolo Bonzini endif 120264ed6f92SPaolo Bonzini if config_host.has_key('CONFIG_FUZZ') 120364ed6f92SPaolo Bonzini specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false) 120464ed6f92SPaolo Bonzini execs += [{ 120564ed6f92SPaolo Bonzini 'name': 'qemu-fuzz-' + target_name, 120664ed6f92SPaolo Bonzini 'gui': false, 120764ed6f92SPaolo Bonzini 'sources': specific_fuzz.sources(), 120864ed6f92SPaolo Bonzini 'dependencies': specific_fuzz.dependencies(), 120964ed6f92SPaolo Bonzini }] 121064ed6f92SPaolo Bonzini endif 121164ed6f92SPaolo Bonzini else 121264ed6f92SPaolo Bonzini execs = [{ 121364ed6f92SPaolo Bonzini 'name': 'qemu-' + target_name, 121464ed6f92SPaolo Bonzini 'gui': false, 121564ed6f92SPaolo Bonzini 'sources': [], 121664ed6f92SPaolo Bonzini 'dependencies': [] 121764ed6f92SPaolo Bonzini }] 121864ed6f92SPaolo Bonzini endif 121964ed6f92SPaolo Bonzini foreach exe: execs 122064ed6f92SPaolo Bonzini emulators += executable(exe['name'], exe['sources'], 122164ed6f92SPaolo Bonzini install: true, 122264ed6f92SPaolo Bonzini c_args: c_args, 122364ed6f92SPaolo Bonzini dependencies: arch_deps + deps + exe['dependencies'], 122464ed6f92SPaolo Bonzini objects: lib.extract_all_objects(recursive: true), 122564ed6f92SPaolo Bonzini link_language: link_language, 122664ed6f92SPaolo Bonzini link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []), 122764ed6f92SPaolo Bonzini link_args: link_args, 122864ed6f92SPaolo Bonzini gui_app: exe['gui']) 122910e1d263SMarc-André Lureau 123010e1d263SMarc-André Lureau if 'CONFIG_TRACE_SYSTEMTAP' in config_host 123110e1d263SMarc-André Lureau foreach stp: [ 1232bd5f973aSStefan Hajnoczi {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, 1233bd5f973aSStefan Hajnoczi {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, 123410e1d263SMarc-André Lureau {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, 123510e1d263SMarc-André Lureau {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, 123610e1d263SMarc-André Lureau ] 1237bd5f973aSStefan Hajnoczi custom_target(exe['name'] + stp['ext'], 123810e1d263SMarc-André Lureau input: trace_events_all, 1239bd5f973aSStefan Hajnoczi output: exe['name'] + stp['ext'], 124010e1d263SMarc-André Lureau capture: true, 124110e1d263SMarc-André Lureau install: stp['install'], 1242ab4c0996SMarc-André Lureau install_dir: qemu_datadir / '../systemtap/tapset', 124310e1d263SMarc-André Lureau command: [ 124410e1d263SMarc-André Lureau tracetool, '--group=all', '--format=' + stp['fmt'], 124510e1d263SMarc-André Lureau '--binary=' + stp['bin'], 124610e1d263SMarc-André Lureau '--target-name=' + target_name, 124710e1d263SMarc-André Lureau '--target-type=' + target_type, 124810e1d263SMarc-André Lureau '--probe-prefix=qemu.' + target_type + '.' + target_name, 124910e1d263SMarc-André Lureau '@INPUT@', 125010e1d263SMarc-André Lureau ]) 125110e1d263SMarc-André Lureau endforeach 125210e1d263SMarc-André Lureau endif 125364ed6f92SPaolo Bonzini endforeach 12542becc36aSPaolo Bonziniendforeach 12552becc36aSPaolo Bonzini 1256931049b4SPaolo Bonzini# Other build targets 1257897b5afaSMarc-André Lureau 1258f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 1259f556b4a1SPaolo Bonzini install_headers('include/qemu/qemu-plugin.h') 1260f556b4a1SPaolo Bonziniendif 1261f556b4a1SPaolo Bonzini 1262f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 1263f15bff25SPaolo Bonzini subdir('qga') 1264f15bff25SPaolo Bonziniendif 1265f15bff25SPaolo Bonzini 12669755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled 12679755c94aSLaurent Vivier# when we don't build tools or system 12684113f4cfSLaurent Vivierif xkbcommon.found() 126928742467SMarc-André Lureau # used for the update-keymaps target, so include rules even if !have_tools 127028742467SMarc-André Lureau qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, 127128742467SMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: have_tools) 127228742467SMarc-André Lureauendif 127328742467SMarc-André Lureau 12748855e8f0SPhilippe Mathieu-Daudéqemu_block_tools = [] 1275931049b4SPaolo Bonziniif have_tools 1276b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 1277b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 1278b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 1279b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1280b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 1281b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1282b7c70bf2SMarc-André Lureau 12837c58bb76SPaolo Bonzini subdir('storage-daemon') 1284a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 12851d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 1286a9c9727cSPaolo Bonzini 1287157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 1288157e7b13SMarc-André Lureau dependencies: qemuutil, 1289157e7b13SMarc-André Lureau install: true) 1290157e7b13SMarc-André Lureau 1291931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 1292931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 12932d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 1294ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 129532fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 129699650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 1297931049b4SPaolo Bonzini endif 12988f51e01cSMarc-André Lureau 12998f51e01cSMarc-André Lureau if targetos == 'linux' 13008f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 13018f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 13028f51e01cSMarc-André Lureau install: true, 13038f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 1304897b5afaSMarc-André Lureau 1305897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 1306897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 13076ec0e15dSPaolo Bonzini libcap_ng, mpathpersist], 1308897b5afaSMarc-André Lureau install: true) 13098f51e01cSMarc-André Lureau endif 13108f51e01cSMarc-André Lureau 13115ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 13125ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 13135ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 13145ee24e78SMarc-André Lureau endif 1315931049b4SPaolo Bonziniendif 1316931049b4SPaolo Bonzini 1317f5aa6320SMarc-André Lureausubdir('scripts') 13183f99cf57SPaolo Bonzinisubdir('tools') 1319bdcbea7aSMarc-André Lureausubdir('pc-bios') 1320ce1c1e7aSPaolo Bonzinisubdir('tests') 1321f8aa24eaSPaolo Bonzinisubdir('docs') 1322e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host 1323e8f3bd71SMarc-André Lureau subdir('po') 1324e8f3bd71SMarc-André Lureauendif 13253f99cf57SPaolo Bonzini 13268adfeba9SMarc-André Lureauif host_machine.system() == 'windows' 13278adfeba9SMarc-André Lureau nsis_cmd = [ 13288adfeba9SMarc-André Lureau find_program('scripts/nsis.py'), 13298adfeba9SMarc-André Lureau '@OUTPUT@', 13308adfeba9SMarc-André Lureau get_option('prefix'), 13318adfeba9SMarc-André Lureau meson.current_source_dir(), 13328adfeba9SMarc-André Lureau host_machine.cpu_family(), 13338adfeba9SMarc-André Lureau '--', 13348adfeba9SMarc-André Lureau '-DDISPLAYVERSION=' + meson.project_version(), 13358adfeba9SMarc-André Lureau ] 13368adfeba9SMarc-André Lureau if build_docs 13378adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_DOCUMENTATION=y' 13388adfeba9SMarc-André Lureau endif 13398adfeba9SMarc-André Lureau if 'CONFIG_GTK' in config_host 13408adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_GTK=y' 13418adfeba9SMarc-André Lureau endif 13428adfeba9SMarc-André Lureau 13438adfeba9SMarc-André Lureau nsis = custom_target('nsis', 13448adfeba9SMarc-André Lureau output: 'qemu-setup-' + meson.project_version() + '.exe', 13458adfeba9SMarc-André Lureau input: files('qemu.nsi'), 13468adfeba9SMarc-André Lureau build_always_stale: true, 13478adfeba9SMarc-André Lureau command: nsis_cmd + ['@INPUT@']) 13488adfeba9SMarc-André Lureau alias_target('installer', nsis) 13498adfeba9SMarc-André Lureauendif 13508adfeba9SMarc-André Lureau 1351f9332757SPaolo Bonzinisummary_info = {} 1352f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 1353f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 1354f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 1355f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 1356f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 1357f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 1358f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 1359f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 1360f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 1361f9332757SPaolo Bonziniif targetos != 'windows' 1362f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 1363b81efab7SMarc-André Lureau summary_info += {'Manual directory': get_option('mandir')} 1364f9332757SPaolo Bonzinielse 1365f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 1366f9332757SPaolo Bonziniendif 1367491e74c1SMarc-André Lureausummary_info += {'Doc directory': get_option('docdir')} 1368f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 1369f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 1370f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 1371f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 1372f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 1373f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 1374f9332757SPaolo Bonziniif link_language == 'cpp' 1375f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 1376f9332757SPaolo Bonzinielse 1377f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 1378f9332757SPaolo Bonziniendif 1379f9332757SPaolo Bonziniif targetos == 'darwin' 1380f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 1381f9332757SPaolo Bonziniendif 1382f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 1383f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 1384f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 1385f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 1386f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 1387f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 1388f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 1389f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 1390f9332757SPaolo Bonzini# TODO: add back version 1391f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 1392f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 1393f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 1394f9332757SPaolo Bonziniendif 1395f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 1396f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 1397f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 1398f9332757SPaolo Bonziniendif 1399f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 1400f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 1401f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 1402f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 1403f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 1404f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 1405f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 14063e8529ddSLaurent Viviersummary_info += {'static build': config_host.has_key('CONFIG_STATIC')} 1407f9332757SPaolo Bonziniif targetos == 'darwin' 1408f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 1409f9332757SPaolo Bonziniendif 1410f9332757SPaolo Bonzini# TODO: add back version 141135be72baSPaolo Bonzinisummary_info += {'SDL support': sdl.found()} 141235be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()} 1413f9332757SPaolo Bonzini# TODO: add back version 1414f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 1415f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 1416b7612f45SPaolo Bonzinisummary_info += {'pixman': pixman.found()} 1417f9332757SPaolo Bonzini# TODO: add back version 1418f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 1419f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 1420f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 1421f9332757SPaolo Bonzini# TODO: add back version 1422f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 1423f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 1424f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 1425f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1426f9332757SPaolo Bonziniendif 1427f9332757SPaolo Bonzini# TODO: add back version 1428f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 1429f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 1430f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1431f9332757SPaolo Bonziniendif 1432f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 1433f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 1434f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 1435f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 1436f9332757SPaolo Bonzini# TODO: add back version 1437f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 1438f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 1439f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 1440f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 1441f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 1442f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 1443f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 14446ec0e15dSPaolo Bonzinisummary_info += {'Multipath support': mpathpersist.found()} 1445a0b93237SPaolo Bonzinisummary_info += {'VNC support': vnc.found()} 1446a0b93237SPaolo Bonziniif vnc.found() 1447a0b93237SPaolo Bonzini summary_info += {'VNC SASL support': sasl.found()} 1448a0b93237SPaolo Bonzini summary_info += {'VNC JPEG support': jpeg.found()} 1449a0b93237SPaolo Bonzini summary_info += {'VNC PNG support': png.found()} 1450f9332757SPaolo Bonziniendif 1451f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 1452f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 1453f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 1454f9332757SPaolo Bonziniendif 1455f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 1456f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 1457f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 1458f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 1459f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 1460f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 1461f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 1462f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 1463f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 1464f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG 1465f9332757SPaolo Bonzini#summary_info += {'KVM support': have_kvm'} 1466f9332757SPaolo Bonzini#summary_info += {'HAX support': have_hax'} 1467f9332757SPaolo Bonzini#summary_info += {'HVF support': have_hvf'} 1468f9332757SPaolo Bonzini#summary_info += {'WHPX support': have_whpx'} 1469f9332757SPaolo Bonzini#summary_info += {'TCG support': have_tcg'} 1470f9332757SPaolo Bonzini#if get_option('tcg') 1471f9332757SPaolo Bonzini# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 1472f9332757SPaolo Bonzini# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 1473f9332757SPaolo Bonzini#endif 1474*aa087962SPaolo Bonzinisummary_info += {'malloc trim support': has_malloc_trim} 1475f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 1476f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 1477f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 1478f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 1479f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 1480f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 1481f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 1482f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 1483f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 1484f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 1485f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 1486f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 1487f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 1488f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 1489f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 1490f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 1491f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 1492f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 1493f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 1494f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 1495f9332757SPaolo Bonziniendif 1496f9332757SPaolo Bonzini# TODO: add back protocol and server version 1497f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 1498f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 1499f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 1500f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 15010a40bcb7SCésar Belleysummary_info += {'U2F support': u2f.found()} 1502f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 1503f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 1504f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 1505f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 1506f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 1507f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 1508f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 1509f9332757SPaolo Bonziniif targetos == 'windows' 1510f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 1511f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 1512f9332757SPaolo Bonzini endif 1513f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 1514f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 15154bad7c3bSStefan Hajnoczi summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI')} 1516f9332757SPaolo Bonziniendif 1517f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 1518f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 1519f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 1520f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 1521f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 1522f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 1523f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 1524bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 1525f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 1526f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 1527f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 1528f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 1529f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 1530f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 1531f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 1532f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 1533f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 1534f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 1535f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 1536*aa087962SPaolo Bonzinisummary_info += {'memory allocator': get_option('malloc')} 1537f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 1538f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 1539f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 1540f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 1541f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 1542f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 1543f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 1544f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 1545f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 1546f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 1547f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 1548f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 1549f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 1550f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 1551f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 1552f01496a3SPaolo Bonzinisummary_info += {'libudev': libudev.found()} 1553f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 1554f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 1555f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 1556f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 1557f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 1558f9332757SPaolo Bonziniendif 1559f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 1560f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 1561f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 1562f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 1563f9332757SPaolo Bonzini 1564f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 1565f9332757SPaolo Bonzini message() 1566f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 1567f9332757SPaolo Bonzini message() 1568f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 1569f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 1570f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1571f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1572f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1573f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1574f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1575f9332757SPaolo Bonziniendif 1576f9332757SPaolo Bonzini 1577f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 1578f9332757SPaolo Bonzini message() 1579f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 1580f9332757SPaolo Bonzini message() 1581f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 1582f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 1583f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1584f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1585f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1586f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1587f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1588f9332757SPaolo Bonziniendif 1589