1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0', 2a5665051SPaolo Bonzini default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 'b_lundef=false'], 3a5665051SPaolo Bonzini version: run_command('head', meson.source_root() / 'VERSION').stdout().strip()) 4a5665051SPaolo Bonzini 5a5665051SPaolo Bonzininot_found = dependency('', required: false) 6a5665051SPaolo Bonzinikeyval = import('unstable-keyval') 7a81df1b6SPaolo Bonziniss = import('sourceset') 8a81df1b6SPaolo Bonzini 9ce1c1e7aSPaolo Bonzinish = find_program('sh') 10a81df1b6SPaolo Bonzinicc = meson.get_compiler('c') 11a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak') 122becc36aSPaolo Bonziniconfig_all_disas = keyval.load(meson.current_build_dir() / 'config-all-disas.mak') 133154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host 14a5665051SPaolo Bonzini 15a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 16a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 17a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 18a5665051SPaolo Bonzini native: false, language: 'cpp') 19a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 20a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 21a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 22a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 23a5665051SPaolo Bonzini 24fc929892SMarc-André Lureaupython = import('python').find_installation() 25fc929892SMarc-André Lureau 26fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 27fc929892SMarc-André Lureauif link_language == 'cpp' 28fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 29fc929892SMarc-André Lureauendif 30a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 31a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 32a5665051SPaolo Bonziniendif 33a5665051SPaolo Bonzini 34968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host 35968b4db3SPaolo Bonzini run_target('sparse', 36968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 37968b4db3SPaolo Bonzini config_host['SPARSE_CFLAGS'].split(), 38968b4db3SPaolo Bonzini 'compile_commands.json']) 39968b4db3SPaolo Bonziniendif 40968b4db3SPaolo Bonzini 41a5665051SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'), 42a5665051SPaolo Bonzini output: 'ninjatool', 43a5665051SPaolo Bonzini configuration: config_host) 44f9332757SPaolo Bonzini 45f9332757SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 46f9332757SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', 47f9332757SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 48f9332757SPaolo Bonzini 49f9332757SPaolo Bonzinicpu = host_machine.cpu_family() 50f9332757SPaolo Bonzinitargetos = host_machine.system() 51f9332757SPaolo Bonzini 52a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 53a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 54*4a96337dSPaolo Bonziniwinmm = [] 55a81df1b6SPaolo Bonzinisocket = [] 5604c6f1e7SMarc-André Lureauversion_res = [] 57d92989aaSMarc-André Lureaucoref = [] 58d92989aaSMarc-André Lureauiokit = [] 59d92989aaSMarc-André Lureaucocoa = [] 60d92989aaSMarc-André Lureauhvf = [] 61a81df1b6SPaolo Bonziniif targetos == 'windows' 62a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 63*4a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 6404c6f1e7SMarc-André Lureau 6504c6f1e7SMarc-André Lureau win = import('windows') 6604c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 6704c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 6804c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 69d92989aaSMarc-André Lureauelif targetos == 'darwin' 70d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 71d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 72d92989aaSMarc-André Lureau cocoa = dependency('appleframeworks', modules: 'Cocoa') 73d92989aaSMarc-André Lureau hvf = dependency('appleframeworks', modules: 'Hypervisor') 74cfad62f1SPaolo Bonzinielif targetos == 'sunos' 75cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 76cfad62f1SPaolo Bonzini cc.find_library('nsl'), 77cfad62f1SPaolo Bonzini cc.find_library('resolv')] 78cfad62f1SPaolo Bonzinielif targetos == 'haiku' 79cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 80cfad62f1SPaolo Bonzini cc.find_library('network'), 81cfad62f1SPaolo Bonzini cc.find_library('bsd')] 82a81df1b6SPaolo Bonziniendif 83a81df1b6SPaolo Bonziniglib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(), 84a81df1b6SPaolo Bonzini link_args: config_host['GLIB_LIBS'].split()) 85a81df1b6SPaolo Bonzinigio = not_found 86a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 87a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 88a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 89a81df1b6SPaolo Bonziniendif 90a81df1b6SPaolo Bonzinilttng = not_found 91a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 92a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 93a81df1b6SPaolo Bonziniendif 94a81df1b6SPaolo Bonziniurcubp = not_found 95a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 96a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 97a81df1b6SPaolo Bonziniendif 98a81df1b6SPaolo Bonzininettle = not_found 99a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 100a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 101a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 102a81df1b6SPaolo Bonziniendif 103a81df1b6SPaolo Bonzinignutls = not_found 104a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 105a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 106a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 107a81df1b6SPaolo Bonziniendif 108ea458960SMarc-André Lureaupixman = declare_dependency(compile_args: config_host['PIXMAN_CFLAGS'].split(), 109ea458960SMarc-André Lureau link_args: config_host['PIXMAN_LIBS'].split()) 1105e7fbd25SMarc-André Lureaupam = not_found 1115e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 1125e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 1135e7fbd25SMarc-André Lureauendif 1145e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 1155e5733e5SMarc-André Lureauzlib = not_found 1165e5733e5SMarc-André Lureauif 'CONFIG_ZLIB' in config_host 1175e5733e5SMarc-André Lureau zlib = declare_dependency(compile_args: config_host['ZLIB_CFLAGS'].split(), 1185e5733e5SMarc-André Lureau link_args: config_host['ZLIB_LIBS'].split()) 1195e5733e5SMarc-André Lureauendif 1205e5733e5SMarc-André Lureaulinux_io_uring = not_found 1215e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 1225e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 1235e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 1245e5733e5SMarc-André Lureauendif 1255e5733e5SMarc-André Lureaulibxml2 = not_found 1265e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 1275e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 1285e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 1295e5733e5SMarc-André Lureauendif 1305e5733e5SMarc-André Lureaulibnfs = not_found 1315e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 1325e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 1335e5733e5SMarc-André Lureauendif 134ec0d5893SMarc-André Lureaulibattr = not_found 135ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 136ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 137ec0d5893SMarc-André Lureauendif 1383f99cf57SPaolo Bonziniseccomp = not_found 1393f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 1403f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 1413f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 1423f99cf57SPaolo Bonziniendif 1433f99cf57SPaolo Bonzinilibcap_ng = not_found 1443f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 1453f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 1463f99cf57SPaolo Bonziniendif 147ade60d4fSMarc-André Lureauxkbcommon = not_found 148ade60d4fSMarc-André Lureauif 'CONFIG_XKBCOMMON' in config_host 149ade60d4fSMarc-André Lureau xkbcommon = declare_dependency(compile_args: config_host['XKBCOMMON_CFLAGS'].split(), 150ade60d4fSMarc-André Lureau link_args: config_host['XKBCOMMON_LIBS'].split()) 151ade60d4fSMarc-André Lureauendif 152478e943fSPaolo Bonzinipulse = not_found 153478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 154478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 155478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 156478e943fSPaolo Bonziniendif 157478e943fSPaolo Bonzinialsa = not_found 158478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 159478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 160478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 161478e943fSPaolo Bonziniendif 162478e943fSPaolo Bonzinijack = not_found 163478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 164478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 165478e943fSPaolo Bonziniendif 1662634733cSPaolo Bonzinispice = not_found 1672634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 1682634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 1692634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 1702634733cSPaolo Bonziniendif 1715ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 172897b5afaSMarc-André Lureaulibmpathpersist = not_found 173897b5afaSMarc-André Lureauif config_host.has_key('CONFIG_MPATH') 174897b5afaSMarc-André Lureau libmpathpersist = cc.find_library('mpathpersist') 175897b5afaSMarc-André Lureauendif 17699650b62SPaolo Bonzinilibiscsi = not_found 17799650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 17899650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 17999650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 18099650b62SPaolo Bonziniendif 1815e5733e5SMarc-André Lureauzstd = not_found 1825e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 1835e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 1845e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 1855e5733e5SMarc-André Lureauendif 186ea458960SMarc-André Lureaugbm = not_found 187ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 188ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 189ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 190ea458960SMarc-André Lureauendif 191ea458960SMarc-André Lureauvirgl = not_found 192ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 193ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 194ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 195ea458960SMarc-André Lureauendif 1961d7bb6abSMarc-André Lureaucurl = not_found 1971d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 1981d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 1991d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 2001d7bb6abSMarc-André Lureauendif 201f15bff25SPaolo Bonzinilibudev = not_found 202f15bff25SPaolo Bonziniif 'CONFIG_LIBUDEV' in config_host 203f15bff25SPaolo Bonzini libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split()) 204f15bff25SPaolo Bonziniendif 2052634733cSPaolo Bonzinibrlapi = not_found 2062634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 2072634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 2082634733cSPaolo Bonziniendif 2092634733cSPaolo Bonzinisdl = not_found 2102634733cSPaolo Bonziniif 'CONFIG_SDL' in config_host 2112634733cSPaolo Bonzini sdl = declare_dependency(compile_args: config_host['SDL_CFLAGS'].split(), 2122634733cSPaolo Bonzini link_args: config_host['SDL_LIBS'].split()) 2132634733cSPaolo Bonziniendif 2145e5733e5SMarc-André Lureaurbd = not_found 2155e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 2165e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 2175e5733e5SMarc-André Lureauendif 2185e5733e5SMarc-André Lureauglusterfs = not_found 2195e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 2205e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 2215e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 2225e5733e5SMarc-André Lureauendif 2235e5733e5SMarc-André Lureaulibssh = not_found 2245e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 2255e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 2265e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 2275e5733e5SMarc-André Lureauendif 2285e5733e5SMarc-André Lureaulibbzip2 = not_found 2295e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 2305e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 2315e5733e5SMarc-André Lureauendif 2325e5733e5SMarc-André Lureauliblzfse = not_found 2335e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 2345e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 2355e5733e5SMarc-André Lureauendif 236478e943fSPaolo Bonzinioss = not_found 237478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 238478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 239478e943fSPaolo Bonziniendif 240478e943fSPaolo Bonzinidsound = not_found 241478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 242478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 243478e943fSPaolo Bonziniendif 244478e943fSPaolo Bonzinicoreaudio = not_found 245478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 246478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 247478e943fSPaolo Bonziniendif 2482b1ccdf4SMarc-André Lureauopengl = not_found 2492b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 2502b1ccdf4SMarc-André Lureau opengl = declare_dependency(link_args: config_host['OPENGL_LIBS'].split()) 2512b1ccdf4SMarc-André Lureauelse 2522b1ccdf4SMarc-André Lureauendif 2532b1ccdf4SMarc-André Lureaugtk = not_found 2542b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host 2552b1ccdf4SMarc-André Lureau gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(), 2562b1ccdf4SMarc-André Lureau link_args: config_host['GTK_LIBS'].split()) 2572b1ccdf4SMarc-André Lureauendif 2582b1ccdf4SMarc-André Lureauvte = not_found 2592b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 2602b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 2612b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 2622b1ccdf4SMarc-André Lureauendif 2632b1ccdf4SMarc-André Lureaux11 = not_found 2642b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host 2652b1ccdf4SMarc-André Lureau x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(), 2662b1ccdf4SMarc-André Lureau link_args: config_host['X11_LIBS'].split()) 2672b1ccdf4SMarc-André Lureauendif 2682b1ccdf4SMarc-André Lureaucurses = not_found 2692b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host 2702b1ccdf4SMarc-André Lureau curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(), 2712b1ccdf4SMarc-André Lureau link_args: config_host['CURSES_LIBS'].split()) 2722b1ccdf4SMarc-André Lureauendif 2732b1ccdf4SMarc-André Lureauiconv = not_found 2742b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host 2752b1ccdf4SMarc-André Lureau iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(), 2762b1ccdf4SMarc-André Lureau link_args: config_host['ICONV_LIBS'].split()) 2772b1ccdf4SMarc-André Lureauendif 2782b1ccdf4SMarc-André Lureaugio = not_found 2792b1ccdf4SMarc-André Lureauif 'CONFIG_GIO' in config_host 2802b1ccdf4SMarc-André Lureau gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 2812b1ccdf4SMarc-André Lureau link_args: config_host['GIO_LIBS'].split()) 2822b1ccdf4SMarc-André Lureauendif 2832b1ccdf4SMarc-André Lureaupng = not_found 2842b1ccdf4SMarc-André Lureauif 'CONFIG_VNC_PNG' in config_host 2852b1ccdf4SMarc-André Lureau png = declare_dependency(compile_args: config_host['PNG_CFLAGS'].split(), 2862b1ccdf4SMarc-André Lureau link_args: config_host['PNG_LIBS'].split()) 2872b1ccdf4SMarc-André Lureauendif 2882b1ccdf4SMarc-André Lureaujpeg = not_found 2892b1ccdf4SMarc-André Lureauif 'CONFIG_VNC_JPEG' in config_host 2902b1ccdf4SMarc-André Lureau jpeg = declare_dependency(compile_args: config_host['JPEG_CFLAGS'].split(), 2912b1ccdf4SMarc-André Lureau link_args: config_host['JPEG_LIBS'].split()) 2922b1ccdf4SMarc-André Lureauendif 2932b1ccdf4SMarc-André Lureausasl = not_found 2942b1ccdf4SMarc-André Lureauif 'CONFIG_VNC_SASL' in config_host 2952b1ccdf4SMarc-André Lureau sasl = declare_dependency(compile_args: config_host['SASL_CFLAGS'].split(), 2962b1ccdf4SMarc-André Lureau link_args: config_host['SASL_LIBS'].split()) 2972b1ccdf4SMarc-André Lureauendif 298*4a96337dSPaolo Bonzinifdt = not_found 299*4a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host 300*4a96337dSPaolo Bonzini fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(), 301*4a96337dSPaolo Bonzini link_args: config_host['FDT_LIBS'].split()) 302*4a96337dSPaolo Bonziniendif 303a81df1b6SPaolo Bonzini 3042becc36aSPaolo Bonzinicreate_config = find_program('scripts/create_config') 3052becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 306a81df1b6SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 307a81df1b6SPaolo Bonzinihave_user = false 308a81df1b6SPaolo Bonzinihave_system = false 3092becc36aSPaolo Bonziniconfig_devices_mak_list = [] 3102becc36aSPaolo Bonziniconfig_devices_h = {} 3112becc36aSPaolo Bonziniconfig_target_mak = {} 3122becc36aSPaolo Bonzinikconfig_external_symbols = [ 3132becc36aSPaolo Bonzini 'CONFIG_KVM', 3142becc36aSPaolo Bonzini 'CONFIG_XEN', 3152becc36aSPaolo Bonzini 'CONFIG_TPM', 3162becc36aSPaolo Bonzini 'CONFIG_SPICE', 3172becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 3182becc36aSPaolo Bonzini 'CONFIG_OPENGL', 3192becc36aSPaolo Bonzini 'CONFIG_X11', 3202becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 3212becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 3222becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 3232becc36aSPaolo Bonzini 'CONFIG_LINUX', 3242becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 3252becc36aSPaolo Bonzini] 326a81df1b6SPaolo Bonziniforeach target : target_dirs 327a81df1b6SPaolo Bonzini have_user = have_user or target.endswith('-user') 3282becc36aSPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') + config_host 3292becc36aSPaolo Bonzini 3302becc36aSPaolo Bonzini if target.endswith('-softmmu') 3312becc36aSPaolo Bonzini have_system = true 3322becc36aSPaolo Bonzini 3332becc36aSPaolo Bonzini base_kconfig = [] 3342becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 3352becc36aSPaolo Bonzini if sym in config_target 3362becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 3372becc36aSPaolo Bonzini endif 3382becc36aSPaolo Bonzini endforeach 3392becc36aSPaolo Bonzini 3402becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 3412becc36aSPaolo Bonzini config_devices_mak = configure_file( 3422becc36aSPaolo Bonzini input: ['default-configs' / target + '.mak', 'Kconfig'], 3432becc36aSPaolo Bonzini output: config_devices_mak, 3442becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 3452becc36aSPaolo Bonzini capture: true, 3462becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 3472becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 3482becc36aSPaolo Bonzini base_kconfig]) 3492becc36aSPaolo Bonzini config_devices_h += {target: custom_target( 3502becc36aSPaolo Bonzini target + '-config-devices.h', 3512becc36aSPaolo Bonzini input: config_devices_mak, 3522becc36aSPaolo Bonzini output: target + '-config-devices.h', 3532becc36aSPaolo Bonzini capture: true, 3542becc36aSPaolo Bonzini command: [create_config, '@INPUT@'])} 3552becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 3562becc36aSPaolo Bonzini config_target += keyval.load(config_devices_mak) 3572becc36aSPaolo Bonzini endif 3582becc36aSPaolo Bonzini config_target_mak += {target: config_target} 359a81df1b6SPaolo Bonziniendforeach 360a81df1b6SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 361a81df1b6SPaolo Bonzinihave_block = have_system or have_tools 362a81df1b6SPaolo Bonzini 3632becc36aSPaolo Bonzinigrepy = find_program('scripts/grepy.sh') 3642becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 3652becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 3662becc36aSPaolo Bonzini# static_library target. 3672becc36aSPaolo Bonzini# 3682becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 3692becc36aSPaolo Bonzini# build literally all source files, including devices only used by 3702becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 3712becc36aSPaolo Bonzini# pseudo symbol replaces it. 3722becc36aSPaolo Bonzini 3732becc36aSPaolo Bonziniif have_system 3742becc36aSPaolo Bonzini config_all_devices_mak = configure_file( 3752becc36aSPaolo Bonzini output: 'config-all-devices.mak', 3762becc36aSPaolo Bonzini input: config_devices_mak_list, 3772becc36aSPaolo Bonzini capture: true, 3782becc36aSPaolo Bonzini command: [grepy, '@INPUT@'], 3792becc36aSPaolo Bonzini ) 3802becc36aSPaolo Bonzini config_all_devices = keyval.load(config_all_devices_mak) 3812becc36aSPaolo Bonzinielse 3822becc36aSPaolo Bonzini config_all_devices = {} 3832becc36aSPaolo Bonziniendif 3842becc36aSPaolo Bonziniconfig_all = config_all_devices 3852becc36aSPaolo Bonziniconfig_all += config_host 3862becc36aSPaolo Bonziniconfig_all += config_all_disas 3872becc36aSPaolo Bonziniconfig_all += { 3882becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 3892becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 3902becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 3912becc36aSPaolo Bonzini 'CONFIG_ALL': true, 3922becc36aSPaolo Bonzini} 3932becc36aSPaolo Bonzini 394a81df1b6SPaolo Bonzini# Generators 395a81df1b6SPaolo Bonzini 3962c273f32SMarc-André Lureaugenh = [] 3973f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 398650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 399a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 400a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 401a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 402a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 403a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 404a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 405a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 406a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 407a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 408a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 409a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 410a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 411a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 412a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 413a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 414a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 415a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 416a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 417a81df1b6SPaolo Bonzini] 418a81df1b6SPaolo Bonzini 419a81df1b6SPaolo Bonzinitracetool = [ 420a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 421a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 422a81df1b6SPaolo Bonzini] 423a81df1b6SPaolo Bonzini 4242c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 4252c273f32SMarc-André Lureau meson.current_source_dir(), 4262c273f32SMarc-André Lureau config_host['PKGVERSION'], config_host['VERSION']] 4272c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 4282c273f32SMarc-André Lureau output: 'qemu-version.h', 4292c273f32SMarc-André Lureau command: qemu_version_cmd, 4302c273f32SMarc-André Lureau capture: true, 4312c273f32SMarc-André Lureau build_by_default: true, 4322c273f32SMarc-André Lureau build_always_stale: true) 4332c273f32SMarc-André Lureaugenh += qemu_version 4342c273f32SMarc-André Lureau 4352becc36aSPaolo Bonziniconfig_host_h = custom_target('config-host.h', 4362becc36aSPaolo Bonzini input: meson.current_build_dir() / 'config-host.mak', 4372becc36aSPaolo Bonzini output: 'config-host.h', 4382becc36aSPaolo Bonzini capture: true, 4392becc36aSPaolo Bonzini command: [create_config, '@INPUT@']) 4402becc36aSPaolo Bonzinigenh += config_host_h 4412becc36aSPaolo Bonzini 4423f885659SMarc-André Lureauhxdep = [] 4433f885659SMarc-André Lureauhx_headers = [ 4443f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 4453f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 4463f885659SMarc-André Lureau] 4473f885659SMarc-André Lureauif have_system 4483f885659SMarc-André Lureau hx_headers += [ 4493f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 4503f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 4513f885659SMarc-André Lureau ] 4523f885659SMarc-André Lureauendif 4533f885659SMarc-André Lureauforeach d : hx_headers 454b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 4553f885659SMarc-André Lureau input: files(d[0]), 4563f885659SMarc-André Lureau output: d[1], 4573f885659SMarc-André Lureau capture: true, 4583f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 4593f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 4603f885659SMarc-André Lureauendforeach 4613f885659SMarc-André Lureaugenh += hxdep 4623f885659SMarc-André Lureau 463a81df1b6SPaolo Bonzini# Collect sourcesets. 464a81df1b6SPaolo Bonzini 465a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 466a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 467a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 4683154fee4SMarc-André Lureaublock_ss = ss.source_set() 469*4a96337dSPaolo Bonziniblockdev_ss = ss.source_set() 4702becc36aSPaolo Bonzinicommon_ss = ss.source_set() 4712becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 4722becc36aSPaolo Bonziniuser_ss = ss.source_set() 4732becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 4742becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 4752becc36aSPaolo Bonzinispecific_ss = ss.source_set() 4762becc36aSPaolo Bonzini 4773154fee4SMarc-André Lureaumodules = {} 4782becc36aSPaolo Bonzinihw_arch = {} 4792becc36aSPaolo Bonzinitarget_arch = {} 4802becc36aSPaolo Bonzinitarget_softmmu_arch = {} 481a81df1b6SPaolo Bonzini 482a81df1b6SPaolo Bonzini############### 483a81df1b6SPaolo Bonzini# Trace files # 484a81df1b6SPaolo Bonzini############### 485a81df1b6SPaolo Bonzini 486a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 487a81df1b6SPaolo Bonzini 'accel/kvm', 488a81df1b6SPaolo Bonzini 'accel/tcg', 489a81df1b6SPaolo Bonzini 'crypto', 490a81df1b6SPaolo Bonzini 'monitor', 491a81df1b6SPaolo Bonzini] 492a81df1b6SPaolo Bonziniif have_user 493a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 494a81df1b6SPaolo Bonziniendif 495a81df1b6SPaolo Bonziniif have_block 496a81df1b6SPaolo Bonzini trace_events_subdirs += [ 497a81df1b6SPaolo Bonzini 'authz', 498a81df1b6SPaolo Bonzini 'block', 499a81df1b6SPaolo Bonzini 'io', 500a81df1b6SPaolo Bonzini 'nbd', 501a81df1b6SPaolo Bonzini 'scsi', 502a81df1b6SPaolo Bonzini ] 503a81df1b6SPaolo Bonziniendif 504a81df1b6SPaolo Bonziniif have_system 505a81df1b6SPaolo Bonzini trace_events_subdirs += [ 506a81df1b6SPaolo Bonzini 'audio', 507a81df1b6SPaolo Bonzini 'backends', 508a81df1b6SPaolo Bonzini 'backends/tpm', 509a81df1b6SPaolo Bonzini 'chardev', 510a81df1b6SPaolo Bonzini 'hw/9pfs', 511a81df1b6SPaolo Bonzini 'hw/acpi', 512a81df1b6SPaolo Bonzini 'hw/alpha', 513a81df1b6SPaolo Bonzini 'hw/arm', 514a81df1b6SPaolo Bonzini 'hw/audio', 515a81df1b6SPaolo Bonzini 'hw/block', 516a81df1b6SPaolo Bonzini 'hw/block/dataplane', 517a81df1b6SPaolo Bonzini 'hw/char', 518a81df1b6SPaolo Bonzini 'hw/display', 519a81df1b6SPaolo Bonzini 'hw/dma', 520a81df1b6SPaolo Bonzini 'hw/hppa', 521a81df1b6SPaolo Bonzini 'hw/hyperv', 522a81df1b6SPaolo Bonzini 'hw/i2c', 523a81df1b6SPaolo Bonzini 'hw/i386', 524a81df1b6SPaolo Bonzini 'hw/i386/xen', 525a81df1b6SPaolo Bonzini 'hw/ide', 526a81df1b6SPaolo Bonzini 'hw/input', 527a81df1b6SPaolo Bonzini 'hw/intc', 528a81df1b6SPaolo Bonzini 'hw/isa', 529a81df1b6SPaolo Bonzini 'hw/mem', 530a81df1b6SPaolo Bonzini 'hw/mips', 531a81df1b6SPaolo Bonzini 'hw/misc', 532a81df1b6SPaolo Bonzini 'hw/misc/macio', 533a81df1b6SPaolo Bonzini 'hw/net', 534a81df1b6SPaolo Bonzini 'hw/nvram', 535a81df1b6SPaolo Bonzini 'hw/pci', 536a81df1b6SPaolo Bonzini 'hw/pci-host', 537a81df1b6SPaolo Bonzini 'hw/ppc', 538a81df1b6SPaolo Bonzini 'hw/rdma', 539a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 540a81df1b6SPaolo Bonzini 'hw/rtc', 541a81df1b6SPaolo Bonzini 'hw/s390x', 542a81df1b6SPaolo Bonzini 'hw/scsi', 543a81df1b6SPaolo Bonzini 'hw/sd', 544a81df1b6SPaolo Bonzini 'hw/sparc', 545a81df1b6SPaolo Bonzini 'hw/sparc64', 546a81df1b6SPaolo Bonzini 'hw/ssi', 547a81df1b6SPaolo Bonzini 'hw/timer', 548a81df1b6SPaolo Bonzini 'hw/tpm', 549a81df1b6SPaolo Bonzini 'hw/usb', 550a81df1b6SPaolo Bonzini 'hw/vfio', 551a81df1b6SPaolo Bonzini 'hw/virtio', 552a81df1b6SPaolo Bonzini 'hw/watchdog', 553a81df1b6SPaolo Bonzini 'hw/xen', 554a81df1b6SPaolo Bonzini 'hw/gpio', 555a81df1b6SPaolo Bonzini 'hw/riscv', 556a81df1b6SPaolo Bonzini 'migration', 557a81df1b6SPaolo Bonzini 'net', 558a81df1b6SPaolo Bonzini 'ui', 559a81df1b6SPaolo Bonzini ] 560a81df1b6SPaolo Bonziniendif 561a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 562a81df1b6SPaolo Bonzini 'hw/core', 563a81df1b6SPaolo Bonzini 'qapi', 564a81df1b6SPaolo Bonzini 'qom', 565a81df1b6SPaolo Bonzini 'target/arm', 566a81df1b6SPaolo Bonzini 'target/hppa', 567a81df1b6SPaolo Bonzini 'target/i386', 568a81df1b6SPaolo Bonzini 'target/mips', 569a81df1b6SPaolo Bonzini 'target/ppc', 570a81df1b6SPaolo Bonzini 'target/riscv', 571a81df1b6SPaolo Bonzini 'target/s390x', 572a81df1b6SPaolo Bonzini 'target/sparc', 573a81df1b6SPaolo Bonzini 'util', 574a81df1b6SPaolo Bonzini] 575a81df1b6SPaolo Bonzini 576a81df1b6SPaolo Bonzinisubdir('qapi') 577a81df1b6SPaolo Bonzinisubdir('qobject') 578a81df1b6SPaolo Bonzinisubdir('stubs') 579a81df1b6SPaolo Bonzinisubdir('trace') 580a81df1b6SPaolo Bonzinisubdir('util') 5815582c58fSMarc-André Lureausubdir('qom') 5825582c58fSMarc-André Lureausubdir('authz') 583a81df1b6SPaolo Bonzinisubdir('crypto') 584a81df1b6SPaolo Bonzinisubdir('storage-daemon') 5852d78b56eSMarc-André Lureausubdir('ui') 586a81df1b6SPaolo Bonzini 5873154fee4SMarc-André Lureau 5883154fee4SMarc-André Lureauif enable_modules 5893154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 5903154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 5913154fee4SMarc-André Lureauendif 5923154fee4SMarc-André Lureau 593a81df1b6SPaolo Bonzini# Build targets from sourcesets 594a81df1b6SPaolo Bonzini 5952becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 596a81df1b6SPaolo Bonzini 597a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 5982becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 599a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 600a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 601a81df1b6SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket]) 602a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 60304c6f1e7SMarc-André Lureau sources: genh + version_res) 604a81df1b6SPaolo Bonzini 605478e943fSPaolo Bonzinisubdir('audio') 6067fcfd456SMarc-André Lureausubdir('io') 607848e8ff6SMarc-André Lureausubdir('chardev') 608ec0d5893SMarc-André Lureausubdir('fsdev') 609d3b18480SMarc-André Lureausubdir('target') 610ec0d5893SMarc-André Lureau 6115e5733e5SMarc-André Lureaublock_ss.add(files( 6125e5733e5SMarc-André Lureau 'block.c', 6135e5733e5SMarc-André Lureau 'blockjob.c', 6145e5733e5SMarc-André Lureau 'job.c', 6155e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 6165e5733e5SMarc-André Lureau)) 6175e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 6185e5733e5SMarc-André Lureau 6195e5733e5SMarc-André Lureausubdir('nbd') 6205e5733e5SMarc-André Lureausubdir('scsi') 6215e5733e5SMarc-André Lureausubdir('block') 6225e5733e5SMarc-André Lureau 623*4a96337dSPaolo Bonziniblockdev_ss.add(files( 624*4a96337dSPaolo Bonzini 'blockdev.c', 625*4a96337dSPaolo Bonzini 'blockdev-nbd.c', 626*4a96337dSPaolo Bonzini 'iothread.c', 627*4a96337dSPaolo Bonzini 'job-qmp.c', 628*4a96337dSPaolo Bonzini)) 629*4a96337dSPaolo Bonzini 630*4a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 631*4a96337dSPaolo Bonzini# os-win32.c does not 632*4a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 633*4a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 634*4a96337dSPaolo Bonzini 635*4a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 636*4a96337dSPaolo Bonzinisoftmmu_ss.add(files( 637*4a96337dSPaolo Bonzini 'bootdevice.c', 638*4a96337dSPaolo Bonzini 'dma-helpers.c', 639*4a96337dSPaolo Bonzini 'qdev-monitor.c', 640*4a96337dSPaolo Bonzini), sdl) 641*4a96337dSPaolo Bonzini 642*4a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c')) 643*4a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp]) 644*4a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')]) 645*4a96337dSPaolo Bonzini 646*4a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 647*4a96337dSPaolo Bonzini 648a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 649a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 650a2ce7dbdSPaolo Bonzini 6513154fee4SMarc-André Lureaublock_mods = [] 6523154fee4SMarc-André Lureausoftmmu_mods = [] 6533154fee4SMarc-André Lureauforeach d, list : modules 6543154fee4SMarc-André Lureau foreach m, module_ss : list 6553154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 6563154fee4SMarc-André Lureau module_ss = module_ss.apply(config_host, strict: false) 6573154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 6583154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 6593154fee4SMarc-André Lureau if d == 'block' 6603154fee4SMarc-André Lureau block_mods += sl 6613154fee4SMarc-André Lureau else 6623154fee4SMarc-André Lureau softmmu_mods += sl 6633154fee4SMarc-André Lureau endif 6643154fee4SMarc-André Lureau else 6653154fee4SMarc-André Lureau if d == 'block' 6663154fee4SMarc-André Lureau block_ss.add_all(module_ss) 6673154fee4SMarc-André Lureau else 6683154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 6693154fee4SMarc-André Lureau endif 6703154fee4SMarc-André Lureau endif 6713154fee4SMarc-André Lureau endforeach 6723154fee4SMarc-André Lureauendforeach 6733154fee4SMarc-André Lureau 6743154fee4SMarc-André Lureaunm = find_program('nm') 6753154fee4SMarc-André Lureauundefsym = find_program('scripts/undefsym.sh') 6763154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 6773154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 6783154fee4SMarc-André Lureau capture: true, 6793154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 6803154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 6813154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 6823154fee4SMarc-André Lureau capture: true, 6833154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 6843154fee4SMarc-André Lureau 6855e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 6865e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 6875e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 6885e5733e5SMarc-André Lureau link_depends: block_syms, 6895e5733e5SMarc-André Lureau name_suffix: 'fa', 6905e5733e5SMarc-André Lureau build_by_default: false) 6915e5733e5SMarc-André Lureau 6925e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 693b7c70bf2SMarc-André Lureau link_args: '@block.syms', 694b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 6955e5733e5SMarc-André Lureau 6963154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 6973154fee4SMarc-André Lureau shared_module(m.name(), 6983154fee4SMarc-André Lureau name_prefix: '', 6993154fee4SMarc-André Lureau link_whole: m, 7003154fee4SMarc-André Lureau install: true, 7013154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 7023154fee4SMarc-André Lureauendforeach 7033154fee4SMarc-André Lureau 7042becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: softmmu_ss) 7052becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 7062becc36aSPaolo Bonzini 7072becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 7082becc36aSPaolo Bonzinicommon_all = static_library('common', 7092becc36aSPaolo Bonzini build_by_default: false, 7102becc36aSPaolo Bonzini sources: common_all.sources() + genh, 7112becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 7122becc36aSPaolo Bonzini name_suffix: 'fa') 7132becc36aSPaolo Bonzini 7142becc36aSPaolo Bonziniforeach target : target_dirs 7152becc36aSPaolo Bonzini config_target = config_target_mak[target] 7162becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 7172becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 7182becc36aSPaolo Bonzini arch_srcs = [] 7192becc36aSPaolo Bonzini 7202becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 7212becc36aSPaolo Bonzini if targetos == 'linux' 7222becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 7232becc36aSPaolo Bonzini endif 7242becc36aSPaolo Bonzini if target.endswith('-softmmu') 7252becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 7262becc36aSPaolo Bonzini target_type='system' 7272becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 7282becc36aSPaolo Bonzini else 7292becc36aSPaolo Bonzini target_type='user' 7302becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 7312becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 7322becc36aSPaolo Bonzini base_dir = 'linux-user' 7332becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 7342becc36aSPaolo Bonzini else 7352becc36aSPaolo Bonzini base_dir = 'bsd-user' 7362becc36aSPaolo Bonzini endif 7372becc36aSPaolo Bonzini target_inc += include_directories( 7382becc36aSPaolo Bonzini base_dir, 7392becc36aSPaolo Bonzini base_dir / config_target['TARGET_ABI_DIR'], 7402becc36aSPaolo Bonzini ) 7412becc36aSPaolo Bonzini endif 7422becc36aSPaolo Bonzini 7432becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 7442becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 7452becc36aSPaolo Bonzini 7462becc36aSPaolo Bonzini # TODO: Change to generator once obj-y goes away 7472becc36aSPaolo Bonzini config_target_h = custom_target(target + '-config-target.h', 7482becc36aSPaolo Bonzini input: meson.current_build_dir() / target / 'config-target.mak', 7492becc36aSPaolo Bonzini output: target + '-config-target.h', 7502becc36aSPaolo Bonzini capture: true, 7512becc36aSPaolo Bonzini command: [create_config, '@INPUT@']) 7522becc36aSPaolo Bonzini 7532becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 7542becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 7552becc36aSPaolo Bonzini 7562becc36aSPaolo Bonzini static_library('qemu-' + target, 7572becc36aSPaolo Bonzini sources: arch_srcs + [config_target_h] + genh, 7582becc36aSPaolo Bonzini objects: objects, 7592becc36aSPaolo Bonzini include_directories: target_inc, 7602becc36aSPaolo Bonzini c_args: ['-DNEED_CPU_H', 7612becc36aSPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 7622becc36aSPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)], 7632becc36aSPaolo Bonzini name_suffix: 'fa') 7642becc36aSPaolo Bonziniendforeach 7652becc36aSPaolo Bonzini 766931049b4SPaolo Bonzini# Other build targets 767897b5afaSMarc-André Lureau 768f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 769f15bff25SPaolo Bonzini subdir('qga') 770f15bff25SPaolo Bonziniendif 771f15bff25SPaolo Bonzini 772931049b4SPaolo Bonziniif have_tools 773b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 774b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 775b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 776b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 777b7c70bf2SMarc-André Lureau if targetos == 'linux' or targetos == 'sunos' or targetos.endswith('bsd') 778b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 779b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 780b7c70bf2SMarc-André Lureau endif 781b7c70bf2SMarc-André Lureau 782a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 7831d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 784a9c9727cSPaolo Bonzini 785ade60d4fSMarc-André Lureau if 'CONFIG_XKBCOMMON' in config_host 786ade60d4fSMarc-André Lureau executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'), 787ade60d4fSMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: true) 788ade60d4fSMarc-André Lureau endif 789ade60d4fSMarc-André Lureau 790157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 791157e7b13SMarc-André Lureau dependencies: qemuutil, 792157e7b13SMarc-André Lureau install: true) 793157e7b13SMarc-André Lureau 794931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 795931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 7962d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 797ea458960SMarc-André Lureau if 'CONFIG_LINUX' in config_host 798ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 799ea458960SMarc-André Lureau endif 80032fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 80199650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 802931049b4SPaolo Bonzini endif 8038f51e01cSMarc-André Lureau 8048f51e01cSMarc-André Lureau if targetos == 'linux' 8058f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 8068f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 8078f51e01cSMarc-André Lureau install: true, 8088f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 809897b5afaSMarc-André Lureau 810897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 811897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 812897b5afaSMarc-André Lureau libcap_ng, libudev, libmpathpersist], 813897b5afaSMarc-André Lureau install: true) 8148f51e01cSMarc-André Lureau endif 8158f51e01cSMarc-André Lureau 8165ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 8175ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 8185ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 8195ee24e78SMarc-André Lureau endif 820931049b4SPaolo Bonziniendif 821931049b4SPaolo Bonzini 8223f99cf57SPaolo Bonzinisubdir('tools') 823bdcbea7aSMarc-André Lureausubdir('pc-bios') 824ce1c1e7aSPaolo Bonzinisubdir('tests') 8253f99cf57SPaolo Bonzini 826f9332757SPaolo Bonzinisummary_info = {} 827f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 828f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 829f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 830f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 831f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 832f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 833f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 834f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 835f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 836f9332757SPaolo Bonziniif targetos != 'windows' 837f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 838f9332757SPaolo Bonzini summary_info += {'Manual directory': config_host['mandir']} 839f9332757SPaolo Bonzinielse 840f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 841f9332757SPaolo Bonziniendif 842f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 843f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 844f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 845f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 846f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 847f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 848f9332757SPaolo Bonziniif link_language == 'cpp' 849f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 850f9332757SPaolo Bonzinielse 851f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 852f9332757SPaolo Bonziniendif 853f9332757SPaolo Bonziniif targetos == 'darwin' 854f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 855f9332757SPaolo Bonziniendif 856f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 857f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 858f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 859f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 860f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 861f9332757SPaolo Bonzinisummary_info += {'install': config_host['INSTALL']} 862f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 863f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 864f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 865f9332757SPaolo Bonzini# TODO: add back version 866f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 867f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 868f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 869f9332757SPaolo Bonziniendif 870f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 871f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 872f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 873f9332757SPaolo Bonziniendif 874f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 875f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 876f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 877f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 878f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 879f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 880f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 881f9332757SPaolo Bonzinisummary_info += {'static build': config_host.has_key('CONFIG_TOOLS')} 882f9332757SPaolo Bonziniif targetos == 'darwin' 883f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 884f9332757SPaolo Bonziniendif 885f9332757SPaolo Bonzini# TODO: add back version 886f9332757SPaolo Bonzinisummary_info += {'SDL support': config_host.has_key('CONFIG_SDL')} 887f9332757SPaolo Bonzinisummary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')} 888f9332757SPaolo Bonzini# TODO: add back version 889f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 890f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 891f9332757SPaolo Bonzini# TODO: add back version 892f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 893f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 894f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 895f9332757SPaolo Bonzini# TODO: add back version 896f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 897f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 898f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 899f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 900f9332757SPaolo Bonziniendif 901f9332757SPaolo Bonzini# TODO: add back version 902f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 903f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 904f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 905f9332757SPaolo Bonziniendif 906f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 907f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 908f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 909f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 910f9332757SPaolo Bonzini# TODO: add back version 911f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 912f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 913f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 914f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 915f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 916f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 917f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 918f9332757SPaolo Bonzinisummary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')} 919f9332757SPaolo Bonzinisummary_info += {'VNC support': config_host.has_key('CONFIG_VNC')} 920f9332757SPaolo Bonziniif config_host.has_key('CONFIG_VNC') 921f9332757SPaolo Bonzini summary_info += {'VNC SASL support': config_host.has_key('CONFIG_VNC_SASL')} 922f9332757SPaolo Bonzini summary_info += {'VNC JPEG support': config_host.has_key('CONFIG_VNC_JPEG')} 923f9332757SPaolo Bonzini summary_info += {'VNC PNG support': config_host.has_key('CONFIG_VNC_PNG')} 924f9332757SPaolo Bonziniendif 925f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 926f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 927f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 928f9332757SPaolo Bonziniendif 929f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 930f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 931f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 932f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 933f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 934f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 935f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 936f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 937f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 938f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG 939f9332757SPaolo Bonzini#summary_info += {'KVM support': have_kvm'} 940f9332757SPaolo Bonzini#summary_info += {'HAX support': have_hax'} 941f9332757SPaolo Bonzini#summary_info += {'HVF support': have_hvf'} 942f9332757SPaolo Bonzini#summary_info += {'WHPX support': have_whpx'} 943f9332757SPaolo Bonzini#summary_info += {'TCG support': have_tcg'} 944f9332757SPaolo Bonzini#if get_option('tcg') 945f9332757SPaolo Bonzini# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 946f9332757SPaolo Bonzini# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 947f9332757SPaolo Bonzini#endif 948f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')} 949f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 950f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 951f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 952f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 953f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 954f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 955f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 956f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 957f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 958f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 959f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 960f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 961f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 962f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 963f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 964f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 965f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 966f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 967f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 968f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 969f9332757SPaolo Bonziniendif 970f9332757SPaolo Bonzini# TODO: add back protocol and server version 971f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 972f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 973f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 974f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 975f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 976f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 977f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 978f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 979f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 980f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 981f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 982f9332757SPaolo Bonziniif targetos == 'windows' 983f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 984f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 985f9332757SPaolo Bonzini endif 986f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 987f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 988f9332757SPaolo Bonzini summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')} 989f9332757SPaolo Bonziniendif 990f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 991f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 992f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 993f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 994f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 995f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 996f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 997bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 998f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 999f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 1000f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 1001f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 1002f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 1003f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 1004f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 1005f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 1006f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 1007f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 1008f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 1009f9332757SPaolo Bonzinisummary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')} 1010f9332757SPaolo Bonzinisummary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')} 1011f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 1012f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 1013f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 1014f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 1015f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 1016f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 1017f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 1018f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 1019f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 1020f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 1021f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 1022f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 1023f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 1024f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 1025f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 1026f9332757SPaolo Bonzinisummary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')} 1027f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 1028f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 1029f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 1030f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 1031f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 1032f9332757SPaolo Bonziniendif 1033f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 1034f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 1035f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 1036f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 1037f9332757SPaolo Bonzini 1038f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 1039f9332757SPaolo Bonzini message() 1040f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 1041f9332757SPaolo Bonzini message() 1042f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 1043f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 1044f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1045f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1046f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1047f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1048f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1049f9332757SPaolo Bonziniendif 1050f9332757SPaolo Bonzini 1051f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 1052f9332757SPaolo Bonzini message() 1053f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 1054f9332757SPaolo Bonzini message() 1055f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 1056f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 1057f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1058f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1059f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1060f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1061f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1062f9332757SPaolo Bonziniendif 1063