1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0', 2a5665051SPaolo Bonzini default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 'b_lundef=false'], 3a5665051SPaolo Bonzini version: run_command('head', meson.source_root() / 'VERSION').stdout().strip()) 4a5665051SPaolo Bonzini 5a5665051SPaolo Bonzininot_found = dependency('', required: false) 6a5665051SPaolo Bonzinikeyval = import('unstable-keyval') 7a81df1b6SPaolo Bonziniss = import('sourceset') 8a81df1b6SPaolo Bonzini 9ce1c1e7aSPaolo Bonzinish = find_program('sh') 10a81df1b6SPaolo Bonzinicc = meson.get_compiler('c') 11a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak') 122becc36aSPaolo Bonziniconfig_all_disas = keyval.load(meson.current_build_dir() / 'config-all-disas.mak') 133154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host 14a5665051SPaolo Bonzini 15a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 16a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 17a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 18a5665051SPaolo Bonzini native: false, language: 'cpp') 19a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 20a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 21a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 22a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 23a5665051SPaolo Bonzini 24fc929892SMarc-André Lureaupython = import('python').find_installation() 25fc929892SMarc-André Lureau 26fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 27fc929892SMarc-André Lureauif link_language == 'cpp' 28fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 29fc929892SMarc-André Lureauendif 30a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 31a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 32a5665051SPaolo Bonziniendif 33a5665051SPaolo Bonzini 34968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host 35968b4db3SPaolo Bonzini run_target('sparse', 36968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 37968b4db3SPaolo Bonzini config_host['SPARSE_CFLAGS'].split(), 38968b4db3SPaolo Bonzini 'compile_commands.json']) 39968b4db3SPaolo Bonziniendif 40968b4db3SPaolo Bonzini 41a5665051SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'), 42a5665051SPaolo Bonzini output: 'ninjatool', 43a5665051SPaolo Bonzini configuration: config_host) 44f9332757SPaolo Bonzini 45f9332757SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 46f9332757SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', 47f9332757SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 48f9332757SPaolo Bonzini 49f9332757SPaolo Bonzinicpu = host_machine.cpu_family() 50f9332757SPaolo Bonzinitargetos = host_machine.system() 51f9332757SPaolo Bonzini 52a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 53a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 54a81df1b6SPaolo Bonzinisocket = [] 5504c6f1e7SMarc-André Lureauversion_res = [] 56d92989aaSMarc-André Lureaucoref = [] 57d92989aaSMarc-André Lureauiokit = [] 58d92989aaSMarc-André Lureaucocoa = [] 59d92989aaSMarc-André Lureauhvf = [] 60a81df1b6SPaolo Bonziniif targetos == 'windows' 61a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 6204c6f1e7SMarc-André Lureau 6304c6f1e7SMarc-André Lureau win = import('windows') 6404c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 6504c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 6604c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 67d92989aaSMarc-André Lureauelif targetos == 'darwin' 68d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 69d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 70d92989aaSMarc-André Lureau cocoa = dependency('appleframeworks', modules: 'Cocoa') 71d92989aaSMarc-André Lureau hvf = dependency('appleframeworks', modules: 'Hypervisor') 72cfad62f1SPaolo Bonzinielif targetos == 'sunos' 73cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 74cfad62f1SPaolo Bonzini cc.find_library('nsl'), 75cfad62f1SPaolo Bonzini cc.find_library('resolv')] 76cfad62f1SPaolo Bonzinielif targetos == 'haiku' 77cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 78cfad62f1SPaolo Bonzini cc.find_library('network'), 79cfad62f1SPaolo Bonzini cc.find_library('bsd')] 80a81df1b6SPaolo Bonziniendif 81a81df1b6SPaolo Bonziniglib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(), 82a81df1b6SPaolo Bonzini link_args: config_host['GLIB_LIBS'].split()) 83a81df1b6SPaolo Bonzinigio = not_found 84a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 85a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 86a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 87a81df1b6SPaolo Bonziniendif 88a81df1b6SPaolo Bonzinilttng = not_found 89a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 90a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 91a81df1b6SPaolo Bonziniendif 92a81df1b6SPaolo Bonziniurcubp = not_found 93a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 94a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 95a81df1b6SPaolo Bonziniendif 96a81df1b6SPaolo Bonzininettle = not_found 97a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 98a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 99a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 100a81df1b6SPaolo Bonziniendif 101a81df1b6SPaolo Bonzinignutls = not_found 102a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 103a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 104a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 105a81df1b6SPaolo Bonziniendif 106ea458960SMarc-André Lureaupixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(), 107ea458960SMarc-André Lureau link_args: config_host['PIXMAN_LIBS'].split()) 1085e7fbd25SMarc-André Lureaupam = not_found 1095e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 1105e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 1115e7fbd25SMarc-André Lureauendif 1125e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 1135e5733e5SMarc-André Lureauzlib = not_found 1145e5733e5SMarc-André Lureauif 'CONFIG_ZLIB' in config_host 1155e5733e5SMarc-André Lureau zlib = declare_dependency(compile_args: config_host['ZLIB_CFLAGS'].split(), 1165e5733e5SMarc-André Lureau link_args: config_host['ZLIB_LIBS'].split()) 1175e5733e5SMarc-André Lureauendif 1185e5733e5SMarc-André Lureaulinux_io_uring = not_found 1195e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 1205e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 1215e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 1225e5733e5SMarc-André Lureauendif 1235e5733e5SMarc-André Lureaulibxml2 = not_found 1245e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 1255e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 1265e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 1275e5733e5SMarc-André Lureauendif 1285e5733e5SMarc-André Lureaulibnfs = not_found 1295e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 1305e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 1315e5733e5SMarc-André Lureauendif 132ec0d5893SMarc-André Lureaulibattr = not_found 133ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 134ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 135ec0d5893SMarc-André Lureauendif 1363f99cf57SPaolo Bonziniseccomp = not_found 1373f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 1383f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 1393f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 1403f99cf57SPaolo Bonziniendif 1413f99cf57SPaolo Bonzinilibcap_ng = not_found 1423f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 1433f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 1443f99cf57SPaolo Bonziniendif 145ade60d4fSMarc-André Lureauxkbcommon = not_found 146ade60d4fSMarc-André Lureauif 'CONFIG_XKBCOMMON' in config_host 147ade60d4fSMarc-André Lureau xkbcommon = declare_dependency(compile_args: config_host['XKBCOMMON_CFLAGS'].split(), 148ade60d4fSMarc-André Lureau link_args: config_host['XKBCOMMON_LIBS'].split()) 149ade60d4fSMarc-André Lureauendif 150*478e943fSPaolo Bonzinipulse = not_found 151*478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 152*478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 153*478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 154*478e943fSPaolo Bonziniendif 155*478e943fSPaolo Bonzinialsa = not_found 156*478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 157*478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 158*478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 159*478e943fSPaolo Bonziniendif 160*478e943fSPaolo Bonzinijack = not_found 161*478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 162*478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 163*478e943fSPaolo Bonziniendif 1642634733cSPaolo Bonzinispice = not_found 1652634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 1662634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 1672634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 1682634733cSPaolo Bonziniendif 1695ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 170897b5afaSMarc-André Lureaulibmpathpersist = not_found 171897b5afaSMarc-André Lureauif config_host.has_key('CONFIG_MPATH') 172897b5afaSMarc-André Lureau libmpathpersist = cc.find_library('mpathpersist') 173897b5afaSMarc-André Lureauendif 17499650b62SPaolo Bonzinilibiscsi = not_found 17599650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 17699650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 17799650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 17899650b62SPaolo Bonziniendif 1795e5733e5SMarc-André Lureauzstd = not_found 1805e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 1815e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 1825e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 1835e5733e5SMarc-André Lureauendif 184ea458960SMarc-André Lureaugbm = not_found 185ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 186ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 187ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 188ea458960SMarc-André Lureauendif 189ea458960SMarc-André Lureauvirgl = not_found 190ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 191ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 192ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 193ea458960SMarc-André Lureauendif 1941d7bb6abSMarc-André Lureaucurl = not_found 1951d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 1961d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 1971d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 1981d7bb6abSMarc-André Lureauendif 199f15bff25SPaolo Bonzinilibudev = not_found 200f15bff25SPaolo Bonziniif 'CONFIG_LIBUDEV' in config_host 201f15bff25SPaolo Bonzini libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split()) 202f15bff25SPaolo Bonziniendif 2032634733cSPaolo Bonzinibrlapi = not_found 2042634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 2052634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 2062634733cSPaolo Bonziniendif 2072634733cSPaolo Bonzinisdl = not_found 2082634733cSPaolo Bonziniif 'CONFIG_SDL' in config_host 2092634733cSPaolo Bonzini sdl = declare_dependency(compile_args: config_host['SDL_CFLAGS'].split(), 2102634733cSPaolo Bonzini link_args: config_host['SDL_LIBS'].split()) 2112634733cSPaolo Bonziniendif 2125e5733e5SMarc-André Lureaurbd = not_found 2135e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 2145e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 2155e5733e5SMarc-André Lureauendif 2165e5733e5SMarc-André Lureauglusterfs = not_found 2175e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 2185e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 2195e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 2205e5733e5SMarc-André Lureauendif 2215e5733e5SMarc-André Lureaulibssh = not_found 2225e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 2235e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 2245e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 2255e5733e5SMarc-André Lureauendif 2265e5733e5SMarc-André Lureaulibbzip2 = not_found 2275e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 2285e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 2295e5733e5SMarc-André Lureauendif 2305e5733e5SMarc-André Lureauliblzfse = not_found 2315e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 2325e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 2335e5733e5SMarc-André Lureauendif 234*478e943fSPaolo Bonzinioss = not_found 235*478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 236*478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 237*478e943fSPaolo Bonziniendif 238*478e943fSPaolo Bonzinidsound = not_found 239*478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 240*478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 241*478e943fSPaolo Bonziniendif 242*478e943fSPaolo Bonzinicoreaudio = not_found 243*478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 244*478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 245*478e943fSPaolo Bonziniendif 246a81df1b6SPaolo Bonzini 2472becc36aSPaolo Bonzinicreate_config = find_program('scripts/create_config') 2482becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 249a81df1b6SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 250a81df1b6SPaolo Bonzinihave_user = false 251a81df1b6SPaolo Bonzinihave_system = false 2522becc36aSPaolo Bonziniconfig_devices_mak_list = [] 2532becc36aSPaolo Bonziniconfig_devices_h = {} 2542becc36aSPaolo Bonziniconfig_target_mak = {} 2552becc36aSPaolo Bonzinikconfig_external_symbols = [ 2562becc36aSPaolo Bonzini 'CONFIG_KVM', 2572becc36aSPaolo Bonzini 'CONFIG_XEN', 2582becc36aSPaolo Bonzini 'CONFIG_TPM', 2592becc36aSPaolo Bonzini 'CONFIG_SPICE', 2602becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 2612becc36aSPaolo Bonzini 'CONFIG_OPENGL', 2622becc36aSPaolo Bonzini 'CONFIG_X11', 2632becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 2642becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 2652becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 2662becc36aSPaolo Bonzini 'CONFIG_LINUX', 2672becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 2682becc36aSPaolo Bonzini] 269a81df1b6SPaolo Bonziniforeach target : target_dirs 270a81df1b6SPaolo Bonzini have_user = have_user or target.endswith('-user') 2712becc36aSPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') + config_host 2722becc36aSPaolo Bonzini 2732becc36aSPaolo Bonzini if target.endswith('-softmmu') 2742becc36aSPaolo Bonzini have_system = true 2752becc36aSPaolo Bonzini 2762becc36aSPaolo Bonzini base_kconfig = [] 2772becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 2782becc36aSPaolo Bonzini if sym in config_target 2792becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 2802becc36aSPaolo Bonzini endif 2812becc36aSPaolo Bonzini endforeach 2822becc36aSPaolo Bonzini 2832becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 2842becc36aSPaolo Bonzini config_devices_mak = configure_file( 2852becc36aSPaolo Bonzini input: ['default-configs' / target + '.mak', 'Kconfig'], 2862becc36aSPaolo Bonzini output: config_devices_mak, 2872becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 2882becc36aSPaolo Bonzini capture: true, 2892becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 2902becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 2912becc36aSPaolo Bonzini base_kconfig]) 2922becc36aSPaolo Bonzini config_devices_h += {target: custom_target( 2932becc36aSPaolo Bonzini target + '-config-devices.h', 2942becc36aSPaolo Bonzini input: config_devices_mak, 2952becc36aSPaolo Bonzini output: target + '-config-devices.h', 2962becc36aSPaolo Bonzini capture: true, 2972becc36aSPaolo Bonzini command: [create_config, '@INPUT@'])} 2982becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 2992becc36aSPaolo Bonzini config_target += keyval.load(config_devices_mak) 3002becc36aSPaolo Bonzini endif 3012becc36aSPaolo Bonzini config_target_mak += {target: config_target} 302a81df1b6SPaolo Bonziniendforeach 303a81df1b6SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 304a81df1b6SPaolo Bonzinihave_block = have_system or have_tools 305a81df1b6SPaolo Bonzini 3062becc36aSPaolo Bonzinigrepy = find_program('scripts/grepy.sh') 3072becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 3082becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 3092becc36aSPaolo Bonzini# static_library target. 3102becc36aSPaolo Bonzini# 3112becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 3122becc36aSPaolo Bonzini# build literally all source files, including devices only used by 3132becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 3142becc36aSPaolo Bonzini# pseudo symbol replaces it. 3152becc36aSPaolo Bonzini 3162becc36aSPaolo Bonziniif have_system 3172becc36aSPaolo Bonzini config_all_devices_mak = configure_file( 3182becc36aSPaolo Bonzini output: 'config-all-devices.mak', 3192becc36aSPaolo Bonzini input: config_devices_mak_list, 3202becc36aSPaolo Bonzini capture: true, 3212becc36aSPaolo Bonzini command: [grepy, '@INPUT@'], 3222becc36aSPaolo Bonzini ) 3232becc36aSPaolo Bonzini config_all_devices = keyval.load(config_all_devices_mak) 3242becc36aSPaolo Bonzinielse 3252becc36aSPaolo Bonzini config_all_devices = {} 3262becc36aSPaolo Bonziniendif 3272becc36aSPaolo Bonziniconfig_all = config_all_devices 3282becc36aSPaolo Bonziniconfig_all += config_host 3292becc36aSPaolo Bonziniconfig_all += config_all_disas 3302becc36aSPaolo Bonziniconfig_all += { 3312becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 3322becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 3332becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 3342becc36aSPaolo Bonzini 'CONFIG_ALL': true, 3352becc36aSPaolo Bonzini} 3362becc36aSPaolo Bonzini 337a81df1b6SPaolo Bonzini# Generators 338a81df1b6SPaolo Bonzini 3392c273f32SMarc-André Lureaugenh = [] 3403f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 341650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 342a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 343a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 344a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 345a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 346a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 347a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 348a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 349a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 350a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 351a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 352a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 353a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 354a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 355a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 356a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 357a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 358a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 359a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 360a81df1b6SPaolo Bonzini] 361a81df1b6SPaolo Bonzini 362a81df1b6SPaolo Bonzinitracetool = [ 363a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 364a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 365a81df1b6SPaolo Bonzini] 366a81df1b6SPaolo Bonzini 3672c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 3682c273f32SMarc-André Lureau meson.current_source_dir(), 3692c273f32SMarc-André Lureau config_host['PKGVERSION'], config_host['VERSION']] 3702c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 3712c273f32SMarc-André Lureau output: 'qemu-version.h', 3722c273f32SMarc-André Lureau command: qemu_version_cmd, 3732c273f32SMarc-André Lureau capture: true, 3742c273f32SMarc-André Lureau build_by_default: true, 3752c273f32SMarc-André Lureau build_always_stale: true) 3762c273f32SMarc-André Lureaugenh += qemu_version 3772c273f32SMarc-André Lureau 3782becc36aSPaolo Bonziniconfig_host_h = custom_target('config-host.h', 3792becc36aSPaolo Bonzini input: meson.current_build_dir() / 'config-host.mak', 3802becc36aSPaolo Bonzini output: 'config-host.h', 3812becc36aSPaolo Bonzini capture: true, 3822becc36aSPaolo Bonzini command: [create_config, '@INPUT@']) 3832becc36aSPaolo Bonzinigenh += config_host_h 3842becc36aSPaolo Bonzini 3853f885659SMarc-André Lureauhxdep = [] 3863f885659SMarc-André Lureauhx_headers = [ 3873f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 3883f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 3893f885659SMarc-André Lureau] 3903f885659SMarc-André Lureauif have_system 3913f885659SMarc-André Lureau hx_headers += [ 3923f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 3933f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 3943f885659SMarc-André Lureau ] 3953f885659SMarc-André Lureauendif 3963f885659SMarc-André Lureauforeach d : hx_headers 397b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 3983f885659SMarc-André Lureau input: files(d[0]), 3993f885659SMarc-André Lureau output: d[1], 4003f885659SMarc-André Lureau capture: true, 4013f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 4023f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 4033f885659SMarc-André Lureauendforeach 4043f885659SMarc-André Lureaugenh += hxdep 4053f885659SMarc-André Lureau 406a81df1b6SPaolo Bonzini# Collect sourcesets. 407a81df1b6SPaolo Bonzini 408a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 409a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 410a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 4113154fee4SMarc-André Lureaublock_ss = ss.source_set() 4122becc36aSPaolo Bonzinicommon_ss = ss.source_set() 4132becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 4142becc36aSPaolo Bonziniuser_ss = ss.source_set() 4152becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 4162becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 4172becc36aSPaolo Bonzinispecific_ss = ss.source_set() 4182becc36aSPaolo Bonzini 4193154fee4SMarc-André Lureaumodules = {} 4202becc36aSPaolo Bonzinihw_arch = {} 4212becc36aSPaolo Bonzinitarget_arch = {} 4222becc36aSPaolo Bonzinitarget_softmmu_arch = {} 423a81df1b6SPaolo Bonzini 424a81df1b6SPaolo Bonzini############### 425a81df1b6SPaolo Bonzini# Trace files # 426a81df1b6SPaolo Bonzini############### 427a81df1b6SPaolo Bonzini 428a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 429a81df1b6SPaolo Bonzini 'accel/kvm', 430a81df1b6SPaolo Bonzini 'accel/tcg', 431a81df1b6SPaolo Bonzini 'crypto', 432a81df1b6SPaolo Bonzini 'monitor', 433a81df1b6SPaolo Bonzini] 434a81df1b6SPaolo Bonziniif have_user 435a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 436a81df1b6SPaolo Bonziniendif 437a81df1b6SPaolo Bonziniif have_block 438a81df1b6SPaolo Bonzini trace_events_subdirs += [ 439a81df1b6SPaolo Bonzini 'authz', 440a81df1b6SPaolo Bonzini 'block', 441a81df1b6SPaolo Bonzini 'io', 442a81df1b6SPaolo Bonzini 'nbd', 443a81df1b6SPaolo Bonzini 'scsi', 444a81df1b6SPaolo Bonzini ] 445a81df1b6SPaolo Bonziniendif 446a81df1b6SPaolo Bonziniif have_system 447a81df1b6SPaolo Bonzini trace_events_subdirs += [ 448a81df1b6SPaolo Bonzini 'audio', 449a81df1b6SPaolo Bonzini 'backends', 450a81df1b6SPaolo Bonzini 'backends/tpm', 451a81df1b6SPaolo Bonzini 'chardev', 452a81df1b6SPaolo Bonzini 'hw/9pfs', 453a81df1b6SPaolo Bonzini 'hw/acpi', 454a81df1b6SPaolo Bonzini 'hw/alpha', 455a81df1b6SPaolo Bonzini 'hw/arm', 456a81df1b6SPaolo Bonzini 'hw/audio', 457a81df1b6SPaolo Bonzini 'hw/block', 458a81df1b6SPaolo Bonzini 'hw/block/dataplane', 459a81df1b6SPaolo Bonzini 'hw/char', 460a81df1b6SPaolo Bonzini 'hw/display', 461a81df1b6SPaolo Bonzini 'hw/dma', 462a81df1b6SPaolo Bonzini 'hw/hppa', 463a81df1b6SPaolo Bonzini 'hw/hyperv', 464a81df1b6SPaolo Bonzini 'hw/i2c', 465a81df1b6SPaolo Bonzini 'hw/i386', 466a81df1b6SPaolo Bonzini 'hw/i386/xen', 467a81df1b6SPaolo Bonzini 'hw/ide', 468a81df1b6SPaolo Bonzini 'hw/input', 469a81df1b6SPaolo Bonzini 'hw/intc', 470a81df1b6SPaolo Bonzini 'hw/isa', 471a81df1b6SPaolo Bonzini 'hw/mem', 472a81df1b6SPaolo Bonzini 'hw/mips', 473a81df1b6SPaolo Bonzini 'hw/misc', 474a81df1b6SPaolo Bonzini 'hw/misc/macio', 475a81df1b6SPaolo Bonzini 'hw/net', 476a81df1b6SPaolo Bonzini 'hw/nvram', 477a81df1b6SPaolo Bonzini 'hw/pci', 478a81df1b6SPaolo Bonzini 'hw/pci-host', 479a81df1b6SPaolo Bonzini 'hw/ppc', 480a81df1b6SPaolo Bonzini 'hw/rdma', 481a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 482a81df1b6SPaolo Bonzini 'hw/rtc', 483a81df1b6SPaolo Bonzini 'hw/s390x', 484a81df1b6SPaolo Bonzini 'hw/scsi', 485a81df1b6SPaolo Bonzini 'hw/sd', 486a81df1b6SPaolo Bonzini 'hw/sparc', 487a81df1b6SPaolo Bonzini 'hw/sparc64', 488a81df1b6SPaolo Bonzini 'hw/ssi', 489a81df1b6SPaolo Bonzini 'hw/timer', 490a81df1b6SPaolo Bonzini 'hw/tpm', 491a81df1b6SPaolo Bonzini 'hw/usb', 492a81df1b6SPaolo Bonzini 'hw/vfio', 493a81df1b6SPaolo Bonzini 'hw/virtio', 494a81df1b6SPaolo Bonzini 'hw/watchdog', 495a81df1b6SPaolo Bonzini 'hw/xen', 496a81df1b6SPaolo Bonzini 'hw/gpio', 497a81df1b6SPaolo Bonzini 'hw/riscv', 498a81df1b6SPaolo Bonzini 'migration', 499a81df1b6SPaolo Bonzini 'net', 500a81df1b6SPaolo Bonzini 'ui', 501a81df1b6SPaolo Bonzini ] 502a81df1b6SPaolo Bonziniendif 503a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 504a81df1b6SPaolo Bonzini 'hw/core', 505a81df1b6SPaolo Bonzini 'qapi', 506a81df1b6SPaolo Bonzini 'qom', 507a81df1b6SPaolo Bonzini 'target/arm', 508a81df1b6SPaolo Bonzini 'target/hppa', 509a81df1b6SPaolo Bonzini 'target/i386', 510a81df1b6SPaolo Bonzini 'target/mips', 511a81df1b6SPaolo Bonzini 'target/ppc', 512a81df1b6SPaolo Bonzini 'target/riscv', 513a81df1b6SPaolo Bonzini 'target/s390x', 514a81df1b6SPaolo Bonzini 'target/sparc', 515a81df1b6SPaolo Bonzini 'util', 516a81df1b6SPaolo Bonzini] 517a81df1b6SPaolo Bonzini 518a81df1b6SPaolo Bonzinisubdir('qapi') 519a81df1b6SPaolo Bonzinisubdir('qobject') 520a81df1b6SPaolo Bonzinisubdir('stubs') 521a81df1b6SPaolo Bonzinisubdir('trace') 522a81df1b6SPaolo Bonzinisubdir('util') 5235582c58fSMarc-André Lureausubdir('qom') 5245582c58fSMarc-André Lureausubdir('authz') 525a81df1b6SPaolo Bonzinisubdir('crypto') 526a81df1b6SPaolo Bonzinisubdir('storage-daemon') 5272d78b56eSMarc-André Lureausubdir('ui') 528a81df1b6SPaolo Bonzini 5293154fee4SMarc-André Lureau 5303154fee4SMarc-André Lureauif enable_modules 5313154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 5323154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 5333154fee4SMarc-André Lureauendif 5343154fee4SMarc-André Lureau 535a81df1b6SPaolo Bonzini# Build targets from sourcesets 536a81df1b6SPaolo Bonzini 5372becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 538a81df1b6SPaolo Bonzini 539a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 5402becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 541a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 542a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 543a81df1b6SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket]) 544a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 54504c6f1e7SMarc-André Lureau sources: genh + version_res) 546a81df1b6SPaolo Bonzini 547*478e943fSPaolo Bonzinisubdir('audio') 5487fcfd456SMarc-André Lureausubdir('io') 549848e8ff6SMarc-André Lureausubdir('chardev') 550ec0d5893SMarc-André Lureausubdir('fsdev') 551d3b18480SMarc-André Lureausubdir('target') 552ec0d5893SMarc-André Lureau 5535e5733e5SMarc-André Lureaublock_ss.add(files( 5545e5733e5SMarc-André Lureau 'block.c', 5555e5733e5SMarc-André Lureau 'blockjob.c', 5565e5733e5SMarc-André Lureau 'job.c', 5575e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 5585e5733e5SMarc-André Lureau)) 5595e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 5605e5733e5SMarc-André Lureau 5615e5733e5SMarc-André Lureausubdir('nbd') 5625e5733e5SMarc-André Lureausubdir('scsi') 5635e5733e5SMarc-André Lureausubdir('block') 5645e5733e5SMarc-André Lureau 565a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 566a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 567a2ce7dbdSPaolo Bonzini 5683154fee4SMarc-André Lureaublock_mods = [] 5693154fee4SMarc-André Lureausoftmmu_mods = [] 5703154fee4SMarc-André Lureauforeach d, list : modules 5713154fee4SMarc-André Lureau foreach m, module_ss : list 5723154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 5733154fee4SMarc-André Lureau module_ss = module_ss.apply(config_host, strict: false) 5743154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 5753154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 5763154fee4SMarc-André Lureau if d == 'block' 5773154fee4SMarc-André Lureau block_mods += sl 5783154fee4SMarc-André Lureau else 5793154fee4SMarc-André Lureau softmmu_mods += sl 5803154fee4SMarc-André Lureau endif 5813154fee4SMarc-André Lureau else 5823154fee4SMarc-André Lureau if d == 'block' 5833154fee4SMarc-André Lureau block_ss.add_all(module_ss) 5843154fee4SMarc-André Lureau else 5853154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 5863154fee4SMarc-André Lureau endif 5873154fee4SMarc-André Lureau endif 5883154fee4SMarc-André Lureau endforeach 5893154fee4SMarc-André Lureauendforeach 5903154fee4SMarc-André Lureau 5913154fee4SMarc-André Lureaunm = find_program('nm') 5923154fee4SMarc-André Lureauundefsym = find_program('scripts/undefsym.sh') 5933154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 5943154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 5953154fee4SMarc-André Lureau capture: true, 5963154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 5973154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 5983154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 5993154fee4SMarc-André Lureau capture: true, 6003154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 6013154fee4SMarc-André Lureau 6025e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 6035e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 6045e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 6055e5733e5SMarc-André Lureau link_depends: block_syms, 6065e5733e5SMarc-André Lureau name_suffix: 'fa', 6075e5733e5SMarc-André Lureau build_by_default: false) 6085e5733e5SMarc-André Lureau 6095e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 610b7c70bf2SMarc-André Lureau link_args: '@block.syms', 611b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 6125e5733e5SMarc-André Lureau 6133154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 6143154fee4SMarc-André Lureau shared_module(m.name(), 6153154fee4SMarc-André Lureau name_prefix: '', 6163154fee4SMarc-André Lureau link_whole: m, 6173154fee4SMarc-André Lureau install: true, 6183154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 6193154fee4SMarc-André Lureauendforeach 6203154fee4SMarc-André Lureau 6212becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: softmmu_ss) 6222becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 6232becc36aSPaolo Bonzini 6242becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 6252becc36aSPaolo Bonzinicommon_all = static_library('common', 6262becc36aSPaolo Bonzini build_by_default: false, 6272becc36aSPaolo Bonzini sources: common_all.sources() + genh, 6282becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 6292becc36aSPaolo Bonzini name_suffix: 'fa') 6302becc36aSPaolo Bonzini 6312becc36aSPaolo Bonziniforeach target : target_dirs 6322becc36aSPaolo Bonzini config_target = config_target_mak[target] 6332becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 6342becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 6352becc36aSPaolo Bonzini arch_srcs = [] 6362becc36aSPaolo Bonzini 6372becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 6382becc36aSPaolo Bonzini if targetos == 'linux' 6392becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 6402becc36aSPaolo Bonzini endif 6412becc36aSPaolo Bonzini if target.endswith('-softmmu') 6422becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 6432becc36aSPaolo Bonzini target_type='system' 6442becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 6452becc36aSPaolo Bonzini else 6462becc36aSPaolo Bonzini target_type='user' 6472becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 6482becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 6492becc36aSPaolo Bonzini base_dir = 'linux-user' 6502becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 6512becc36aSPaolo Bonzini else 6522becc36aSPaolo Bonzini base_dir = 'bsd-user' 6532becc36aSPaolo Bonzini endif 6542becc36aSPaolo Bonzini target_inc += include_directories( 6552becc36aSPaolo Bonzini base_dir, 6562becc36aSPaolo Bonzini base_dir / config_target['TARGET_ABI_DIR'], 6572becc36aSPaolo Bonzini ) 6582becc36aSPaolo Bonzini endif 6592becc36aSPaolo Bonzini 6602becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 6612becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 6622becc36aSPaolo Bonzini 6632becc36aSPaolo Bonzini # TODO: Change to generator once obj-y goes away 6642becc36aSPaolo Bonzini config_target_h = custom_target(target + '-config-target.h', 6652becc36aSPaolo Bonzini input: meson.current_build_dir() / target / 'config-target.mak', 6662becc36aSPaolo Bonzini output: target + '-config-target.h', 6672becc36aSPaolo Bonzini capture: true, 6682becc36aSPaolo Bonzini command: [create_config, '@INPUT@']) 6692becc36aSPaolo Bonzini 6702becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 6712becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 6722becc36aSPaolo Bonzini 6732becc36aSPaolo Bonzini static_library('qemu-' + target, 6742becc36aSPaolo Bonzini sources: arch_srcs + [config_target_h] + genh, 6752becc36aSPaolo Bonzini objects: objects, 6762becc36aSPaolo Bonzini include_directories: target_inc, 6772becc36aSPaolo Bonzini c_args: ['-DNEED_CPU_H', 6782becc36aSPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 6792becc36aSPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)], 6802becc36aSPaolo Bonzini name_suffix: 'fa') 6812becc36aSPaolo Bonziniendforeach 6822becc36aSPaolo Bonzini 683931049b4SPaolo Bonzini# Other build targets 684897b5afaSMarc-André Lureau 685f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 686f15bff25SPaolo Bonzini subdir('qga') 687f15bff25SPaolo Bonziniendif 688f15bff25SPaolo Bonzini 689931049b4SPaolo Bonziniif have_tools 690b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 691b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 692b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 693b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 694b7c70bf2SMarc-André Lureau if targetos == 'linux' or targetos == 'sunos' or targetos.endswith('bsd') 695b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 696b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 697b7c70bf2SMarc-André Lureau endif 698b7c70bf2SMarc-André Lureau 699a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 7001d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 701a9c9727cSPaolo Bonzini 702ade60d4fSMarc-André Lureau if 'CONFIG_XKBCOMMON' in config_host 703ade60d4fSMarc-André Lureau executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'), 704ade60d4fSMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: true) 705ade60d4fSMarc-André Lureau endif 706ade60d4fSMarc-André Lureau 707157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 708157e7b13SMarc-André Lureau dependencies: qemuutil, 709157e7b13SMarc-André Lureau install: true) 710157e7b13SMarc-André Lureau 711931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 712931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 7132d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 714ea458960SMarc-André Lureau if 'CONFIG_LINUX' in config_host 715ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 716ea458960SMarc-André Lureau endif 71732fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 71899650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 719931049b4SPaolo Bonzini endif 7208f51e01cSMarc-André Lureau 7218f51e01cSMarc-André Lureau if targetos == 'linux' 7228f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 7238f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 7248f51e01cSMarc-André Lureau install: true, 7258f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 726897b5afaSMarc-André Lureau 727897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 728897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 729897b5afaSMarc-André Lureau libcap_ng, libudev, libmpathpersist], 730897b5afaSMarc-André Lureau install: true) 7318f51e01cSMarc-André Lureau endif 7328f51e01cSMarc-André Lureau 7335ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 7345ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 7355ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 7365ee24e78SMarc-André Lureau endif 737931049b4SPaolo Bonziniendif 738931049b4SPaolo Bonzini 7393f99cf57SPaolo Bonzinisubdir('tools') 740bdcbea7aSMarc-André Lureausubdir('pc-bios') 741ce1c1e7aSPaolo Bonzinisubdir('tests') 7423f99cf57SPaolo Bonzini 743f9332757SPaolo Bonzinisummary_info = {} 744f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 745f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 746f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 747f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 748f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 749f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 750f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 751f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 752f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 753f9332757SPaolo Bonziniif targetos != 'windows' 754f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 755f9332757SPaolo Bonzini summary_info += {'Manual directory': config_host['mandir']} 756f9332757SPaolo Bonzinielse 757f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 758f9332757SPaolo Bonziniendif 759f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 760f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 761f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 762f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 763f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 764f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 765f9332757SPaolo Bonziniif link_language == 'cpp' 766f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 767f9332757SPaolo Bonzinielse 768f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 769f9332757SPaolo Bonziniendif 770f9332757SPaolo Bonziniif targetos == 'darwin' 771f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 772f9332757SPaolo Bonziniendif 773f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 774f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 775f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 776f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 777f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 778f9332757SPaolo Bonzinisummary_info += {'install': config_host['INSTALL']} 779f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 780f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 781f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 782f9332757SPaolo Bonzini# TODO: add back version 783f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 784f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 785f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 786f9332757SPaolo Bonziniendif 787f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 788f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 789f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 790f9332757SPaolo Bonziniendif 791f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 792f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 793f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 794f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 795f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 796f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 797f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 798f9332757SPaolo Bonzinisummary_info += {'static build': config_host.has_key('CONFIG_TOOLS')} 799f9332757SPaolo Bonziniif targetos == 'darwin' 800f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 801f9332757SPaolo Bonziniendif 802f9332757SPaolo Bonzini# TODO: add back version 803f9332757SPaolo Bonzinisummary_info += {'SDL support': config_host.has_key('CONFIG_SDL')} 804f9332757SPaolo Bonzinisummary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')} 805f9332757SPaolo Bonzini# TODO: add back version 806f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 807f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 808f9332757SPaolo Bonzini# TODO: add back version 809f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 810f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 811f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 812f9332757SPaolo Bonzini# TODO: add back version 813f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 814f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 815f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 816f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 817f9332757SPaolo Bonziniendif 818f9332757SPaolo Bonzini# TODO: add back version 819f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 820f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 821f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 822f9332757SPaolo Bonziniendif 823f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 824f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 825f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 826f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 827f9332757SPaolo Bonzini# TODO: add back version 828f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 829f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 830f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 831f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 832f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 833f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 834f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 835f9332757SPaolo Bonzinisummary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')} 836f9332757SPaolo Bonzinisummary_info += {'VNC support': config_host.has_key('CONFIG_VNC')} 837f9332757SPaolo Bonziniif config_host.has_key('CONFIG_VNC') 838f9332757SPaolo Bonzini summary_info += {'VNC SASL support': config_host.has_key('CONFIG_VNC_SASL')} 839f9332757SPaolo Bonzini summary_info += {'VNC JPEG support': config_host.has_key('CONFIG_VNC_JPEG')} 840f9332757SPaolo Bonzini summary_info += {'VNC PNG support': config_host.has_key('CONFIG_VNC_PNG')} 841f9332757SPaolo Bonziniendif 842f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 843f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 844f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 845f9332757SPaolo Bonziniendif 846f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 847f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 848f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 849f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 850f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 851f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 852f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 853f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 854f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 855f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG 856f9332757SPaolo Bonzini#summary_info += {'KVM support': have_kvm'} 857f9332757SPaolo Bonzini#summary_info += {'HAX support': have_hax'} 858f9332757SPaolo Bonzini#summary_info += {'HVF support': have_hvf'} 859f9332757SPaolo Bonzini#summary_info += {'WHPX support': have_whpx'} 860f9332757SPaolo Bonzini#summary_info += {'TCG support': have_tcg'} 861f9332757SPaolo Bonzini#if get_option('tcg') 862f9332757SPaolo Bonzini# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 863f9332757SPaolo Bonzini# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 864f9332757SPaolo Bonzini#endif 865f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')} 866f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 867f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 868f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 869f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 870f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 871f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 872f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 873f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 874f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 875f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 876f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 877f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 878f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 879f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 880f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 881f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 882f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 883f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 884f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 885f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 886f9332757SPaolo Bonziniendif 887f9332757SPaolo Bonzini# TODO: add back protocol and server version 888f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 889f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 890f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 891f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 892f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 893f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 894f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 895f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 896f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 897f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 898f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 899f9332757SPaolo Bonziniif targetos == 'windows' 900f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 901f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 902f9332757SPaolo Bonzini endif 903f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 904f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 905f9332757SPaolo Bonzini summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')} 906f9332757SPaolo Bonziniendif 907f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 908f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 909f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 910f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 911f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 912f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 913f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 914bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 915f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 916f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 917f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 918f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 919f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 920f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 921f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 922f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 923f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 924f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 925f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 926f9332757SPaolo Bonzinisummary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')} 927f9332757SPaolo Bonzinisummary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')} 928f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 929f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 930f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 931f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 932f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 933f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 934f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 935f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 936f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 937f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 938f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 939f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 940f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 941f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 942f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 943f9332757SPaolo Bonzinisummary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')} 944f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 945f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 946f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 947f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 948f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 949f9332757SPaolo Bonziniendif 950f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 951f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 952f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 953f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 954f9332757SPaolo Bonzini 955f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 956f9332757SPaolo Bonzini message() 957f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 958f9332757SPaolo Bonzini message() 959f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 960f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 961f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 962f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 963f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 964f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 965f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 966f9332757SPaolo Bonziniendif 967f9332757SPaolo Bonzini 968f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 969f9332757SPaolo Bonzini message() 970f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 971f9332757SPaolo Bonzini message() 972f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 973f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 974f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 975f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 976f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 977f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 978f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 979f9332757SPaolo Bonziniendif 980