1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0', 290756b2fSGerd Hoffmann default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 33e0e5190SPaolo Bonzini 'b_colorout=auto'], 4a5665051SPaolo Bonzini version: run_command('head', meson.source_root() / 'VERSION').stdout().strip()) 5a5665051SPaolo Bonzini 6a5665051SPaolo Bonzininot_found = dependency('', required: false) 7b29b40f4SPaolo Bonziniif meson.version().version_compare('>=0.56.0') 8b29b40f4SPaolo Bonzini keyval = import('keyval') 9b29b40f4SPaolo Bonzinielse 10a5665051SPaolo Bonzini keyval = import('unstable-keyval') 11b29b40f4SPaolo Bonziniendif 12a81df1b6SPaolo Bonziniss = import('sourceset') 13a81df1b6SPaolo Bonzini 14ce1c1e7aSPaolo Bonzinish = find_program('sh') 15a81df1b6SPaolo Bonzinicc = meson.get_compiler('c') 16a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak') 173154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host 1835be72baSPaolo Bonzinienable_static = 'CONFIG_STATIC' in config_host 19f8aa24eaSPaolo Bonzinibuild_docs = 'BUILD_DOCS' in config_host 20ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix') 21491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix') 22859aef02SPaolo Bonziniconfig_host_data = configuration_data() 23859aef02SPaolo Bonzinigenh = [] 24a5665051SPaolo Bonzini 25760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 26760e4327SPaolo Bonzinihave_user = false 27760e4327SPaolo Bonzinihave_system = false 28760e4327SPaolo Bonziniforeach target : target_dirs 29760e4327SPaolo Bonzini have_user = have_user or target.endswith('-user') 30760e4327SPaolo Bonzini have_system = have_system or target.endswith('-softmmu') 31760e4327SPaolo Bonziniendforeach 32760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 33760e4327SPaolo Bonzinihave_block = have_system or have_tools 34760e4327SPaolo Bonzini 35201e8ed7SPaolo Bonzinipython = import('python').find_installation() 36201e8ed7SPaolo Bonzini 37201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 38201e8ed7SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', 39201e8ed7SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 40201e8ed7SPaolo Bonzini 41201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family() 42201e8ed7SPaolo Bonzinitargetos = host_machine.system() 43201e8ed7SPaolo Bonzini 44201e8ed7SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'), 45201e8ed7SPaolo Bonzini output: 'ninjatool', 46201e8ed7SPaolo Bonzini configuration: config_host) 47201e8ed7SPaolo Bonzini 48201e8ed7SPaolo Bonzini################## 49201e8ed7SPaolo Bonzini# Compiler flags # 50201e8ed7SPaolo Bonzini################## 51201e8ed7SPaolo Bonzini 52a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 53a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 54a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 55a5665051SPaolo Bonzini native: false, language: 'cpp') 56a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 57a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 58a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 59a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 60a5665051SPaolo Bonzini 61fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 62fc929892SMarc-André Lureauif link_language == 'cpp' 63fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 64fc929892SMarc-André Lureauendif 65a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 66a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 67a5665051SPaolo Bonziniendif 68a5665051SPaolo Bonzini 69968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host 70968b4db3SPaolo Bonzini run_target('sparse', 71968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 72968b4db3SPaolo Bonzini config_host['SPARSE_CFLAGS'].split(), 73968b4db3SPaolo Bonzini 'compile_commands.json']) 74968b4db3SPaolo Bonziniendif 75968b4db3SPaolo Bonzini 76a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 77a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 784a96337dSPaolo Bonziniwinmm = [] 79a81df1b6SPaolo Bonzinisocket = [] 8004c6f1e7SMarc-André Lureauversion_res = [] 81d92989aaSMarc-André Lureaucoref = [] 82d92989aaSMarc-André Lureauiokit = [] 83d92989aaSMarc-André Lureaucocoa = [] 84d92989aaSMarc-André Lureauhvf = [] 85a81df1b6SPaolo Bonziniif targetos == 'windows' 86a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 874a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 8804c6f1e7SMarc-André Lureau 8904c6f1e7SMarc-André Lureau win = import('windows') 9004c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 9104c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 9204c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 93d92989aaSMarc-André Lureauelif targetos == 'darwin' 94d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 95d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 96d92989aaSMarc-André Lureau cocoa = dependency('appleframeworks', modules: 'Cocoa') 97d92989aaSMarc-André Lureau hvf = dependency('appleframeworks', modules: 'Hypervisor') 98cfad62f1SPaolo Bonzinielif targetos == 'sunos' 99cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 100cfad62f1SPaolo Bonzini cc.find_library('nsl'), 101cfad62f1SPaolo Bonzini cc.find_library('resolv')] 102cfad62f1SPaolo Bonzinielif targetos == 'haiku' 103cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 104cfad62f1SPaolo Bonzini cc.find_library('network'), 105cfad62f1SPaolo Bonzini cc.find_library('bsd')] 106a81df1b6SPaolo Bonziniendif 107215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands. This was 108215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles. 109215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(), 110215b0c2fSPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 111215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split()) 112a81df1b6SPaolo Bonzinigio = not_found 113a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 114a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 115a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 116a81df1b6SPaolo Bonziniendif 117a81df1b6SPaolo Bonzinilttng = not_found 118a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 119a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 120a81df1b6SPaolo Bonziniendif 121a81df1b6SPaolo Bonziniurcubp = not_found 122a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 123a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 124a81df1b6SPaolo Bonziniendif 12546859d93SDaniel P. Berrangégcrypt = not_found 12646859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host 12746859d93SDaniel P. Berrangé gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), 12846859d93SDaniel P. Berrangé link_args: config_host['GCRYPT_LIBS'].split()) 12946859d93SDaniel P. Berrangéendif 130a81df1b6SPaolo Bonzininettle = not_found 131a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 132a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 133a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 134a81df1b6SPaolo Bonziniendif 135a81df1b6SPaolo Bonzinignutls = not_found 136a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 137a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 138a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 139a81df1b6SPaolo Bonziniendif 140b7612f45SPaolo Bonzinipixman = not_found 141b7612f45SPaolo Bonziniif have_system or have_tools 142b7612f45SPaolo Bonzini pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', 1431a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 144b7612f45SPaolo Bonziniendif 1455e7fbd25SMarc-André Lureaupam = not_found 1465e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 1475e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 1485e7fbd25SMarc-André Lureauendif 1495e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 1501ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static) 1515e5733e5SMarc-André Lureaulinux_io_uring = not_found 1525e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 1535e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 1545e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 1555e5733e5SMarc-André Lureauendif 1565e5733e5SMarc-André Lureaulibxml2 = not_found 1575e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 1585e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 1595e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 1605e5733e5SMarc-André Lureauendif 1615e5733e5SMarc-André Lureaulibnfs = not_found 1625e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 1635e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 1645e5733e5SMarc-André Lureauendif 165ec0d5893SMarc-André Lureaulibattr = not_found 166ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 167ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 168ec0d5893SMarc-André Lureauendif 1693f99cf57SPaolo Bonziniseccomp = not_found 1703f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 1713f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 1723f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 1733f99cf57SPaolo Bonziniendif 1743f99cf57SPaolo Bonzinilibcap_ng = not_found 1753f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 1763f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 1773f99cf57SPaolo Bonziniendif 1781917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools 1791917ec6dSPaolo Bonzini xkbcommon = not_found 1801917ec6dSPaolo Bonzinielse 1811917ec6dSPaolo Bonzini xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), 1821a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 183ade60d4fSMarc-André Lureauendif 184cdaf0722SMarc-André Lureauslirp = not_found 185cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP') 186cdaf0722SMarc-André Lureau slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(), 187cdaf0722SMarc-André Lureau link_args: config_host['SLIRP_LIBS'].split()) 188cdaf0722SMarc-André Lureauendif 189cdaf0722SMarc-André Lureauvde = not_found 190cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE') 191cdaf0722SMarc-André Lureau vde = declare_dependency(link_args: config_host['VDE_LIBS'].split()) 192cdaf0722SMarc-André Lureauendif 193478e943fSPaolo Bonzinipulse = not_found 194478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 195478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 196478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 197478e943fSPaolo Bonziniendif 198478e943fSPaolo Bonzinialsa = not_found 199478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 200478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 201478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 202478e943fSPaolo Bonziniendif 203478e943fSPaolo Bonzinijack = not_found 204478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 205478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 206478e943fSPaolo Bonziniendif 2072634733cSPaolo Bonzinispice = not_found 2082634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 2092634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 2102634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 2112634733cSPaolo Bonziniendif 2125ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 213897b5afaSMarc-André Lureaulibmpathpersist = not_found 214897b5afaSMarc-André Lureauif config_host.has_key('CONFIG_MPATH') 215897b5afaSMarc-André Lureau libmpathpersist = cc.find_library('mpathpersist') 216897b5afaSMarc-André Lureauendif 217ccf7afa5SPaolo Bonzinilibdl = not_found 218ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 219ccf7afa5SPaolo Bonzini libdl = cc.find_library('dl', required: true) 220ccf7afa5SPaolo Bonziniendif 22199650b62SPaolo Bonzinilibiscsi = not_found 22299650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 22399650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 22499650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 22599650b62SPaolo Bonziniendif 2265e5733e5SMarc-André Lureauzstd = not_found 2275e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 2285e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 2295e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 2305e5733e5SMarc-André Lureauendif 231ea458960SMarc-André Lureaugbm = not_found 232ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 233ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 234ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 235ea458960SMarc-André Lureauendif 236ea458960SMarc-André Lureauvirgl = not_found 237ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 238ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 239ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 240ea458960SMarc-André Lureauendif 2411d7bb6abSMarc-André Lureaucurl = not_found 2421d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 2431d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 2441d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 2451d7bb6abSMarc-André Lureauendif 246f15bff25SPaolo Bonzinilibudev = not_found 247f15bff25SPaolo Bonziniif 'CONFIG_LIBUDEV' in config_host 248f15bff25SPaolo Bonzini libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split()) 249f15bff25SPaolo Bonziniendif 2502634733cSPaolo Bonzinibrlapi = not_found 2512634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 2522634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 2532634733cSPaolo Bonziniendif 25435be72baSPaolo Bonzini 255760e4327SPaolo Bonzinisdl = not_found 256760e4327SPaolo Bonziniif have_system 257363743daSYonggang Luo sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) 25835be72baSPaolo Bonzini sdl_image = not_found 259760e4327SPaolo Bonziniendif 26035be72baSPaolo Bonziniif sdl.found() 26135be72baSPaolo Bonzini # work around 2.0.8 bug 26235be72baSPaolo Bonzini sdl = declare_dependency(compile_args: '-Wno-undef', 26335be72baSPaolo Bonzini dependencies: sdl) 2647161a433SVolker Rümelin sdl_image = dependency('SDL2_image', required: get_option('sdl_image'), 2651a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 26635be72baSPaolo Bonzinielse 26735be72baSPaolo Bonzini if get_option('sdl_image').enabled() 26835be72baSPaolo Bonzini error('sdl-image required, but SDL was @0@', 26935be72baSPaolo Bonzini get_option('sdl').disabled() ? 'disabled' : 'not found') 2702634733cSPaolo Bonzini endif 27135be72baSPaolo Bonzini sdl_image = not_found 27235be72baSPaolo Bonziniendif 27335be72baSPaolo Bonzini 2745e5733e5SMarc-André Lureaurbd = not_found 2755e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 2765e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 2775e5733e5SMarc-André Lureauendif 2785e5733e5SMarc-André Lureauglusterfs = not_found 2795e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 2805e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 2815e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 2825e5733e5SMarc-André Lureauendif 2835e5733e5SMarc-André Lureaulibssh = not_found 2845e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 2855e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 2865e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 2875e5733e5SMarc-André Lureauendif 2885e5733e5SMarc-André Lureaulibbzip2 = not_found 2895e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 2905e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 2915e5733e5SMarc-André Lureauendif 2925e5733e5SMarc-André Lureauliblzfse = not_found 2935e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 2945e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 2955e5733e5SMarc-André Lureauendif 296478e943fSPaolo Bonzinioss = not_found 297478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 298478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 299478e943fSPaolo Bonziniendif 300478e943fSPaolo Bonzinidsound = not_found 301478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 302478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 303478e943fSPaolo Bonziniendif 304478e943fSPaolo Bonzinicoreaudio = not_found 305478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 306478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 307478e943fSPaolo Bonziniendif 3082b1ccdf4SMarc-André Lureauopengl = not_found 3092b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 310*de2d3005SPaolo Bonzini opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(), 311*de2d3005SPaolo Bonzini link_args: config_host['OPENGL_LIBS'].split()) 3122b1ccdf4SMarc-André Lureauelse 3132b1ccdf4SMarc-André Lureauendif 3142b1ccdf4SMarc-André Lureaugtk = not_found 3152b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host 3162b1ccdf4SMarc-André Lureau gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(), 3172b1ccdf4SMarc-André Lureau link_args: config_host['GTK_LIBS'].split()) 3182b1ccdf4SMarc-André Lureauendif 3192b1ccdf4SMarc-André Lureauvte = not_found 3202b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 3212b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 3222b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 3232b1ccdf4SMarc-André Lureauendif 3242b1ccdf4SMarc-André Lureaux11 = not_found 3252b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host 3262b1ccdf4SMarc-André Lureau x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(), 3272b1ccdf4SMarc-André Lureau link_args: config_host['X11_LIBS'].split()) 3282b1ccdf4SMarc-André Lureauendif 3292b1ccdf4SMarc-André Lureaucurses = not_found 3302b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host 3312b1ccdf4SMarc-André Lureau curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(), 3322b1ccdf4SMarc-André Lureau link_args: config_host['CURSES_LIBS'].split()) 3332b1ccdf4SMarc-André Lureauendif 3342b1ccdf4SMarc-André Lureauiconv = not_found 3352b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host 3362b1ccdf4SMarc-André Lureau iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(), 3372b1ccdf4SMarc-André Lureau link_args: config_host['ICONV_LIBS'].split()) 3382b1ccdf4SMarc-André Lureauendif 3392b1ccdf4SMarc-André Lureaugio = not_found 3402b1ccdf4SMarc-André Lureauif 'CONFIG_GIO' in config_host 3412b1ccdf4SMarc-André Lureau gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 3422b1ccdf4SMarc-André Lureau link_args: config_host['GIO_LIBS'].split()) 3432b1ccdf4SMarc-André Lureauendif 344a0b93237SPaolo Bonzinivnc = not_found 3452b1ccdf4SMarc-André Lureaupng = not_found 3462b1ccdf4SMarc-André Lureaujpeg = not_found 3472b1ccdf4SMarc-André Lureausasl = not_found 348a0b93237SPaolo Bonziniif get_option('vnc').enabled() 349a0b93237SPaolo Bonzini vnc = declare_dependency() # dummy dependency 350a0b93237SPaolo Bonzini png = dependency('libpng', required: get_option('vnc_png'), 3511a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 352a0b93237SPaolo Bonzini jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'], 353a0b93237SPaolo Bonzini required: get_option('vnc_jpeg'), 354a0b93237SPaolo Bonzini static: enable_static) 355a0b93237SPaolo Bonzini sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'], 356a0b93237SPaolo Bonzini required: get_option('vnc_sasl'), 357a0b93237SPaolo Bonzini static: enable_static) 358a0b93237SPaolo Bonzini if sasl.found() 359a0b93237SPaolo Bonzini sasl = declare_dependency(dependencies: sasl, 360a0b93237SPaolo Bonzini compile_args: '-DSTRUCT_IOVEC_DEFINED') 361a0b93237SPaolo Bonzini endif 3622b1ccdf4SMarc-André Lureauendif 3634a96337dSPaolo Bonzinifdt = not_found 3644a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host 3654a96337dSPaolo Bonzini fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(), 3664a96337dSPaolo Bonzini link_args: config_host['FDT_LIBS'].split()) 3674a96337dSPaolo Bonziniendif 368708eab42SMarc-André Lureausnappy = not_found 369708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host 370708eab42SMarc-André Lureau snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split()) 371708eab42SMarc-André Lureauendif 372708eab42SMarc-André Lureaulzo = not_found 373708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host 374708eab42SMarc-André Lureau lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split()) 375708eab42SMarc-André Lureauendif 37655166230SMarc-André Lureaurdma = not_found 37755166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host 37855166230SMarc-André Lureau rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split()) 37955166230SMarc-André Lureauendif 380ab318051SMarc-André Lureaunuma = not_found 381ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host 382ab318051SMarc-André Lureau numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split()) 383ab318051SMarc-André Lureauendif 384582ea95fSMarc-André Lureauxen = not_found 385582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host 386582ea95fSMarc-André Lureau xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(), 387582ea95fSMarc-André Lureau link_args: config_host['XEN_LIBS'].split()) 388582ea95fSMarc-André Lureauendif 38906677ce1SPaolo Bonzinicacard = not_found 39006677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host 39106677ce1SPaolo Bonzini cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(), 39206677ce1SPaolo Bonzini link_args: config_host['SMARTCARD_LIBS'].split()) 39306677ce1SPaolo Bonziniendif 3940a40bcb7SCésar Belleyu2f = not_found 3950a40bcb7SCésar Belleyif have_system 3960a40bcb7SCésar Belley u2f = dependency('u2f-emu', required: get_option('u2f'), 3970a40bcb7SCésar Belley method: 'pkg-config', 3980a40bcb7SCésar Belley static: enable_static) 3990a40bcb7SCésar Belleyendif 40006677ce1SPaolo Bonziniusbredir = not_found 40106677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host 40206677ce1SPaolo Bonzini usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(), 40306677ce1SPaolo Bonzini link_args: config_host['USB_REDIR_LIBS'].split()) 40406677ce1SPaolo Bonziniendif 40506677ce1SPaolo Bonzinilibusb = not_found 40606677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host 40706677ce1SPaolo Bonzini libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(), 40806677ce1SPaolo Bonzini link_args: config_host['LIBUSB_LIBS'].split()) 40906677ce1SPaolo Bonziniendif 410c9322ab5SMarc-André Lureaucapstone = not_found 411c9322ab5SMarc-André Lureauif 'CONFIG_CAPSTONE' in config_host 412c9322ab5SMarc-André Lureau capstone = declare_dependency(compile_args: config_host['CAPSTONE_CFLAGS'].split(), 413c9322ab5SMarc-André Lureau link_args: config_host['CAPSTONE_LIBS'].split()) 414c9322ab5SMarc-André Lureauendif 415c9322ab5SMarc-André Lureaulibpmem = not_found 416c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host 417c9322ab5SMarc-André Lureau libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), 418c9322ab5SMarc-André Lureau link_args: config_host['LIBPMEM_LIBS'].split()) 419c9322ab5SMarc-André Lureauendif 420c7c91a74SBruce Rogerslibdaxctl = not_found 421c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host 422c7c91a74SBruce Rogers libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) 423c7c91a74SBruce Rogersendif 4248ce0a45fSMarc-André Lureautasn1 = not_found 4258ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host 4268ce0a45fSMarc-André Lureau tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), 4278ce0a45fSMarc-André Lureau link_args: config_host['TASN1_LIBS'].split()) 4288ce0a45fSMarc-André Lureauendif 429af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false, 430af04e89dSMarc-André Lureau method: 'pkg-config', static: enable_static) 431a81df1b6SPaolo Bonzini 4323909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid') 4333909def8SMarc-André Lureau 434859aef02SPaolo Bonzini# Create config-host.h 435859aef02SPaolo Bonzini 43635be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found()) 43735be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) 438a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found()) 439a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) 440a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found()) 441a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found()) 4424113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) 443af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found()) 4443909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid) 445859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version())) 446859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]) 447859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1]) 448859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]) 449859aef02SPaolo Bonzini 450859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST'] 451859aef02SPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'qemu_confdir', 'qemu_datadir', 452859aef02SPaolo Bonzini 'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir', 453859aef02SPaolo Bonzini 'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath'] 454859aef02SPaolo Bonziniforeach k, v: config_host 455859aef02SPaolo Bonzini if arrays.contains(k) 456859aef02SPaolo Bonzini if v != '' 457859aef02SPaolo Bonzini v = '"' + '", "'.join(v.split()) + '", ' 458859aef02SPaolo Bonzini endif 459859aef02SPaolo Bonzini config_host_data.set(k, v) 460859aef02SPaolo Bonzini elif k == 'ARCH' 461859aef02SPaolo Bonzini config_host_data.set('HOST_' + v.to_upper(), 1) 462859aef02SPaolo Bonzini elif strings.contains(k) 463859aef02SPaolo Bonzini if not k.startswith('CONFIG_') 464859aef02SPaolo Bonzini k = 'CONFIG_' + k.to_upper() 465859aef02SPaolo Bonzini endif 466859aef02SPaolo Bonzini config_host_data.set_quoted(k, v) 467859aef02SPaolo Bonzini elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_') 468859aef02SPaolo Bonzini config_host_data.set(k, v == 'y' ? 1 : v) 469859aef02SPaolo Bonzini endif 470859aef02SPaolo Bonziniendforeach 471859aef02SPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data) 472859aef02SPaolo Bonzini 4732becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 474a98006bcSPaolo Bonziniconfig_all_devices = {} 475ca0fc784SPaolo Bonziniconfig_all_disas = {} 4762becc36aSPaolo Bonziniconfig_devices_mak_list = [] 4772becc36aSPaolo Bonziniconfig_devices_h = {} 478859aef02SPaolo Bonziniconfig_target_h = {} 4792becc36aSPaolo Bonziniconfig_target_mak = {} 480ca0fc784SPaolo Bonzini 481ca0fc784SPaolo Bonzinidisassemblers = { 482ca0fc784SPaolo Bonzini 'alpha' : ['CONFIG_ALPHA_DIS'], 483ca0fc784SPaolo Bonzini 'arm' : ['CONFIG_ARM_DIS'], 484ca0fc784SPaolo Bonzini 'avr' : ['CONFIG_AVR_DIS'], 485ca0fc784SPaolo Bonzini 'cris' : ['CONFIG_CRIS_DIS'], 486ca0fc784SPaolo Bonzini 'hppa' : ['CONFIG_HPPA_DIS'], 487ca0fc784SPaolo Bonzini 'i386' : ['CONFIG_I386_DIS'], 488ca0fc784SPaolo Bonzini 'x86_64' : ['CONFIG_I386_DIS'], 489ca0fc784SPaolo Bonzini 'x32' : ['CONFIG_I386_DIS'], 490ca0fc784SPaolo Bonzini 'lm32' : ['CONFIG_LM32_DIS'], 491ca0fc784SPaolo Bonzini 'm68k' : ['CONFIG_M68K_DIS'], 492ca0fc784SPaolo Bonzini 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], 493ca0fc784SPaolo Bonzini 'mips' : ['CONFIG_MIPS_DIS'], 494ca0fc784SPaolo Bonzini 'moxie' : ['CONFIG_MOXIE_DIS'], 495ca0fc784SPaolo Bonzini 'nios2' : ['CONFIG_NIOS2_DIS'], 496ca0fc784SPaolo Bonzini 'or1k' : ['CONFIG_OPENRISC_DIS'], 497ca0fc784SPaolo Bonzini 'ppc' : ['CONFIG_PPC_DIS'], 498ca0fc784SPaolo Bonzini 'riscv' : ['CONFIG_RISCV_DIS'], 499ca0fc784SPaolo Bonzini 'rx' : ['CONFIG_RX_DIS'], 500ca0fc784SPaolo Bonzini 's390' : ['CONFIG_S390_DIS'], 501ca0fc784SPaolo Bonzini 'sh4' : ['CONFIG_SH4_DIS'], 502ca0fc784SPaolo Bonzini 'sparc' : ['CONFIG_SPARC_DIS'], 503ca0fc784SPaolo Bonzini 'xtensa' : ['CONFIG_XTENSA_DIS'], 504ca0fc784SPaolo Bonzini} 505ca0fc784SPaolo Bonziniif link_language == 'cpp' 506ca0fc784SPaolo Bonzini disassemblers += { 507ca0fc784SPaolo Bonzini 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], 508ca0fc784SPaolo Bonzini 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], 509ca0fc784SPaolo Bonzini 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], 510ca0fc784SPaolo Bonzini } 511ca0fc784SPaolo Bonziniendif 512ca0fc784SPaolo Bonzini 5132becc36aSPaolo Bonzinikconfig_external_symbols = [ 5142becc36aSPaolo Bonzini 'CONFIG_KVM', 5152becc36aSPaolo Bonzini 'CONFIG_XEN', 5162becc36aSPaolo Bonzini 'CONFIG_TPM', 5172becc36aSPaolo Bonzini 'CONFIG_SPICE', 5182becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 5192becc36aSPaolo Bonzini 'CONFIG_OPENGL', 5202becc36aSPaolo Bonzini 'CONFIG_X11', 5212becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 5222becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 5232becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 5242becc36aSPaolo Bonzini 'CONFIG_LINUX', 5252becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 5262becc36aSPaolo Bonzini] 527859aef02SPaolo Bonziniignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS'] 528ca0fc784SPaolo Bonzini 529a81df1b6SPaolo Bonziniforeach target : target_dirs 530859aef02SPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') 531859aef02SPaolo Bonzini 532ca0fc784SPaolo Bonzini foreach k, v: disassemblers 533ca0fc784SPaolo Bonzini if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) 534ca0fc784SPaolo Bonzini foreach sym: v 535ca0fc784SPaolo Bonzini config_target += { sym: 'y' } 536ca0fc784SPaolo Bonzini config_all_disas += { sym: 'y' } 537ca0fc784SPaolo Bonzini endforeach 538ca0fc784SPaolo Bonzini endif 539ca0fc784SPaolo Bonzini endforeach 540ca0fc784SPaolo Bonzini 541859aef02SPaolo Bonzini config_target_data = configuration_data() 542859aef02SPaolo Bonzini foreach k, v: config_target 543859aef02SPaolo Bonzini if not k.startswith('TARGET_') and not k.startswith('CONFIG_') 544859aef02SPaolo Bonzini # do nothing 545859aef02SPaolo Bonzini elif ignored.contains(k) 546859aef02SPaolo Bonzini # do nothing 547859aef02SPaolo Bonzini elif k == 'TARGET_BASE_ARCH' 548859aef02SPaolo Bonzini config_target_data.set('TARGET_' + v.to_upper(), 1) 549859aef02SPaolo Bonzini elif k == 'TARGET_NAME' 550859aef02SPaolo Bonzini config_target_data.set_quoted(k, v) 551859aef02SPaolo Bonzini elif v == 'y' 552859aef02SPaolo Bonzini config_target_data.set(k, 1) 553859aef02SPaolo Bonzini else 554859aef02SPaolo Bonzini config_target_data.set(k, v) 555859aef02SPaolo Bonzini endif 556859aef02SPaolo Bonzini endforeach 557859aef02SPaolo Bonzini config_target_h += {target: configure_file(output: target + '-config-target.h', 558859aef02SPaolo Bonzini configuration: config_target_data)} 5592becc36aSPaolo Bonzini 5602becc36aSPaolo Bonzini if target.endswith('-softmmu') 5612becc36aSPaolo Bonzini base_kconfig = [] 5622becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 563859aef02SPaolo Bonzini if sym in config_target or sym in config_host 5642becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 5652becc36aSPaolo Bonzini endif 5662becc36aSPaolo Bonzini endforeach 5672becc36aSPaolo Bonzini 5682becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 5692becc36aSPaolo Bonzini config_devices_mak = configure_file( 5702becc36aSPaolo Bonzini input: ['default-configs' / target + '.mak', 'Kconfig'], 5712becc36aSPaolo Bonzini output: config_devices_mak, 5722becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 5732becc36aSPaolo Bonzini capture: true, 5742becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 5752becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 5762becc36aSPaolo Bonzini base_kconfig]) 577859aef02SPaolo Bonzini 578859aef02SPaolo Bonzini config_devices_data = configuration_data() 579859aef02SPaolo Bonzini config_devices = keyval.load(config_devices_mak) 580859aef02SPaolo Bonzini foreach k, v: config_devices 581859aef02SPaolo Bonzini config_devices_data.set(k, 1) 582859aef02SPaolo Bonzini endforeach 5832becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 584859aef02SPaolo Bonzini config_devices_h += {target: configure_file(output: target + '-config-devices.h', 585859aef02SPaolo Bonzini configuration: config_devices_data)} 586859aef02SPaolo Bonzini config_target += config_devices 587a98006bcSPaolo Bonzini config_all_devices += config_devices 5882becc36aSPaolo Bonzini endif 5892becc36aSPaolo Bonzini config_target_mak += {target: config_target} 590a81df1b6SPaolo Bonziniendforeach 591a81df1b6SPaolo Bonzini 5922becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 5932becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 5942becc36aSPaolo Bonzini# static_library target. 5952becc36aSPaolo Bonzini# 5962becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 5972becc36aSPaolo Bonzini# build literally all source files, including devices only used by 5982becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 5992becc36aSPaolo Bonzini# pseudo symbol replaces it. 6002becc36aSPaolo Bonzini 6012becc36aSPaolo Bonziniconfig_all = config_all_devices 6022becc36aSPaolo Bonziniconfig_all += config_host 6032becc36aSPaolo Bonziniconfig_all += config_all_disas 6042becc36aSPaolo Bonziniconfig_all += { 6052becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 6062becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 6072becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 6082becc36aSPaolo Bonzini 'CONFIG_ALL': true, 6092becc36aSPaolo Bonzini} 6102becc36aSPaolo Bonzini 611a81df1b6SPaolo Bonzini# Generators 612a81df1b6SPaolo Bonzini 6133f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 614650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 615a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 616a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 617a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 618a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 619a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 620a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 621a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 622a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 623a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 624a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 625a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 626a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 627a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 628a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 629a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 630a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 631a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 632a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 633a81df1b6SPaolo Bonzini] 634a81df1b6SPaolo Bonzini 635a81df1b6SPaolo Bonzinitracetool = [ 636a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 637a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 638a81df1b6SPaolo Bonzini] 639a81df1b6SPaolo Bonzini 6402c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 6412c273f32SMarc-André Lureau meson.current_source_dir(), 642859aef02SPaolo Bonzini config_host['PKGVERSION'], meson.project_version()] 6432c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 6442c273f32SMarc-André Lureau output: 'qemu-version.h', 6452c273f32SMarc-André Lureau command: qemu_version_cmd, 6462c273f32SMarc-André Lureau capture: true, 6472c273f32SMarc-André Lureau build_by_default: true, 6482c273f32SMarc-André Lureau build_always_stale: true) 6492c273f32SMarc-André Lureaugenh += qemu_version 6502c273f32SMarc-André Lureau 6513f885659SMarc-André Lureauhxdep = [] 6523f885659SMarc-André Lureauhx_headers = [ 6533f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 6543f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 6553f885659SMarc-André Lureau] 6563f885659SMarc-André Lureauif have_system 6573f885659SMarc-André Lureau hx_headers += [ 6583f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 6593f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 6603f885659SMarc-André Lureau ] 6613f885659SMarc-André Lureauendif 6623f885659SMarc-André Lureauforeach d : hx_headers 663b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 6643f885659SMarc-André Lureau input: files(d[0]), 6653f885659SMarc-André Lureau output: d[1], 6663f885659SMarc-André Lureau capture: true, 6673f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 6683f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 6693f885659SMarc-André Lureauendforeach 6703f885659SMarc-André Lureaugenh += hxdep 6713f885659SMarc-André Lureau 672a81df1b6SPaolo Bonzini# Collect sourcesets. 673a81df1b6SPaolo Bonzini 674a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 675a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 676a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 6773154fee4SMarc-André Lureaublock_ss = ss.source_set() 6784a96337dSPaolo Bonziniblockdev_ss = ss.source_set() 679ff219dcaSPaolo Bonziniqmp_ss = ss.source_set() 6802becc36aSPaolo Bonzinicommon_ss = ss.source_set() 6812becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 6822becc36aSPaolo Bonziniuser_ss = ss.source_set() 6832becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 6842becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 6852becc36aSPaolo Bonzinispecific_ss = ss.source_set() 68664ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set() 6872becc36aSPaolo Bonzini 6883154fee4SMarc-André Lureaumodules = {} 6892becc36aSPaolo Bonzinihw_arch = {} 6902becc36aSPaolo Bonzinitarget_arch = {} 6912becc36aSPaolo Bonzinitarget_softmmu_arch = {} 692a81df1b6SPaolo Bonzini 693a81df1b6SPaolo Bonzini############### 694a81df1b6SPaolo Bonzini# Trace files # 695a81df1b6SPaolo Bonzini############### 696a81df1b6SPaolo Bonzini 697c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once 698c9322ab5SMarc-André Lureau# we have those 699a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 700a81df1b6SPaolo Bonzini 'accel/kvm', 701a81df1b6SPaolo Bonzini 'accel/tcg', 702a81df1b6SPaolo Bonzini 'crypto', 703a81df1b6SPaolo Bonzini 'monitor', 704a81df1b6SPaolo Bonzini] 705a81df1b6SPaolo Bonziniif have_user 706a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 707a81df1b6SPaolo Bonziniendif 708a81df1b6SPaolo Bonziniif have_block 709a81df1b6SPaolo Bonzini trace_events_subdirs += [ 710a81df1b6SPaolo Bonzini 'authz', 711a81df1b6SPaolo Bonzini 'block', 712a81df1b6SPaolo Bonzini 'io', 713a81df1b6SPaolo Bonzini 'nbd', 714a81df1b6SPaolo Bonzini 'scsi', 715a81df1b6SPaolo Bonzini ] 716a81df1b6SPaolo Bonziniendif 717a81df1b6SPaolo Bonziniif have_system 718a81df1b6SPaolo Bonzini trace_events_subdirs += [ 719a81df1b6SPaolo Bonzini 'audio', 720a81df1b6SPaolo Bonzini 'backends', 721a81df1b6SPaolo Bonzini 'backends/tpm', 722a81df1b6SPaolo Bonzini 'chardev', 723a81df1b6SPaolo Bonzini 'hw/9pfs', 724a81df1b6SPaolo Bonzini 'hw/acpi', 725a81df1b6SPaolo Bonzini 'hw/alpha', 726a81df1b6SPaolo Bonzini 'hw/arm', 727a81df1b6SPaolo Bonzini 'hw/audio', 728a81df1b6SPaolo Bonzini 'hw/block', 729a81df1b6SPaolo Bonzini 'hw/block/dataplane', 730a81df1b6SPaolo Bonzini 'hw/char', 731a81df1b6SPaolo Bonzini 'hw/display', 732a81df1b6SPaolo Bonzini 'hw/dma', 733a81df1b6SPaolo Bonzini 'hw/hppa', 734a81df1b6SPaolo Bonzini 'hw/hyperv', 735a81df1b6SPaolo Bonzini 'hw/i2c', 736a81df1b6SPaolo Bonzini 'hw/i386', 737a81df1b6SPaolo Bonzini 'hw/i386/xen', 738a81df1b6SPaolo Bonzini 'hw/ide', 739a81df1b6SPaolo Bonzini 'hw/input', 740a81df1b6SPaolo Bonzini 'hw/intc', 741a81df1b6SPaolo Bonzini 'hw/isa', 742a81df1b6SPaolo Bonzini 'hw/mem', 743a81df1b6SPaolo Bonzini 'hw/mips', 744a81df1b6SPaolo Bonzini 'hw/misc', 745a81df1b6SPaolo Bonzini 'hw/misc/macio', 746a81df1b6SPaolo Bonzini 'hw/net', 747a81df1b6SPaolo Bonzini 'hw/nvram', 748a81df1b6SPaolo Bonzini 'hw/pci', 749a81df1b6SPaolo Bonzini 'hw/pci-host', 750a81df1b6SPaolo Bonzini 'hw/ppc', 751a81df1b6SPaolo Bonzini 'hw/rdma', 752a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 753a81df1b6SPaolo Bonzini 'hw/rtc', 754a81df1b6SPaolo Bonzini 'hw/s390x', 755a81df1b6SPaolo Bonzini 'hw/scsi', 756a81df1b6SPaolo Bonzini 'hw/sd', 757a81df1b6SPaolo Bonzini 'hw/sparc', 758a81df1b6SPaolo Bonzini 'hw/sparc64', 759a81df1b6SPaolo Bonzini 'hw/ssi', 760a81df1b6SPaolo Bonzini 'hw/timer', 761a81df1b6SPaolo Bonzini 'hw/tpm', 762a81df1b6SPaolo Bonzini 'hw/usb', 763a81df1b6SPaolo Bonzini 'hw/vfio', 764a81df1b6SPaolo Bonzini 'hw/virtio', 765a81df1b6SPaolo Bonzini 'hw/watchdog', 766a81df1b6SPaolo Bonzini 'hw/xen', 767a81df1b6SPaolo Bonzini 'hw/gpio', 768a81df1b6SPaolo Bonzini 'hw/riscv', 769a81df1b6SPaolo Bonzini 'migration', 770a81df1b6SPaolo Bonzini 'net', 771a81df1b6SPaolo Bonzini 'ui', 772a81df1b6SPaolo Bonzini ] 773a81df1b6SPaolo Bonziniendif 774a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 775a81df1b6SPaolo Bonzini 'hw/core', 776a81df1b6SPaolo Bonzini 'qapi', 777a81df1b6SPaolo Bonzini 'qom', 778a81df1b6SPaolo Bonzini 'target/arm', 779a81df1b6SPaolo Bonzini 'target/hppa', 780a81df1b6SPaolo Bonzini 'target/i386', 781a81df1b6SPaolo Bonzini 'target/mips', 782a81df1b6SPaolo Bonzini 'target/ppc', 783a81df1b6SPaolo Bonzini 'target/riscv', 784a81df1b6SPaolo Bonzini 'target/s390x', 785a81df1b6SPaolo Bonzini 'target/sparc', 786a81df1b6SPaolo Bonzini 'util', 787a81df1b6SPaolo Bonzini] 788a81df1b6SPaolo Bonzini 789a81df1b6SPaolo Bonzinisubdir('qapi') 790a81df1b6SPaolo Bonzinisubdir('qobject') 791a81df1b6SPaolo Bonzinisubdir('stubs') 792a81df1b6SPaolo Bonzinisubdir('trace') 793a81df1b6SPaolo Bonzinisubdir('util') 7945582c58fSMarc-André Lureausubdir('qom') 7955582c58fSMarc-André Lureausubdir('authz') 796a81df1b6SPaolo Bonzinisubdir('crypto') 7972d78b56eSMarc-André Lureausubdir('ui') 798a81df1b6SPaolo Bonzini 7993154fee4SMarc-André Lureau 8003154fee4SMarc-André Lureauif enable_modules 8013154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 8023154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 8033154fee4SMarc-André Lureauendif 8043154fee4SMarc-André Lureau 805a81df1b6SPaolo Bonzini# Build targets from sourcesets 806a81df1b6SPaolo Bonzini 8072becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 808a81df1b6SPaolo Bonzini 809a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 8102becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 811a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 812a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 813a81df1b6SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket]) 814a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 81504c6f1e7SMarc-André Lureau sources: genh + version_res) 816a81df1b6SPaolo Bonzini 817abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'), 818abff1abfSPaolo Bonzini output: 'decode-@BASENAME@.c.inc', 819abff1abfSPaolo Bonzini arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@']) 820abff1abfSPaolo Bonzini 821478e943fSPaolo Bonzinisubdir('audio') 8227fcfd456SMarc-André Lureausubdir('io') 823848e8ff6SMarc-André Lureausubdir('chardev') 824ec0d5893SMarc-André Lureausubdir('fsdev') 825abff1abfSPaolo Bonzinisubdir('libdecnumber') 826d3b18480SMarc-André Lureausubdir('target') 827708eab42SMarc-André Lureausubdir('dump') 828ec0d5893SMarc-André Lureau 8295e5733e5SMarc-André Lureaublock_ss.add(files( 8305e5733e5SMarc-André Lureau 'block.c', 8315e5733e5SMarc-André Lureau 'blockjob.c', 8325e5733e5SMarc-André Lureau 'job.c', 8335e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 8345e5733e5SMarc-André Lureau)) 8355e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 8365e5733e5SMarc-André Lureau 8375e5733e5SMarc-André Lureausubdir('nbd') 8385e5733e5SMarc-André Lureausubdir('scsi') 8395e5733e5SMarc-André Lureausubdir('block') 8405e5733e5SMarc-André Lureau 8414a96337dSPaolo Bonziniblockdev_ss.add(files( 8424a96337dSPaolo Bonzini 'blockdev.c', 8434a96337dSPaolo Bonzini 'blockdev-nbd.c', 8444a96337dSPaolo Bonzini 'iothread.c', 8454a96337dSPaolo Bonzini 'job-qmp.c', 8464a96337dSPaolo Bonzini)) 8474a96337dSPaolo Bonzini 8484a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 8494a96337dSPaolo Bonzini# os-win32.c does not 8504a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 8514a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 8524a96337dSPaolo Bonzini 8534a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 8544a96337dSPaolo Bonzinisoftmmu_ss.add(files( 8554a96337dSPaolo Bonzini 'bootdevice.c', 8564a96337dSPaolo Bonzini 'dma-helpers.c', 8574a96337dSPaolo Bonzini 'qdev-monitor.c', 8584a96337dSPaolo Bonzini), sdl) 8594a96337dSPaolo Bonzini 8604a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c')) 8614a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp]) 8624a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')]) 8634a96337dSPaolo Bonzini 8644a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 8654a96337dSPaolo Bonzini 8665d3ea0e1SPaolo Bonzinisubdir('softmmu') 867c9322ab5SMarc-André Lureau 868c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl) 869c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c')) 870c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files( 871c9322ab5SMarc-André Lureau 'fpu/softfloat.c', 872c9322ab5SMarc-André Lureau 'tcg/optimize.c', 873c9322ab5SMarc-André Lureau 'tcg/tcg-common.c', 874c9322ab5SMarc-André Lureau 'tcg/tcg-op-gvec.c', 875c9322ab5SMarc-André Lureau 'tcg/tcg-op-vec.c', 876c9322ab5SMarc-André Lureau 'tcg/tcg-op.c', 877c9322ab5SMarc-André Lureau 'tcg/tcg.c', 878c9322ab5SMarc-André Lureau)) 879c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c')) 880c9322ab5SMarc-André Lureau 881ab318051SMarc-André Lureausubdir('backends') 882c574e161SMarc-André Lureausubdir('disas') 88355166230SMarc-André Lureausubdir('migration') 884ff219dcaSPaolo Bonzinisubdir('monitor') 885cdaf0722SMarc-André Lureausubdir('net') 88617ef2af6SMarc-André Lureausubdir('replay') 887582ea95fSMarc-André Lureausubdir('hw') 8881a82878aSMarc-André Lureausubdir('accel') 889f556b4a1SPaolo Bonzinisubdir('plugins') 890b309c321SMarc-André Lureausubdir('bsd-user') 8913a30446aSMarc-André Lureausubdir('linux-user') 8923a30446aSMarc-André Lureau 893b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c')) 894b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss) 895b309c321SMarc-André Lureau 8963a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c')) 8973a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss) 8985d3ea0e1SPaolo Bonzini 899a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 900a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 90164ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz') 902a2ce7dbdSPaolo Bonzini 9033154fee4SMarc-André Lureaublock_mods = [] 9043154fee4SMarc-André Lureausoftmmu_mods = [] 9053154fee4SMarc-André Lureauforeach d, list : modules 9063154fee4SMarc-André Lureau foreach m, module_ss : list 9073154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 9083154fee4SMarc-André Lureau module_ss = module_ss.apply(config_host, strict: false) 9093154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 9103154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 9113154fee4SMarc-André Lureau if d == 'block' 9123154fee4SMarc-André Lureau block_mods += sl 9133154fee4SMarc-André Lureau else 9143154fee4SMarc-André Lureau softmmu_mods += sl 9153154fee4SMarc-André Lureau endif 9163154fee4SMarc-André Lureau else 9173154fee4SMarc-André Lureau if d == 'block' 9183154fee4SMarc-André Lureau block_ss.add_all(module_ss) 9193154fee4SMarc-André Lureau else 9203154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 9213154fee4SMarc-André Lureau endif 9223154fee4SMarc-André Lureau endif 9233154fee4SMarc-André Lureau endforeach 9243154fee4SMarc-André Lureauendforeach 9253154fee4SMarc-André Lureau 9263154fee4SMarc-André Lureaunm = find_program('nm') 9273154fee4SMarc-André Lureauundefsym = find_program('scripts/undefsym.sh') 9283154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 9293154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 9303154fee4SMarc-André Lureau capture: true, 9313154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 9323154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 9333154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 9343154fee4SMarc-André Lureau capture: true, 9353154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 9363154fee4SMarc-André Lureau 9375e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 9385e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 9395e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 9405e5733e5SMarc-André Lureau link_depends: block_syms, 9415e5733e5SMarc-André Lureau name_suffix: 'fa', 9425e5733e5SMarc-André Lureau build_by_default: false) 9435e5733e5SMarc-André Lureau 9445e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 945b7c70bf2SMarc-André Lureau link_args: '@block.syms', 946b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 9475e5733e5SMarc-André Lureau 948ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 949ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 950ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 951ff219dcaSPaolo Bonzini name_suffix: 'fa', 952ff219dcaSPaolo Bonzini build_by_default: false) 953ff219dcaSPaolo Bonzini 954ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 955ff219dcaSPaolo Bonzini 9563154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 9573154fee4SMarc-André Lureau shared_module(m.name(), 9583154fee4SMarc-André Lureau name_prefix: '', 9593154fee4SMarc-André Lureau link_whole: m, 9603154fee4SMarc-André Lureau install: true, 9613154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 9623154fee4SMarc-André Lureauendforeach 9633154fee4SMarc-André Lureau 96464ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp) 96564ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil) 96664ed6f92SPaolo Bonzini 96764ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss]) 9682becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 9692becc36aSPaolo Bonzini 9702becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 9712becc36aSPaolo Bonzinicommon_all = static_library('common', 9722becc36aSPaolo Bonzini build_by_default: false, 9732becc36aSPaolo Bonzini sources: common_all.sources() + genh, 9742becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 9752becc36aSPaolo Bonzini name_suffix: 'fa') 9762becc36aSPaolo Bonzini 977c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh') 978c9322ab5SMarc-André Lureau 97964ed6f92SPaolo Bonziniemulators = [] 9802becc36aSPaolo Bonziniforeach target : target_dirs 9812becc36aSPaolo Bonzini config_target = config_target_mak[target] 9822becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 9832becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 984859aef02SPaolo Bonzini arch_srcs = [config_target_h[target]] 98564ed6f92SPaolo Bonzini arch_deps = [] 98664ed6f92SPaolo Bonzini c_args = ['-DNEED_CPU_H', 98764ed6f92SPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 98864ed6f92SPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] 98964ed6f92SPaolo Bonzini link_args = [] 9902becc36aSPaolo Bonzini 991859aef02SPaolo Bonzini config_target += config_host 9922becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 9932becc36aSPaolo Bonzini if targetos == 'linux' 9942becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 9952becc36aSPaolo Bonzini endif 9962becc36aSPaolo Bonzini if target.endswith('-softmmu') 9972becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 9982becc36aSPaolo Bonzini target_type='system' 999abff1abfSPaolo Bonzini t = target_softmmu_arch[arch].apply(config_target, strict: false) 1000abff1abfSPaolo Bonzini arch_srcs += t.sources() 100164ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1002abff1abfSPaolo Bonzini 10032c44220dSMarc-André Lureau hw_dir = target_name == 'sparc64' ? 'sparc64' : arch 10042c44220dSMarc-André Lureau hw = hw_arch[hw_dir].apply(config_target, strict: false) 10052c44220dSMarc-André Lureau arch_srcs += hw.sources() 100664ed6f92SPaolo Bonzini arch_deps += hw.dependencies() 10072c44220dSMarc-André Lureau 10082becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 100964ed6f92SPaolo Bonzini link_args += ['@block.syms', '@qemu.syms'] 10102becc36aSPaolo Bonzini else 10113a30446aSMarc-André Lureau abi = config_target['TARGET_ABI_DIR'] 10122becc36aSPaolo Bonzini target_type='user' 10132becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 10142becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 10152becc36aSPaolo Bonzini base_dir = 'linux-user' 10162becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 10172becc36aSPaolo Bonzini else 10182becc36aSPaolo Bonzini base_dir = 'bsd-user' 10192becc36aSPaolo Bonzini endif 10202becc36aSPaolo Bonzini target_inc += include_directories( 10212becc36aSPaolo Bonzini base_dir, 10223a30446aSMarc-André Lureau base_dir / abi, 10232becc36aSPaolo Bonzini ) 10243a30446aSMarc-André Lureau if 'CONFIG_LINUX_USER' in config_target 10253a30446aSMarc-André Lureau dir = base_dir / abi 10263a30446aSMarc-André Lureau arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c') 10273a30446aSMarc-André Lureau if config_target.has_key('TARGET_SYSTBL_ABI') 10283a30446aSMarc-André Lureau arch_srcs += \ 10293a30446aSMarc-André Lureau syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'], 10303a30446aSMarc-André Lureau extra_args : config_target['TARGET_SYSTBL_ABI']) 10313a30446aSMarc-André Lureau endif 10323a30446aSMarc-André Lureau endif 10332becc36aSPaolo Bonzini endif 10342becc36aSPaolo Bonzini 1035c9322ab5SMarc-André Lureau if 'TARGET_XML_FILES' in config_target 1036c9322ab5SMarc-André Lureau gdbstub_xml = custom_target(target + '-gdbstub-xml.c', 1037c9322ab5SMarc-André Lureau output: target + '-gdbstub-xml.c', 1038c9322ab5SMarc-André Lureau input: files(config_target['TARGET_XML_FILES'].split()), 1039c9322ab5SMarc-André Lureau command: [feature_to_c, '@INPUT@'], 1040c9322ab5SMarc-André Lureau capture: true) 1041c9322ab5SMarc-André Lureau arch_srcs += gdbstub_xml 1042c9322ab5SMarc-André Lureau endif 1043c9322ab5SMarc-André Lureau 1044abff1abfSPaolo Bonzini t = target_arch[arch].apply(config_target, strict: false) 1045abff1abfSPaolo Bonzini arch_srcs += t.sources() 104664ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1047abff1abfSPaolo Bonzini 10482becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 10492becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 105064ed6f92SPaolo Bonzini deps = target_common.dependencies() 10512becc36aSPaolo Bonzini 10522becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 10532becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 105464ed6f92SPaolo Bonzini arch_deps += target_specific.dependencies() 10552becc36aSPaolo Bonzini 105664ed6f92SPaolo Bonzini lib = static_library('qemu-' + target, 1057859aef02SPaolo Bonzini sources: arch_srcs + genh, 1058b7612f45SPaolo Bonzini dependencies: arch_deps, 10592becc36aSPaolo Bonzini objects: objects, 10602becc36aSPaolo Bonzini include_directories: target_inc, 106164ed6f92SPaolo Bonzini c_args: c_args, 106264ed6f92SPaolo Bonzini build_by_default: false, 10632becc36aSPaolo Bonzini name_suffix: 'fa') 106464ed6f92SPaolo Bonzini 106564ed6f92SPaolo Bonzini if target.endswith('-softmmu') 106664ed6f92SPaolo Bonzini execs = [{ 106764ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name, 106864ed6f92SPaolo Bonzini 'gui': false, 106964ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 107064ed6f92SPaolo Bonzini 'dependencies': [] 107164ed6f92SPaolo Bonzini }] 107235be72baSPaolo Bonzini if targetos == 'windows' and (sdl.found() or gtk.found()) 107364ed6f92SPaolo Bonzini execs += [{ 107464ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name + 'w', 107564ed6f92SPaolo Bonzini 'gui': true, 107664ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 107764ed6f92SPaolo Bonzini 'dependencies': [] 107864ed6f92SPaolo Bonzini }] 107964ed6f92SPaolo Bonzini endif 108064ed6f92SPaolo Bonzini if config_host.has_key('CONFIG_FUZZ') 108164ed6f92SPaolo Bonzini specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false) 108264ed6f92SPaolo Bonzini execs += [{ 108364ed6f92SPaolo Bonzini 'name': 'qemu-fuzz-' + target_name, 108464ed6f92SPaolo Bonzini 'gui': false, 108564ed6f92SPaolo Bonzini 'sources': specific_fuzz.sources(), 108664ed6f92SPaolo Bonzini 'dependencies': specific_fuzz.dependencies(), 108764ed6f92SPaolo Bonzini 'link_depends': [files('tests/qtest/fuzz/fork_fuzz.ld')], 108864ed6f92SPaolo Bonzini }] 108964ed6f92SPaolo Bonzini endif 109064ed6f92SPaolo Bonzini else 109164ed6f92SPaolo Bonzini execs = [{ 109264ed6f92SPaolo Bonzini 'name': 'qemu-' + target_name, 109364ed6f92SPaolo Bonzini 'gui': false, 109464ed6f92SPaolo Bonzini 'sources': [], 109564ed6f92SPaolo Bonzini 'dependencies': [] 109664ed6f92SPaolo Bonzini }] 109764ed6f92SPaolo Bonzini endif 109864ed6f92SPaolo Bonzini foreach exe: execs 109964ed6f92SPaolo Bonzini emulators += executable(exe['name'], exe['sources'], 110064ed6f92SPaolo Bonzini install: true, 110164ed6f92SPaolo Bonzini c_args: c_args, 110264ed6f92SPaolo Bonzini dependencies: arch_deps + deps + exe['dependencies'], 110364ed6f92SPaolo Bonzini objects: lib.extract_all_objects(recursive: true), 110464ed6f92SPaolo Bonzini link_language: link_language, 110564ed6f92SPaolo Bonzini link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []), 110664ed6f92SPaolo Bonzini link_args: link_args, 110764ed6f92SPaolo Bonzini gui_app: exe['gui']) 110810e1d263SMarc-André Lureau 110910e1d263SMarc-André Lureau if 'CONFIG_TRACE_SYSTEMTAP' in config_host 111010e1d263SMarc-André Lureau foreach stp: [ 1111bd5f973aSStefan Hajnoczi {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, 1112bd5f973aSStefan Hajnoczi {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, 111310e1d263SMarc-André Lureau {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, 111410e1d263SMarc-André Lureau {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, 111510e1d263SMarc-André Lureau ] 1116bd5f973aSStefan Hajnoczi custom_target(exe['name'] + stp['ext'], 111710e1d263SMarc-André Lureau input: trace_events_all, 1118bd5f973aSStefan Hajnoczi output: exe['name'] + stp['ext'], 111910e1d263SMarc-André Lureau capture: true, 112010e1d263SMarc-André Lureau install: stp['install'], 1121ab4c0996SMarc-André Lureau install_dir: qemu_datadir / '../systemtap/tapset', 112210e1d263SMarc-André Lureau command: [ 112310e1d263SMarc-André Lureau tracetool, '--group=all', '--format=' + stp['fmt'], 112410e1d263SMarc-André Lureau '--binary=' + stp['bin'], 112510e1d263SMarc-André Lureau '--target-name=' + target_name, 112610e1d263SMarc-André Lureau '--target-type=' + target_type, 112710e1d263SMarc-André Lureau '--probe-prefix=qemu.' + target_type + '.' + target_name, 112810e1d263SMarc-André Lureau '@INPUT@', 112910e1d263SMarc-André Lureau ]) 113010e1d263SMarc-André Lureau endforeach 113110e1d263SMarc-André Lureau endif 113264ed6f92SPaolo Bonzini endforeach 11332becc36aSPaolo Bonziniendforeach 11342becc36aSPaolo Bonzini 1135931049b4SPaolo Bonzini# Other build targets 1136897b5afaSMarc-André Lureau 1137f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 1138f556b4a1SPaolo Bonzini install_headers('include/qemu/qemu-plugin.h') 1139f556b4a1SPaolo Bonziniendif 1140f556b4a1SPaolo Bonzini 1141f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 1142f15bff25SPaolo Bonzini subdir('qga') 1143f15bff25SPaolo Bonziniendif 1144f15bff25SPaolo Bonzini 11459755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled 11469755c94aSLaurent Vivier# when we don't build tools or system 11474113f4cfSLaurent Vivierif xkbcommon.found() 114828742467SMarc-André Lureau # used for the update-keymaps target, so include rules even if !have_tools 114928742467SMarc-André Lureau qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, 115028742467SMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: have_tools) 115128742467SMarc-André Lureauendif 115228742467SMarc-André Lureau 11538855e8f0SPhilippe Mathieu-Daudéqemu_block_tools = [] 1154931049b4SPaolo Bonziniif have_tools 1155b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 1156b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 1157b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 1158b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1159b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 1160b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1161b7c70bf2SMarc-André Lureau 11627c58bb76SPaolo Bonzini subdir('storage-daemon') 1163a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 11641d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 1165a9c9727cSPaolo Bonzini 1166157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 1167157e7b13SMarc-André Lureau dependencies: qemuutil, 1168157e7b13SMarc-André Lureau install: true) 1169157e7b13SMarc-André Lureau 1170931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 1171931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 11722d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 1173ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 117432fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 117599650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 1176931049b4SPaolo Bonzini endif 11778f51e01cSMarc-André Lureau 11788f51e01cSMarc-André Lureau if targetos == 'linux' 11798f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 11808f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 11818f51e01cSMarc-André Lureau install: true, 11828f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 1183897b5afaSMarc-André Lureau 1184897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 1185897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 1186897b5afaSMarc-André Lureau libcap_ng, libudev, libmpathpersist], 1187897b5afaSMarc-André Lureau install: true) 11888f51e01cSMarc-André Lureau endif 11898f51e01cSMarc-André Lureau 11905ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 11915ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 11925ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 11935ee24e78SMarc-André Lureau endif 1194931049b4SPaolo Bonziniendif 1195931049b4SPaolo Bonzini 1196f5aa6320SMarc-André Lureausubdir('scripts') 11973f99cf57SPaolo Bonzinisubdir('tools') 1198bdcbea7aSMarc-André Lureausubdir('pc-bios') 1199ce1c1e7aSPaolo Bonzinisubdir('tests') 1200f8aa24eaSPaolo Bonzinisubdir('docs') 1201e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host 1202e8f3bd71SMarc-André Lureau subdir('po') 1203e8f3bd71SMarc-André Lureauendif 12043f99cf57SPaolo Bonzini 1205acfdaac5SPaolo Bonziniif build_docs 1206acfdaac5SPaolo Bonzini makeinfo = find_program('makeinfo', required: build_docs) 1207acfdaac5SPaolo Bonzini 1208acfdaac5SPaolo Bonzini docs_inc = [ 1209acfdaac5SPaolo Bonzini '-I', meson.current_source_dir(), 1210acfdaac5SPaolo Bonzini '-I', meson.current_build_dir() / 'docs', 1211acfdaac5SPaolo Bonzini '-I', '@OUTDIR@', 1212acfdaac5SPaolo Bonzini ] 1213acfdaac5SPaolo Bonzini 1214acfdaac5SPaolo Bonzini version_texi = configure_file(output: 'version.texi', 1215acfdaac5SPaolo Bonzini input: 'version.texi.in', 1216acfdaac5SPaolo Bonzini configuration: {'VERSION': meson.project_version(), 1217acfdaac5SPaolo Bonzini 'qemu_confdir': config_host['qemu_confdir']}) 1218acfdaac5SPaolo Bonzini 1219acfdaac5SPaolo Bonzini texi = { 1220acfdaac5SPaolo Bonzini 'qemu-qmp-ref': ['docs/interop/qemu-qmp-ref.texi', qapi_doc_texi, version_texi], 1221acfdaac5SPaolo Bonzini } 1222acfdaac5SPaolo Bonzini if 'CONFIG_GUEST_AGENT' in config_host 1223acfdaac5SPaolo Bonzini texi += {'qemu-ga-ref': ['docs/interop/qemu-ga-ref.texi', qga_qapi_doc_texi, version_texi]} 1224acfdaac5SPaolo Bonzini endif 1225acfdaac5SPaolo Bonzini 1226acfdaac5SPaolo Bonzini if makeinfo.found() 1227acfdaac5SPaolo Bonzini cmd = [ 1228acfdaac5SPaolo Bonzini 'env', 'LC_ALL=C', makeinfo, '--no-split', '--number-sections', docs_inc, 1229acfdaac5SPaolo Bonzini '@INPUT0@', '-o', '@OUTPUT@', 1230acfdaac5SPaolo Bonzini ] 1231acfdaac5SPaolo Bonzini foreach ext, args: { 1232acfdaac5SPaolo Bonzini 'info': [], 1233acfdaac5SPaolo Bonzini 'html': ['--no-headers', '--html'], 1234acfdaac5SPaolo Bonzini 'txt': ['--no-headers', '--plaintext'], 1235acfdaac5SPaolo Bonzini } 1236acfdaac5SPaolo Bonzini t = [] 1237acfdaac5SPaolo Bonzini foreach doc, input: texi 1238acfdaac5SPaolo Bonzini output = doc + '.' + ext 1239acfdaac5SPaolo Bonzini t += custom_target(output, 1240acfdaac5SPaolo Bonzini input: input, 1241acfdaac5SPaolo Bonzini output: output, 1242acfdaac5SPaolo Bonzini install: true, 1243491e74c1SMarc-André Lureau install_dir: qemu_docdir / 'interop', 1244acfdaac5SPaolo Bonzini command: cmd + args) 1245acfdaac5SPaolo Bonzini endforeach 1246acfdaac5SPaolo Bonzini alias_target(ext, t) 1247acfdaac5SPaolo Bonzini endforeach 1248acfdaac5SPaolo Bonzini endif 1249acfdaac5SPaolo Bonzini 1250acfdaac5SPaolo Bonzini texi2pdf = find_program('texi2pdf', required: false) 1251acfdaac5SPaolo Bonzini 1252acfdaac5SPaolo Bonzini if texi2pdf.found() 1253acfdaac5SPaolo Bonzini pdfs = [] 1254acfdaac5SPaolo Bonzini foreach doc, input: texi 1255acfdaac5SPaolo Bonzini output = doc + '.pdf' 1256acfdaac5SPaolo Bonzini pdfs += custom_target(output, 1257acfdaac5SPaolo Bonzini input: input, 1258acfdaac5SPaolo Bonzini output: output, 1259acfdaac5SPaolo Bonzini command: [texi2pdf, '-q', docs_inc, '@INPUT0@', '-o', '@OUTPUT@'], 1260acfdaac5SPaolo Bonzini build_by_default: false) 1261acfdaac5SPaolo Bonzini endforeach 1262acfdaac5SPaolo Bonzini alias_target('pdf', pdfs) 1263acfdaac5SPaolo Bonzini endif 1264acfdaac5SPaolo Bonzini 1265acfdaac5SPaolo Bonzini texi2pod = find_program('scripts/texi2pod.pl') 1266acfdaac5SPaolo Bonzini pod2man = find_program('pod2man', required: build_docs) 1267acfdaac5SPaolo Bonzini 1268acfdaac5SPaolo Bonzini if pod2man.found() 1269acfdaac5SPaolo Bonzini foreach doc, input: texi 1270acfdaac5SPaolo Bonzini man = doc + '.7' 1271acfdaac5SPaolo Bonzini pod = custom_target(man + '.pod', 1272acfdaac5SPaolo Bonzini input: input, 1273acfdaac5SPaolo Bonzini output: man + '.pod', 1274acfdaac5SPaolo Bonzini command: [texi2pod, 1275acfdaac5SPaolo Bonzini '-DVERSION="' + meson.project_version() + '"', 1276acfdaac5SPaolo Bonzini '-DCONFDIR="' + config_host['qemu_confdir'] + '"', 1277acfdaac5SPaolo Bonzini '@INPUT0@', '@OUTPUT@']) 1278acfdaac5SPaolo Bonzini man = custom_target(man, 1279acfdaac5SPaolo Bonzini input: pod, 1280acfdaac5SPaolo Bonzini output: man, 1281acfdaac5SPaolo Bonzini capture: true, 1282acfdaac5SPaolo Bonzini install: true, 1283b81efab7SMarc-André Lureau install_dir: get_option('mandir') / 'man7', 1284acfdaac5SPaolo Bonzini command: [pod2man, '--utf8', '--section=7', '--center=" "', 1285acfdaac5SPaolo Bonzini '--release=" "', '@INPUT@']) 1286acfdaac5SPaolo Bonzini endforeach 1287acfdaac5SPaolo Bonzini endif 1288acfdaac5SPaolo Bonziniendif 1289acfdaac5SPaolo Bonzini 12908adfeba9SMarc-André Lureauif host_machine.system() == 'windows' 12918adfeba9SMarc-André Lureau nsis_cmd = [ 12928adfeba9SMarc-André Lureau find_program('scripts/nsis.py'), 12938adfeba9SMarc-André Lureau '@OUTPUT@', 12948adfeba9SMarc-André Lureau get_option('prefix'), 12958adfeba9SMarc-André Lureau meson.current_source_dir(), 12968adfeba9SMarc-André Lureau host_machine.cpu_family(), 12978adfeba9SMarc-André Lureau '--', 12988adfeba9SMarc-André Lureau '-DDISPLAYVERSION=' + meson.project_version(), 12998adfeba9SMarc-André Lureau ] 13008adfeba9SMarc-André Lureau if build_docs 13018adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_DOCUMENTATION=y' 13028adfeba9SMarc-André Lureau endif 13038adfeba9SMarc-André Lureau if 'CONFIG_GTK' in config_host 13048adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_GTK=y' 13058adfeba9SMarc-André Lureau endif 13068adfeba9SMarc-André Lureau 13078adfeba9SMarc-André Lureau nsis = custom_target('nsis', 13088adfeba9SMarc-André Lureau output: 'qemu-setup-' + meson.project_version() + '.exe', 13098adfeba9SMarc-André Lureau input: files('qemu.nsi'), 13108adfeba9SMarc-André Lureau build_always_stale: true, 13118adfeba9SMarc-André Lureau command: nsis_cmd + ['@INPUT@']) 13128adfeba9SMarc-André Lureau alias_target('installer', nsis) 13138adfeba9SMarc-André Lureauendif 13148adfeba9SMarc-André Lureau 1315f9332757SPaolo Bonzinisummary_info = {} 1316f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 1317f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 1318f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 1319f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 1320f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 1321f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 1322f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 1323f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 1324f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 1325f9332757SPaolo Bonziniif targetos != 'windows' 1326f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 1327b81efab7SMarc-André Lureau summary_info += {'Manual directory': get_option('mandir')} 1328f9332757SPaolo Bonzinielse 1329f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 1330f9332757SPaolo Bonziniendif 1331491e74c1SMarc-André Lureausummary_info += {'Doc directory': get_option('docdir')} 1332f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 1333f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 1334f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 1335f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 1336f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 1337f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 1338f9332757SPaolo Bonziniif link_language == 'cpp' 1339f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 1340f9332757SPaolo Bonzinielse 1341f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 1342f9332757SPaolo Bonziniendif 1343f9332757SPaolo Bonziniif targetos == 'darwin' 1344f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 1345f9332757SPaolo Bonziniendif 1346f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 1347f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 1348f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 1349f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 1350f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 1351f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 1352f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 1353f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 1354f9332757SPaolo Bonzini# TODO: add back version 1355f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 1356f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 1357f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 1358f9332757SPaolo Bonziniendif 1359f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 1360f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 1361f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 1362f9332757SPaolo Bonziniendif 1363f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 1364f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 1365f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 1366f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 1367f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 1368f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 1369f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 1370f9332757SPaolo Bonzinisummary_info += {'static build': config_host.has_key('CONFIG_TOOLS')} 1371f9332757SPaolo Bonziniif targetos == 'darwin' 1372f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 1373f9332757SPaolo Bonziniendif 1374f9332757SPaolo Bonzini# TODO: add back version 137535be72baSPaolo Bonzinisummary_info += {'SDL support': sdl.found()} 137635be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()} 1377f9332757SPaolo Bonzini# TODO: add back version 1378f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 1379f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 1380b7612f45SPaolo Bonzinisummary_info += {'pixman': pixman.found()} 1381f9332757SPaolo Bonzini# TODO: add back version 1382f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 1383f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 1384f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 1385f9332757SPaolo Bonzini# TODO: add back version 1386f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 1387f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 1388f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 1389f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1390f9332757SPaolo Bonziniendif 1391f9332757SPaolo Bonzini# TODO: add back version 1392f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 1393f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 1394f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1395f9332757SPaolo Bonziniendif 1396f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 1397f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 1398f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 1399f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 1400f9332757SPaolo Bonzini# TODO: add back version 1401f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 1402f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 1403f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 1404f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 1405f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 1406f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 1407f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 1408f9332757SPaolo Bonzinisummary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')} 1409a0b93237SPaolo Bonzinisummary_info += {'VNC support': vnc.found()} 1410a0b93237SPaolo Bonziniif vnc.found() 1411a0b93237SPaolo Bonzini summary_info += {'VNC SASL support': sasl.found()} 1412a0b93237SPaolo Bonzini summary_info += {'VNC JPEG support': jpeg.found()} 1413a0b93237SPaolo Bonzini summary_info += {'VNC PNG support': png.found()} 1414f9332757SPaolo Bonziniendif 1415f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 1416f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 1417f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 1418f9332757SPaolo Bonziniendif 1419f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 1420f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 1421f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 1422f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 1423f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 1424f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 1425f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 1426f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 1427f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 1428f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG 1429f9332757SPaolo Bonzini#summary_info += {'KVM support': have_kvm'} 1430f9332757SPaolo Bonzini#summary_info += {'HAX support': have_hax'} 1431f9332757SPaolo Bonzini#summary_info += {'HVF support': have_hvf'} 1432f9332757SPaolo Bonzini#summary_info += {'WHPX support': have_whpx'} 1433f9332757SPaolo Bonzini#summary_info += {'TCG support': have_tcg'} 1434f9332757SPaolo Bonzini#if get_option('tcg') 1435f9332757SPaolo Bonzini# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 1436f9332757SPaolo Bonzini# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 1437f9332757SPaolo Bonzini#endif 1438f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')} 1439f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 1440f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 1441f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 1442f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 1443f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 1444f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 1445f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 1446f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 1447f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 1448f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 1449f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 1450f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 1451f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 1452f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 1453f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 1454f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 1455f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 1456f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 1457f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 1458f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 1459f9332757SPaolo Bonziniendif 1460f9332757SPaolo Bonzini# TODO: add back protocol and server version 1461f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 1462f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 1463f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 1464f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 14650a40bcb7SCésar Belleysummary_info += {'U2F support': u2f.found()} 1466f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 1467f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 1468f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 1469f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 1470f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 1471f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 1472f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 1473f9332757SPaolo Bonziniif targetos == 'windows' 1474f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 1475f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 1476f9332757SPaolo Bonzini endif 1477f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 1478f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 1479f9332757SPaolo Bonzini summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')} 1480f9332757SPaolo Bonziniendif 1481f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 1482f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 1483f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 1484f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 1485f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 1486f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 1487f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 1488bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 1489f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 1490f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 1491f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 1492f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 1493f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 1494f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 1495f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 1496f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 1497f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 1498f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 1499f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 1500f9332757SPaolo Bonzinisummary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')} 1501f9332757SPaolo Bonzinisummary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')} 1502f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 1503f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 1504f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 1505f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 1506f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 1507f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 1508f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 1509f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 1510f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 1511f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 1512f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 1513f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 1514f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 1515f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 1516f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 1517f9332757SPaolo Bonzinisummary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')} 1518f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 1519f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 1520f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 1521f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 1522f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 1523f9332757SPaolo Bonziniendif 1524f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 1525f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 1526f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 1527f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 1528f9332757SPaolo Bonzini 1529f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 1530f9332757SPaolo Bonzini message() 1531f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 1532f9332757SPaolo Bonzini message() 1533f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 1534f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 1535f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1536f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1537f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1538f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1539f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1540f9332757SPaolo Bonziniendif 1541f9332757SPaolo Bonzini 1542f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 1543f9332757SPaolo Bonzini message() 1544f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 1545f9332757SPaolo Bonzini message() 1546f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 1547f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 1548f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1549f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1550f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1551f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1552f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1553f9332757SPaolo Bonziniendif 1554