1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0', 290756b2fSGerd Hoffmann default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 33e0e5190SPaolo Bonzini 'b_colorout=auto'], 4a5665051SPaolo Bonzini version: run_command('head', meson.source_root() / 'VERSION').stdout().strip()) 5a5665051SPaolo Bonzini 6a5665051SPaolo Bonzininot_found = dependency('', required: false) 7b29b40f4SPaolo Bonziniif meson.version().version_compare('>=0.56.0') 8b29b40f4SPaolo Bonzini keyval = import('keyval') 9b29b40f4SPaolo Bonzinielse 10a5665051SPaolo Bonzini keyval = import('unstable-keyval') 11b29b40f4SPaolo Bonziniendif 12a81df1b6SPaolo Bonziniss = import('sourceset') 138b18cdbfSRichard Hendersonfs = import('fs') 14a81df1b6SPaolo Bonzini 15ce1c1e7aSPaolo Bonzinish = find_program('sh') 16a81df1b6SPaolo Bonzinicc = meson.get_compiler('c') 17a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak') 183154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host 1935be72baSPaolo Bonzinienable_static = 'CONFIG_STATIC' in config_host 20f8aa24eaSPaolo Bonzinibuild_docs = 'BUILD_DOCS' in config_host 218fe11232SMarc-André Lureau 228fe11232SMarc-André Lureauif get_option('qemu_suffix').startswith('/') 238fe11232SMarc-André Lureau error('qemu_suffix cannot start with a /') 248fe11232SMarc-André Lureauendif 258fe11232SMarc-André Lureau 26ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix') 27491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix') 28859aef02SPaolo Bonziniconfig_host_data = configuration_data() 29859aef02SPaolo Bonzinigenh = [] 30a5665051SPaolo Bonzini 31760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 32760e4327SPaolo Bonzinihave_user = false 33760e4327SPaolo Bonzinihave_system = false 34760e4327SPaolo Bonziniforeach target : target_dirs 35760e4327SPaolo Bonzini have_user = have_user or target.endswith('-user') 36760e4327SPaolo Bonzini have_system = have_system or target.endswith('-softmmu') 37760e4327SPaolo Bonziniendforeach 38760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 39760e4327SPaolo Bonzinihave_block = have_system or have_tools 40760e4327SPaolo Bonzini 41201e8ed7SPaolo Bonzinipython = import('python').find_installation() 42201e8ed7SPaolo Bonzini 43201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 44201e8ed7SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', 45201e8ed7SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 46201e8ed7SPaolo Bonzini 47201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family() 48201e8ed7SPaolo Bonzinitargetos = host_machine.system() 49201e8ed7SPaolo Bonzini 50201e8ed7SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'), 51201e8ed7SPaolo Bonzini output: 'ninjatool', 52201e8ed7SPaolo Bonzini configuration: config_host) 53201e8ed7SPaolo Bonzini 54201e8ed7SPaolo Bonzini################## 55201e8ed7SPaolo Bonzini# Compiler flags # 56201e8ed7SPaolo Bonzini################## 57201e8ed7SPaolo Bonzini 58ff9ed62bSAlexander Bulekov# Specify linker-script with add_project_link_arguments so that it is not placed 59ff9ed62bSAlexander Bulekov# within a linker --start-group/--end-group pair 60ff9ed62bSAlexander Bulekovif 'CONFIG_FUZZ' in config_host 61ff9ed62bSAlexander Bulekov add_project_link_arguments(['-Wl,-T,', 62ff9ed62bSAlexander Bulekov (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')], 63ff9ed62bSAlexander Bulekov native: false, language: ['c', 'cpp', 'objc']) 64ff9ed62bSAlexander Bulekovendif 65ff9ed62bSAlexander Bulekov 66a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 67a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 68a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 69a5665051SPaolo Bonzini native: false, language: 'cpp') 70a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 71a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 72a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 73a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 74a5665051SPaolo Bonzini 75c46f76d1SAlexander Bulekov 76fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 77fc929892SMarc-André Lureauif link_language == 'cpp' 78fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 79fc929892SMarc-André Lureauendif 80a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 81a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 82a5665051SPaolo Bonziniendif 83a5665051SPaolo Bonzini 84968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host 85968b4db3SPaolo Bonzini run_target('sparse', 86968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 87968b4db3SPaolo Bonzini config_host['SPARSE_CFLAGS'].split(), 88968b4db3SPaolo Bonzini 'compile_commands.json']) 89968b4db3SPaolo Bonziniendif 90968b4db3SPaolo Bonzini 916ec0e15dSPaolo Bonzini########################################### 926ec0e15dSPaolo Bonzini# Target-specific checks and dependencies # 936ec0e15dSPaolo Bonzini########################################### 946ec0e15dSPaolo Bonzini 956ec0e15dSPaolo Bonziniif targetos != 'linux' and get_option('mpath').enabled() 966ec0e15dSPaolo Bonzini error('Multipath is supported only on Linux') 976ec0e15dSPaolo Bonziniendif 986ec0e15dSPaolo Bonzini 99a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 100a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 1014a96337dSPaolo Bonziniwinmm = [] 102a81df1b6SPaolo Bonzinisocket = [] 10304c6f1e7SMarc-André Lureauversion_res = [] 104d92989aaSMarc-André Lureaucoref = [] 105d92989aaSMarc-André Lureauiokit = [] 106b4e312e9SPaolo Bonzinicocoa = not_found 107d92989aaSMarc-André Lureauhvf = [] 108a81df1b6SPaolo Bonziniif targetos == 'windows' 109a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 1104a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 11104c6f1e7SMarc-André Lureau 11204c6f1e7SMarc-André Lureau win = import('windows') 11304c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 11404c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 11504c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 116d92989aaSMarc-André Lureauelif targetos == 'darwin' 117d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 118d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 119b4e312e9SPaolo Bonzini cocoa = dependency('appleframeworks', modules: 'Cocoa', required: get_option('cocoa')) 120d92989aaSMarc-André Lureau hvf = dependency('appleframeworks', modules: 'Hypervisor') 121cfad62f1SPaolo Bonzinielif targetos == 'sunos' 122cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 123cfad62f1SPaolo Bonzini cc.find_library('nsl'), 124cfad62f1SPaolo Bonzini cc.find_library('resolv')] 125cfad62f1SPaolo Bonzinielif targetos == 'haiku' 126cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 127cfad62f1SPaolo Bonzini cc.find_library('network'), 128cfad62f1SPaolo Bonzini cc.find_library('bsd')] 129a81df1b6SPaolo Bonziniendif 1306ec0e15dSPaolo Bonzini 131b4e312e9SPaolo Bonziniif not cocoa.found() and get_option('cocoa').enabled() 132b4e312e9SPaolo Bonzini error('Cocoa not available on this platform') 133b4e312e9SPaolo Bonziniendif 134b4e312e9SPaolo Bonzini 1356ec0e15dSPaolo Bonzini################ 1366ec0e15dSPaolo Bonzini# Dependencies # 1376ec0e15dSPaolo Bonzini################ 1386ec0e15dSPaolo Bonzini 139215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands. This was 140215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles. 141215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(), 142215b0c2fSPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 143215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split()) 144a81df1b6SPaolo Bonzinigio = not_found 145a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 146a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 147a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 148a81df1b6SPaolo Bonziniendif 149a81df1b6SPaolo Bonzinilttng = not_found 150a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 151a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 152a81df1b6SPaolo Bonziniendif 153a81df1b6SPaolo Bonziniurcubp = not_found 154a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 155a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 156a81df1b6SPaolo Bonziniendif 15746859d93SDaniel P. Berrangégcrypt = not_found 15846859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host 15946859d93SDaniel P. Berrangé gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), 16046859d93SDaniel P. Berrangé link_args: config_host['GCRYPT_LIBS'].split()) 16146859d93SDaniel P. Berrangéendif 162a81df1b6SPaolo Bonzininettle = not_found 163a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 164a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 165a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 166a81df1b6SPaolo Bonziniendif 167a81df1b6SPaolo Bonzinignutls = not_found 168a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 169a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 170a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 171a81df1b6SPaolo Bonziniendif 172b7612f45SPaolo Bonzinipixman = not_found 173b7612f45SPaolo Bonziniif have_system or have_tools 174b7612f45SPaolo Bonzini pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', 1751a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 176b7612f45SPaolo Bonziniendif 1775e7fbd25SMarc-André Lureaupam = not_found 1785e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 1795e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 1805e7fbd25SMarc-André Lureauendif 1815e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 1821ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static) 1835e5733e5SMarc-André Lureaulinux_io_uring = not_found 1845e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 1855e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 1865e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 1875e5733e5SMarc-André Lureauendif 1885e5733e5SMarc-André Lureaulibxml2 = not_found 1895e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 1905e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 1915e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 1925e5733e5SMarc-André Lureauendif 1935e5733e5SMarc-André Lureaulibnfs = not_found 1945e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 1955e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 1965e5733e5SMarc-André Lureauendif 197ec0d5893SMarc-André Lureaulibattr = not_found 198ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 199ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 200ec0d5893SMarc-André Lureauendif 2013f99cf57SPaolo Bonziniseccomp = not_found 2023f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 2033f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 2043f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 2053f99cf57SPaolo Bonziniendif 2063f99cf57SPaolo Bonzinilibcap_ng = not_found 2073f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 2083f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 2093f99cf57SPaolo Bonziniendif 2101917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools 2111917ec6dSPaolo Bonzini xkbcommon = not_found 2121917ec6dSPaolo Bonzinielse 2131917ec6dSPaolo Bonzini xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), 2141a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 215ade60d4fSMarc-André Lureauendif 216cdaf0722SMarc-André Lureauslirp = not_found 217cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP') 218cdaf0722SMarc-André Lureau slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(), 219cdaf0722SMarc-André Lureau link_args: config_host['SLIRP_LIBS'].split()) 220cdaf0722SMarc-André Lureauendif 221cdaf0722SMarc-André Lureauvde = not_found 222cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE') 223cdaf0722SMarc-André Lureau vde = declare_dependency(link_args: config_host['VDE_LIBS'].split()) 224cdaf0722SMarc-André Lureauendif 225478e943fSPaolo Bonzinipulse = not_found 226478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 227478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 228478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 229478e943fSPaolo Bonziniendif 230478e943fSPaolo Bonzinialsa = not_found 231478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 232478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 233478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 234478e943fSPaolo Bonziniendif 235478e943fSPaolo Bonzinijack = not_found 236478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 237478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 238478e943fSPaolo Bonziniendif 2392634733cSPaolo Bonzinispice = not_found 2402634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 2412634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 2422634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 2432634733cSPaolo Bonziniendif 2445ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 245ccf7afa5SPaolo Bonzinilibdl = not_found 246ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 247ccf7afa5SPaolo Bonzini libdl = cc.find_library('dl', required: true) 248ccf7afa5SPaolo Bonziniendif 24999650b62SPaolo Bonzinilibiscsi = not_found 25099650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 25199650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 25299650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 25399650b62SPaolo Bonziniendif 2545e5733e5SMarc-André Lureauzstd = not_found 2555e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 2565e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 2575e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 2585e5733e5SMarc-André Lureauendif 259ea458960SMarc-André Lureaugbm = not_found 260ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 261ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 262ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 263ea458960SMarc-André Lureauendif 264ea458960SMarc-André Lureauvirgl = not_found 265ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 266ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 267ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 268ea458960SMarc-André Lureauendif 2691d7bb6abSMarc-André Lureaucurl = not_found 2701d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 2711d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 2721d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 2731d7bb6abSMarc-André Lureauendif 274f15bff25SPaolo Bonzinilibudev = not_found 275f01496a3SPaolo Bonziniif targetos == 'linux' and (have_system or have_tools) 2766ec0e15dSPaolo Bonzini libudev = dependency('libudev', 2776ec0e15dSPaolo Bonzini required: get_option('mpath').enabled(), 2786ec0e15dSPaolo Bonzini static: enable_static) 279f15bff25SPaolo Bonziniendif 2806ec0e15dSPaolo Bonzini 2816ec0e15dSPaolo Bonzinimpathpersist = not_found 2826ec0e15dSPaolo Bonzinimpathpersist_new_api = false 2836ec0e15dSPaolo Bonziniif targetos == 'linux' and have_tools and not get_option('mpath').disabled() 2846ec0e15dSPaolo Bonzini mpath_test_source_new = ''' 2856ec0e15dSPaolo Bonzini #include <libudev.h> 2866ec0e15dSPaolo Bonzini #include <mpath_persist.h> 2876ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 2886ec0e15dSPaolo Bonzini int logsink; 2896ec0e15dSPaolo Bonzini static struct config *multipath_conf; 2906ec0e15dSPaolo Bonzini extern struct udev *udev; 2916ec0e15dSPaolo Bonzini extern struct config *get_multipath_config(void); 2926ec0e15dSPaolo Bonzini extern void put_multipath_config(struct config *conf); 2936ec0e15dSPaolo Bonzini struct udev *udev; 2946ec0e15dSPaolo Bonzini struct config *get_multipath_config(void) { return multipath_conf; } 2956ec0e15dSPaolo Bonzini void put_multipath_config(struct config *conf) { } 2966ec0e15dSPaolo Bonzini int main(void) { 2976ec0e15dSPaolo Bonzini udev = udev_new(); 2986ec0e15dSPaolo Bonzini multipath_conf = mpath_lib_init(); 2996ec0e15dSPaolo Bonzini return 0; 3006ec0e15dSPaolo Bonzini }''' 3016ec0e15dSPaolo Bonzini mpath_test_source_old = ''' 3026ec0e15dSPaolo Bonzini #include <libudev.h> 3036ec0e15dSPaolo Bonzini #include <mpath_persist.h> 3046ec0e15dSPaolo Bonzini unsigned mpath_mx_alloc_len = 1024; 3056ec0e15dSPaolo Bonzini int logsink; 3066ec0e15dSPaolo Bonzini int main(void) { 3076ec0e15dSPaolo Bonzini struct udev *udev = udev_new(); 3086ec0e15dSPaolo Bonzini mpath_lib_init(udev); 3096ec0e15dSPaolo Bonzini return 0; 3106ec0e15dSPaolo Bonzini }''' 31143b43a40SPaolo Bonzini mpathlibs = [libudev] 31243b43a40SPaolo Bonzini if enable_static 31343b43a40SPaolo Bonzini mpathlibs += cc.find_library('devmapper', 3146ec0e15dSPaolo Bonzini required: get_option('mpath'), 3156ec0e15dSPaolo Bonzini static: enable_static) 31643b43a40SPaolo Bonzini endif 31743b43a40SPaolo Bonzini mpathlibs += cc.find_library('multipath', 3186ec0e15dSPaolo Bonzini required: get_option('mpath'), 3196ec0e15dSPaolo Bonzini static: enable_static) 32043b43a40SPaolo Bonzini mpathlibs += cc.find_library('mpathpersist', 32143b43a40SPaolo Bonzini required: get_option('mpath'), 32243b43a40SPaolo Bonzini static: enable_static) 32343b43a40SPaolo Bonzini foreach lib: mpathlibs 32443b43a40SPaolo Bonzini if not lib.found() 32543b43a40SPaolo Bonzini mpathlibs = [] 32643b43a40SPaolo Bonzini break 32743b43a40SPaolo Bonzini endif 32843b43a40SPaolo Bonzini endforeach 32943b43a40SPaolo Bonzini if mpathlibs.length() > 0 3306ec0e15dSPaolo Bonzini if cc.links(mpath_test_source_new, dependencies: mpathlibs) 3316ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 3326ec0e15dSPaolo Bonzini mpathpersist_new_api = true 3336ec0e15dSPaolo Bonzini elif cc.links(mpath_test_source_old, dependencies: mpathlibs) 3346ec0e15dSPaolo Bonzini mpathpersist = declare_dependency(dependencies: mpathlibs) 3356ec0e15dSPaolo Bonzini else 3366ec0e15dSPaolo Bonzini if get_option('mpath').enabled() 3376ec0e15dSPaolo Bonzini error('Cannot detect libmpathpersist API') 3386ec0e15dSPaolo Bonzini else 3396ec0e15dSPaolo Bonzini warning('Cannot detect libmpathpersist API, disabling') 3406ec0e15dSPaolo Bonzini endif 3416ec0e15dSPaolo Bonzini endif 3426ec0e15dSPaolo Bonzini endif 3436ec0e15dSPaolo Bonziniendif 3446ec0e15dSPaolo Bonzini 3452634733cSPaolo Bonzinibrlapi = not_found 3462634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 3472634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 3482634733cSPaolo Bonziniendif 34935be72baSPaolo Bonzini 350760e4327SPaolo Bonzinisdl = not_found 351760e4327SPaolo Bonziniif have_system 352363743daSYonggang Luo sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) 35335be72baSPaolo Bonzini sdl_image = not_found 354760e4327SPaolo Bonziniendif 35535be72baSPaolo Bonziniif sdl.found() 35635be72baSPaolo Bonzini # work around 2.0.8 bug 35735be72baSPaolo Bonzini sdl = declare_dependency(compile_args: '-Wno-undef', 35835be72baSPaolo Bonzini dependencies: sdl) 3597161a433SVolker Rümelin sdl_image = dependency('SDL2_image', required: get_option('sdl_image'), 3601a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 36135be72baSPaolo Bonzinielse 36235be72baSPaolo Bonzini if get_option('sdl_image').enabled() 363a8dc2aceSSergei Trofimovich error('sdl-image required, but SDL was @0@'.format( 364a8dc2aceSSergei Trofimovich get_option('sdl').disabled() ? 'disabled' : 'not found')) 3652634733cSPaolo Bonzini endif 36635be72baSPaolo Bonzini sdl_image = not_found 36735be72baSPaolo Bonziniendif 36835be72baSPaolo Bonzini 3695e5733e5SMarc-André Lureaurbd = not_found 3705e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 3715e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 3725e5733e5SMarc-André Lureauendif 3735e5733e5SMarc-André Lureauglusterfs = not_found 3745e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 3755e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 3765e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 3775e5733e5SMarc-André Lureauendif 3785e5733e5SMarc-André Lureaulibssh = not_found 3795e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 3805e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 3815e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 3825e5733e5SMarc-André Lureauendif 3835e5733e5SMarc-André Lureaulibbzip2 = not_found 3845e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 3855e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 3865e5733e5SMarc-André Lureauendif 3875e5733e5SMarc-André Lureauliblzfse = not_found 3885e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 3895e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 3905e5733e5SMarc-André Lureauendif 391478e943fSPaolo Bonzinioss = not_found 392478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 393478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 394478e943fSPaolo Bonziniendif 395478e943fSPaolo Bonzinidsound = not_found 396478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 397478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 398478e943fSPaolo Bonziniendif 399478e943fSPaolo Bonzinicoreaudio = not_found 400478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 401478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 402478e943fSPaolo Bonziniendif 4032b1ccdf4SMarc-André Lureauopengl = not_found 4042b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 405de2d3005SPaolo Bonzini opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(), 406de2d3005SPaolo Bonzini link_args: config_host['OPENGL_LIBS'].split()) 4072b1ccdf4SMarc-André Lureauendif 4082b1ccdf4SMarc-André Lureaugtk = not_found 4092b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host 4102b1ccdf4SMarc-André Lureau gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(), 4112b1ccdf4SMarc-André Lureau link_args: config_host['GTK_LIBS'].split()) 4122b1ccdf4SMarc-André Lureauendif 4132b1ccdf4SMarc-André Lureauvte = not_found 4142b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 4152b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 4162b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 4172b1ccdf4SMarc-André Lureauendif 4182b1ccdf4SMarc-André Lureaux11 = not_found 4192b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host 4202b1ccdf4SMarc-André Lureau x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(), 4212b1ccdf4SMarc-André Lureau link_args: config_host['X11_LIBS'].split()) 4222b1ccdf4SMarc-André Lureauendif 4232b1ccdf4SMarc-André Lureaucurses = not_found 4242b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host 4252b1ccdf4SMarc-André Lureau curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(), 4262b1ccdf4SMarc-André Lureau link_args: config_host['CURSES_LIBS'].split()) 4272b1ccdf4SMarc-André Lureauendif 4282b1ccdf4SMarc-André Lureauiconv = not_found 4292b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host 4302b1ccdf4SMarc-André Lureau iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(), 4312b1ccdf4SMarc-André Lureau link_args: config_host['ICONV_LIBS'].split()) 4322b1ccdf4SMarc-André Lureauendif 433a0b93237SPaolo Bonzinivnc = not_found 4342b1ccdf4SMarc-André Lureaupng = not_found 4352b1ccdf4SMarc-André Lureaujpeg = not_found 4362b1ccdf4SMarc-André Lureausasl = not_found 437a0b93237SPaolo Bonziniif get_option('vnc').enabled() 438a0b93237SPaolo Bonzini vnc = declare_dependency() # dummy dependency 439a0b93237SPaolo Bonzini png = dependency('libpng', required: get_option('vnc_png'), 4401a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 441a0b93237SPaolo Bonzini jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'], 442a0b93237SPaolo Bonzini required: get_option('vnc_jpeg'), 443a0b93237SPaolo Bonzini static: enable_static) 444a0b93237SPaolo Bonzini sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'], 445a0b93237SPaolo Bonzini required: get_option('vnc_sasl'), 446a0b93237SPaolo Bonzini static: enable_static) 447a0b93237SPaolo Bonzini if sasl.found() 448a0b93237SPaolo Bonzini sasl = declare_dependency(dependencies: sasl, 449a0b93237SPaolo Bonzini compile_args: '-DSTRUCT_IOVEC_DEFINED') 450a0b93237SPaolo Bonzini endif 4512b1ccdf4SMarc-André Lureauendif 4524a96337dSPaolo Bonzinifdt = not_found 4534a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host 4544a96337dSPaolo Bonzini fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(), 4554a96337dSPaolo Bonzini link_args: config_host['FDT_LIBS'].split()) 4564a96337dSPaolo Bonziniendif 457708eab42SMarc-André Lureausnappy = not_found 458708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host 459708eab42SMarc-André Lureau snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split()) 460708eab42SMarc-André Lureauendif 461708eab42SMarc-André Lureaulzo = not_found 462708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host 463708eab42SMarc-André Lureau lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split()) 464708eab42SMarc-André Lureauendif 46555166230SMarc-André Lureaurdma = not_found 46655166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host 46755166230SMarc-André Lureau rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split()) 46855166230SMarc-André Lureauendif 469ab318051SMarc-André Lureaunuma = not_found 470ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host 471ab318051SMarc-André Lureau numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split()) 472ab318051SMarc-André Lureauendif 473582ea95fSMarc-André Lureauxen = not_found 474582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host 475582ea95fSMarc-André Lureau xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(), 476582ea95fSMarc-André Lureau link_args: config_host['XEN_LIBS'].split()) 477582ea95fSMarc-André Lureauendif 47806677ce1SPaolo Bonzinicacard = not_found 47906677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host 48006677ce1SPaolo Bonzini cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(), 48106677ce1SPaolo Bonzini link_args: config_host['SMARTCARD_LIBS'].split()) 48206677ce1SPaolo Bonziniendif 4830a40bcb7SCésar Belleyu2f = not_found 4840a40bcb7SCésar Belleyif have_system 4850a40bcb7SCésar Belley u2f = dependency('u2f-emu', required: get_option('u2f'), 4860a40bcb7SCésar Belley method: 'pkg-config', 4870a40bcb7SCésar Belley static: enable_static) 4880a40bcb7SCésar Belleyendif 48906677ce1SPaolo Bonziniusbredir = not_found 49006677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host 49106677ce1SPaolo Bonzini usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(), 49206677ce1SPaolo Bonzini link_args: config_host['USB_REDIR_LIBS'].split()) 49306677ce1SPaolo Bonziniendif 49406677ce1SPaolo Bonzinilibusb = not_found 49506677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host 49606677ce1SPaolo Bonzini libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(), 49706677ce1SPaolo Bonzini link_args: config_host['LIBUSB_LIBS'].split()) 49806677ce1SPaolo Bonziniendif 499c9322ab5SMarc-André Lureaulibpmem = not_found 500c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host 501c9322ab5SMarc-André Lureau libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), 502c9322ab5SMarc-André Lureau link_args: config_host['LIBPMEM_LIBS'].split()) 503c9322ab5SMarc-André Lureauendif 504c7c91a74SBruce Rogerslibdaxctl = not_found 505c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host 506c7c91a74SBruce Rogers libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) 507c7c91a74SBruce Rogersendif 5088ce0a45fSMarc-André Lureautasn1 = not_found 5098ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host 5108ce0a45fSMarc-André Lureau tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), 5118ce0a45fSMarc-André Lureau link_args: config_host['TASN1_LIBS'].split()) 5128ce0a45fSMarc-André Lureauendif 513af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false, 514af04e89dSMarc-André Lureau method: 'pkg-config', static: enable_static) 515a81df1b6SPaolo Bonzini 5163909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid') 5173909def8SMarc-André Lureau 518aa087962SPaolo Bonzini# Malloc tests 519aa087962SPaolo Bonzini 520aa087962SPaolo Bonzinimalloc = [] 521aa087962SPaolo Bonziniif get_option('malloc') == 'system' 522aa087962SPaolo Bonzini has_malloc_trim = \ 523aa087962SPaolo Bonzini not get_option('malloc_trim').disabled() and \ 524aa087962SPaolo Bonzini cc.links('''#include <malloc.h> 525aa087962SPaolo Bonzini int main(void) { malloc_trim(0); return 0; }''') 526aa087962SPaolo Bonzinielse 527aa087962SPaolo Bonzini has_malloc_trim = false 528aa087962SPaolo Bonzini malloc = cc.find_library(get_option('malloc'), required: true) 529aa087962SPaolo Bonziniendif 530aa087962SPaolo Bonziniif not has_malloc_trim and get_option('malloc_trim').enabled() 531aa087962SPaolo Bonzini if get_option('malloc') == 'system' 532aa087962SPaolo Bonzini error('malloc_trim not available on this platform.') 533aa087962SPaolo Bonzini else 534aa087962SPaolo Bonzini error('malloc_trim not available with non-libc memory allocator') 535aa087962SPaolo Bonzini endif 536aa087962SPaolo Bonziniendif 537aa087962SPaolo Bonzini 538859aef02SPaolo Bonzini# Create config-host.h 539859aef02SPaolo Bonzini 540b4e312e9SPaolo Bonziniconfig_host_data.set('CONFIG_COCOA', cocoa.found()) 541f01496a3SPaolo Bonziniconfig_host_data.set('CONFIG_LIBUDEV', libudev.found()) 5426ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH', mpathpersist.found()) 5436ec0e15dSPaolo Bonziniconfig_host_data.set('CONFIG_MPATH_NEW_API', mpathpersist_new_api) 54435be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found()) 54535be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) 546a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found()) 547a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) 548a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found()) 549a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found()) 5504113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) 551af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found()) 5523909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid) 553aa087962SPaolo Bonziniconfig_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim) 554859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version())) 555859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]) 556859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1]) 557859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]) 558859aef02SPaolo Bonzini 559859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST'] 560f4f5ed2cSPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'bindir', 'prefix', 'qemu_confdir', 'qemu_datadir', 561859aef02SPaolo Bonzini 'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir', 562f4f5ed2cSPaolo Bonzini 'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath', 'sysconfdir'] 563859aef02SPaolo Bonziniforeach k, v: config_host 564859aef02SPaolo Bonzini if arrays.contains(k) 565859aef02SPaolo Bonzini if v != '' 566859aef02SPaolo Bonzini v = '"' + '", "'.join(v.split()) + '", ' 567859aef02SPaolo Bonzini endif 568859aef02SPaolo Bonzini config_host_data.set(k, v) 569859aef02SPaolo Bonzini elif k == 'ARCH' 570859aef02SPaolo Bonzini config_host_data.set('HOST_' + v.to_upper(), 1) 571859aef02SPaolo Bonzini elif strings.contains(k) 572859aef02SPaolo Bonzini if not k.startswith('CONFIG_') 573859aef02SPaolo Bonzini k = 'CONFIG_' + k.to_upper() 574859aef02SPaolo Bonzini endif 575859aef02SPaolo Bonzini config_host_data.set_quoted(k, v) 576859aef02SPaolo Bonzini elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_') 577859aef02SPaolo Bonzini config_host_data.set(k, v == 'y' ? 1 : v) 578859aef02SPaolo Bonzini endif 579859aef02SPaolo Bonziniendforeach 580859aef02SPaolo Bonzini 5812becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 58205512f55SPaolo Bonziniconfig_all = {} 583a98006bcSPaolo Bonziniconfig_all_devices = {} 584ca0fc784SPaolo Bonziniconfig_all_disas = {} 5852becc36aSPaolo Bonziniconfig_devices_mak_list = [] 5862becc36aSPaolo Bonziniconfig_devices_h = {} 587859aef02SPaolo Bonziniconfig_target_h = {} 5882becc36aSPaolo Bonziniconfig_target_mak = {} 589ca0fc784SPaolo Bonzini 590ca0fc784SPaolo Bonzinidisassemblers = { 591ca0fc784SPaolo Bonzini 'alpha' : ['CONFIG_ALPHA_DIS'], 592ca0fc784SPaolo Bonzini 'arm' : ['CONFIG_ARM_DIS'], 593ca0fc784SPaolo Bonzini 'avr' : ['CONFIG_AVR_DIS'], 594ca0fc784SPaolo Bonzini 'cris' : ['CONFIG_CRIS_DIS'], 595ca0fc784SPaolo Bonzini 'hppa' : ['CONFIG_HPPA_DIS'], 596ca0fc784SPaolo Bonzini 'i386' : ['CONFIG_I386_DIS'], 597ca0fc784SPaolo Bonzini 'x86_64' : ['CONFIG_I386_DIS'], 598ca0fc784SPaolo Bonzini 'x32' : ['CONFIG_I386_DIS'], 599ca0fc784SPaolo Bonzini 'lm32' : ['CONFIG_LM32_DIS'], 600ca0fc784SPaolo Bonzini 'm68k' : ['CONFIG_M68K_DIS'], 601ca0fc784SPaolo Bonzini 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], 602ca0fc784SPaolo Bonzini 'mips' : ['CONFIG_MIPS_DIS'], 603ca0fc784SPaolo Bonzini 'moxie' : ['CONFIG_MOXIE_DIS'], 604ca0fc784SPaolo Bonzini 'nios2' : ['CONFIG_NIOS2_DIS'], 605ca0fc784SPaolo Bonzini 'or1k' : ['CONFIG_OPENRISC_DIS'], 606ca0fc784SPaolo Bonzini 'ppc' : ['CONFIG_PPC_DIS'], 607ca0fc784SPaolo Bonzini 'riscv' : ['CONFIG_RISCV_DIS'], 608ca0fc784SPaolo Bonzini 'rx' : ['CONFIG_RX_DIS'], 609ca0fc784SPaolo Bonzini 's390' : ['CONFIG_S390_DIS'], 610ca0fc784SPaolo Bonzini 'sh4' : ['CONFIG_SH4_DIS'], 611ca0fc784SPaolo Bonzini 'sparc' : ['CONFIG_SPARC_DIS'], 612ca0fc784SPaolo Bonzini 'xtensa' : ['CONFIG_XTENSA_DIS'], 613ca0fc784SPaolo Bonzini} 614ca0fc784SPaolo Bonziniif link_language == 'cpp' 615ca0fc784SPaolo Bonzini disassemblers += { 616ca0fc784SPaolo Bonzini 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], 617ca0fc784SPaolo Bonzini 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], 618ca0fc784SPaolo Bonzini 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], 619ca0fc784SPaolo Bonzini } 620ca0fc784SPaolo Bonziniendif 621ca0fc784SPaolo Bonzini 6222becc36aSPaolo Bonzinikconfig_external_symbols = [ 6232becc36aSPaolo Bonzini 'CONFIG_KVM', 6242becc36aSPaolo Bonzini 'CONFIG_XEN', 6252becc36aSPaolo Bonzini 'CONFIG_TPM', 6262becc36aSPaolo Bonzini 'CONFIG_SPICE', 6272becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 6282becc36aSPaolo Bonzini 'CONFIG_OPENGL', 6292becc36aSPaolo Bonzini 'CONFIG_X11', 6302becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 63140bc0ca9SLaurent Vivier 'CONFIG_VHOST_VDPA', 6322becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 6332becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 6342becc36aSPaolo Bonzini 'CONFIG_LINUX', 6352becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 6362becc36aSPaolo Bonzini] 637859aef02SPaolo Bonziniignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS'] 638ca0fc784SPaolo Bonzini 63905512f55SPaolo Bonziniaccel_symbols = [ 64005512f55SPaolo Bonzini 'CONFIG_KVM', 64105512f55SPaolo Bonzini 'CONFIG_HAX', 64205512f55SPaolo Bonzini 'CONFIG_HVF', 64305512f55SPaolo Bonzini 'CONFIG_TCG', 64405512f55SPaolo Bonzini 'CONFIG_WHPX' 64505512f55SPaolo Bonzini] 64605512f55SPaolo Bonzini 647a81df1b6SPaolo Bonziniforeach target : target_dirs 648859aef02SPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') 649859aef02SPaolo Bonzini 650ca0fc784SPaolo Bonzini foreach k, v: disassemblers 651ca0fc784SPaolo Bonzini if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) 652ca0fc784SPaolo Bonzini foreach sym: v 653ca0fc784SPaolo Bonzini config_target += { sym: 'y' } 654ca0fc784SPaolo Bonzini config_all_disas += { sym: 'y' } 655ca0fc784SPaolo Bonzini endforeach 656ca0fc784SPaolo Bonzini endif 657ca0fc784SPaolo Bonzini endforeach 658ca0fc784SPaolo Bonzini 659859aef02SPaolo Bonzini config_target_data = configuration_data() 660859aef02SPaolo Bonzini foreach k, v: config_target 661859aef02SPaolo Bonzini if not k.startswith('TARGET_') and not k.startswith('CONFIG_') 662859aef02SPaolo Bonzini # do nothing 663859aef02SPaolo Bonzini elif ignored.contains(k) 664859aef02SPaolo Bonzini # do nothing 665859aef02SPaolo Bonzini elif k == 'TARGET_BASE_ARCH' 666859aef02SPaolo Bonzini config_target_data.set('TARGET_' + v.to_upper(), 1) 667859aef02SPaolo Bonzini elif k == 'TARGET_NAME' 668859aef02SPaolo Bonzini config_target_data.set_quoted(k, v) 669859aef02SPaolo Bonzini elif v == 'y' 670859aef02SPaolo Bonzini config_target_data.set(k, 1) 671859aef02SPaolo Bonzini else 672859aef02SPaolo Bonzini config_target_data.set(k, v) 673859aef02SPaolo Bonzini endif 674859aef02SPaolo Bonzini endforeach 67505512f55SPaolo Bonzini foreach sym: accel_symbols 67605512f55SPaolo Bonzini if config_target.has_key(sym) 67705512f55SPaolo Bonzini config_all += { sym: 'y' } 67805512f55SPaolo Bonzini endif 67905512f55SPaolo Bonzini endforeach 680859aef02SPaolo Bonzini config_target_h += {target: configure_file(output: target + '-config-target.h', 681859aef02SPaolo Bonzini configuration: config_target_data)} 6822becc36aSPaolo Bonzini 6832becc36aSPaolo Bonzini if target.endswith('-softmmu') 6842becc36aSPaolo Bonzini base_kconfig = [] 6852becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 686859aef02SPaolo Bonzini if sym in config_target or sym in config_host 6872becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 6882becc36aSPaolo Bonzini endif 6892becc36aSPaolo Bonzini endforeach 6902becc36aSPaolo Bonzini 6912becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 6922becc36aSPaolo Bonzini config_devices_mak = configure_file( 6932becc36aSPaolo Bonzini input: ['default-configs' / target + '.mak', 'Kconfig'], 6942becc36aSPaolo Bonzini output: config_devices_mak, 6952becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 6962becc36aSPaolo Bonzini capture: true, 6972becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 6982becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 6992becc36aSPaolo Bonzini base_kconfig]) 700859aef02SPaolo Bonzini 701859aef02SPaolo Bonzini config_devices_data = configuration_data() 702859aef02SPaolo Bonzini config_devices = keyval.load(config_devices_mak) 703859aef02SPaolo Bonzini foreach k, v: config_devices 704859aef02SPaolo Bonzini config_devices_data.set(k, 1) 705859aef02SPaolo Bonzini endforeach 7062becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 707859aef02SPaolo Bonzini config_devices_h += {target: configure_file(output: target + '-config-devices.h', 708859aef02SPaolo Bonzini configuration: config_devices_data)} 709859aef02SPaolo Bonzini config_target += config_devices 710a98006bcSPaolo Bonzini config_all_devices += config_devices 7112becc36aSPaolo Bonzini endif 7122becc36aSPaolo Bonzini config_target_mak += {target: config_target} 713a81df1b6SPaolo Bonziniendforeach 714a81df1b6SPaolo Bonzini 7152becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 7162becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 7172becc36aSPaolo Bonzini# static_library target. 7182becc36aSPaolo Bonzini# 7192becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 7202becc36aSPaolo Bonzini# build literally all source files, including devices only used by 7212becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 7222becc36aSPaolo Bonzini# pseudo symbol replaces it. 7232becc36aSPaolo Bonzini 72405512f55SPaolo Bonziniconfig_all += config_all_devices 7252becc36aSPaolo Bonziniconfig_all += config_host 7262becc36aSPaolo Bonziniconfig_all += config_all_disas 7272becc36aSPaolo Bonziniconfig_all += { 7282becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 7292becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 7302becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 7312becc36aSPaolo Bonzini 'CONFIG_ALL': true, 7322becc36aSPaolo Bonzini} 7332becc36aSPaolo Bonzini 7348b18cdbfSRichard Henderson# Submodules 7358b18cdbfSRichard Henderson 7368b18cdbfSRichard Hendersoncapstone = not_found 7378b18cdbfSRichard Hendersoncapstone_opt = get_option('capstone') 7388b18cdbfSRichard Hendersonif capstone_opt in ['enabled', 'auto', 'system'] 7398b18cdbfSRichard Henderson have_internal = fs.exists(meson.current_source_dir() / 'capstone/Makefile') 740bcf36862SRichard Henderson capstone = dependency('capstone', version: '>=4.0', 741bcf36862SRichard Henderson static: enable_static, method: 'pkg-config', 7428b18cdbfSRichard Henderson required: capstone_opt == 'system' or 7438b18cdbfSRichard Henderson capstone_opt == 'enabled' and not have_internal) 7448b18cdbfSRichard Henderson if capstone.found() 7458b18cdbfSRichard Henderson capstone_opt = 'system' 7468b18cdbfSRichard Henderson elif have_internal 7478b18cdbfSRichard Henderson capstone_opt = 'internal' 7488b18cdbfSRichard Henderson else 7498b18cdbfSRichard Henderson capstone_opt = 'disabled' 7508b18cdbfSRichard Henderson endif 7518b18cdbfSRichard Hendersonendif 7528b18cdbfSRichard Hendersonif capstone_opt == 'internal' 7538b18cdbfSRichard Henderson capstone_data = configuration_data() 7548b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_USE_SYS_DYN_MEM', '1') 7558b18cdbfSRichard Henderson 7568b18cdbfSRichard Henderson capstone_files = files( 7578b18cdbfSRichard Henderson 'capstone/cs.c', 7588b18cdbfSRichard Henderson 'capstone/MCInst.c', 7598b18cdbfSRichard Henderson 'capstone/MCInstrDesc.c', 7608b18cdbfSRichard Henderson 'capstone/MCRegisterInfo.c', 7618b18cdbfSRichard Henderson 'capstone/SStream.c', 7628b18cdbfSRichard Henderson 'capstone/utils.c' 7638b18cdbfSRichard Henderson ) 7648b18cdbfSRichard Henderson 7658b18cdbfSRichard Henderson if 'CONFIG_ARM_DIS' in config_all_disas 7668b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_ARM', '1') 7678b18cdbfSRichard Henderson capstone_files += files( 7688b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMDisassembler.c', 7698b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMInstPrinter.c', 7708b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMMapping.c', 7718b18cdbfSRichard Henderson 'capstone/arch/ARM/ARMModule.c' 7728b18cdbfSRichard Henderson ) 7738b18cdbfSRichard Henderson endif 7748b18cdbfSRichard Henderson 7758b18cdbfSRichard Henderson # FIXME: This config entry currently depends on a c++ compiler. 7768b18cdbfSRichard Henderson # Which is needed for building libvixl, but not for capstone. 7778b18cdbfSRichard Henderson if 'CONFIG_ARM_A64_DIS' in config_all_disas 7788b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_ARM64', '1') 7798b18cdbfSRichard Henderson capstone_files += files( 7808b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64BaseInfo.c', 7818b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64Disassembler.c', 7828b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64InstPrinter.c', 7838b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64Mapping.c', 7848b18cdbfSRichard Henderson 'capstone/arch/AArch64/AArch64Module.c' 7858b18cdbfSRichard Henderson ) 7868b18cdbfSRichard Henderson endif 7878b18cdbfSRichard Henderson 7888b18cdbfSRichard Henderson if 'CONFIG_PPC_DIS' in config_all_disas 7898b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_POWERPC', '1') 7908b18cdbfSRichard Henderson capstone_files += files( 7918b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCDisassembler.c', 7928b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCInstPrinter.c', 7938b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCMapping.c', 7948b18cdbfSRichard Henderson 'capstone/arch/PowerPC/PPCModule.c' 7958b18cdbfSRichard Henderson ) 7968b18cdbfSRichard Henderson endif 7978b18cdbfSRichard Henderson 7988b18cdbfSRichard Henderson if 'CONFIG_I386_DIS' in config_all_disas 7998b18cdbfSRichard Henderson capstone_data.set('CAPSTONE_HAS_X86', 1) 8008b18cdbfSRichard Henderson capstone_files += files( 8018b18cdbfSRichard Henderson 'capstone/arch/X86/X86Disassembler.c', 8028b18cdbfSRichard Henderson 'capstone/arch/X86/X86DisassemblerDecoder.c', 8038b18cdbfSRichard Henderson 'capstone/arch/X86/X86ATTInstPrinter.c', 8048b18cdbfSRichard Henderson 'capstone/arch/X86/X86IntelInstPrinter.c', 805eef20e40SRichard Henderson 'capstone/arch/X86/X86InstPrinterCommon.c', 8068b18cdbfSRichard Henderson 'capstone/arch/X86/X86Mapping.c', 8078b18cdbfSRichard Henderson 'capstone/arch/X86/X86Module.c' 8088b18cdbfSRichard Henderson ) 8098b18cdbfSRichard Henderson endif 8108b18cdbfSRichard Henderson 8118b18cdbfSRichard Henderson configure_file(output: 'capstone-defs.h', configuration: capstone_data) 8128b18cdbfSRichard Henderson 8138b18cdbfSRichard Henderson capstone_cargs = [ 8148b18cdbfSRichard Henderson # FIXME: There does not seem to be a way to completely replace the c_args 8158b18cdbfSRichard Henderson # that come from add_project_arguments() -- we can only add to them. 8168b18cdbfSRichard Henderson # So: disable all warnings with a big hammer. 8178b18cdbfSRichard Henderson '-Wno-error', '-w', 8188b18cdbfSRichard Henderson 8198b18cdbfSRichard Henderson # Include all configuration defines via a header file, which will wind up 8208b18cdbfSRichard Henderson # as a dependency on the object file, and thus changes here will result 8218b18cdbfSRichard Henderson # in a rebuild. 8228b18cdbfSRichard Henderson '-include', 'capstone-defs.h' 8238b18cdbfSRichard Henderson ] 8248b18cdbfSRichard Henderson 8258b18cdbfSRichard Henderson libcapstone = static_library('capstone', 8268b18cdbfSRichard Henderson sources: capstone_files, 8278b18cdbfSRichard Henderson c_args: capstone_cargs, 8288b18cdbfSRichard Henderson include_directories: 'capstone/include') 8298b18cdbfSRichard Henderson capstone = declare_dependency(link_with: libcapstone, 830eef20e40SRichard Henderson include_directories: 'capstone/include/capstone') 8318b18cdbfSRichard Hendersonendif 8328b18cdbfSRichard Hendersonconfig_host_data.set('CONFIG_CAPSTONE', capstone.found()) 8338b18cdbfSRichard Henderson 8348b18cdbfSRichard Hendersongenh += configure_file(output: 'config-host.h', configuration: config_host_data) 8358b18cdbfSRichard Henderson 836a81df1b6SPaolo Bonzini# Generators 837a81df1b6SPaolo Bonzini 8383f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 839650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 840a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 841a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 842a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 843a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 844a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 845a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 846a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 847a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 848a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 849a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 850a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 851a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 852a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 853a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 854a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 855a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 856a81df1b6SPaolo Bonzini] 857a81df1b6SPaolo Bonzini 858a81df1b6SPaolo Bonzinitracetool = [ 859a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 860a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 861a81df1b6SPaolo Bonzini] 862a81df1b6SPaolo Bonzini 8632c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 8642c273f32SMarc-André Lureau meson.current_source_dir(), 865859aef02SPaolo Bonzini config_host['PKGVERSION'], meson.project_version()] 8662c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 8672c273f32SMarc-André Lureau output: 'qemu-version.h', 8682c273f32SMarc-André Lureau command: qemu_version_cmd, 8692c273f32SMarc-André Lureau capture: true, 8702c273f32SMarc-André Lureau build_by_default: true, 8712c273f32SMarc-André Lureau build_always_stale: true) 8722c273f32SMarc-André Lureaugenh += qemu_version 8732c273f32SMarc-André Lureau 8743f885659SMarc-André Lureauhxdep = [] 8753f885659SMarc-André Lureauhx_headers = [ 8763f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 8773f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 8783f885659SMarc-André Lureau] 8793f885659SMarc-André Lureauif have_system 8803f885659SMarc-André Lureau hx_headers += [ 8813f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 8823f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 8833f885659SMarc-André Lureau ] 8843f885659SMarc-André Lureauendif 8853f885659SMarc-André Lureauforeach d : hx_headers 886b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 8873f885659SMarc-André Lureau input: files(d[0]), 8883f885659SMarc-André Lureau output: d[1], 8893f885659SMarc-André Lureau capture: true, 8903f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 8913f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 8923f885659SMarc-André Lureauendforeach 8933f885659SMarc-André Lureaugenh += hxdep 8943f885659SMarc-André Lureau 895eb937365SPeter MaydellSPHINX_ARGS = [config_host['SPHINX_BUILD'], 896eb937365SPeter Maydell '-Dversion=' + meson.project_version(), 897eb937365SPeter Maydell '-Drelease=' + config_host['PKGVERSION']] 898eb937365SPeter Maydell 899eb937365SPeter Maydellif get_option('werror') 900eb937365SPeter Maydell SPHINX_ARGS += [ '-W' ] 901eb937365SPeter Maydellendif 902eb937365SPeter Maydell 903b3f4830aSPeter Maydellsphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py', 904b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/hxtool.py', 905b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kerneldoc.py', 906b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kernellog.py', 907b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qapidoc.py', 908b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qmp_lexer.py', 909b3f4830aSPeter Maydell qapi_gen_depends ] 910b3f4830aSPeter Maydell 911a81df1b6SPaolo Bonzini# Collect sourcesets. 912a81df1b6SPaolo Bonzini 913a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 914a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 915a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 9163154fee4SMarc-André Lureaublock_ss = ss.source_set() 9174a96337dSPaolo Bonziniblockdev_ss = ss.source_set() 918ff219dcaSPaolo Bonziniqmp_ss = ss.source_set() 9192becc36aSPaolo Bonzinicommon_ss = ss.source_set() 9202becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 9212becc36aSPaolo Bonziniuser_ss = ss.source_set() 9222becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 9232becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 9242becc36aSPaolo Bonzinispecific_ss = ss.source_set() 92564ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set() 9262becc36aSPaolo Bonzini 9273154fee4SMarc-André Lureaumodules = {} 9282becc36aSPaolo Bonzinihw_arch = {} 9292becc36aSPaolo Bonzinitarget_arch = {} 9302becc36aSPaolo Bonzinitarget_softmmu_arch = {} 931a81df1b6SPaolo Bonzini 932a81df1b6SPaolo Bonzini############### 933a81df1b6SPaolo Bonzini# Trace files # 934a81df1b6SPaolo Bonzini############### 935a81df1b6SPaolo Bonzini 936c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once 937c9322ab5SMarc-André Lureau# we have those 938a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 939a81df1b6SPaolo Bonzini 'accel/kvm', 940a81df1b6SPaolo Bonzini 'accel/tcg', 941a81df1b6SPaolo Bonzini 'crypto', 942a81df1b6SPaolo Bonzini 'monitor', 943a81df1b6SPaolo Bonzini] 944a81df1b6SPaolo Bonziniif have_user 945a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 946a81df1b6SPaolo Bonziniendif 947a81df1b6SPaolo Bonziniif have_block 948a81df1b6SPaolo Bonzini trace_events_subdirs += [ 949a81df1b6SPaolo Bonzini 'authz', 950a81df1b6SPaolo Bonzini 'block', 951a81df1b6SPaolo Bonzini 'io', 952a81df1b6SPaolo Bonzini 'nbd', 953a81df1b6SPaolo Bonzini 'scsi', 954a81df1b6SPaolo Bonzini ] 955a81df1b6SPaolo Bonziniendif 956a81df1b6SPaolo Bonziniif have_system 957a81df1b6SPaolo Bonzini trace_events_subdirs += [ 958a81df1b6SPaolo Bonzini 'audio', 959a81df1b6SPaolo Bonzini 'backends', 960a81df1b6SPaolo Bonzini 'backends/tpm', 961a81df1b6SPaolo Bonzini 'chardev', 962a81df1b6SPaolo Bonzini 'hw/9pfs', 963a81df1b6SPaolo Bonzini 'hw/acpi', 964a81df1b6SPaolo Bonzini 'hw/alpha', 965a81df1b6SPaolo Bonzini 'hw/arm', 966a81df1b6SPaolo Bonzini 'hw/audio', 967a81df1b6SPaolo Bonzini 'hw/block', 968a81df1b6SPaolo Bonzini 'hw/block/dataplane', 969a81df1b6SPaolo Bonzini 'hw/char', 970a81df1b6SPaolo Bonzini 'hw/display', 971a81df1b6SPaolo Bonzini 'hw/dma', 972a81df1b6SPaolo Bonzini 'hw/hppa', 973a81df1b6SPaolo Bonzini 'hw/hyperv', 974a81df1b6SPaolo Bonzini 'hw/i2c', 975a81df1b6SPaolo Bonzini 'hw/i386', 976a81df1b6SPaolo Bonzini 'hw/i386/xen', 977a81df1b6SPaolo Bonzini 'hw/ide', 978a81df1b6SPaolo Bonzini 'hw/input', 979a81df1b6SPaolo Bonzini 'hw/intc', 980a81df1b6SPaolo Bonzini 'hw/isa', 981a81df1b6SPaolo Bonzini 'hw/mem', 982a81df1b6SPaolo Bonzini 'hw/mips', 983a81df1b6SPaolo Bonzini 'hw/misc', 984a81df1b6SPaolo Bonzini 'hw/misc/macio', 985a81df1b6SPaolo Bonzini 'hw/net', 986a81df1b6SPaolo Bonzini 'hw/nvram', 987a81df1b6SPaolo Bonzini 'hw/pci', 988a81df1b6SPaolo Bonzini 'hw/pci-host', 989a81df1b6SPaolo Bonzini 'hw/ppc', 990a81df1b6SPaolo Bonzini 'hw/rdma', 991a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 992a81df1b6SPaolo Bonzini 'hw/rtc', 993a81df1b6SPaolo Bonzini 'hw/s390x', 994a81df1b6SPaolo Bonzini 'hw/scsi', 995a81df1b6SPaolo Bonzini 'hw/sd', 996a81df1b6SPaolo Bonzini 'hw/sparc', 997a81df1b6SPaolo Bonzini 'hw/sparc64', 998a81df1b6SPaolo Bonzini 'hw/ssi', 999a81df1b6SPaolo Bonzini 'hw/timer', 1000a81df1b6SPaolo Bonzini 'hw/tpm', 1001a81df1b6SPaolo Bonzini 'hw/usb', 1002a81df1b6SPaolo Bonzini 'hw/vfio', 1003a81df1b6SPaolo Bonzini 'hw/virtio', 1004a81df1b6SPaolo Bonzini 'hw/watchdog', 1005a81df1b6SPaolo Bonzini 'hw/xen', 1006a81df1b6SPaolo Bonzini 'hw/gpio', 1007a81df1b6SPaolo Bonzini 'migration', 1008a81df1b6SPaolo Bonzini 'net', 10098b7a5507SPhilippe Mathieu-Daudé 'softmmu', 1010a81df1b6SPaolo Bonzini 'ui', 1011a81df1b6SPaolo Bonzini ] 1012a81df1b6SPaolo Bonziniendif 1013a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 1014a81df1b6SPaolo Bonzini 'hw/core', 1015a81df1b6SPaolo Bonzini 'qapi', 1016a81df1b6SPaolo Bonzini 'qom', 1017a81df1b6SPaolo Bonzini 'target/arm', 1018a81df1b6SPaolo Bonzini 'target/hppa', 1019a81df1b6SPaolo Bonzini 'target/i386', 1020a81df1b6SPaolo Bonzini 'target/mips', 1021a81df1b6SPaolo Bonzini 'target/ppc', 1022a81df1b6SPaolo Bonzini 'target/riscv', 1023a81df1b6SPaolo Bonzini 'target/s390x', 1024a81df1b6SPaolo Bonzini 'target/sparc', 1025a81df1b6SPaolo Bonzini 'util', 1026a81df1b6SPaolo Bonzini] 1027a81df1b6SPaolo Bonzini 1028a81df1b6SPaolo Bonzinisubdir('qapi') 1029a81df1b6SPaolo Bonzinisubdir('qobject') 1030a81df1b6SPaolo Bonzinisubdir('stubs') 1031a81df1b6SPaolo Bonzinisubdir('trace') 1032a81df1b6SPaolo Bonzinisubdir('util') 10335582c58fSMarc-André Lureausubdir('qom') 10345582c58fSMarc-André Lureausubdir('authz') 1035a81df1b6SPaolo Bonzinisubdir('crypto') 10362d78b56eSMarc-André Lureausubdir('ui') 1037a81df1b6SPaolo Bonzini 10383154fee4SMarc-André Lureau 10393154fee4SMarc-André Lureauif enable_modules 10403154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 10413154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 10423154fee4SMarc-André Lureauendif 10433154fee4SMarc-André Lureau 1044a81df1b6SPaolo Bonzini# Build targets from sourcesets 1045a81df1b6SPaolo Bonzini 10462becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 1047a81df1b6SPaolo Bonzini 1048a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 10492becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 1050a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 1051a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 1052aa087962SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket, malloc]) 1053a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 105404c6f1e7SMarc-André Lureau sources: genh + version_res) 1055a81df1b6SPaolo Bonzini 1056abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'), 1057abff1abfSPaolo Bonzini output: 'decode-@BASENAME@.c.inc', 1058abff1abfSPaolo Bonzini arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@']) 1059abff1abfSPaolo Bonzini 1060478e943fSPaolo Bonzinisubdir('audio') 10617fcfd456SMarc-André Lureausubdir('io') 1062848e8ff6SMarc-André Lureausubdir('chardev') 1063ec0d5893SMarc-André Lureausubdir('fsdev') 1064abff1abfSPaolo Bonzinisubdir('libdecnumber') 1065d3b18480SMarc-André Lureausubdir('target') 1066708eab42SMarc-André Lureausubdir('dump') 1067ec0d5893SMarc-André Lureau 10685e5733e5SMarc-André Lureaublock_ss.add(files( 10695e5733e5SMarc-André Lureau 'block.c', 10705e5733e5SMarc-André Lureau 'blockjob.c', 10715e5733e5SMarc-André Lureau 'job.c', 10725e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 10735e5733e5SMarc-André Lureau)) 10745e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 10755e5733e5SMarc-André Lureau 10765e5733e5SMarc-André Lureausubdir('nbd') 10775e5733e5SMarc-André Lureausubdir('scsi') 10785e5733e5SMarc-André Lureausubdir('block') 10795e5733e5SMarc-André Lureau 10804a96337dSPaolo Bonziniblockdev_ss.add(files( 10814a96337dSPaolo Bonzini 'blockdev.c', 10824a96337dSPaolo Bonzini 'blockdev-nbd.c', 10834a96337dSPaolo Bonzini 'iothread.c', 10844a96337dSPaolo Bonzini 'job-qmp.c', 10854a96337dSPaolo Bonzini)) 10864a96337dSPaolo Bonzini 10874a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 10884a96337dSPaolo Bonzini# os-win32.c does not 10894a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 10904a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 10914a96337dSPaolo Bonzini 10924a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 10934a96337dSPaolo Bonzinisoftmmu_ss.add(files( 10944a96337dSPaolo Bonzini 'bootdevice.c', 10954a96337dSPaolo Bonzini 'dma-helpers.c', 10964a96337dSPaolo Bonzini 'qdev-monitor.c', 10974a96337dSPaolo Bonzini), sdl) 10984a96337dSPaolo Bonzini 10994a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c')) 11004a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp]) 11014a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')]) 11024a96337dSPaolo Bonzini 11034a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 11044a96337dSPaolo Bonzini 11055d3ea0e1SPaolo Bonzinisubdir('softmmu') 1106c9322ab5SMarc-André Lureau 1107*f343346bSRichard Hendersoncommon_ss.add(capstone) 1108c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl) 1109c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c')) 1110c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files( 1111c9322ab5SMarc-André Lureau 'fpu/softfloat.c', 1112c9322ab5SMarc-André Lureau 'tcg/optimize.c', 1113c9322ab5SMarc-André Lureau 'tcg/tcg-common.c', 1114c9322ab5SMarc-André Lureau 'tcg/tcg-op-gvec.c', 1115c9322ab5SMarc-André Lureau 'tcg/tcg-op-vec.c', 1116c9322ab5SMarc-André Lureau 'tcg/tcg-op.c', 1117c9322ab5SMarc-André Lureau 'tcg/tcg.c', 1118c9322ab5SMarc-André Lureau)) 1119c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c')) 1120c9322ab5SMarc-André Lureau 1121ab318051SMarc-André Lureausubdir('backends') 1122c574e161SMarc-André Lureausubdir('disas') 112355166230SMarc-André Lureausubdir('migration') 1124ff219dcaSPaolo Bonzinisubdir('monitor') 1125cdaf0722SMarc-André Lureausubdir('net') 112617ef2af6SMarc-André Lureausubdir('replay') 1127582ea95fSMarc-André Lureausubdir('hw') 11281a82878aSMarc-André Lureausubdir('accel') 1129f556b4a1SPaolo Bonzinisubdir('plugins') 1130b309c321SMarc-André Lureausubdir('bsd-user') 11313a30446aSMarc-André Lureausubdir('linux-user') 11323a30446aSMarc-André Lureau 1133b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c')) 1134b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss) 1135b309c321SMarc-André Lureau 11363a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c')) 11373a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss) 11385d3ea0e1SPaolo Bonzini 1139a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 1140a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 114164ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz') 1142a2ce7dbdSPaolo Bonzini 11433154fee4SMarc-André Lureaublock_mods = [] 11443154fee4SMarc-André Lureausoftmmu_mods = [] 11453154fee4SMarc-André Lureauforeach d, list : modules 11463154fee4SMarc-André Lureau foreach m, module_ss : list 11473154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 11483e292c51SGerd Hoffmann module_ss = module_ss.apply(config_all, strict: false) 11493154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 11503154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 11513154fee4SMarc-André Lureau if d == 'block' 11523154fee4SMarc-André Lureau block_mods += sl 11533154fee4SMarc-André Lureau else 11543154fee4SMarc-André Lureau softmmu_mods += sl 11553154fee4SMarc-André Lureau endif 11563154fee4SMarc-André Lureau else 11573154fee4SMarc-André Lureau if d == 'block' 11583154fee4SMarc-André Lureau block_ss.add_all(module_ss) 11593154fee4SMarc-André Lureau else 11603154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 11613154fee4SMarc-André Lureau endif 11623154fee4SMarc-André Lureau endif 11633154fee4SMarc-André Lureau endforeach 11643154fee4SMarc-André Lureauendforeach 11653154fee4SMarc-André Lureau 11663154fee4SMarc-André Lureaunm = find_program('nm') 1167604f3e4eSYonggang Luoundefsym = find_program('scripts/undefsym.py') 11683154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 11693154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 11703154fee4SMarc-André Lureau capture: true, 11713154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 11723154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 11733154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 11743154fee4SMarc-André Lureau capture: true, 11753154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 11763154fee4SMarc-André Lureau 11775e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 11785e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 11795e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 11805e5733e5SMarc-André Lureau link_depends: block_syms, 11815e5733e5SMarc-André Lureau name_suffix: 'fa', 11825e5733e5SMarc-André Lureau build_by_default: false) 11835e5733e5SMarc-André Lureau 11845e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 1185b7c70bf2SMarc-André Lureau link_args: '@block.syms', 1186b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 11875e5733e5SMarc-André Lureau 1188ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 1189ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 1190ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 1191ff219dcaSPaolo Bonzini name_suffix: 'fa', 1192ff219dcaSPaolo Bonzini build_by_default: false) 1193ff219dcaSPaolo Bonzini 1194ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 1195ff219dcaSPaolo Bonzini 11963154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 11973154fee4SMarc-André Lureau shared_module(m.name(), 11983154fee4SMarc-André Lureau name_prefix: '', 11993154fee4SMarc-André Lureau link_whole: m, 12003154fee4SMarc-André Lureau install: true, 12013154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 12023154fee4SMarc-André Lureauendforeach 12033154fee4SMarc-André Lureau 120464ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp) 120564ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil) 120664ed6f92SPaolo Bonzini 120764ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss]) 12082becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 12092becc36aSPaolo Bonzini 12102becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 12112becc36aSPaolo Bonzinicommon_all = static_library('common', 12122becc36aSPaolo Bonzini build_by_default: false, 12132becc36aSPaolo Bonzini sources: common_all.sources() + genh, 12142becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 12152becc36aSPaolo Bonzini name_suffix: 'fa') 12162becc36aSPaolo Bonzini 1217c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh') 1218c9322ab5SMarc-André Lureau 1219fd5eef85SPaolo Bonziniemulators = {} 12202becc36aSPaolo Bonziniforeach target : target_dirs 12212becc36aSPaolo Bonzini config_target = config_target_mak[target] 12222becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 12232becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 1224859aef02SPaolo Bonzini arch_srcs = [config_target_h[target]] 122564ed6f92SPaolo Bonzini arch_deps = [] 122664ed6f92SPaolo Bonzini c_args = ['-DNEED_CPU_H', 122764ed6f92SPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 122864ed6f92SPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] 122964ed6f92SPaolo Bonzini link_args = [] 12302becc36aSPaolo Bonzini 1231859aef02SPaolo Bonzini config_target += config_host 12322becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 12332becc36aSPaolo Bonzini if targetos == 'linux' 12342becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 12352becc36aSPaolo Bonzini endif 12362becc36aSPaolo Bonzini if target.endswith('-softmmu') 12372becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 12382becc36aSPaolo Bonzini target_type='system' 1239abff1abfSPaolo Bonzini t = target_softmmu_arch[arch].apply(config_target, strict: false) 1240abff1abfSPaolo Bonzini arch_srcs += t.sources() 124164ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1242abff1abfSPaolo Bonzini 12432c44220dSMarc-André Lureau hw_dir = target_name == 'sparc64' ? 'sparc64' : arch 12442c44220dSMarc-André Lureau hw = hw_arch[hw_dir].apply(config_target, strict: false) 12452c44220dSMarc-André Lureau arch_srcs += hw.sources() 124664ed6f92SPaolo Bonzini arch_deps += hw.dependencies() 12472c44220dSMarc-André Lureau 12482becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 124964ed6f92SPaolo Bonzini link_args += ['@block.syms', '@qemu.syms'] 12502becc36aSPaolo Bonzini else 12513a30446aSMarc-André Lureau abi = config_target['TARGET_ABI_DIR'] 12522becc36aSPaolo Bonzini target_type='user' 12532becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 12542becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 12552becc36aSPaolo Bonzini base_dir = 'linux-user' 12562becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 12572becc36aSPaolo Bonzini else 12582becc36aSPaolo Bonzini base_dir = 'bsd-user' 12592becc36aSPaolo Bonzini endif 12602becc36aSPaolo Bonzini target_inc += include_directories( 12612becc36aSPaolo Bonzini base_dir, 12623a30446aSMarc-André Lureau base_dir / abi, 12632becc36aSPaolo Bonzini ) 12643a30446aSMarc-André Lureau if 'CONFIG_LINUX_USER' in config_target 12653a30446aSMarc-André Lureau dir = base_dir / abi 12663a30446aSMarc-André Lureau arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c') 12673a30446aSMarc-André Lureau if config_target.has_key('TARGET_SYSTBL_ABI') 12683a30446aSMarc-André Lureau arch_srcs += \ 12693a30446aSMarc-André Lureau syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'], 12703a30446aSMarc-André Lureau extra_args : config_target['TARGET_SYSTBL_ABI']) 12713a30446aSMarc-André Lureau endif 12723a30446aSMarc-André Lureau endif 12732becc36aSPaolo Bonzini endif 12742becc36aSPaolo Bonzini 1275c9322ab5SMarc-André Lureau if 'TARGET_XML_FILES' in config_target 1276c9322ab5SMarc-André Lureau gdbstub_xml = custom_target(target + '-gdbstub-xml.c', 1277c9322ab5SMarc-André Lureau output: target + '-gdbstub-xml.c', 1278c9322ab5SMarc-André Lureau input: files(config_target['TARGET_XML_FILES'].split()), 1279c9322ab5SMarc-André Lureau command: [feature_to_c, '@INPUT@'], 1280c9322ab5SMarc-André Lureau capture: true) 1281c9322ab5SMarc-André Lureau arch_srcs += gdbstub_xml 1282c9322ab5SMarc-André Lureau endif 1283c9322ab5SMarc-André Lureau 1284abff1abfSPaolo Bonzini t = target_arch[arch].apply(config_target, strict: false) 1285abff1abfSPaolo Bonzini arch_srcs += t.sources() 128664ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1287abff1abfSPaolo Bonzini 12882becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 12892becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 129064ed6f92SPaolo Bonzini deps = target_common.dependencies() 12912becc36aSPaolo Bonzini 12922becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 12932becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 129464ed6f92SPaolo Bonzini arch_deps += target_specific.dependencies() 12952becc36aSPaolo Bonzini 129664ed6f92SPaolo Bonzini lib = static_library('qemu-' + target, 1297859aef02SPaolo Bonzini sources: arch_srcs + genh, 1298b7612f45SPaolo Bonzini dependencies: arch_deps, 12992becc36aSPaolo Bonzini objects: objects, 13002becc36aSPaolo Bonzini include_directories: target_inc, 130164ed6f92SPaolo Bonzini c_args: c_args, 130264ed6f92SPaolo Bonzini build_by_default: false, 13032becc36aSPaolo Bonzini name_suffix: 'fa') 130464ed6f92SPaolo Bonzini 130564ed6f92SPaolo Bonzini if target.endswith('-softmmu') 130664ed6f92SPaolo Bonzini execs = [{ 130764ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name, 130864ed6f92SPaolo Bonzini 'gui': false, 130964ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 131064ed6f92SPaolo Bonzini 'dependencies': [] 131164ed6f92SPaolo Bonzini }] 131235be72baSPaolo Bonzini if targetos == 'windows' and (sdl.found() or gtk.found()) 131364ed6f92SPaolo Bonzini execs += [{ 131464ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name + 'w', 131564ed6f92SPaolo Bonzini 'gui': true, 131664ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 131764ed6f92SPaolo Bonzini 'dependencies': [] 131864ed6f92SPaolo Bonzini }] 131964ed6f92SPaolo Bonzini endif 132064ed6f92SPaolo Bonzini if config_host.has_key('CONFIG_FUZZ') 132164ed6f92SPaolo Bonzini specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false) 132264ed6f92SPaolo Bonzini execs += [{ 132364ed6f92SPaolo Bonzini 'name': 'qemu-fuzz-' + target_name, 132464ed6f92SPaolo Bonzini 'gui': false, 132564ed6f92SPaolo Bonzini 'sources': specific_fuzz.sources(), 132664ed6f92SPaolo Bonzini 'dependencies': specific_fuzz.dependencies(), 132764ed6f92SPaolo Bonzini }] 132864ed6f92SPaolo Bonzini endif 132964ed6f92SPaolo Bonzini else 133064ed6f92SPaolo Bonzini execs = [{ 133164ed6f92SPaolo Bonzini 'name': 'qemu-' + target_name, 133264ed6f92SPaolo Bonzini 'gui': false, 133364ed6f92SPaolo Bonzini 'sources': [], 133464ed6f92SPaolo Bonzini 'dependencies': [] 133564ed6f92SPaolo Bonzini }] 133664ed6f92SPaolo Bonzini endif 133764ed6f92SPaolo Bonzini foreach exe: execs 1338fd5eef85SPaolo Bonzini emulators += {exe['name']: 1339fd5eef85SPaolo Bonzini executable(exe['name'], exe['sources'], 134064ed6f92SPaolo Bonzini install: true, 134164ed6f92SPaolo Bonzini c_args: c_args, 134264ed6f92SPaolo Bonzini dependencies: arch_deps + deps + exe['dependencies'], 134364ed6f92SPaolo Bonzini objects: lib.extract_all_objects(recursive: true), 134464ed6f92SPaolo Bonzini link_language: link_language, 134564ed6f92SPaolo Bonzini link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []), 134664ed6f92SPaolo Bonzini link_args: link_args, 134764ed6f92SPaolo Bonzini gui_app: exe['gui']) 1348fd5eef85SPaolo Bonzini } 134910e1d263SMarc-André Lureau 135010e1d263SMarc-André Lureau if 'CONFIG_TRACE_SYSTEMTAP' in config_host 135110e1d263SMarc-André Lureau foreach stp: [ 1352bd5f973aSStefan Hajnoczi {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, 1353bd5f973aSStefan Hajnoczi {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, 135410e1d263SMarc-André Lureau {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, 135510e1d263SMarc-André Lureau {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, 135610e1d263SMarc-André Lureau ] 1357bd5f973aSStefan Hajnoczi custom_target(exe['name'] + stp['ext'], 135810e1d263SMarc-André Lureau input: trace_events_all, 1359bd5f973aSStefan Hajnoczi output: exe['name'] + stp['ext'], 136010e1d263SMarc-André Lureau capture: true, 136110e1d263SMarc-André Lureau install: stp['install'], 1362ab4c0996SMarc-André Lureau install_dir: qemu_datadir / '../systemtap/tapset', 136310e1d263SMarc-André Lureau command: [ 136410e1d263SMarc-André Lureau tracetool, '--group=all', '--format=' + stp['fmt'], 136510e1d263SMarc-André Lureau '--binary=' + stp['bin'], 136610e1d263SMarc-André Lureau '--target-name=' + target_name, 136710e1d263SMarc-André Lureau '--target-type=' + target_type, 136810e1d263SMarc-André Lureau '--probe-prefix=qemu.' + target_type + '.' + target_name, 136910e1d263SMarc-André Lureau '@INPUT@', 137010e1d263SMarc-André Lureau ]) 137110e1d263SMarc-André Lureau endforeach 137210e1d263SMarc-André Lureau endif 137364ed6f92SPaolo Bonzini endforeach 13742becc36aSPaolo Bonziniendforeach 13752becc36aSPaolo Bonzini 1376931049b4SPaolo Bonzini# Other build targets 1377897b5afaSMarc-André Lureau 1378f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 1379f556b4a1SPaolo Bonzini install_headers('include/qemu/qemu-plugin.h') 1380f556b4a1SPaolo Bonziniendif 1381f556b4a1SPaolo Bonzini 1382f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 1383f15bff25SPaolo Bonzini subdir('qga') 1384f15bff25SPaolo Bonziniendif 1385f15bff25SPaolo Bonzini 13869755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled 13879755c94aSLaurent Vivier# when we don't build tools or system 13884113f4cfSLaurent Vivierif xkbcommon.found() 138928742467SMarc-André Lureau # used for the update-keymaps target, so include rules even if !have_tools 139028742467SMarc-André Lureau qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, 139128742467SMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: have_tools) 139228742467SMarc-André Lureauendif 139328742467SMarc-André Lureau 1394931049b4SPaolo Bonziniif have_tools 1395b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 1396b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 1397b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 1398b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1399b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 1400b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1401b7c70bf2SMarc-André Lureau 14027c58bb76SPaolo Bonzini subdir('storage-daemon') 1403a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 14041d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 1405a9c9727cSPaolo Bonzini 1406157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 1407157e7b13SMarc-André Lureau dependencies: qemuutil, 1408157e7b13SMarc-André Lureau install: true) 1409157e7b13SMarc-André Lureau 1410931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 1411931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 14122d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 1413ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 141432fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 141599650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 1416931049b4SPaolo Bonzini endif 14178f51e01cSMarc-André Lureau 14188f51e01cSMarc-André Lureau if targetos == 'linux' 14198f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 14208f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 14218f51e01cSMarc-André Lureau install: true, 14228f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 1423897b5afaSMarc-André Lureau 1424897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 1425897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 14266ec0e15dSPaolo Bonzini libcap_ng, mpathpersist], 1427897b5afaSMarc-André Lureau install: true) 14288f51e01cSMarc-André Lureau endif 14298f51e01cSMarc-André Lureau 14305ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 14315ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 14325ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 14335ee24e78SMarc-André Lureau endif 1434931049b4SPaolo Bonziniendif 1435931049b4SPaolo Bonzini 1436f5aa6320SMarc-André Lureausubdir('scripts') 14373f99cf57SPaolo Bonzinisubdir('tools') 1438bdcbea7aSMarc-André Lureausubdir('pc-bios') 1439ce1c1e7aSPaolo Bonzinisubdir('tests') 1440f8aa24eaSPaolo Bonzinisubdir('docs') 1441e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host 1442e8f3bd71SMarc-André Lureau subdir('po') 1443e8f3bd71SMarc-André Lureauendif 14443f99cf57SPaolo Bonzini 14458adfeba9SMarc-André Lureauif host_machine.system() == 'windows' 14468adfeba9SMarc-André Lureau nsis_cmd = [ 14478adfeba9SMarc-André Lureau find_program('scripts/nsis.py'), 14488adfeba9SMarc-André Lureau '@OUTPUT@', 14498adfeba9SMarc-André Lureau get_option('prefix'), 14508adfeba9SMarc-André Lureau meson.current_source_dir(), 14518adfeba9SMarc-André Lureau host_machine.cpu_family(), 14528adfeba9SMarc-André Lureau '--', 14538adfeba9SMarc-André Lureau '-DDISPLAYVERSION=' + meson.project_version(), 14548adfeba9SMarc-André Lureau ] 14558adfeba9SMarc-André Lureau if build_docs 14568adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_DOCUMENTATION=y' 14578adfeba9SMarc-André Lureau endif 14588adfeba9SMarc-André Lureau if 'CONFIG_GTK' in config_host 14598adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_GTK=y' 14608adfeba9SMarc-André Lureau endif 14618adfeba9SMarc-André Lureau 14628adfeba9SMarc-André Lureau nsis = custom_target('nsis', 14638adfeba9SMarc-André Lureau output: 'qemu-setup-' + meson.project_version() + '.exe', 14648adfeba9SMarc-André Lureau input: files('qemu.nsi'), 14658adfeba9SMarc-André Lureau build_always_stale: true, 14668adfeba9SMarc-André Lureau command: nsis_cmd + ['@INPUT@']) 14678adfeba9SMarc-André Lureau alias_target('installer', nsis) 14688adfeba9SMarc-André Lureauendif 14698adfeba9SMarc-André Lureau 1470f9332757SPaolo Bonzinisummary_info = {} 1471f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 1472f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 1473f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 1474f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 1475f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 1476f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 1477f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 1478f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 1479f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 1480f9332757SPaolo Bonziniif targetos != 'windows' 1481f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 1482b81efab7SMarc-André Lureau summary_info += {'Manual directory': get_option('mandir')} 1483f9332757SPaolo Bonzinielse 1484f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 1485f9332757SPaolo Bonziniendif 1486491e74c1SMarc-André Lureausummary_info += {'Doc directory': get_option('docdir')} 1487f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 1488f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 1489f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 1490f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 1491f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 1492f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 1493f9332757SPaolo Bonziniif link_language == 'cpp' 1494f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 1495f9332757SPaolo Bonzinielse 1496f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 1497f9332757SPaolo Bonziniendif 1498f9332757SPaolo Bonziniif targetos == 'darwin' 1499f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 1500f9332757SPaolo Bonziniendif 1501f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 1502f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 1503f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 1504f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 1505f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 1506f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 1507f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 1508f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 1509f9332757SPaolo Bonzini# TODO: add back version 1510f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 1511f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 1512f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 1513f9332757SPaolo Bonziniendif 1514f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 1515f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 1516f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 1517f9332757SPaolo Bonziniendif 1518f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 1519f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 1520f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 1521f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 1522f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 1523f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 1524f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 15253e8529ddSLaurent Viviersummary_info += {'static build': config_host.has_key('CONFIG_STATIC')} 1526f9332757SPaolo Bonziniif targetos == 'darwin' 1527f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 1528f9332757SPaolo Bonziniendif 1529f9332757SPaolo Bonzini# TODO: add back version 153035be72baSPaolo Bonzinisummary_info += {'SDL support': sdl.found()} 153135be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()} 1532f9332757SPaolo Bonzini# TODO: add back version 1533f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 1534f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 1535b7612f45SPaolo Bonzinisummary_info += {'pixman': pixman.found()} 1536f9332757SPaolo Bonzini# TODO: add back version 1537f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 1538f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 1539f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 1540f9332757SPaolo Bonzini# TODO: add back version 1541f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 1542f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 1543f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 1544f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1545f9332757SPaolo Bonziniendif 1546f9332757SPaolo Bonzini# TODO: add back version 1547f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 1548f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 1549f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1550f9332757SPaolo Bonziniendif 1551f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 1552f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 1553f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 1554f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 1555f9332757SPaolo Bonzini# TODO: add back version 1556f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 1557f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 1558f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 1559f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 1560f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 1561f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 1562f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 15636ec0e15dSPaolo Bonzinisummary_info += {'Multipath support': mpathpersist.found()} 1564a0b93237SPaolo Bonzinisummary_info += {'VNC support': vnc.found()} 1565a0b93237SPaolo Bonziniif vnc.found() 1566a0b93237SPaolo Bonzini summary_info += {'VNC SASL support': sasl.found()} 1567a0b93237SPaolo Bonzini summary_info += {'VNC JPEG support': jpeg.found()} 1568a0b93237SPaolo Bonzini summary_info += {'VNC PNG support': png.found()} 1569f9332757SPaolo Bonziniendif 1570f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 1571f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 1572f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 1573f9332757SPaolo Bonziniendif 1574f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 1575f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 1576f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 1577f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 1578f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 1579f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 1580f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 1581f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 1582f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 158305512f55SPaolo Bonzinisummary_info += {'KVM support': config_all.has_key('CONFIG_KVM')} 158405512f55SPaolo Bonzinisummary_info += {'HAX support': config_all.has_key('CONFIG_HAX')} 158505512f55SPaolo Bonzinisummary_info += {'HVF support': config_all.has_key('CONFIG_HVF')} 158605512f55SPaolo Bonzinisummary_info += {'WHPX support': config_all.has_key('CONFIG_WHPX')} 158705512f55SPaolo Bonzinisummary_info += {'TCG support': config_all.has_key('CONFIG_TCG')} 158805512f55SPaolo Bonziniif config_all.has_key('CONFIG_TCG') 158905512f55SPaolo Bonzini summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 159005512f55SPaolo Bonzini summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 159105512f55SPaolo Bonziniendif 1592aa087962SPaolo Bonzinisummary_info += {'malloc trim support': has_malloc_trim} 1593f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 1594f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 1595f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 1596f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 1597f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 1598f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 1599f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 1600f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 1601f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 1602f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 1603f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 1604f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 1605f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 1606f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 1607f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 1608f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 1609f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 1610f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 1611f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 1612f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 1613f9332757SPaolo Bonziniendif 1614f9332757SPaolo Bonzini# TODO: add back protocol and server version 1615f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 1616f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 1617f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 1618f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 16190a40bcb7SCésar Belleysummary_info += {'U2F support': u2f.found()} 1620f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 1621f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 1622f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 1623f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 1624f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 1625f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 1626f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 1627f9332757SPaolo Bonziniif targetos == 'windows' 1628f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 1629f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 1630f9332757SPaolo Bonzini endif 1631f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 1632f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 16334bad7c3bSStefan Hajnoczi summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI')} 1634f9332757SPaolo Bonziniendif 1635f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 1636f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 1637f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 1638f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 1639f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 1640f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 1641f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 1642bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 1643f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 1644f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 1645f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 1646f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 1647f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 1648f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 1649f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 1650f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 1651f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 1652f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 1653f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 1654aa087962SPaolo Bonzinisummary_info += {'memory allocator': get_option('malloc')} 1655f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 1656f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 1657f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 1658f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 1659f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 1660f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 1661f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 1662f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 1663f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 1664f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 1665f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 1666f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 16678b18cdbfSRichard Hendersonsummary_info += {'capstone': capstone_opt == 'disabled' ? false : capstone_opt} 1668f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 1669f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 1670f01496a3SPaolo Bonzinisummary_info += {'libudev': libudev.found()} 1671f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 1672f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 1673f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 1674f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 1675f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 1676f9332757SPaolo Bonziniendif 1677f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 1678f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 1679f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 1680f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 1681f9332757SPaolo Bonzini 1682f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 1683f9332757SPaolo Bonzini message() 1684f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 1685f9332757SPaolo Bonzini message() 1686f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 1687f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 1688f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1689f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1690f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1691f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1692f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1693f9332757SPaolo Bonziniendif 1694f9332757SPaolo Bonzini 1695f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 1696f9332757SPaolo Bonzini message() 1697f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 1698f9332757SPaolo Bonzini message() 1699f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 1700f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 1701f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1702f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1703f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1704f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1705f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1706f9332757SPaolo Bonziniendif 1707