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) 544a96337dSPaolo 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') 634a96337dSPaolo 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 2984a96337dSPaolo Bonzinifdt = not_found 2994a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host 3004a96337dSPaolo Bonzini fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(), 3014a96337dSPaolo Bonzini link_args: config_host['FDT_LIBS'].split()) 3024a96337dSPaolo Bonziniendif 303708eab42SMarc-André Lureausnappy = not_found 304708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host 305708eab42SMarc-André Lureau snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split()) 306708eab42SMarc-André Lureauendif 307708eab42SMarc-André Lureaulzo = not_found 308708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host 309708eab42SMarc-André Lureau lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split()) 310708eab42SMarc-André Lureauendif 311a81df1b6SPaolo Bonzini 3122becc36aSPaolo Bonzinicreate_config = find_program('scripts/create_config') 3132becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 314a81df1b6SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 315a81df1b6SPaolo Bonzinihave_user = false 316a81df1b6SPaolo Bonzinihave_system = false 3172becc36aSPaolo Bonziniconfig_devices_mak_list = [] 3182becc36aSPaolo Bonziniconfig_devices_h = {} 3192becc36aSPaolo Bonziniconfig_target_mak = {} 3202becc36aSPaolo Bonzinikconfig_external_symbols = [ 3212becc36aSPaolo Bonzini 'CONFIG_KVM', 3222becc36aSPaolo Bonzini 'CONFIG_XEN', 3232becc36aSPaolo Bonzini 'CONFIG_TPM', 3242becc36aSPaolo Bonzini 'CONFIG_SPICE', 3252becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 3262becc36aSPaolo Bonzini 'CONFIG_OPENGL', 3272becc36aSPaolo Bonzini 'CONFIG_X11', 3282becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 3292becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 3302becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 3312becc36aSPaolo Bonzini 'CONFIG_LINUX', 3322becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 3332becc36aSPaolo Bonzini] 334a81df1b6SPaolo Bonziniforeach target : target_dirs 335a81df1b6SPaolo Bonzini have_user = have_user or target.endswith('-user') 3362becc36aSPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') + config_host 3372becc36aSPaolo Bonzini 3382becc36aSPaolo Bonzini if target.endswith('-softmmu') 3392becc36aSPaolo Bonzini have_system = true 3402becc36aSPaolo Bonzini 3412becc36aSPaolo Bonzini base_kconfig = [] 3422becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 3432becc36aSPaolo Bonzini if sym in config_target 3442becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 3452becc36aSPaolo Bonzini endif 3462becc36aSPaolo Bonzini endforeach 3472becc36aSPaolo Bonzini 3482becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 3492becc36aSPaolo Bonzini config_devices_mak = configure_file( 3502becc36aSPaolo Bonzini input: ['default-configs' / target + '.mak', 'Kconfig'], 3512becc36aSPaolo Bonzini output: config_devices_mak, 3522becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 3532becc36aSPaolo Bonzini capture: true, 3542becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 3552becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 3562becc36aSPaolo Bonzini base_kconfig]) 3572becc36aSPaolo Bonzini config_devices_h += {target: custom_target( 3582becc36aSPaolo Bonzini target + '-config-devices.h', 3592becc36aSPaolo Bonzini input: config_devices_mak, 3602becc36aSPaolo Bonzini output: target + '-config-devices.h', 3612becc36aSPaolo Bonzini capture: true, 3622becc36aSPaolo Bonzini command: [create_config, '@INPUT@'])} 3632becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 3642becc36aSPaolo Bonzini config_target += keyval.load(config_devices_mak) 3652becc36aSPaolo Bonzini endif 3662becc36aSPaolo Bonzini config_target_mak += {target: config_target} 367a81df1b6SPaolo Bonziniendforeach 368a81df1b6SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 369a81df1b6SPaolo Bonzinihave_block = have_system or have_tools 370a81df1b6SPaolo Bonzini 3712becc36aSPaolo Bonzinigrepy = find_program('scripts/grepy.sh') 3722becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 3732becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 3742becc36aSPaolo Bonzini# static_library target. 3752becc36aSPaolo Bonzini# 3762becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 3772becc36aSPaolo Bonzini# build literally all source files, including devices only used by 3782becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 3792becc36aSPaolo Bonzini# pseudo symbol replaces it. 3802becc36aSPaolo Bonzini 3812becc36aSPaolo Bonziniif have_system 3822becc36aSPaolo Bonzini config_all_devices_mak = configure_file( 3832becc36aSPaolo Bonzini output: 'config-all-devices.mak', 3842becc36aSPaolo Bonzini input: config_devices_mak_list, 3852becc36aSPaolo Bonzini capture: true, 3862becc36aSPaolo Bonzini command: [grepy, '@INPUT@'], 3872becc36aSPaolo Bonzini ) 3882becc36aSPaolo Bonzini config_all_devices = keyval.load(config_all_devices_mak) 3892becc36aSPaolo Bonzinielse 3902becc36aSPaolo Bonzini config_all_devices = {} 3912becc36aSPaolo Bonziniendif 3922becc36aSPaolo Bonziniconfig_all = config_all_devices 3932becc36aSPaolo Bonziniconfig_all += config_host 3942becc36aSPaolo Bonziniconfig_all += config_all_disas 3952becc36aSPaolo Bonziniconfig_all += { 3962becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 3972becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 3982becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 3992becc36aSPaolo Bonzini 'CONFIG_ALL': true, 4002becc36aSPaolo Bonzini} 4012becc36aSPaolo Bonzini 402a81df1b6SPaolo Bonzini# Generators 403a81df1b6SPaolo Bonzini 4042c273f32SMarc-André Lureaugenh = [] 4053f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 406650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 407a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 408a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 409a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 410a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 411a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 412a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 413a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 414a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 415a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 416a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 417a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 418a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 419a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 420a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 421a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 422a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 423a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 424a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 425a81df1b6SPaolo Bonzini] 426a81df1b6SPaolo Bonzini 427a81df1b6SPaolo Bonzinitracetool = [ 428a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 429a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 430a81df1b6SPaolo Bonzini] 431a81df1b6SPaolo Bonzini 4322c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 4332c273f32SMarc-André Lureau meson.current_source_dir(), 4342c273f32SMarc-André Lureau config_host['PKGVERSION'], config_host['VERSION']] 4352c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 4362c273f32SMarc-André Lureau output: 'qemu-version.h', 4372c273f32SMarc-André Lureau command: qemu_version_cmd, 4382c273f32SMarc-André Lureau capture: true, 4392c273f32SMarc-André Lureau build_by_default: true, 4402c273f32SMarc-André Lureau build_always_stale: true) 4412c273f32SMarc-André Lureaugenh += qemu_version 4422c273f32SMarc-André Lureau 4432becc36aSPaolo Bonziniconfig_host_h = custom_target('config-host.h', 4442becc36aSPaolo Bonzini input: meson.current_build_dir() / 'config-host.mak', 4452becc36aSPaolo Bonzini output: 'config-host.h', 4462becc36aSPaolo Bonzini capture: true, 4472becc36aSPaolo Bonzini command: [create_config, '@INPUT@']) 4482becc36aSPaolo Bonzinigenh += config_host_h 4492becc36aSPaolo Bonzini 4503f885659SMarc-André Lureauhxdep = [] 4513f885659SMarc-André Lureauhx_headers = [ 4523f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 4533f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 4543f885659SMarc-André Lureau] 4553f885659SMarc-André Lureauif have_system 4563f885659SMarc-André Lureau hx_headers += [ 4573f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 4583f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 4593f885659SMarc-André Lureau ] 4603f885659SMarc-André Lureauendif 4613f885659SMarc-André Lureauforeach d : hx_headers 462b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 4633f885659SMarc-André Lureau input: files(d[0]), 4643f885659SMarc-André Lureau output: d[1], 4653f885659SMarc-André Lureau capture: true, 4663f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 4673f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 4683f885659SMarc-André Lureauendforeach 4693f885659SMarc-André Lureaugenh += hxdep 4703f885659SMarc-André Lureau 471a81df1b6SPaolo Bonzini# Collect sourcesets. 472a81df1b6SPaolo Bonzini 473a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 474a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 475a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 4763154fee4SMarc-André Lureaublock_ss = ss.source_set() 4774a96337dSPaolo Bonziniblockdev_ss = ss.source_set() 478*ff219dcaSPaolo Bonziniqmp_ss = ss.source_set() 4792becc36aSPaolo Bonzinicommon_ss = ss.source_set() 4802becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 4812becc36aSPaolo Bonziniuser_ss = ss.source_set() 4822becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 4832becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 4842becc36aSPaolo Bonzinispecific_ss = ss.source_set() 4852becc36aSPaolo Bonzini 4863154fee4SMarc-André Lureaumodules = {} 4872becc36aSPaolo Bonzinihw_arch = {} 4882becc36aSPaolo Bonzinitarget_arch = {} 4892becc36aSPaolo Bonzinitarget_softmmu_arch = {} 490a81df1b6SPaolo Bonzini 491a81df1b6SPaolo Bonzini############### 492a81df1b6SPaolo Bonzini# Trace files # 493a81df1b6SPaolo Bonzini############### 494a81df1b6SPaolo Bonzini 495a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 496a81df1b6SPaolo Bonzini 'accel/kvm', 497a81df1b6SPaolo Bonzini 'accel/tcg', 498a81df1b6SPaolo Bonzini 'crypto', 499a81df1b6SPaolo Bonzini 'monitor', 500a81df1b6SPaolo Bonzini] 501a81df1b6SPaolo Bonziniif have_user 502a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 503a81df1b6SPaolo Bonziniendif 504a81df1b6SPaolo Bonziniif have_block 505a81df1b6SPaolo Bonzini trace_events_subdirs += [ 506a81df1b6SPaolo Bonzini 'authz', 507a81df1b6SPaolo Bonzini 'block', 508a81df1b6SPaolo Bonzini 'io', 509a81df1b6SPaolo Bonzini 'nbd', 510a81df1b6SPaolo Bonzini 'scsi', 511a81df1b6SPaolo Bonzini ] 512a81df1b6SPaolo Bonziniendif 513a81df1b6SPaolo Bonziniif have_system 514a81df1b6SPaolo Bonzini trace_events_subdirs += [ 515a81df1b6SPaolo Bonzini 'audio', 516a81df1b6SPaolo Bonzini 'backends', 517a81df1b6SPaolo Bonzini 'backends/tpm', 518a81df1b6SPaolo Bonzini 'chardev', 519a81df1b6SPaolo Bonzini 'hw/9pfs', 520a81df1b6SPaolo Bonzini 'hw/acpi', 521a81df1b6SPaolo Bonzini 'hw/alpha', 522a81df1b6SPaolo Bonzini 'hw/arm', 523a81df1b6SPaolo Bonzini 'hw/audio', 524a81df1b6SPaolo Bonzini 'hw/block', 525a81df1b6SPaolo Bonzini 'hw/block/dataplane', 526a81df1b6SPaolo Bonzini 'hw/char', 527a81df1b6SPaolo Bonzini 'hw/display', 528a81df1b6SPaolo Bonzini 'hw/dma', 529a81df1b6SPaolo Bonzini 'hw/hppa', 530a81df1b6SPaolo Bonzini 'hw/hyperv', 531a81df1b6SPaolo Bonzini 'hw/i2c', 532a81df1b6SPaolo Bonzini 'hw/i386', 533a81df1b6SPaolo Bonzini 'hw/i386/xen', 534a81df1b6SPaolo Bonzini 'hw/ide', 535a81df1b6SPaolo Bonzini 'hw/input', 536a81df1b6SPaolo Bonzini 'hw/intc', 537a81df1b6SPaolo Bonzini 'hw/isa', 538a81df1b6SPaolo Bonzini 'hw/mem', 539a81df1b6SPaolo Bonzini 'hw/mips', 540a81df1b6SPaolo Bonzini 'hw/misc', 541a81df1b6SPaolo Bonzini 'hw/misc/macio', 542a81df1b6SPaolo Bonzini 'hw/net', 543a81df1b6SPaolo Bonzini 'hw/nvram', 544a81df1b6SPaolo Bonzini 'hw/pci', 545a81df1b6SPaolo Bonzini 'hw/pci-host', 546a81df1b6SPaolo Bonzini 'hw/ppc', 547a81df1b6SPaolo Bonzini 'hw/rdma', 548a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 549a81df1b6SPaolo Bonzini 'hw/rtc', 550a81df1b6SPaolo Bonzini 'hw/s390x', 551a81df1b6SPaolo Bonzini 'hw/scsi', 552a81df1b6SPaolo Bonzini 'hw/sd', 553a81df1b6SPaolo Bonzini 'hw/sparc', 554a81df1b6SPaolo Bonzini 'hw/sparc64', 555a81df1b6SPaolo Bonzini 'hw/ssi', 556a81df1b6SPaolo Bonzini 'hw/timer', 557a81df1b6SPaolo Bonzini 'hw/tpm', 558a81df1b6SPaolo Bonzini 'hw/usb', 559a81df1b6SPaolo Bonzini 'hw/vfio', 560a81df1b6SPaolo Bonzini 'hw/virtio', 561a81df1b6SPaolo Bonzini 'hw/watchdog', 562a81df1b6SPaolo Bonzini 'hw/xen', 563a81df1b6SPaolo Bonzini 'hw/gpio', 564a81df1b6SPaolo Bonzini 'hw/riscv', 565a81df1b6SPaolo Bonzini 'migration', 566a81df1b6SPaolo Bonzini 'net', 567a81df1b6SPaolo Bonzini 'ui', 568a81df1b6SPaolo Bonzini ] 569a81df1b6SPaolo Bonziniendif 570a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 571a81df1b6SPaolo Bonzini 'hw/core', 572a81df1b6SPaolo Bonzini 'qapi', 573a81df1b6SPaolo Bonzini 'qom', 574a81df1b6SPaolo Bonzini 'target/arm', 575a81df1b6SPaolo Bonzini 'target/hppa', 576a81df1b6SPaolo Bonzini 'target/i386', 577a81df1b6SPaolo Bonzini 'target/mips', 578a81df1b6SPaolo Bonzini 'target/ppc', 579a81df1b6SPaolo Bonzini 'target/riscv', 580a81df1b6SPaolo Bonzini 'target/s390x', 581a81df1b6SPaolo Bonzini 'target/sparc', 582a81df1b6SPaolo Bonzini 'util', 583a81df1b6SPaolo Bonzini] 584a81df1b6SPaolo Bonzini 585a81df1b6SPaolo Bonzinisubdir('qapi') 586a81df1b6SPaolo Bonzinisubdir('qobject') 587a81df1b6SPaolo Bonzinisubdir('stubs') 588a81df1b6SPaolo Bonzinisubdir('trace') 589a81df1b6SPaolo Bonzinisubdir('util') 5905582c58fSMarc-André Lureausubdir('qom') 5915582c58fSMarc-André Lureausubdir('authz') 592a81df1b6SPaolo Bonzinisubdir('crypto') 593a81df1b6SPaolo Bonzinisubdir('storage-daemon') 5942d78b56eSMarc-André Lureausubdir('ui') 595a81df1b6SPaolo Bonzini 5963154fee4SMarc-André Lureau 5973154fee4SMarc-André Lureauif enable_modules 5983154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 5993154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 6003154fee4SMarc-André Lureauendif 6013154fee4SMarc-André Lureau 602a81df1b6SPaolo Bonzini# Build targets from sourcesets 603a81df1b6SPaolo Bonzini 6042becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 605a81df1b6SPaolo Bonzini 606a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 6072becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 608a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 609a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 610a81df1b6SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket]) 611a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 61204c6f1e7SMarc-André Lureau sources: genh + version_res) 613a81df1b6SPaolo Bonzini 614478e943fSPaolo Bonzinisubdir('audio') 6157fcfd456SMarc-André Lureausubdir('io') 616848e8ff6SMarc-André Lureausubdir('chardev') 617ec0d5893SMarc-André Lureausubdir('fsdev') 618d3b18480SMarc-André Lureausubdir('target') 619708eab42SMarc-André Lureausubdir('dump') 620ec0d5893SMarc-André Lureau 6215e5733e5SMarc-André Lureaublock_ss.add(files( 6225e5733e5SMarc-André Lureau 'block.c', 6235e5733e5SMarc-André Lureau 'blockjob.c', 6245e5733e5SMarc-André Lureau 'job.c', 6255e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 6265e5733e5SMarc-André Lureau)) 6275e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 6285e5733e5SMarc-André Lureau 6295e5733e5SMarc-André Lureausubdir('nbd') 6305e5733e5SMarc-André Lureausubdir('scsi') 6315e5733e5SMarc-André Lureausubdir('block') 6325e5733e5SMarc-André Lureau 6334a96337dSPaolo Bonziniblockdev_ss.add(files( 6344a96337dSPaolo Bonzini 'blockdev.c', 6354a96337dSPaolo Bonzini 'blockdev-nbd.c', 6364a96337dSPaolo Bonzini 'iothread.c', 6374a96337dSPaolo Bonzini 'job-qmp.c', 6384a96337dSPaolo Bonzini)) 6394a96337dSPaolo Bonzini 6404a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 6414a96337dSPaolo Bonzini# os-win32.c does not 6424a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 6434a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 6444a96337dSPaolo Bonzini 6454a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 6464a96337dSPaolo Bonzinisoftmmu_ss.add(files( 6474a96337dSPaolo Bonzini 'bootdevice.c', 6484a96337dSPaolo Bonzini 'dma-helpers.c', 6494a96337dSPaolo Bonzini 'qdev-monitor.c', 6504a96337dSPaolo Bonzini), sdl) 6514a96337dSPaolo Bonzini 6524a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c')) 6534a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp]) 6544a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')]) 6554a96337dSPaolo Bonzini 6564a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 6574a96337dSPaolo Bonzini 6585d3ea0e1SPaolo Bonzinisubdir('softmmu') 659*ff219dcaSPaolo Bonzinisubdir('monitor') 6605d3ea0e1SPaolo Bonzini 661a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 662a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 663a2ce7dbdSPaolo Bonzini 6643154fee4SMarc-André Lureaublock_mods = [] 6653154fee4SMarc-André Lureausoftmmu_mods = [] 6663154fee4SMarc-André Lureauforeach d, list : modules 6673154fee4SMarc-André Lureau foreach m, module_ss : list 6683154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 6693154fee4SMarc-André Lureau module_ss = module_ss.apply(config_host, strict: false) 6703154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 6713154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 6723154fee4SMarc-André Lureau if d == 'block' 6733154fee4SMarc-André Lureau block_mods += sl 6743154fee4SMarc-André Lureau else 6753154fee4SMarc-André Lureau softmmu_mods += sl 6763154fee4SMarc-André Lureau endif 6773154fee4SMarc-André Lureau else 6783154fee4SMarc-André Lureau if d == 'block' 6793154fee4SMarc-André Lureau block_ss.add_all(module_ss) 6803154fee4SMarc-André Lureau else 6813154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 6823154fee4SMarc-André Lureau endif 6833154fee4SMarc-André Lureau endif 6843154fee4SMarc-André Lureau endforeach 6853154fee4SMarc-André Lureauendforeach 6863154fee4SMarc-André Lureau 6873154fee4SMarc-André Lureaunm = find_program('nm') 6883154fee4SMarc-André Lureauundefsym = find_program('scripts/undefsym.sh') 6893154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 6903154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 6913154fee4SMarc-André Lureau capture: true, 6923154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 6933154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 6943154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 6953154fee4SMarc-André Lureau capture: true, 6963154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 6973154fee4SMarc-André Lureau 6985e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 6995e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 7005e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 7015e5733e5SMarc-André Lureau link_depends: block_syms, 7025e5733e5SMarc-André Lureau name_suffix: 'fa', 7035e5733e5SMarc-André Lureau build_by_default: false) 7045e5733e5SMarc-André Lureau 7055e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 706b7c70bf2SMarc-André Lureau link_args: '@block.syms', 707b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 7085e5733e5SMarc-André Lureau 709*ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 710*ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 711*ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 712*ff219dcaSPaolo Bonzini name_suffix: 'fa', 713*ff219dcaSPaolo Bonzini build_by_default: false) 714*ff219dcaSPaolo Bonzini 715*ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 716*ff219dcaSPaolo Bonzini 7173154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 7183154fee4SMarc-André Lureau shared_module(m.name(), 7193154fee4SMarc-André Lureau name_prefix: '', 7203154fee4SMarc-André Lureau link_whole: m, 7213154fee4SMarc-André Lureau install: true, 7223154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 7233154fee4SMarc-André Lureauendforeach 7243154fee4SMarc-André Lureau 7252becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: softmmu_ss) 7262becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 7272becc36aSPaolo Bonzini 7282becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 7292becc36aSPaolo Bonzinicommon_all = static_library('common', 7302becc36aSPaolo Bonzini build_by_default: false, 7312becc36aSPaolo Bonzini sources: common_all.sources() + genh, 7322becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 7332becc36aSPaolo Bonzini name_suffix: 'fa') 7342becc36aSPaolo Bonzini 7352becc36aSPaolo Bonziniforeach target : target_dirs 7362becc36aSPaolo Bonzini config_target = config_target_mak[target] 7372becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 7382becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 7392becc36aSPaolo Bonzini arch_srcs = [] 7402becc36aSPaolo Bonzini 7412becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 7422becc36aSPaolo Bonzini if targetos == 'linux' 7432becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 7442becc36aSPaolo Bonzini endif 7452becc36aSPaolo Bonzini if target.endswith('-softmmu') 7462becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 7472becc36aSPaolo Bonzini target_type='system' 7482becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 7492becc36aSPaolo Bonzini else 7502becc36aSPaolo Bonzini target_type='user' 7512becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 7522becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 7532becc36aSPaolo Bonzini base_dir = 'linux-user' 7542becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 7552becc36aSPaolo Bonzini else 7562becc36aSPaolo Bonzini base_dir = 'bsd-user' 7572becc36aSPaolo Bonzini endif 7582becc36aSPaolo Bonzini target_inc += include_directories( 7592becc36aSPaolo Bonzini base_dir, 7602becc36aSPaolo Bonzini base_dir / config_target['TARGET_ABI_DIR'], 7612becc36aSPaolo Bonzini ) 7622becc36aSPaolo Bonzini endif 7632becc36aSPaolo Bonzini 7642becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 7652becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 7662becc36aSPaolo Bonzini 7672becc36aSPaolo Bonzini # TODO: Change to generator once obj-y goes away 7682becc36aSPaolo Bonzini config_target_h = custom_target(target + '-config-target.h', 7692becc36aSPaolo Bonzini input: meson.current_build_dir() / target / 'config-target.mak', 7702becc36aSPaolo Bonzini output: target + '-config-target.h', 7712becc36aSPaolo Bonzini capture: true, 7722becc36aSPaolo Bonzini command: [create_config, '@INPUT@']) 7732becc36aSPaolo Bonzini 7742becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 7752becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 7762becc36aSPaolo Bonzini 7772becc36aSPaolo Bonzini static_library('qemu-' + target, 7782becc36aSPaolo Bonzini sources: arch_srcs + [config_target_h] + genh, 7792becc36aSPaolo Bonzini objects: objects, 7802becc36aSPaolo Bonzini include_directories: target_inc, 7812becc36aSPaolo Bonzini c_args: ['-DNEED_CPU_H', 7822becc36aSPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 7832becc36aSPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)], 7842becc36aSPaolo Bonzini name_suffix: 'fa') 7852becc36aSPaolo Bonziniendforeach 7862becc36aSPaolo Bonzini 787931049b4SPaolo Bonzini# Other build targets 788897b5afaSMarc-André Lureau 789f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 790f15bff25SPaolo Bonzini subdir('qga') 791f15bff25SPaolo Bonziniendif 792f15bff25SPaolo Bonzini 793931049b4SPaolo Bonziniif have_tools 794b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 795b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 796b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 797b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 798b7c70bf2SMarc-André Lureau if targetos == 'linux' or targetos == 'sunos' or targetos.endswith('bsd') 799b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 800b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 801b7c70bf2SMarc-André Lureau endif 802b7c70bf2SMarc-André Lureau 803a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 8041d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 805a9c9727cSPaolo Bonzini 806ade60d4fSMarc-André Lureau if 'CONFIG_XKBCOMMON' in config_host 807ade60d4fSMarc-André Lureau executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c'), 808ade60d4fSMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: true) 809ade60d4fSMarc-André Lureau endif 810ade60d4fSMarc-André Lureau 811157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 812157e7b13SMarc-André Lureau dependencies: qemuutil, 813157e7b13SMarc-André Lureau install: true) 814157e7b13SMarc-André Lureau 815931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 816931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 8172d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 818ea458960SMarc-André Lureau if 'CONFIG_LINUX' in config_host 819ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 820ea458960SMarc-André Lureau endif 82132fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 82299650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 823931049b4SPaolo Bonzini endif 8248f51e01cSMarc-André Lureau 8258f51e01cSMarc-André Lureau if targetos == 'linux' 8268f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 8278f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 8288f51e01cSMarc-André Lureau install: true, 8298f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 830897b5afaSMarc-André Lureau 831897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 832897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 833897b5afaSMarc-André Lureau libcap_ng, libudev, libmpathpersist], 834897b5afaSMarc-André Lureau install: true) 8358f51e01cSMarc-André Lureau endif 8368f51e01cSMarc-André Lureau 8375ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 8385ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 8395ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 8405ee24e78SMarc-André Lureau endif 841931049b4SPaolo Bonziniendif 842931049b4SPaolo Bonzini 8433f99cf57SPaolo Bonzinisubdir('tools') 844bdcbea7aSMarc-André Lureausubdir('pc-bios') 845ce1c1e7aSPaolo Bonzinisubdir('tests') 8463f99cf57SPaolo Bonzini 847f9332757SPaolo Bonzinisummary_info = {} 848f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 849f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 850f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 851f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 852f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 853f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 854f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 855f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 856f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 857f9332757SPaolo Bonziniif targetos != 'windows' 858f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 859f9332757SPaolo Bonzini summary_info += {'Manual directory': config_host['mandir']} 860f9332757SPaolo Bonzinielse 861f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 862f9332757SPaolo Bonziniendif 863f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 864f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 865f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 866f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 867f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 868f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 869f9332757SPaolo Bonziniif link_language == 'cpp' 870f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 871f9332757SPaolo Bonzinielse 872f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 873f9332757SPaolo Bonziniendif 874f9332757SPaolo Bonziniif targetos == 'darwin' 875f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 876f9332757SPaolo Bonziniendif 877f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 878f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 879f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 880f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 881f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 882f9332757SPaolo Bonzinisummary_info += {'install': config_host['INSTALL']} 883f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 884f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 885f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 886f9332757SPaolo Bonzini# TODO: add back version 887f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 888f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 889f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 890f9332757SPaolo Bonziniendif 891f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 892f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 893f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 894f9332757SPaolo Bonziniendif 895f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 896f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 897f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 898f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 899f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 900f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 901f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 902f9332757SPaolo Bonzinisummary_info += {'static build': config_host.has_key('CONFIG_TOOLS')} 903f9332757SPaolo Bonziniif targetos == 'darwin' 904f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 905f9332757SPaolo Bonziniendif 906f9332757SPaolo Bonzini# TODO: add back version 907f9332757SPaolo Bonzinisummary_info += {'SDL support': config_host.has_key('CONFIG_SDL')} 908f9332757SPaolo Bonzinisummary_info += {'SDL image support': config_host.has_key('CONFIG_SDL_IMAGE')} 909f9332757SPaolo Bonzini# TODO: add back version 910f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 911f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 912f9332757SPaolo Bonzini# TODO: add back version 913f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 914f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 915f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 916f9332757SPaolo Bonzini# TODO: add back version 917f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 918f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 919f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 920f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 921f9332757SPaolo Bonziniendif 922f9332757SPaolo Bonzini# TODO: add back version 923f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 924f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 925f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 926f9332757SPaolo Bonziniendif 927f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 928f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 929f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 930f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 931f9332757SPaolo Bonzini# TODO: add back version 932f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 933f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 934f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 935f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 936f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 937f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 938f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 939f9332757SPaolo Bonzinisummary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')} 940f9332757SPaolo Bonzinisummary_info += {'VNC support': config_host.has_key('CONFIG_VNC')} 941f9332757SPaolo Bonziniif config_host.has_key('CONFIG_VNC') 942f9332757SPaolo Bonzini summary_info += {'VNC SASL support': config_host.has_key('CONFIG_VNC_SASL')} 943f9332757SPaolo Bonzini summary_info += {'VNC JPEG support': config_host.has_key('CONFIG_VNC_JPEG')} 944f9332757SPaolo Bonzini summary_info += {'VNC PNG support': config_host.has_key('CONFIG_VNC_PNG')} 945f9332757SPaolo Bonziniendif 946f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 947f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 948f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 949f9332757SPaolo Bonziniendif 950f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 951f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 952f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 953f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 954f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 955f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 956f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 957f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 958f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 959f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG 960f9332757SPaolo Bonzini#summary_info += {'KVM support': have_kvm'} 961f9332757SPaolo Bonzini#summary_info += {'HAX support': have_hax'} 962f9332757SPaolo Bonzini#summary_info += {'HVF support': have_hvf'} 963f9332757SPaolo Bonzini#summary_info += {'WHPX support': have_whpx'} 964f9332757SPaolo Bonzini#summary_info += {'TCG support': have_tcg'} 965f9332757SPaolo Bonzini#if get_option('tcg') 966f9332757SPaolo Bonzini# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 967f9332757SPaolo Bonzini# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 968f9332757SPaolo Bonzini#endif 969f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')} 970f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 971f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 972f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 973f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 974f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 975f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 976f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 977f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 978f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 979f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 980f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 981f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 982f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 983f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 984f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 985f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 986f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 987f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 988f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 989f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 990f9332757SPaolo Bonziniendif 991f9332757SPaolo Bonzini# TODO: add back protocol and server version 992f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 993f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 994f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 995f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 996f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 997f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 998f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 999f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 1000f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 1001f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 1002f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 1003f9332757SPaolo Bonziniif targetos == 'windows' 1004f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 1005f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 1006f9332757SPaolo Bonzini endif 1007f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 1008f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 1009f9332757SPaolo Bonzini summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')} 1010f9332757SPaolo Bonziniendif 1011f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 1012f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 1013f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 1014f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 1015f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 1016f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 1017f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 1018bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 1019f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 1020f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 1021f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 1022f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 1023f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 1024f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 1025f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 1026f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 1027f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 1028f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 1029f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 1030f9332757SPaolo Bonzinisummary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')} 1031f9332757SPaolo Bonzinisummary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')} 1032f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 1033f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 1034f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 1035f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 1036f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 1037f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 1038f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 1039f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 1040f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 1041f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 1042f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 1043f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 1044f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 1045f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 1046f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 1047f9332757SPaolo Bonzinisummary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')} 1048f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 1049f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 1050f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 1051f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 1052f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 1053f9332757SPaolo Bonziniendif 1054f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 1055f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 1056f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 1057f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 1058f9332757SPaolo Bonzini 1059f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 1060f9332757SPaolo Bonzini message() 1061f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 1062f9332757SPaolo Bonzini message() 1063f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 1064f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 1065f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1066f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1067f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1068f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1069f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1070f9332757SPaolo Bonziniendif 1071f9332757SPaolo Bonzini 1072f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 1073f9332757SPaolo Bonzini message() 1074f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 1075f9332757SPaolo Bonzini message() 1076f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 1077f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 1078f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1079f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1080f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1081f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1082f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1083f9332757SPaolo Bonziniendif 1084