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') 12*2becc36aSPaolo Bonziniconfig_all_disas = keyval.load(meson.current_build_dir() / 'config-all-disas.mak') 13a5665051SPaolo Bonzini 14a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 15a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 16a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 17a5665051SPaolo Bonzini native: false, language: 'cpp') 18a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 19a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 20a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 21a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 22a5665051SPaolo Bonzini 23fc929892SMarc-André Lureaupython = import('python').find_installation() 24fc929892SMarc-André Lureau 25fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 26fc929892SMarc-André Lureauif link_language == 'cpp' 27fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 28fc929892SMarc-André Lureauendif 29a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 30a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 31a5665051SPaolo Bonziniendif 32a5665051SPaolo Bonzini 33968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host 34968b4db3SPaolo Bonzini run_target('sparse', 35968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 36968b4db3SPaolo Bonzini config_host['SPARSE_CFLAGS'].split(), 37968b4db3SPaolo Bonzini 'compile_commands.json']) 38968b4db3SPaolo Bonziniendif 39968b4db3SPaolo Bonzini 40a5665051SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'), 41a5665051SPaolo Bonzini output: 'ninjatool', 42a5665051SPaolo Bonzini configuration: config_host) 43f9332757SPaolo Bonzini 44f9332757SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 45f9332757SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', 46f9332757SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 47f9332757SPaolo Bonzini 48f9332757SPaolo Bonzinicpu = host_machine.cpu_family() 49f9332757SPaolo Bonzinitargetos = host_machine.system() 50f9332757SPaolo Bonzini 51a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 52a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 53a81df1b6SPaolo Bonzinisocket = [] 5404c6f1e7SMarc-André Lureauversion_res = [] 55d92989aaSMarc-André Lureaucoref = [] 56d92989aaSMarc-André Lureauiokit = [] 57d92989aaSMarc-André Lureaucocoa = [] 58d92989aaSMarc-André Lureauhvf = [] 59a81df1b6SPaolo Bonziniif targetos == 'windows' 60a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 6104c6f1e7SMarc-André Lureau 6204c6f1e7SMarc-André Lureau win = import('windows') 6304c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 6404c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 6504c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 66d92989aaSMarc-André Lureauelif targetos == 'darwin' 67d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 68d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 69d92989aaSMarc-André Lureau cocoa = dependency('appleframeworks', modules: 'Cocoa') 70d92989aaSMarc-André Lureau hvf = dependency('appleframeworks', modules: 'Hypervisor') 71cfad62f1SPaolo Bonzinielif targetos == 'sunos' 72cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 73cfad62f1SPaolo Bonzini cc.find_library('nsl'), 74cfad62f1SPaolo Bonzini cc.find_library('resolv')] 75cfad62f1SPaolo Bonzinielif targetos == 'haiku' 76cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 77cfad62f1SPaolo Bonzini cc.find_library('network'), 78cfad62f1SPaolo Bonzini cc.find_library('bsd')] 79a81df1b6SPaolo Bonziniendif 80a81df1b6SPaolo Bonziniglib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(), 81a81df1b6SPaolo Bonzini link_args: config_host['GLIB_LIBS'].split()) 82a81df1b6SPaolo Bonzinigio = not_found 83a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 84a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 85a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 86a81df1b6SPaolo Bonziniendif 87a81df1b6SPaolo Bonzinilttng = not_found 88a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 89a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 90a81df1b6SPaolo Bonziniendif 91a81df1b6SPaolo Bonziniurcubp = not_found 92a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 93a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 94a81df1b6SPaolo Bonziniendif 95a81df1b6SPaolo Bonzininettle = not_found 96a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 97a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 98a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 99a81df1b6SPaolo Bonziniendif 100a81df1b6SPaolo Bonzinignutls = not_found 101a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 102a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 103a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 104a81df1b6SPaolo Bonziniendif 105ea458960SMarc-André Lureaupixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(), 106ea458960SMarc-André Lureau link_args: config_host['PIXMAN_LIBS'].split()) 1075e7fbd25SMarc-André Lureaupam = not_found 1085e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 1095e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 1105e7fbd25SMarc-André Lureauendif 111ec0d5893SMarc-André Lureaulibattr = not_found 112ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 113ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 114ec0d5893SMarc-André Lureauendif 1153f99cf57SPaolo Bonziniseccomp = not_found 1163f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 1173f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 1183f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 1193f99cf57SPaolo Bonziniendif 1203f99cf57SPaolo Bonzinilibcap_ng = not_found 1213f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 1223f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 1233f99cf57SPaolo Bonziniendif 124ade60d4fSMarc-André Lureauxkbcommon = not_found 125ade60d4fSMarc-André Lureauif 'CONFIG_XKBCOMMON' in config_host 126ade60d4fSMarc-André Lureau xkbcommon = declare_dependency(compile_args: config_host['XKBCOMMON_CFLAGS'].split(), 127ade60d4fSMarc-André Lureau link_args: config_host['XKBCOMMON_LIBS'].split()) 128ade60d4fSMarc-André Lureauendif 1295ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 13099650b62SPaolo Bonzinilibiscsi = not_found 13199650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 13299650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 13399650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 13499650b62SPaolo Bonziniendif 135ea458960SMarc-André Lureaugbm = not_found 136ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 137ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 138ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 139ea458960SMarc-André Lureauendif 140ea458960SMarc-André Lureauvirgl = not_found 141ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 142ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 143ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 144ea458960SMarc-André Lureauendif 1451d7bb6abSMarc-André Lureaucurl = not_found 1461d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 1471d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 1481d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 1491d7bb6abSMarc-André Lureauendif 150f15bff25SPaolo Bonzinilibudev = not_found 151f15bff25SPaolo Bonziniif 'CONFIG_LIBUDEV' in config_host 152f15bff25SPaolo Bonzini libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split()) 153f15bff25SPaolo Bonziniendif 154a81df1b6SPaolo Bonzini 155*2becc36aSPaolo Bonzinicreate_config = find_program('scripts/create_config') 156*2becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 157a81df1b6SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 158a81df1b6SPaolo Bonzinihave_user = false 159a81df1b6SPaolo Bonzinihave_system = false 160*2becc36aSPaolo Bonziniconfig_devices_mak_list = [] 161*2becc36aSPaolo Bonziniconfig_devices_h = {} 162*2becc36aSPaolo Bonziniconfig_target_mak = {} 163*2becc36aSPaolo Bonzinikconfig_external_symbols = [ 164*2becc36aSPaolo Bonzini 'CONFIG_KVM', 165*2becc36aSPaolo Bonzini 'CONFIG_XEN', 166*2becc36aSPaolo Bonzini 'CONFIG_TPM', 167*2becc36aSPaolo Bonzini 'CONFIG_SPICE', 168*2becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 169*2becc36aSPaolo Bonzini 'CONFIG_OPENGL', 170*2becc36aSPaolo Bonzini 'CONFIG_X11', 171*2becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 172*2becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 173*2becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 174*2becc36aSPaolo Bonzini 'CONFIG_LINUX', 175*2becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 176*2becc36aSPaolo Bonzini] 177a81df1b6SPaolo Bonziniforeach target : target_dirs 178a81df1b6SPaolo Bonzini have_user = have_user or target.endswith('-user') 179*2becc36aSPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') + config_host 180*2becc36aSPaolo Bonzini 181*2becc36aSPaolo Bonzini if target.endswith('-softmmu') 182*2becc36aSPaolo Bonzini have_system = true 183*2becc36aSPaolo Bonzini 184*2becc36aSPaolo Bonzini base_kconfig = [] 185*2becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 186*2becc36aSPaolo Bonzini if sym in config_target 187*2becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 188*2becc36aSPaolo Bonzini endif 189*2becc36aSPaolo Bonzini endforeach 190*2becc36aSPaolo Bonzini 191*2becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 192*2becc36aSPaolo Bonzini config_devices_mak = configure_file( 193*2becc36aSPaolo Bonzini input: ['default-configs' / target + '.mak', 'Kconfig'], 194*2becc36aSPaolo Bonzini output: config_devices_mak, 195*2becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 196*2becc36aSPaolo Bonzini capture: true, 197*2becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 198*2becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 199*2becc36aSPaolo Bonzini base_kconfig]) 200*2becc36aSPaolo Bonzini config_devices_h += {target: custom_target( 201*2becc36aSPaolo Bonzini target + '-config-devices.h', 202*2becc36aSPaolo Bonzini input: config_devices_mak, 203*2becc36aSPaolo Bonzini output: target + '-config-devices.h', 204*2becc36aSPaolo Bonzini capture: true, 205*2becc36aSPaolo Bonzini command: [create_config, '@INPUT@'])} 206*2becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 207*2becc36aSPaolo Bonzini config_target += keyval.load(config_devices_mak) 208*2becc36aSPaolo Bonzini endif 209*2becc36aSPaolo Bonzini config_target_mak += {target: config_target} 210a81df1b6SPaolo Bonziniendforeach 211a81df1b6SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 212a81df1b6SPaolo Bonzinihave_block = have_system or have_tools 213a81df1b6SPaolo Bonzini 214*2becc36aSPaolo Bonzinigrepy = find_program('scripts/grepy.sh') 215*2becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 216*2becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 217*2becc36aSPaolo Bonzini# static_library target. 218*2becc36aSPaolo Bonzini# 219*2becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 220*2becc36aSPaolo Bonzini# build literally all source files, including devices only used by 221*2becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 222*2becc36aSPaolo Bonzini# pseudo symbol replaces it. 223*2becc36aSPaolo Bonzini 224*2becc36aSPaolo Bonziniif have_system 225*2becc36aSPaolo Bonzini config_all_devices_mak = configure_file( 226*2becc36aSPaolo Bonzini output: 'config-all-devices.mak', 227*2becc36aSPaolo Bonzini input: config_devices_mak_list, 228*2becc36aSPaolo Bonzini capture: true, 229*2becc36aSPaolo Bonzini command: [grepy, '@INPUT@'], 230*2becc36aSPaolo Bonzini ) 231*2becc36aSPaolo Bonzini config_all_devices = keyval.load(config_all_devices_mak) 232*2becc36aSPaolo Bonzinielse 233*2becc36aSPaolo Bonzini config_all_devices = {} 234*2becc36aSPaolo Bonziniendif 235*2becc36aSPaolo Bonziniconfig_all = config_all_devices 236*2becc36aSPaolo Bonziniconfig_all += config_host 237*2becc36aSPaolo Bonziniconfig_all += config_all_disas 238*2becc36aSPaolo Bonziniconfig_all += { 239*2becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 240*2becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 241*2becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 242*2becc36aSPaolo Bonzini 'CONFIG_ALL': true, 243*2becc36aSPaolo Bonzini} 244*2becc36aSPaolo Bonzini 245a81df1b6SPaolo Bonzini# Generators 246a81df1b6SPaolo Bonzini 2472c273f32SMarc-André Lureaugenh = [] 2483f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 249650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 250a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 251a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 252a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 253a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 254a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 255a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 256a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 257a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 258a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 259a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 260a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 261a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 262a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 263a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 264a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 265a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 266a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 267a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 268a81df1b6SPaolo Bonzini] 269a81df1b6SPaolo Bonzini 270a81df1b6SPaolo Bonzinitracetool = [ 271a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 272a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 273a81df1b6SPaolo Bonzini] 274a81df1b6SPaolo Bonzini 2752c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 2762c273f32SMarc-André Lureau meson.current_source_dir(), 2772c273f32SMarc-André Lureau config_host['PKGVERSION'], config_host['VERSION']] 2782c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 2792c273f32SMarc-André Lureau output: 'qemu-version.h', 2802c273f32SMarc-André Lureau command: qemu_version_cmd, 2812c273f32SMarc-André Lureau capture: true, 2822c273f32SMarc-André Lureau build_by_default: true, 2832c273f32SMarc-André Lureau build_always_stale: true) 2842c273f32SMarc-André Lureaugenh += qemu_version 2852c273f32SMarc-André Lureau 286*2becc36aSPaolo Bonziniconfig_host_h = custom_target('config-host.h', 287*2becc36aSPaolo Bonzini input: meson.current_build_dir() / 'config-host.mak', 288*2becc36aSPaolo Bonzini output: 'config-host.h', 289*2becc36aSPaolo Bonzini capture: true, 290*2becc36aSPaolo Bonzini command: [create_config, '@INPUT@']) 291*2becc36aSPaolo Bonzinigenh += config_host_h 292*2becc36aSPaolo Bonzini 2933f885659SMarc-André Lureauhxdep = [] 2943f885659SMarc-André Lureauhx_headers = [ 2953f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 2963f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 2973f885659SMarc-André Lureau] 2983f885659SMarc-André Lureauif have_system 2993f885659SMarc-André Lureau hx_headers += [ 3003f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 3013f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 3023f885659SMarc-André Lureau ] 3033f885659SMarc-André Lureauendif 3043f885659SMarc-André Lureauforeach d : hx_headers 3053f885659SMarc-André Lureau custom_target(d[1], 3063f885659SMarc-André Lureau input: files(d[0]), 3073f885659SMarc-André Lureau output: d[1], 3083f885659SMarc-André Lureau capture: true, 3093f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 3103f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 3113f885659SMarc-André Lureauendforeach 3123f885659SMarc-André Lureaugenh += hxdep 3133f885659SMarc-André Lureau 314a81df1b6SPaolo Bonzini# Collect sourcesets. 315a81df1b6SPaolo Bonzini 316a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 317a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 318a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 319*2becc36aSPaolo Bonzinicommon_ss = ss.source_set() 320*2becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 321*2becc36aSPaolo Bonziniuser_ss = ss.source_set() 322*2becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 323*2becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 324*2becc36aSPaolo Bonzinispecific_ss = ss.source_set() 325*2becc36aSPaolo Bonzini 326*2becc36aSPaolo Bonzinihw_arch = {} 327*2becc36aSPaolo Bonzinitarget_arch = {} 328*2becc36aSPaolo Bonzinitarget_softmmu_arch = {} 329a81df1b6SPaolo Bonzini 330a81df1b6SPaolo Bonzini############### 331a81df1b6SPaolo Bonzini# Trace files # 332a81df1b6SPaolo Bonzini############### 333a81df1b6SPaolo Bonzini 334a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 335a81df1b6SPaolo Bonzini 'accel/kvm', 336a81df1b6SPaolo Bonzini 'accel/tcg', 337a81df1b6SPaolo Bonzini 'crypto', 338a81df1b6SPaolo Bonzini 'monitor', 339a81df1b6SPaolo Bonzini] 340a81df1b6SPaolo Bonziniif have_user 341a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 342a81df1b6SPaolo Bonziniendif 343a81df1b6SPaolo Bonziniif have_block 344a81df1b6SPaolo Bonzini trace_events_subdirs += [ 345a81df1b6SPaolo Bonzini 'authz', 346a81df1b6SPaolo Bonzini 'block', 347a81df1b6SPaolo Bonzini 'io', 348a81df1b6SPaolo Bonzini 'nbd', 349a81df1b6SPaolo Bonzini 'scsi', 350a81df1b6SPaolo Bonzini ] 351a81df1b6SPaolo Bonziniendif 352a81df1b6SPaolo Bonziniif have_system 353a81df1b6SPaolo Bonzini trace_events_subdirs += [ 354a81df1b6SPaolo Bonzini 'audio', 355a81df1b6SPaolo Bonzini 'backends', 356a81df1b6SPaolo Bonzini 'backends/tpm', 357a81df1b6SPaolo Bonzini 'chardev', 358a81df1b6SPaolo Bonzini 'hw/9pfs', 359a81df1b6SPaolo Bonzini 'hw/acpi', 360a81df1b6SPaolo Bonzini 'hw/alpha', 361a81df1b6SPaolo Bonzini 'hw/arm', 362a81df1b6SPaolo Bonzini 'hw/audio', 363a81df1b6SPaolo Bonzini 'hw/block', 364a81df1b6SPaolo Bonzini 'hw/block/dataplane', 365a81df1b6SPaolo Bonzini 'hw/char', 366a81df1b6SPaolo Bonzini 'hw/display', 367a81df1b6SPaolo Bonzini 'hw/dma', 368a81df1b6SPaolo Bonzini 'hw/hppa', 369a81df1b6SPaolo Bonzini 'hw/hyperv', 370a81df1b6SPaolo Bonzini 'hw/i2c', 371a81df1b6SPaolo Bonzini 'hw/i386', 372a81df1b6SPaolo Bonzini 'hw/i386/xen', 373a81df1b6SPaolo Bonzini 'hw/ide', 374a81df1b6SPaolo Bonzini 'hw/input', 375a81df1b6SPaolo Bonzini 'hw/intc', 376a81df1b6SPaolo Bonzini 'hw/isa', 377a81df1b6SPaolo Bonzini 'hw/mem', 378a81df1b6SPaolo Bonzini 'hw/mips', 379a81df1b6SPaolo Bonzini 'hw/misc', 380a81df1b6SPaolo Bonzini 'hw/misc/macio', 381a81df1b6SPaolo Bonzini 'hw/net', 382a81df1b6SPaolo Bonzini 'hw/nvram', 383a81df1b6SPaolo Bonzini 'hw/pci', 384a81df1b6SPaolo Bonzini 'hw/pci-host', 385a81df1b6SPaolo Bonzini 'hw/ppc', 386a81df1b6SPaolo Bonzini 'hw/rdma', 387a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 388a81df1b6SPaolo Bonzini 'hw/rtc', 389a81df1b6SPaolo Bonzini 'hw/s390x', 390a81df1b6SPaolo Bonzini 'hw/scsi', 391a81df1b6SPaolo Bonzini 'hw/sd', 392a81df1b6SPaolo Bonzini 'hw/sparc', 393a81df1b6SPaolo Bonzini 'hw/sparc64', 394a81df1b6SPaolo Bonzini 'hw/ssi', 395a81df1b6SPaolo Bonzini 'hw/timer', 396a81df1b6SPaolo Bonzini 'hw/tpm', 397a81df1b6SPaolo Bonzini 'hw/usb', 398a81df1b6SPaolo Bonzini 'hw/vfio', 399a81df1b6SPaolo Bonzini 'hw/virtio', 400a81df1b6SPaolo Bonzini 'hw/watchdog', 401a81df1b6SPaolo Bonzini 'hw/xen', 402a81df1b6SPaolo Bonzini 'hw/gpio', 403a81df1b6SPaolo Bonzini 'hw/riscv', 404a81df1b6SPaolo Bonzini 'migration', 405a81df1b6SPaolo Bonzini 'net', 406a81df1b6SPaolo Bonzini 'ui', 407a81df1b6SPaolo Bonzini ] 408a81df1b6SPaolo Bonziniendif 409a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 410a81df1b6SPaolo Bonzini 'hw/core', 411a81df1b6SPaolo Bonzini 'qapi', 412a81df1b6SPaolo Bonzini 'qom', 413a81df1b6SPaolo Bonzini 'target/arm', 414a81df1b6SPaolo Bonzini 'target/hppa', 415a81df1b6SPaolo Bonzini 'target/i386', 416a81df1b6SPaolo Bonzini 'target/mips', 417a81df1b6SPaolo Bonzini 'target/ppc', 418a81df1b6SPaolo Bonzini 'target/riscv', 419a81df1b6SPaolo Bonzini 'target/s390x', 420a81df1b6SPaolo Bonzini 'target/sparc', 421a81df1b6SPaolo Bonzini 'util', 422a81df1b6SPaolo Bonzini] 423a81df1b6SPaolo Bonzini 424a81df1b6SPaolo Bonzinisubdir('qapi') 425a81df1b6SPaolo Bonzinisubdir('qobject') 426a81df1b6SPaolo Bonzinisubdir('stubs') 427a81df1b6SPaolo Bonzinisubdir('trace') 428a81df1b6SPaolo Bonzinisubdir('util') 4295582c58fSMarc-André Lureausubdir('qom') 4305582c58fSMarc-André Lureausubdir('authz') 431a81df1b6SPaolo Bonzinisubdir('crypto') 432a81df1b6SPaolo Bonzinisubdir('storage-daemon') 4332d78b56eSMarc-André Lureausubdir('ui') 434a81df1b6SPaolo Bonzini 435a81df1b6SPaolo Bonzini# Build targets from sourcesets 436a81df1b6SPaolo Bonzini 437*2becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 438a81df1b6SPaolo Bonzini 439a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 440*2becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 441a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 442a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 443a81df1b6SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket]) 444a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 44504c6f1e7SMarc-André Lureau sources: genh + version_res) 446a81df1b6SPaolo Bonzini 4477fcfd456SMarc-André Lureausubdir('io') 448ec0d5893SMarc-André Lureausubdir('fsdev') 449d3b18480SMarc-André Lureausubdir('target') 450ec0d5893SMarc-André Lureau 451*2becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: softmmu_ss) 452*2becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 453*2becc36aSPaolo Bonzini 454*2becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 455*2becc36aSPaolo Bonzinicommon_all = static_library('common', 456*2becc36aSPaolo Bonzini build_by_default: false, 457*2becc36aSPaolo Bonzini sources: common_all.sources() + genh, 458*2becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 459*2becc36aSPaolo Bonzini name_suffix: 'fa') 460*2becc36aSPaolo Bonzini 461*2becc36aSPaolo Bonziniforeach target : target_dirs 462*2becc36aSPaolo Bonzini config_target = config_target_mak[target] 463*2becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 464*2becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 465*2becc36aSPaolo Bonzini arch_srcs = [] 466*2becc36aSPaolo Bonzini 467*2becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 468*2becc36aSPaolo Bonzini if targetos == 'linux' 469*2becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 470*2becc36aSPaolo Bonzini endif 471*2becc36aSPaolo Bonzini if target.endswith('-softmmu') 472*2becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 473*2becc36aSPaolo Bonzini target_type='system' 474*2becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 475*2becc36aSPaolo Bonzini else 476*2becc36aSPaolo Bonzini target_type='user' 477*2becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 478*2becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 479*2becc36aSPaolo Bonzini base_dir = 'linux-user' 480*2becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 481*2becc36aSPaolo Bonzini else 482*2becc36aSPaolo Bonzini base_dir = 'bsd-user' 483*2becc36aSPaolo Bonzini endif 484*2becc36aSPaolo Bonzini target_inc += include_directories( 485*2becc36aSPaolo Bonzini base_dir, 486*2becc36aSPaolo Bonzini base_dir / config_target['TARGET_ABI_DIR'], 487*2becc36aSPaolo Bonzini ) 488*2becc36aSPaolo Bonzini endif 489*2becc36aSPaolo Bonzini 490*2becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 491*2becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 492*2becc36aSPaolo Bonzini 493*2becc36aSPaolo Bonzini # TODO: Change to generator once obj-y goes away 494*2becc36aSPaolo Bonzini config_target_h = custom_target(target + '-config-target.h', 495*2becc36aSPaolo Bonzini input: meson.current_build_dir() / target / 'config-target.mak', 496*2becc36aSPaolo Bonzini output: target + '-config-target.h', 497*2becc36aSPaolo Bonzini capture: true, 498*2becc36aSPaolo Bonzini command: [create_config, '@INPUT@']) 499*2becc36aSPaolo Bonzini 500*2becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 501*2becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 502*2becc36aSPaolo Bonzini 503*2becc36aSPaolo Bonzini static_library('qemu-' + target, 504*2becc36aSPaolo Bonzini sources: arch_srcs + [config_target_h] + genh, 505*2becc36aSPaolo Bonzini objects: objects, 506*2becc36aSPaolo Bonzini include_directories: target_inc, 507*2becc36aSPaolo Bonzini c_args: ['-DNEED_CPU_H', 508*2becc36aSPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 509*2becc36aSPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)], 510*2becc36aSPaolo Bonzini name_suffix: 'fa') 511*2becc36aSPaolo Bonziniendforeach 512*2becc36aSPaolo Bonzini 513931049b4SPaolo Bonzini# Other build targets 514f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 515f15bff25SPaolo Bonzini subdir('qga') 516f15bff25SPaolo Bonziniendif 517f15bff25SPaolo Bonzini 518931049b4SPaolo Bonziniif have_tools 519a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 5201d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 521a9c9727cSPaolo Bonzini 522ade60d4fSMarc-André Lureau if 'CONFIG_XKBCOMMON' in config_host 523ade60d4fSMarc-André Lureau executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'), 524ade60d4fSMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: true) 525ade60d4fSMarc-André Lureau endif 526ade60d4fSMarc-André Lureau 527157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 528157e7b13SMarc-André Lureau dependencies: qemuutil, 529157e7b13SMarc-André Lureau install: true) 530157e7b13SMarc-André Lureau 531931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 532931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 5332d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 534ea458960SMarc-André Lureau if 'CONFIG_LINUX' in config_host 535ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 536ea458960SMarc-André Lureau endif 53732fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 53899650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 539931049b4SPaolo Bonzini endif 5408f51e01cSMarc-André Lureau 5418f51e01cSMarc-André Lureau if targetos == 'linux' 5428f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 5438f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 5448f51e01cSMarc-André Lureau install: true, 5458f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 5468f51e01cSMarc-André Lureau endif 5478f51e01cSMarc-André Lureau 5485ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 5495ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 5505ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 5515ee24e78SMarc-André Lureau endif 552931049b4SPaolo Bonziniendif 553931049b4SPaolo Bonzini 5543f99cf57SPaolo Bonzinisubdir('tools') 555bdcbea7aSMarc-André Lureausubdir('pc-bios') 556ce1c1e7aSPaolo Bonzinisubdir('tests') 5573f99cf57SPaolo Bonzini 558f9332757SPaolo Bonzinisummary_info = {} 559f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 560f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 561f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 562f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 563f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 564f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 565f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 566f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 567f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 568f9332757SPaolo Bonziniif targetos != 'windows' 569f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 570f9332757SPaolo Bonzini summary_info += {'Manual directory': config_host['mandir']} 571f9332757SPaolo Bonzinielse 572f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 573f9332757SPaolo Bonziniendif 574f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 575f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 576f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 577f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 578f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 579f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 580f9332757SPaolo Bonziniif link_language == 'cpp' 581f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 582f9332757SPaolo Bonzinielse 583f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 584f9332757SPaolo Bonziniendif 585f9332757SPaolo Bonziniif targetos == 'darwin' 586f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 587f9332757SPaolo Bonziniendif 588f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 589f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 590f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 591f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 592f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 593f9332757SPaolo Bonzinisummary_info += {'install': config_host['INSTALL']} 594f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 595f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 596f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 597f9332757SPaolo Bonzini# TODO: add back version 598f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 599f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 600f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 601f9332757SPaolo Bonziniendif 602f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 603f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 604f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 605f9332757SPaolo Bonziniendif 606f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 607f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 608f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 609f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 610f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 611f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 612f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 613f9332757SPaolo Bonzinisummary_info += {'static build': config_host.has_key('CONFIG_TOOLS')} 614f9332757SPaolo Bonziniif targetos == 'darwin' 615f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 616f9332757SPaolo Bonziniendif 617f9332757SPaolo Bonzini# TODO: add back version 618f9332757SPaolo Bonzinisummary_info += {'SDL support': config_host.has_key('CONFIG_SDL')} 619f9332757SPaolo Bonzinisummary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')} 620f9332757SPaolo Bonzini# TODO: add back version 621f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 622f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 623f9332757SPaolo Bonzini# TODO: add back version 624f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 625f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 626f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 627f9332757SPaolo Bonzini# TODO: add back version 628f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 629f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 630f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 631f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 632f9332757SPaolo Bonziniendif 633f9332757SPaolo Bonzini# TODO: add back version 634f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 635f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 636f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 637f9332757SPaolo Bonziniendif 638f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 639f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 640f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 641f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 642f9332757SPaolo Bonzini# TODO: add back version 643f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 644f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 645f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 646f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 647f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 648f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 649f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 650f9332757SPaolo Bonzinisummary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')} 651f9332757SPaolo Bonzinisummary_info += {'VNC support': config_host.has_key('CONFIG_VNC')} 652f9332757SPaolo Bonziniif config_host.has_key('CONFIG_VNC') 653f9332757SPaolo Bonzini summary_info += {'VNC SASL support': config_host.has_key('CONFIG_VNC_SASL')} 654f9332757SPaolo Bonzini summary_info += {'VNC JPEG support': config_host.has_key('CONFIG_VNC_JPEG')} 655f9332757SPaolo Bonzini summary_info += {'VNC PNG support': config_host.has_key('CONFIG_VNC_PNG')} 656f9332757SPaolo Bonziniendif 657f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 658f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 659f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 660f9332757SPaolo Bonziniendif 661f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 662f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 663f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 664f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 665f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 666f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 667f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 668f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 669f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 670f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG 671f9332757SPaolo Bonzini#summary_info += {'KVM support': have_kvm'} 672f9332757SPaolo Bonzini#summary_info += {'HAX support': have_hax'} 673f9332757SPaolo Bonzini#summary_info += {'HVF support': have_hvf'} 674f9332757SPaolo Bonzini#summary_info += {'WHPX support': have_whpx'} 675f9332757SPaolo Bonzini#summary_info += {'TCG support': have_tcg'} 676f9332757SPaolo Bonzini#if get_option('tcg') 677f9332757SPaolo Bonzini# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 678f9332757SPaolo Bonzini# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 679f9332757SPaolo Bonzini#endif 680f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')} 681f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 682f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 683f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 684f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 685f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 686f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 687f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 688f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 689f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 690f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 691f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 692f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 693f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 694f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 695f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 696f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 697f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 698f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 699f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 700f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 701f9332757SPaolo Bonziniendif 702f9332757SPaolo Bonzini# TODO: add back protocol and server version 703f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 704f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 705f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 706f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 707f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 708f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 709f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 710f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 711f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 712f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 713f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 714f9332757SPaolo Bonziniif targetos == 'windows' 715f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 716f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 717f9332757SPaolo Bonzini endif 718f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 719f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 720f9332757SPaolo Bonzini summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')} 721f9332757SPaolo Bonziniendif 722f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 723f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 724f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 725f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 726f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 727f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 728f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 729bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 730f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 731f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 732f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 733f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 734f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 735f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 736f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 737f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 738f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 739f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 740f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 741f9332757SPaolo Bonzinisummary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')} 742f9332757SPaolo Bonzinisummary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')} 743f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 744f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 745f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 746f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 747f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 748f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 749f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 750f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 751f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 752f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 753f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 754f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 755f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 756f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 757f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 758f9332757SPaolo Bonzinisummary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')} 759f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 760f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 761f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 762f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 763f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 764f9332757SPaolo Bonziniendif 765f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 766f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 767f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 768f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 769f9332757SPaolo Bonzini 770f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 771f9332757SPaolo Bonzini message() 772f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 773f9332757SPaolo Bonzini message() 774f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 775f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 776f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 777f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 778f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 779f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 780f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 781f9332757SPaolo Bonziniendif 782f9332757SPaolo Bonzini 783f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 784f9332757SPaolo Bonzini message() 785f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 786f9332757SPaolo Bonzini message() 787f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 788f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 789f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 790f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 791f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 792f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 793f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 794f9332757SPaolo Bonziniendif 795