1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0', 290756b2fSGerd Hoffmann default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 33e0e5190SPaolo Bonzini 'b_colorout=auto'], 4a5665051SPaolo Bonzini version: run_command('head', meson.source_root() / 'VERSION').stdout().strip()) 5a5665051SPaolo Bonzini 6a5665051SPaolo Bonzininot_found = dependency('', required: false) 7b29b40f4SPaolo Bonziniif meson.version().version_compare('>=0.56.0') 8b29b40f4SPaolo Bonzini keyval = import('keyval') 9b29b40f4SPaolo Bonzinielse 10a5665051SPaolo Bonzini keyval = import('unstable-keyval') 11b29b40f4SPaolo Bonziniendif 12a81df1b6SPaolo Bonziniss = import('sourceset') 13a81df1b6SPaolo Bonzini 14ce1c1e7aSPaolo Bonzinish = find_program('sh') 15a81df1b6SPaolo Bonzinicc = meson.get_compiler('c') 16a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak') 173154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host 1835be72baSPaolo Bonzinienable_static = 'CONFIG_STATIC' in config_host 19f8aa24eaSPaolo Bonzinibuild_docs = 'BUILD_DOCS' in config_host 20*8fe11232SMarc-André Lureau 21*8fe11232SMarc-André Lureauif get_option('qemu_suffix').startswith('/') 22*8fe11232SMarc-André Lureau error('qemu_suffix cannot start with a /') 23*8fe11232SMarc-André Lureauendif 24*8fe11232SMarc-André Lureau 25ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix') 26491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix') 27859aef02SPaolo Bonziniconfig_host_data = configuration_data() 28859aef02SPaolo Bonzinigenh = [] 29a5665051SPaolo Bonzini 30760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 31760e4327SPaolo Bonzinihave_user = false 32760e4327SPaolo Bonzinihave_system = false 33760e4327SPaolo Bonziniforeach target : target_dirs 34760e4327SPaolo Bonzini have_user = have_user or target.endswith('-user') 35760e4327SPaolo Bonzini have_system = have_system or target.endswith('-softmmu') 36760e4327SPaolo Bonziniendforeach 37760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 38760e4327SPaolo Bonzinihave_block = have_system or have_tools 39760e4327SPaolo Bonzini 40201e8ed7SPaolo Bonzinipython = import('python').find_installation() 41201e8ed7SPaolo Bonzini 42201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 43201e8ed7SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', 44201e8ed7SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 45201e8ed7SPaolo Bonzini 46201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family() 47201e8ed7SPaolo Bonzinitargetos = host_machine.system() 48201e8ed7SPaolo Bonzini 49201e8ed7SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'), 50201e8ed7SPaolo Bonzini output: 'ninjatool', 51201e8ed7SPaolo Bonzini configuration: config_host) 52201e8ed7SPaolo Bonzini 53201e8ed7SPaolo Bonzini################## 54201e8ed7SPaolo Bonzini# Compiler flags # 55201e8ed7SPaolo Bonzini################## 56201e8ed7SPaolo Bonzini 57a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 58a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 59a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 60a5665051SPaolo Bonzini native: false, language: 'cpp') 61a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 62a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 63a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 64a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 65a5665051SPaolo Bonzini 66c46f76d1SAlexander Bulekov# Specify linker-script with add_project_link_arguments so that it is not placed 67c46f76d1SAlexander Bulekov# within a linker --start-group/--end-group pair 68c46f76d1SAlexander Bulekovif 'CONFIG_FUZZ' in config_host 69c46f76d1SAlexander Bulekov add_project_link_arguments(['-Wl,-T,', 70c46f76d1SAlexander Bulekov (meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')], 71c46f76d1SAlexander Bulekov native: false, language: ['c', 'cpp', 'objc']) 72c46f76d1SAlexander Bulekovendif 73c46f76d1SAlexander Bulekov 74fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 75fc929892SMarc-André Lureauif link_language == 'cpp' 76fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 77fc929892SMarc-André Lureauendif 78a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 79a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 80a5665051SPaolo Bonziniendif 81a5665051SPaolo Bonzini 82968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host 83968b4db3SPaolo Bonzini run_target('sparse', 84968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 85968b4db3SPaolo Bonzini config_host['SPARSE_CFLAGS'].split(), 86968b4db3SPaolo Bonzini 'compile_commands.json']) 87968b4db3SPaolo Bonziniendif 88968b4db3SPaolo Bonzini 89a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 90a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 914a96337dSPaolo Bonziniwinmm = [] 92a81df1b6SPaolo Bonzinisocket = [] 9304c6f1e7SMarc-André Lureauversion_res = [] 94d92989aaSMarc-André Lureaucoref = [] 95d92989aaSMarc-André Lureauiokit = [] 96d92989aaSMarc-André Lureaucocoa = [] 97d92989aaSMarc-André Lureauhvf = [] 98a81df1b6SPaolo Bonziniif targetos == 'windows' 99a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 1004a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 10104c6f1e7SMarc-André Lureau 10204c6f1e7SMarc-André Lureau win = import('windows') 10304c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 10404c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 10504c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 106d92989aaSMarc-André Lureauelif targetos == 'darwin' 107d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 108d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 109d92989aaSMarc-André Lureau cocoa = dependency('appleframeworks', modules: 'Cocoa') 110d92989aaSMarc-André Lureau hvf = dependency('appleframeworks', modules: 'Hypervisor') 111cfad62f1SPaolo Bonzinielif targetos == 'sunos' 112cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 113cfad62f1SPaolo Bonzini cc.find_library('nsl'), 114cfad62f1SPaolo Bonzini cc.find_library('resolv')] 115cfad62f1SPaolo Bonzinielif targetos == 'haiku' 116cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 117cfad62f1SPaolo Bonzini cc.find_library('network'), 118cfad62f1SPaolo Bonzini cc.find_library('bsd')] 119a81df1b6SPaolo Bonziniendif 120215b0c2fSPaolo Bonzini# The path to glib.h is added to all compilation commands. This was 121215b0c2fSPaolo Bonzini# grandfathered in from the QEMU Makefiles. 122215b0c2fSPaolo Bonziniadd_project_arguments(config_host['GLIB_CFLAGS'].split(), 123215b0c2fSPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 124215b0c2fSPaolo Bonziniglib = declare_dependency(link_args: config_host['GLIB_LIBS'].split()) 125a81df1b6SPaolo Bonzinigio = not_found 126a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 127a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 128a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 129a81df1b6SPaolo Bonziniendif 130a81df1b6SPaolo Bonzinilttng = not_found 131a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 132a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 133a81df1b6SPaolo Bonziniendif 134a81df1b6SPaolo Bonziniurcubp = not_found 135a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 136a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 137a81df1b6SPaolo Bonziniendif 13846859d93SDaniel P. Berrangégcrypt = not_found 13946859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host 14046859d93SDaniel P. Berrangé gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), 14146859d93SDaniel P. Berrangé link_args: config_host['GCRYPT_LIBS'].split()) 14246859d93SDaniel P. Berrangéendif 143a81df1b6SPaolo Bonzininettle = not_found 144a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 145a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 146a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 147a81df1b6SPaolo Bonziniendif 148a81df1b6SPaolo Bonzinignutls = not_found 149a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 150a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 151a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 152a81df1b6SPaolo Bonziniendif 153b7612f45SPaolo Bonzinipixman = not_found 154b7612f45SPaolo Bonziniif have_system or have_tools 155b7612f45SPaolo Bonzini pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', 1561a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 157b7612f45SPaolo Bonziniendif 1585e7fbd25SMarc-André Lureaupam = not_found 1595e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 1605e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 1615e7fbd25SMarc-André Lureauendif 1625e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 1631ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static) 1645e5733e5SMarc-André Lureaulinux_io_uring = not_found 1655e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 1665e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 1675e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 1685e5733e5SMarc-André Lureauendif 1695e5733e5SMarc-André Lureaulibxml2 = not_found 1705e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 1715e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 1725e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 1735e5733e5SMarc-André Lureauendif 1745e5733e5SMarc-André Lureaulibnfs = not_found 1755e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 1765e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 1775e5733e5SMarc-André Lureauendif 178ec0d5893SMarc-André Lureaulibattr = not_found 179ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 180ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 181ec0d5893SMarc-André Lureauendif 1823f99cf57SPaolo Bonziniseccomp = not_found 1833f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 1843f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 1853f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 1863f99cf57SPaolo Bonziniendif 1873f99cf57SPaolo Bonzinilibcap_ng = not_found 1883f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 1893f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 1903f99cf57SPaolo Bonziniendif 1911917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools 1921917ec6dSPaolo Bonzini xkbcommon = not_found 1931917ec6dSPaolo Bonzinielse 1941917ec6dSPaolo Bonzini xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), 1951a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 196ade60d4fSMarc-André Lureauendif 197cdaf0722SMarc-André Lureauslirp = not_found 198cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP') 199cdaf0722SMarc-André Lureau slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(), 200cdaf0722SMarc-André Lureau link_args: config_host['SLIRP_LIBS'].split()) 201cdaf0722SMarc-André Lureauendif 202cdaf0722SMarc-André Lureauvde = not_found 203cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE') 204cdaf0722SMarc-André Lureau vde = declare_dependency(link_args: config_host['VDE_LIBS'].split()) 205cdaf0722SMarc-André Lureauendif 206478e943fSPaolo Bonzinipulse = not_found 207478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 208478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 209478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 210478e943fSPaolo Bonziniendif 211478e943fSPaolo Bonzinialsa = not_found 212478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 213478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 214478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 215478e943fSPaolo Bonziniendif 216478e943fSPaolo Bonzinijack = not_found 217478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 218478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 219478e943fSPaolo Bonziniendif 2202634733cSPaolo Bonzinispice = not_found 2212634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 2222634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 2232634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 2242634733cSPaolo Bonziniendif 2255ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 226897b5afaSMarc-André Lureaulibmpathpersist = not_found 227897b5afaSMarc-André Lureauif config_host.has_key('CONFIG_MPATH') 228897b5afaSMarc-André Lureau libmpathpersist = cc.find_library('mpathpersist') 229897b5afaSMarc-André Lureauendif 230ccf7afa5SPaolo Bonzinilibdl = not_found 231ccf7afa5SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 232ccf7afa5SPaolo Bonzini libdl = cc.find_library('dl', required: true) 233ccf7afa5SPaolo Bonziniendif 23499650b62SPaolo Bonzinilibiscsi = not_found 23599650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 23699650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 23799650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 23899650b62SPaolo Bonziniendif 2395e5733e5SMarc-André Lureauzstd = not_found 2405e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 2415e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 2425e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 2435e5733e5SMarc-André Lureauendif 244ea458960SMarc-André Lureaugbm = not_found 245ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 246ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 247ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 248ea458960SMarc-André Lureauendif 249ea458960SMarc-André Lureauvirgl = not_found 250ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 251ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 252ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 253ea458960SMarc-André Lureauendif 2541d7bb6abSMarc-André Lureaucurl = not_found 2551d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 2561d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 2571d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 2581d7bb6abSMarc-André Lureauendif 259f15bff25SPaolo Bonzinilibudev = not_found 260f15bff25SPaolo Bonziniif 'CONFIG_LIBUDEV' in config_host 261f15bff25SPaolo Bonzini libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split()) 262f15bff25SPaolo Bonziniendif 2632634733cSPaolo Bonzinibrlapi = not_found 2642634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 2652634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 2662634733cSPaolo Bonziniendif 26735be72baSPaolo Bonzini 268760e4327SPaolo Bonzinisdl = not_found 269760e4327SPaolo Bonziniif have_system 270363743daSYonggang Luo sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) 27135be72baSPaolo Bonzini sdl_image = not_found 272760e4327SPaolo Bonziniendif 27335be72baSPaolo Bonziniif sdl.found() 27435be72baSPaolo Bonzini # work around 2.0.8 bug 27535be72baSPaolo Bonzini sdl = declare_dependency(compile_args: '-Wno-undef', 27635be72baSPaolo Bonzini dependencies: sdl) 2777161a433SVolker Rümelin sdl_image = dependency('SDL2_image', required: get_option('sdl_image'), 2781a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 27935be72baSPaolo Bonzinielse 28035be72baSPaolo Bonzini if get_option('sdl_image').enabled() 281a8dc2aceSSergei Trofimovich error('sdl-image required, but SDL was @0@'.format( 282a8dc2aceSSergei Trofimovich get_option('sdl').disabled() ? 'disabled' : 'not found')) 2832634733cSPaolo Bonzini endif 28435be72baSPaolo Bonzini sdl_image = not_found 28535be72baSPaolo Bonziniendif 28635be72baSPaolo Bonzini 2875e5733e5SMarc-André Lureaurbd = not_found 2885e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 2895e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 2905e5733e5SMarc-André Lureauendif 2915e5733e5SMarc-André Lureauglusterfs = not_found 2925e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 2935e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 2945e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 2955e5733e5SMarc-André Lureauendif 2965e5733e5SMarc-André Lureaulibssh = not_found 2975e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 2985e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 2995e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 3005e5733e5SMarc-André Lureauendif 3015e5733e5SMarc-André Lureaulibbzip2 = not_found 3025e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 3035e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 3045e5733e5SMarc-André Lureauendif 3055e5733e5SMarc-André Lureauliblzfse = not_found 3065e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 3075e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 3085e5733e5SMarc-André Lureauendif 309478e943fSPaolo Bonzinioss = not_found 310478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 311478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 312478e943fSPaolo Bonziniendif 313478e943fSPaolo Bonzinidsound = not_found 314478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 315478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 316478e943fSPaolo Bonziniendif 317478e943fSPaolo Bonzinicoreaudio = not_found 318478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 319478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 320478e943fSPaolo Bonziniendif 3212b1ccdf4SMarc-André Lureauopengl = not_found 3222b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 323de2d3005SPaolo Bonzini opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(), 324de2d3005SPaolo Bonzini link_args: config_host['OPENGL_LIBS'].split()) 3252b1ccdf4SMarc-André Lureauendif 3262b1ccdf4SMarc-André Lureaugtk = not_found 3272b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host 3282b1ccdf4SMarc-André Lureau gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(), 3292b1ccdf4SMarc-André Lureau link_args: config_host['GTK_LIBS'].split()) 3302b1ccdf4SMarc-André Lureauendif 3312b1ccdf4SMarc-André Lureauvte = not_found 3322b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 3332b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 3342b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 3352b1ccdf4SMarc-André Lureauendif 3362b1ccdf4SMarc-André Lureaux11 = not_found 3372b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host 3382b1ccdf4SMarc-André Lureau x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(), 3392b1ccdf4SMarc-André Lureau link_args: config_host['X11_LIBS'].split()) 3402b1ccdf4SMarc-André Lureauendif 3412b1ccdf4SMarc-André Lureaucurses = not_found 3422b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host 3432b1ccdf4SMarc-André Lureau curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(), 3442b1ccdf4SMarc-André Lureau link_args: config_host['CURSES_LIBS'].split()) 3452b1ccdf4SMarc-André Lureauendif 3462b1ccdf4SMarc-André Lureauiconv = not_found 3472b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host 3482b1ccdf4SMarc-André Lureau iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(), 3492b1ccdf4SMarc-André Lureau link_args: config_host['ICONV_LIBS'].split()) 3502b1ccdf4SMarc-André Lureauendif 351a0b93237SPaolo Bonzinivnc = not_found 3522b1ccdf4SMarc-André Lureaupng = not_found 3532b1ccdf4SMarc-André Lureaujpeg = not_found 3542b1ccdf4SMarc-André Lureausasl = not_found 355a0b93237SPaolo Bonziniif get_option('vnc').enabled() 356a0b93237SPaolo Bonzini vnc = declare_dependency() # dummy dependency 357a0b93237SPaolo Bonzini png = dependency('libpng', required: get_option('vnc_png'), 3581a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 359a0b93237SPaolo Bonzini jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'], 360a0b93237SPaolo Bonzini required: get_option('vnc_jpeg'), 361a0b93237SPaolo Bonzini static: enable_static) 362a0b93237SPaolo Bonzini sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'], 363a0b93237SPaolo Bonzini required: get_option('vnc_sasl'), 364a0b93237SPaolo Bonzini static: enable_static) 365a0b93237SPaolo Bonzini if sasl.found() 366a0b93237SPaolo Bonzini sasl = declare_dependency(dependencies: sasl, 367a0b93237SPaolo Bonzini compile_args: '-DSTRUCT_IOVEC_DEFINED') 368a0b93237SPaolo Bonzini endif 3692b1ccdf4SMarc-André Lureauendif 3704a96337dSPaolo Bonzinifdt = not_found 3714a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host 3724a96337dSPaolo Bonzini fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(), 3734a96337dSPaolo Bonzini link_args: config_host['FDT_LIBS'].split()) 3744a96337dSPaolo Bonziniendif 375708eab42SMarc-André Lureausnappy = not_found 376708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host 377708eab42SMarc-André Lureau snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split()) 378708eab42SMarc-André Lureauendif 379708eab42SMarc-André Lureaulzo = not_found 380708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host 381708eab42SMarc-André Lureau lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split()) 382708eab42SMarc-André Lureauendif 38355166230SMarc-André Lureaurdma = not_found 38455166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host 38555166230SMarc-André Lureau rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split()) 38655166230SMarc-André Lureauendif 387ab318051SMarc-André Lureaunuma = not_found 388ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host 389ab318051SMarc-André Lureau numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split()) 390ab318051SMarc-André Lureauendif 391582ea95fSMarc-André Lureauxen = not_found 392582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host 393582ea95fSMarc-André Lureau xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(), 394582ea95fSMarc-André Lureau link_args: config_host['XEN_LIBS'].split()) 395582ea95fSMarc-André Lureauendif 39606677ce1SPaolo Bonzinicacard = not_found 39706677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host 39806677ce1SPaolo Bonzini cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(), 39906677ce1SPaolo Bonzini link_args: config_host['SMARTCARD_LIBS'].split()) 40006677ce1SPaolo Bonziniendif 4010a40bcb7SCésar Belleyu2f = not_found 4020a40bcb7SCésar Belleyif have_system 4030a40bcb7SCésar Belley u2f = dependency('u2f-emu', required: get_option('u2f'), 4040a40bcb7SCésar Belley method: 'pkg-config', 4050a40bcb7SCésar Belley static: enable_static) 4060a40bcb7SCésar Belleyendif 40706677ce1SPaolo Bonziniusbredir = not_found 40806677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host 40906677ce1SPaolo Bonzini usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(), 41006677ce1SPaolo Bonzini link_args: config_host['USB_REDIR_LIBS'].split()) 41106677ce1SPaolo Bonziniendif 41206677ce1SPaolo Bonzinilibusb = not_found 41306677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host 41406677ce1SPaolo Bonzini libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(), 41506677ce1SPaolo Bonzini link_args: config_host['LIBUSB_LIBS'].split()) 41606677ce1SPaolo Bonziniendif 417c9322ab5SMarc-André Lureaucapstone = not_found 418c9322ab5SMarc-André Lureauif 'CONFIG_CAPSTONE' in config_host 419c9322ab5SMarc-André Lureau capstone = declare_dependency(compile_args: config_host['CAPSTONE_CFLAGS'].split(), 420c9322ab5SMarc-André Lureau link_args: config_host['CAPSTONE_LIBS'].split()) 421c9322ab5SMarc-André Lureauendif 422c9322ab5SMarc-André Lureaulibpmem = not_found 423c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host 424c9322ab5SMarc-André Lureau libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), 425c9322ab5SMarc-André Lureau link_args: config_host['LIBPMEM_LIBS'].split()) 426c9322ab5SMarc-André Lureauendif 427c7c91a74SBruce Rogerslibdaxctl = not_found 428c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host 429c7c91a74SBruce Rogers libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) 430c7c91a74SBruce Rogersendif 4318ce0a45fSMarc-André Lureautasn1 = not_found 4328ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host 4338ce0a45fSMarc-André Lureau tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), 4348ce0a45fSMarc-André Lureau link_args: config_host['TASN1_LIBS'].split()) 4358ce0a45fSMarc-André Lureauendif 436af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false, 437af04e89dSMarc-André Lureau method: 'pkg-config', static: enable_static) 438a81df1b6SPaolo Bonzini 4393909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid') 4403909def8SMarc-André Lureau 441859aef02SPaolo Bonzini# Create config-host.h 442859aef02SPaolo Bonzini 44335be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found()) 44435be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) 445a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found()) 446a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) 447a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found()) 448a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found()) 4494113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) 450af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found()) 4513909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid) 452859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version())) 453859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]) 454859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1]) 455859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]) 456859aef02SPaolo Bonzini 457859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST'] 458859aef02SPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'qemu_confdir', 'qemu_datadir', 459859aef02SPaolo Bonzini 'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir', 460859aef02SPaolo Bonzini 'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath'] 461859aef02SPaolo Bonziniforeach k, v: config_host 462859aef02SPaolo Bonzini if arrays.contains(k) 463859aef02SPaolo Bonzini if v != '' 464859aef02SPaolo Bonzini v = '"' + '", "'.join(v.split()) + '", ' 465859aef02SPaolo Bonzini endif 466859aef02SPaolo Bonzini config_host_data.set(k, v) 467859aef02SPaolo Bonzini elif k == 'ARCH' 468859aef02SPaolo Bonzini config_host_data.set('HOST_' + v.to_upper(), 1) 469859aef02SPaolo Bonzini elif strings.contains(k) 470859aef02SPaolo Bonzini if not k.startswith('CONFIG_') 471859aef02SPaolo Bonzini k = 'CONFIG_' + k.to_upper() 472859aef02SPaolo Bonzini endif 473859aef02SPaolo Bonzini config_host_data.set_quoted(k, v) 474859aef02SPaolo Bonzini elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_') 475859aef02SPaolo Bonzini config_host_data.set(k, v == 'y' ? 1 : v) 476859aef02SPaolo Bonzini endif 477859aef02SPaolo Bonziniendforeach 478859aef02SPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data) 479859aef02SPaolo Bonzini 4802becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 481a98006bcSPaolo Bonziniconfig_all_devices = {} 482ca0fc784SPaolo Bonziniconfig_all_disas = {} 4832becc36aSPaolo Bonziniconfig_devices_mak_list = [] 4842becc36aSPaolo Bonziniconfig_devices_h = {} 485859aef02SPaolo Bonziniconfig_target_h = {} 4862becc36aSPaolo Bonziniconfig_target_mak = {} 487ca0fc784SPaolo Bonzini 488ca0fc784SPaolo Bonzinidisassemblers = { 489ca0fc784SPaolo Bonzini 'alpha' : ['CONFIG_ALPHA_DIS'], 490ca0fc784SPaolo Bonzini 'arm' : ['CONFIG_ARM_DIS'], 491ca0fc784SPaolo Bonzini 'avr' : ['CONFIG_AVR_DIS'], 492ca0fc784SPaolo Bonzini 'cris' : ['CONFIG_CRIS_DIS'], 493ca0fc784SPaolo Bonzini 'hppa' : ['CONFIG_HPPA_DIS'], 494ca0fc784SPaolo Bonzini 'i386' : ['CONFIG_I386_DIS'], 495ca0fc784SPaolo Bonzini 'x86_64' : ['CONFIG_I386_DIS'], 496ca0fc784SPaolo Bonzini 'x32' : ['CONFIG_I386_DIS'], 497ca0fc784SPaolo Bonzini 'lm32' : ['CONFIG_LM32_DIS'], 498ca0fc784SPaolo Bonzini 'm68k' : ['CONFIG_M68K_DIS'], 499ca0fc784SPaolo Bonzini 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], 500ca0fc784SPaolo Bonzini 'mips' : ['CONFIG_MIPS_DIS'], 501ca0fc784SPaolo Bonzini 'moxie' : ['CONFIG_MOXIE_DIS'], 502ca0fc784SPaolo Bonzini 'nios2' : ['CONFIG_NIOS2_DIS'], 503ca0fc784SPaolo Bonzini 'or1k' : ['CONFIG_OPENRISC_DIS'], 504ca0fc784SPaolo Bonzini 'ppc' : ['CONFIG_PPC_DIS'], 505ca0fc784SPaolo Bonzini 'riscv' : ['CONFIG_RISCV_DIS'], 506ca0fc784SPaolo Bonzini 'rx' : ['CONFIG_RX_DIS'], 507ca0fc784SPaolo Bonzini 's390' : ['CONFIG_S390_DIS'], 508ca0fc784SPaolo Bonzini 'sh4' : ['CONFIG_SH4_DIS'], 509ca0fc784SPaolo Bonzini 'sparc' : ['CONFIG_SPARC_DIS'], 510ca0fc784SPaolo Bonzini 'xtensa' : ['CONFIG_XTENSA_DIS'], 511ca0fc784SPaolo Bonzini} 512ca0fc784SPaolo Bonziniif link_language == 'cpp' 513ca0fc784SPaolo Bonzini disassemblers += { 514ca0fc784SPaolo Bonzini 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], 515ca0fc784SPaolo Bonzini 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], 516ca0fc784SPaolo Bonzini 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], 517ca0fc784SPaolo Bonzini } 518ca0fc784SPaolo Bonziniendif 519ca0fc784SPaolo Bonzini 5202becc36aSPaolo Bonzinikconfig_external_symbols = [ 5212becc36aSPaolo Bonzini 'CONFIG_KVM', 5222becc36aSPaolo Bonzini 'CONFIG_XEN', 5232becc36aSPaolo Bonzini 'CONFIG_TPM', 5242becc36aSPaolo Bonzini 'CONFIG_SPICE', 5252becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 5262becc36aSPaolo Bonzini 'CONFIG_OPENGL', 5272becc36aSPaolo Bonzini 'CONFIG_X11', 5282becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 52940bc0ca9SLaurent Vivier 'CONFIG_VHOST_VDPA', 5302becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 5312becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 5322becc36aSPaolo Bonzini 'CONFIG_LINUX', 5332becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 5342becc36aSPaolo Bonzini] 535859aef02SPaolo Bonziniignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS'] 536ca0fc784SPaolo Bonzini 537a81df1b6SPaolo Bonziniforeach target : target_dirs 538859aef02SPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') 539859aef02SPaolo Bonzini 540ca0fc784SPaolo Bonzini foreach k, v: disassemblers 541ca0fc784SPaolo Bonzini if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) 542ca0fc784SPaolo Bonzini foreach sym: v 543ca0fc784SPaolo Bonzini config_target += { sym: 'y' } 544ca0fc784SPaolo Bonzini config_all_disas += { sym: 'y' } 545ca0fc784SPaolo Bonzini endforeach 546ca0fc784SPaolo Bonzini endif 547ca0fc784SPaolo Bonzini endforeach 548ca0fc784SPaolo Bonzini 549859aef02SPaolo Bonzini config_target_data = configuration_data() 550859aef02SPaolo Bonzini foreach k, v: config_target 551859aef02SPaolo Bonzini if not k.startswith('TARGET_') and not k.startswith('CONFIG_') 552859aef02SPaolo Bonzini # do nothing 553859aef02SPaolo Bonzini elif ignored.contains(k) 554859aef02SPaolo Bonzini # do nothing 555859aef02SPaolo Bonzini elif k == 'TARGET_BASE_ARCH' 556859aef02SPaolo Bonzini config_target_data.set('TARGET_' + v.to_upper(), 1) 557859aef02SPaolo Bonzini elif k == 'TARGET_NAME' 558859aef02SPaolo Bonzini config_target_data.set_quoted(k, v) 559859aef02SPaolo Bonzini elif v == 'y' 560859aef02SPaolo Bonzini config_target_data.set(k, 1) 561859aef02SPaolo Bonzini else 562859aef02SPaolo Bonzini config_target_data.set(k, v) 563859aef02SPaolo Bonzini endif 564859aef02SPaolo Bonzini endforeach 565859aef02SPaolo Bonzini config_target_h += {target: configure_file(output: target + '-config-target.h', 566859aef02SPaolo Bonzini configuration: config_target_data)} 5672becc36aSPaolo Bonzini 5682becc36aSPaolo Bonzini if target.endswith('-softmmu') 5692becc36aSPaolo Bonzini base_kconfig = [] 5702becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 571859aef02SPaolo Bonzini if sym in config_target or sym in config_host 5722becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 5732becc36aSPaolo Bonzini endif 5742becc36aSPaolo Bonzini endforeach 5752becc36aSPaolo Bonzini 5762becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 5772becc36aSPaolo Bonzini config_devices_mak = configure_file( 5782becc36aSPaolo Bonzini input: ['default-configs' / target + '.mak', 'Kconfig'], 5792becc36aSPaolo Bonzini output: config_devices_mak, 5802becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 5812becc36aSPaolo Bonzini capture: true, 5822becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 5832becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 5842becc36aSPaolo Bonzini base_kconfig]) 585859aef02SPaolo Bonzini 586859aef02SPaolo Bonzini config_devices_data = configuration_data() 587859aef02SPaolo Bonzini config_devices = keyval.load(config_devices_mak) 588859aef02SPaolo Bonzini foreach k, v: config_devices 589859aef02SPaolo Bonzini config_devices_data.set(k, 1) 590859aef02SPaolo Bonzini endforeach 5912becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 592859aef02SPaolo Bonzini config_devices_h += {target: configure_file(output: target + '-config-devices.h', 593859aef02SPaolo Bonzini configuration: config_devices_data)} 594859aef02SPaolo Bonzini config_target += config_devices 595a98006bcSPaolo Bonzini config_all_devices += config_devices 5962becc36aSPaolo Bonzini endif 5972becc36aSPaolo Bonzini config_target_mak += {target: config_target} 598a81df1b6SPaolo Bonziniendforeach 599a81df1b6SPaolo Bonzini 6002becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 6012becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 6022becc36aSPaolo Bonzini# static_library target. 6032becc36aSPaolo Bonzini# 6042becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 6052becc36aSPaolo Bonzini# build literally all source files, including devices only used by 6062becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 6072becc36aSPaolo Bonzini# pseudo symbol replaces it. 6082becc36aSPaolo Bonzini 6092becc36aSPaolo Bonziniconfig_all = config_all_devices 6102becc36aSPaolo Bonziniconfig_all += config_host 6112becc36aSPaolo Bonziniconfig_all += config_all_disas 6122becc36aSPaolo Bonziniconfig_all += { 6132becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 6142becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 6152becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 6162becc36aSPaolo Bonzini 'CONFIG_ALL': true, 6172becc36aSPaolo Bonzini} 6182becc36aSPaolo Bonzini 619a81df1b6SPaolo Bonzini# Generators 620a81df1b6SPaolo Bonzini 6213f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 622650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 623a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 624a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 625a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 626a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 627a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 628a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 629a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 630a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 631a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 632a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 633a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 634a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 635a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 636a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 637a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 638a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 639a81df1b6SPaolo Bonzini] 640a81df1b6SPaolo Bonzini 641a81df1b6SPaolo Bonzinitracetool = [ 642a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 643a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 644a81df1b6SPaolo Bonzini] 645a81df1b6SPaolo Bonzini 6462c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 6472c273f32SMarc-André Lureau meson.current_source_dir(), 648859aef02SPaolo Bonzini config_host['PKGVERSION'], meson.project_version()] 6492c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 6502c273f32SMarc-André Lureau output: 'qemu-version.h', 6512c273f32SMarc-André Lureau command: qemu_version_cmd, 6522c273f32SMarc-André Lureau capture: true, 6532c273f32SMarc-André Lureau build_by_default: true, 6542c273f32SMarc-André Lureau build_always_stale: true) 6552c273f32SMarc-André Lureaugenh += qemu_version 6562c273f32SMarc-André Lureau 6573f885659SMarc-André Lureauhxdep = [] 6583f885659SMarc-André Lureauhx_headers = [ 6593f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 6603f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 6613f885659SMarc-André Lureau] 6623f885659SMarc-André Lureauif have_system 6633f885659SMarc-André Lureau hx_headers += [ 6643f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 6653f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 6663f885659SMarc-André Lureau ] 6673f885659SMarc-André Lureauendif 6683f885659SMarc-André Lureauforeach d : hx_headers 669b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 6703f885659SMarc-André Lureau input: files(d[0]), 6713f885659SMarc-André Lureau output: d[1], 6723f885659SMarc-André Lureau capture: true, 6733f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 6743f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 6753f885659SMarc-André Lureauendforeach 6763f885659SMarc-André Lureaugenh += hxdep 6773f885659SMarc-André Lureau 678eb937365SPeter MaydellSPHINX_ARGS = [config_host['SPHINX_BUILD'], 679eb937365SPeter Maydell '-Dversion=' + meson.project_version(), 680eb937365SPeter Maydell '-Drelease=' + config_host['PKGVERSION']] 681eb937365SPeter Maydell 682eb937365SPeter Maydellif get_option('werror') 683eb937365SPeter Maydell SPHINX_ARGS += [ '-W' ] 684eb937365SPeter Maydellendif 685eb937365SPeter Maydell 686b3f4830aSPeter Maydellsphinx_extn_depends = [ meson.source_root() / 'docs/sphinx/depfile.py', 687b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/hxtool.py', 688b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kerneldoc.py', 689b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/kernellog.py', 690b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qapidoc.py', 691b3f4830aSPeter Maydell meson.source_root() / 'docs/sphinx/qmp_lexer.py', 692b3f4830aSPeter Maydell qapi_gen_depends ] 693b3f4830aSPeter Maydell 694a81df1b6SPaolo Bonzini# Collect sourcesets. 695a81df1b6SPaolo Bonzini 696a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 697a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 698a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 6993154fee4SMarc-André Lureaublock_ss = ss.source_set() 7004a96337dSPaolo Bonziniblockdev_ss = ss.source_set() 701ff219dcaSPaolo Bonziniqmp_ss = ss.source_set() 7022becc36aSPaolo Bonzinicommon_ss = ss.source_set() 7032becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 7042becc36aSPaolo Bonziniuser_ss = ss.source_set() 7052becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 7062becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 7072becc36aSPaolo Bonzinispecific_ss = ss.source_set() 70864ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set() 7092becc36aSPaolo Bonzini 7103154fee4SMarc-André Lureaumodules = {} 7112becc36aSPaolo Bonzinihw_arch = {} 7122becc36aSPaolo Bonzinitarget_arch = {} 7132becc36aSPaolo Bonzinitarget_softmmu_arch = {} 714a81df1b6SPaolo Bonzini 715a81df1b6SPaolo Bonzini############### 716a81df1b6SPaolo Bonzini# Trace files # 717a81df1b6SPaolo Bonzini############### 718a81df1b6SPaolo Bonzini 719c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once 720c9322ab5SMarc-André Lureau# we have those 721a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 722a81df1b6SPaolo Bonzini 'accel/kvm', 723a81df1b6SPaolo Bonzini 'accel/tcg', 724a81df1b6SPaolo Bonzini 'crypto', 725a81df1b6SPaolo Bonzini 'monitor', 726a81df1b6SPaolo Bonzini] 727a81df1b6SPaolo Bonziniif have_user 728a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 729a81df1b6SPaolo Bonziniendif 730a81df1b6SPaolo Bonziniif have_block 731a81df1b6SPaolo Bonzini trace_events_subdirs += [ 732a81df1b6SPaolo Bonzini 'authz', 733a81df1b6SPaolo Bonzini 'block', 734a81df1b6SPaolo Bonzini 'io', 735a81df1b6SPaolo Bonzini 'nbd', 736a81df1b6SPaolo Bonzini 'scsi', 737a81df1b6SPaolo Bonzini ] 738a81df1b6SPaolo Bonziniendif 739a81df1b6SPaolo Bonziniif have_system 740a81df1b6SPaolo Bonzini trace_events_subdirs += [ 741a81df1b6SPaolo Bonzini 'audio', 742a81df1b6SPaolo Bonzini 'backends', 743a81df1b6SPaolo Bonzini 'backends/tpm', 744a81df1b6SPaolo Bonzini 'chardev', 745a81df1b6SPaolo Bonzini 'hw/9pfs', 746a81df1b6SPaolo Bonzini 'hw/acpi', 747a81df1b6SPaolo Bonzini 'hw/alpha', 748a81df1b6SPaolo Bonzini 'hw/arm', 749a81df1b6SPaolo Bonzini 'hw/audio', 750a81df1b6SPaolo Bonzini 'hw/block', 751a81df1b6SPaolo Bonzini 'hw/block/dataplane', 752a81df1b6SPaolo Bonzini 'hw/char', 753a81df1b6SPaolo Bonzini 'hw/display', 754a81df1b6SPaolo Bonzini 'hw/dma', 755a81df1b6SPaolo Bonzini 'hw/hppa', 756a81df1b6SPaolo Bonzini 'hw/hyperv', 757a81df1b6SPaolo Bonzini 'hw/i2c', 758a81df1b6SPaolo Bonzini 'hw/i386', 759a81df1b6SPaolo Bonzini 'hw/i386/xen', 760a81df1b6SPaolo Bonzini 'hw/ide', 761a81df1b6SPaolo Bonzini 'hw/input', 762a81df1b6SPaolo Bonzini 'hw/intc', 763a81df1b6SPaolo Bonzini 'hw/isa', 764a81df1b6SPaolo Bonzini 'hw/mem', 765a81df1b6SPaolo Bonzini 'hw/mips', 766a81df1b6SPaolo Bonzini 'hw/misc', 767a81df1b6SPaolo Bonzini 'hw/misc/macio', 768a81df1b6SPaolo Bonzini 'hw/net', 769a81df1b6SPaolo Bonzini 'hw/nvram', 770a81df1b6SPaolo Bonzini 'hw/pci', 771a81df1b6SPaolo Bonzini 'hw/pci-host', 772a81df1b6SPaolo Bonzini 'hw/ppc', 773a81df1b6SPaolo Bonzini 'hw/rdma', 774a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 775a81df1b6SPaolo Bonzini 'hw/rtc', 776a81df1b6SPaolo Bonzini 'hw/s390x', 777a81df1b6SPaolo Bonzini 'hw/scsi', 778a81df1b6SPaolo Bonzini 'hw/sd', 779a81df1b6SPaolo Bonzini 'hw/sparc', 780a81df1b6SPaolo Bonzini 'hw/sparc64', 781a81df1b6SPaolo Bonzini 'hw/ssi', 782a81df1b6SPaolo Bonzini 'hw/timer', 783a81df1b6SPaolo Bonzini 'hw/tpm', 784a81df1b6SPaolo Bonzini 'hw/usb', 785a81df1b6SPaolo Bonzini 'hw/vfio', 786a81df1b6SPaolo Bonzini 'hw/virtio', 787a81df1b6SPaolo Bonzini 'hw/watchdog', 788a81df1b6SPaolo Bonzini 'hw/xen', 789a81df1b6SPaolo Bonzini 'hw/gpio', 790a81df1b6SPaolo Bonzini 'migration', 791a81df1b6SPaolo Bonzini 'net', 7928b7a5507SPhilippe Mathieu-Daudé 'softmmu', 793a81df1b6SPaolo Bonzini 'ui', 794a81df1b6SPaolo Bonzini ] 795a81df1b6SPaolo Bonziniendif 796a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 797a81df1b6SPaolo Bonzini 'hw/core', 798a81df1b6SPaolo Bonzini 'qapi', 799a81df1b6SPaolo Bonzini 'qom', 800a81df1b6SPaolo Bonzini 'target/arm', 801a81df1b6SPaolo Bonzini 'target/hppa', 802a81df1b6SPaolo Bonzini 'target/i386', 803a81df1b6SPaolo Bonzini 'target/mips', 804a81df1b6SPaolo Bonzini 'target/ppc', 805a81df1b6SPaolo Bonzini 'target/riscv', 806a81df1b6SPaolo Bonzini 'target/s390x', 807a81df1b6SPaolo Bonzini 'target/sparc', 808a81df1b6SPaolo Bonzini 'util', 809a81df1b6SPaolo Bonzini] 810a81df1b6SPaolo Bonzini 811a81df1b6SPaolo Bonzinisubdir('qapi') 812a81df1b6SPaolo Bonzinisubdir('qobject') 813a81df1b6SPaolo Bonzinisubdir('stubs') 814a81df1b6SPaolo Bonzinisubdir('trace') 815a81df1b6SPaolo Bonzinisubdir('util') 8165582c58fSMarc-André Lureausubdir('qom') 8175582c58fSMarc-André Lureausubdir('authz') 818a81df1b6SPaolo Bonzinisubdir('crypto') 8192d78b56eSMarc-André Lureausubdir('ui') 820a81df1b6SPaolo Bonzini 8213154fee4SMarc-André Lureau 8223154fee4SMarc-André Lureauif enable_modules 8233154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 8243154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 8253154fee4SMarc-André Lureauendif 8263154fee4SMarc-André Lureau 827a81df1b6SPaolo Bonzini# Build targets from sourcesets 828a81df1b6SPaolo Bonzini 8292becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 830a81df1b6SPaolo Bonzini 831a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 8322becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 833a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 834a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 835a81df1b6SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket]) 836a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 83704c6f1e7SMarc-André Lureau sources: genh + version_res) 838a81df1b6SPaolo Bonzini 839abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'), 840abff1abfSPaolo Bonzini output: 'decode-@BASENAME@.c.inc', 841abff1abfSPaolo Bonzini arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@']) 842abff1abfSPaolo Bonzini 843478e943fSPaolo Bonzinisubdir('audio') 8447fcfd456SMarc-André Lureausubdir('io') 845848e8ff6SMarc-André Lureausubdir('chardev') 846ec0d5893SMarc-André Lureausubdir('fsdev') 847abff1abfSPaolo Bonzinisubdir('libdecnumber') 848d3b18480SMarc-André Lureausubdir('target') 849708eab42SMarc-André Lureausubdir('dump') 850ec0d5893SMarc-André Lureau 8515e5733e5SMarc-André Lureaublock_ss.add(files( 8525e5733e5SMarc-André Lureau 'block.c', 8535e5733e5SMarc-André Lureau 'blockjob.c', 8545e5733e5SMarc-André Lureau 'job.c', 8555e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 8565e5733e5SMarc-André Lureau)) 8575e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 8585e5733e5SMarc-André Lureau 8595e5733e5SMarc-André Lureausubdir('nbd') 8605e5733e5SMarc-André Lureausubdir('scsi') 8615e5733e5SMarc-André Lureausubdir('block') 8625e5733e5SMarc-André Lureau 8634a96337dSPaolo Bonziniblockdev_ss.add(files( 8644a96337dSPaolo Bonzini 'blockdev.c', 8654a96337dSPaolo Bonzini 'blockdev-nbd.c', 8664a96337dSPaolo Bonzini 'iothread.c', 8674a96337dSPaolo Bonzini 'job-qmp.c', 8684a96337dSPaolo Bonzini)) 8694a96337dSPaolo Bonzini 8704a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 8714a96337dSPaolo Bonzini# os-win32.c does not 8724a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 8734a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 8744a96337dSPaolo Bonzini 8754a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 8764a96337dSPaolo Bonzinisoftmmu_ss.add(files( 8774a96337dSPaolo Bonzini 'bootdevice.c', 8784a96337dSPaolo Bonzini 'dma-helpers.c', 8794a96337dSPaolo Bonzini 'qdev-monitor.c', 8804a96337dSPaolo Bonzini), sdl) 8814a96337dSPaolo Bonzini 8824a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c')) 8834a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp]) 8844a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')]) 8854a96337dSPaolo Bonzini 8864a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 8874a96337dSPaolo Bonzini 8885d3ea0e1SPaolo Bonzinisubdir('softmmu') 889c9322ab5SMarc-André Lureau 890c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl) 891c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c')) 892c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files( 893c9322ab5SMarc-André Lureau 'fpu/softfloat.c', 894c9322ab5SMarc-André Lureau 'tcg/optimize.c', 895c9322ab5SMarc-André Lureau 'tcg/tcg-common.c', 896c9322ab5SMarc-André Lureau 'tcg/tcg-op-gvec.c', 897c9322ab5SMarc-André Lureau 'tcg/tcg-op-vec.c', 898c9322ab5SMarc-André Lureau 'tcg/tcg-op.c', 899c9322ab5SMarc-André Lureau 'tcg/tcg.c', 900c9322ab5SMarc-André Lureau)) 901c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c')) 902c9322ab5SMarc-André Lureau 903ab318051SMarc-André Lureausubdir('backends') 904c574e161SMarc-André Lureausubdir('disas') 90555166230SMarc-André Lureausubdir('migration') 906ff219dcaSPaolo Bonzinisubdir('monitor') 907cdaf0722SMarc-André Lureausubdir('net') 90817ef2af6SMarc-André Lureausubdir('replay') 909582ea95fSMarc-André Lureausubdir('hw') 9101a82878aSMarc-André Lureausubdir('accel') 911f556b4a1SPaolo Bonzinisubdir('plugins') 912b309c321SMarc-André Lureausubdir('bsd-user') 9133a30446aSMarc-André Lureausubdir('linux-user') 9143a30446aSMarc-André Lureau 915b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c')) 916b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss) 917b309c321SMarc-André Lureau 9183a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c')) 9193a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss) 9205d3ea0e1SPaolo Bonzini 921a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 922a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 92364ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz') 924a2ce7dbdSPaolo Bonzini 9253154fee4SMarc-André Lureaublock_mods = [] 9263154fee4SMarc-André Lureausoftmmu_mods = [] 9273154fee4SMarc-André Lureauforeach d, list : modules 9283154fee4SMarc-André Lureau foreach m, module_ss : list 9293154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 9303e292c51SGerd Hoffmann module_ss = module_ss.apply(config_all, strict: false) 9313154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 9323154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 9333154fee4SMarc-André Lureau if d == 'block' 9343154fee4SMarc-André Lureau block_mods += sl 9353154fee4SMarc-André Lureau else 9363154fee4SMarc-André Lureau softmmu_mods += sl 9373154fee4SMarc-André Lureau endif 9383154fee4SMarc-André Lureau else 9393154fee4SMarc-André Lureau if d == 'block' 9403154fee4SMarc-André Lureau block_ss.add_all(module_ss) 9413154fee4SMarc-André Lureau else 9423154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 9433154fee4SMarc-André Lureau endif 9443154fee4SMarc-André Lureau endif 9453154fee4SMarc-André Lureau endforeach 9463154fee4SMarc-André Lureauendforeach 9473154fee4SMarc-André Lureau 9483154fee4SMarc-André Lureaunm = find_program('nm') 949604f3e4eSYonggang Luoundefsym = find_program('scripts/undefsym.py') 9503154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 9513154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 9523154fee4SMarc-André Lureau capture: true, 9533154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 9543154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 9553154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 9563154fee4SMarc-André Lureau capture: true, 9573154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 9583154fee4SMarc-André Lureau 9595e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 9605e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 9615e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 9625e5733e5SMarc-André Lureau link_depends: block_syms, 9635e5733e5SMarc-André Lureau name_suffix: 'fa', 9645e5733e5SMarc-André Lureau build_by_default: false) 9655e5733e5SMarc-André Lureau 9665e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 967b7c70bf2SMarc-André Lureau link_args: '@block.syms', 968b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 9695e5733e5SMarc-André Lureau 970ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 971ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 972ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 973ff219dcaSPaolo Bonzini name_suffix: 'fa', 974ff219dcaSPaolo Bonzini build_by_default: false) 975ff219dcaSPaolo Bonzini 976ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 977ff219dcaSPaolo Bonzini 9783154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 9793154fee4SMarc-André Lureau shared_module(m.name(), 9803154fee4SMarc-André Lureau name_prefix: '', 9813154fee4SMarc-André Lureau link_whole: m, 9823154fee4SMarc-André Lureau install: true, 9833154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 9843154fee4SMarc-André Lureauendforeach 9853154fee4SMarc-André Lureau 98664ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp) 98764ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil) 98864ed6f92SPaolo Bonzini 98964ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss]) 9902becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 9912becc36aSPaolo Bonzini 9922becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 9932becc36aSPaolo Bonzinicommon_all = static_library('common', 9942becc36aSPaolo Bonzini build_by_default: false, 9952becc36aSPaolo Bonzini sources: common_all.sources() + genh, 9962becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 9972becc36aSPaolo Bonzini name_suffix: 'fa') 9982becc36aSPaolo Bonzini 999c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh') 1000c9322ab5SMarc-André Lureau 100164ed6f92SPaolo Bonziniemulators = [] 10022becc36aSPaolo Bonziniforeach target : target_dirs 10032becc36aSPaolo Bonzini config_target = config_target_mak[target] 10042becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 10052becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 1006859aef02SPaolo Bonzini arch_srcs = [config_target_h[target]] 100764ed6f92SPaolo Bonzini arch_deps = [] 100864ed6f92SPaolo Bonzini c_args = ['-DNEED_CPU_H', 100964ed6f92SPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 101064ed6f92SPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] 101164ed6f92SPaolo Bonzini link_args = [] 10122becc36aSPaolo Bonzini 1013859aef02SPaolo Bonzini config_target += config_host 10142becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 10152becc36aSPaolo Bonzini if targetos == 'linux' 10162becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 10172becc36aSPaolo Bonzini endif 10182becc36aSPaolo Bonzini if target.endswith('-softmmu') 10192becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 10202becc36aSPaolo Bonzini target_type='system' 1021abff1abfSPaolo Bonzini t = target_softmmu_arch[arch].apply(config_target, strict: false) 1022abff1abfSPaolo Bonzini arch_srcs += t.sources() 102364ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1024abff1abfSPaolo Bonzini 10252c44220dSMarc-André Lureau hw_dir = target_name == 'sparc64' ? 'sparc64' : arch 10262c44220dSMarc-André Lureau hw = hw_arch[hw_dir].apply(config_target, strict: false) 10272c44220dSMarc-André Lureau arch_srcs += hw.sources() 102864ed6f92SPaolo Bonzini arch_deps += hw.dependencies() 10292c44220dSMarc-André Lureau 10302becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 103164ed6f92SPaolo Bonzini link_args += ['@block.syms', '@qemu.syms'] 10322becc36aSPaolo Bonzini else 10333a30446aSMarc-André Lureau abi = config_target['TARGET_ABI_DIR'] 10342becc36aSPaolo Bonzini target_type='user' 10352becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 10362becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 10372becc36aSPaolo Bonzini base_dir = 'linux-user' 10382becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 10392becc36aSPaolo Bonzini else 10402becc36aSPaolo Bonzini base_dir = 'bsd-user' 10412becc36aSPaolo Bonzini endif 10422becc36aSPaolo Bonzini target_inc += include_directories( 10432becc36aSPaolo Bonzini base_dir, 10443a30446aSMarc-André Lureau base_dir / abi, 10452becc36aSPaolo Bonzini ) 10463a30446aSMarc-André Lureau if 'CONFIG_LINUX_USER' in config_target 10473a30446aSMarc-André Lureau dir = base_dir / abi 10483a30446aSMarc-André Lureau arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c') 10493a30446aSMarc-André Lureau if config_target.has_key('TARGET_SYSTBL_ABI') 10503a30446aSMarc-André Lureau arch_srcs += \ 10513a30446aSMarc-André Lureau syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'], 10523a30446aSMarc-André Lureau extra_args : config_target['TARGET_SYSTBL_ABI']) 10533a30446aSMarc-André Lureau endif 10543a30446aSMarc-André Lureau endif 10552becc36aSPaolo Bonzini endif 10562becc36aSPaolo Bonzini 1057c9322ab5SMarc-André Lureau if 'TARGET_XML_FILES' in config_target 1058c9322ab5SMarc-André Lureau gdbstub_xml = custom_target(target + '-gdbstub-xml.c', 1059c9322ab5SMarc-André Lureau output: target + '-gdbstub-xml.c', 1060c9322ab5SMarc-André Lureau input: files(config_target['TARGET_XML_FILES'].split()), 1061c9322ab5SMarc-André Lureau command: [feature_to_c, '@INPUT@'], 1062c9322ab5SMarc-André Lureau capture: true) 1063c9322ab5SMarc-André Lureau arch_srcs += gdbstub_xml 1064c9322ab5SMarc-André Lureau endif 1065c9322ab5SMarc-André Lureau 1066abff1abfSPaolo Bonzini t = target_arch[arch].apply(config_target, strict: false) 1067abff1abfSPaolo Bonzini arch_srcs += t.sources() 106864ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1069abff1abfSPaolo Bonzini 10702becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 10712becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 107264ed6f92SPaolo Bonzini deps = target_common.dependencies() 10732becc36aSPaolo Bonzini 10742becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 10752becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 107664ed6f92SPaolo Bonzini arch_deps += target_specific.dependencies() 10772becc36aSPaolo Bonzini 107864ed6f92SPaolo Bonzini lib = static_library('qemu-' + target, 1079859aef02SPaolo Bonzini sources: arch_srcs + genh, 1080b7612f45SPaolo Bonzini dependencies: arch_deps, 10812becc36aSPaolo Bonzini objects: objects, 10822becc36aSPaolo Bonzini include_directories: target_inc, 108364ed6f92SPaolo Bonzini c_args: c_args, 108464ed6f92SPaolo Bonzini build_by_default: false, 10852becc36aSPaolo Bonzini name_suffix: 'fa') 108664ed6f92SPaolo Bonzini 108764ed6f92SPaolo Bonzini if target.endswith('-softmmu') 108864ed6f92SPaolo Bonzini execs = [{ 108964ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name, 109064ed6f92SPaolo Bonzini 'gui': false, 109164ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 109264ed6f92SPaolo Bonzini 'dependencies': [] 109364ed6f92SPaolo Bonzini }] 109435be72baSPaolo Bonzini if targetos == 'windows' and (sdl.found() or gtk.found()) 109564ed6f92SPaolo Bonzini execs += [{ 109664ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name + 'w', 109764ed6f92SPaolo Bonzini 'gui': true, 109864ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 109964ed6f92SPaolo Bonzini 'dependencies': [] 110064ed6f92SPaolo Bonzini }] 110164ed6f92SPaolo Bonzini endif 110264ed6f92SPaolo Bonzini if config_host.has_key('CONFIG_FUZZ') 110364ed6f92SPaolo Bonzini specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false) 110464ed6f92SPaolo Bonzini execs += [{ 110564ed6f92SPaolo Bonzini 'name': 'qemu-fuzz-' + target_name, 110664ed6f92SPaolo Bonzini 'gui': false, 110764ed6f92SPaolo Bonzini 'sources': specific_fuzz.sources(), 110864ed6f92SPaolo Bonzini 'dependencies': specific_fuzz.dependencies(), 110964ed6f92SPaolo Bonzini }] 111064ed6f92SPaolo Bonzini endif 111164ed6f92SPaolo Bonzini else 111264ed6f92SPaolo Bonzini execs = [{ 111364ed6f92SPaolo Bonzini 'name': 'qemu-' + target_name, 111464ed6f92SPaolo Bonzini 'gui': false, 111564ed6f92SPaolo Bonzini 'sources': [], 111664ed6f92SPaolo Bonzini 'dependencies': [] 111764ed6f92SPaolo Bonzini }] 111864ed6f92SPaolo Bonzini endif 111964ed6f92SPaolo Bonzini foreach exe: execs 112064ed6f92SPaolo Bonzini emulators += executable(exe['name'], exe['sources'], 112164ed6f92SPaolo Bonzini install: true, 112264ed6f92SPaolo Bonzini c_args: c_args, 112364ed6f92SPaolo Bonzini dependencies: arch_deps + deps + exe['dependencies'], 112464ed6f92SPaolo Bonzini objects: lib.extract_all_objects(recursive: true), 112564ed6f92SPaolo Bonzini link_language: link_language, 112664ed6f92SPaolo Bonzini link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []), 112764ed6f92SPaolo Bonzini link_args: link_args, 112864ed6f92SPaolo Bonzini gui_app: exe['gui']) 112910e1d263SMarc-André Lureau 113010e1d263SMarc-André Lureau if 'CONFIG_TRACE_SYSTEMTAP' in config_host 113110e1d263SMarc-André Lureau foreach stp: [ 1132bd5f973aSStefan Hajnoczi {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, 1133bd5f973aSStefan Hajnoczi {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, 113410e1d263SMarc-André Lureau {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, 113510e1d263SMarc-André Lureau {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, 113610e1d263SMarc-André Lureau ] 1137bd5f973aSStefan Hajnoczi custom_target(exe['name'] + stp['ext'], 113810e1d263SMarc-André Lureau input: trace_events_all, 1139bd5f973aSStefan Hajnoczi output: exe['name'] + stp['ext'], 114010e1d263SMarc-André Lureau capture: true, 114110e1d263SMarc-André Lureau install: stp['install'], 1142ab4c0996SMarc-André Lureau install_dir: qemu_datadir / '../systemtap/tapset', 114310e1d263SMarc-André Lureau command: [ 114410e1d263SMarc-André Lureau tracetool, '--group=all', '--format=' + stp['fmt'], 114510e1d263SMarc-André Lureau '--binary=' + stp['bin'], 114610e1d263SMarc-André Lureau '--target-name=' + target_name, 114710e1d263SMarc-André Lureau '--target-type=' + target_type, 114810e1d263SMarc-André Lureau '--probe-prefix=qemu.' + target_type + '.' + target_name, 114910e1d263SMarc-André Lureau '@INPUT@', 115010e1d263SMarc-André Lureau ]) 115110e1d263SMarc-André Lureau endforeach 115210e1d263SMarc-André Lureau endif 115364ed6f92SPaolo Bonzini endforeach 11542becc36aSPaolo Bonziniendforeach 11552becc36aSPaolo Bonzini 1156931049b4SPaolo Bonzini# Other build targets 1157897b5afaSMarc-André Lureau 1158f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 1159f556b4a1SPaolo Bonzini install_headers('include/qemu/qemu-plugin.h') 1160f556b4a1SPaolo Bonziniendif 1161f556b4a1SPaolo Bonzini 1162f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 1163f15bff25SPaolo Bonzini subdir('qga') 1164f15bff25SPaolo Bonziniendif 1165f15bff25SPaolo Bonzini 11669755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled 11679755c94aSLaurent Vivier# when we don't build tools or system 11684113f4cfSLaurent Vivierif xkbcommon.found() 116928742467SMarc-André Lureau # used for the update-keymaps target, so include rules even if !have_tools 117028742467SMarc-André Lureau qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, 117128742467SMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: have_tools) 117228742467SMarc-André Lureauendif 117328742467SMarc-André Lureau 11748855e8f0SPhilippe Mathieu-Daudéqemu_block_tools = [] 1175931049b4SPaolo Bonziniif have_tools 1176b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 1177b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 1178b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 1179b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1180b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 1181b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1182b7c70bf2SMarc-André Lureau 11837c58bb76SPaolo Bonzini subdir('storage-daemon') 1184a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 11851d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 1186a9c9727cSPaolo Bonzini 1187157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 1188157e7b13SMarc-André Lureau dependencies: qemuutil, 1189157e7b13SMarc-André Lureau install: true) 1190157e7b13SMarc-André Lureau 1191931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 1192931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 11932d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 1194ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 119532fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 119699650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 1197931049b4SPaolo Bonzini endif 11988f51e01cSMarc-André Lureau 11998f51e01cSMarc-André Lureau if targetos == 'linux' 12008f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 12018f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 12028f51e01cSMarc-André Lureau install: true, 12038f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 1204897b5afaSMarc-André Lureau 1205897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 1206897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 1207897b5afaSMarc-André Lureau libcap_ng, libudev, libmpathpersist], 1208897b5afaSMarc-André Lureau install: true) 12098f51e01cSMarc-André Lureau endif 12108f51e01cSMarc-André Lureau 12115ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 12125ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 12135ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 12145ee24e78SMarc-André Lureau endif 1215931049b4SPaolo Bonziniendif 1216931049b4SPaolo Bonzini 1217f5aa6320SMarc-André Lureausubdir('scripts') 12183f99cf57SPaolo Bonzinisubdir('tools') 1219bdcbea7aSMarc-André Lureausubdir('pc-bios') 1220ce1c1e7aSPaolo Bonzinisubdir('tests') 1221f8aa24eaSPaolo Bonzinisubdir('docs') 1222e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host 1223e8f3bd71SMarc-André Lureau subdir('po') 1224e8f3bd71SMarc-André Lureauendif 12253f99cf57SPaolo Bonzini 12268adfeba9SMarc-André Lureauif host_machine.system() == 'windows' 12278adfeba9SMarc-André Lureau nsis_cmd = [ 12288adfeba9SMarc-André Lureau find_program('scripts/nsis.py'), 12298adfeba9SMarc-André Lureau '@OUTPUT@', 12308adfeba9SMarc-André Lureau get_option('prefix'), 12318adfeba9SMarc-André Lureau meson.current_source_dir(), 12328adfeba9SMarc-André Lureau host_machine.cpu_family(), 12338adfeba9SMarc-André Lureau '--', 12348adfeba9SMarc-André Lureau '-DDISPLAYVERSION=' + meson.project_version(), 12358adfeba9SMarc-André Lureau ] 12368adfeba9SMarc-André Lureau if build_docs 12378adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_DOCUMENTATION=y' 12388adfeba9SMarc-André Lureau endif 12398adfeba9SMarc-André Lureau if 'CONFIG_GTK' in config_host 12408adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_GTK=y' 12418adfeba9SMarc-André Lureau endif 12428adfeba9SMarc-André Lureau 12438adfeba9SMarc-André Lureau nsis = custom_target('nsis', 12448adfeba9SMarc-André Lureau output: 'qemu-setup-' + meson.project_version() + '.exe', 12458adfeba9SMarc-André Lureau input: files('qemu.nsi'), 12468adfeba9SMarc-André Lureau build_always_stale: true, 12478adfeba9SMarc-André Lureau command: nsis_cmd + ['@INPUT@']) 12488adfeba9SMarc-André Lureau alias_target('installer', nsis) 12498adfeba9SMarc-André Lureauendif 12508adfeba9SMarc-André Lureau 1251f9332757SPaolo Bonzinisummary_info = {} 1252f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 1253f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 1254f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 1255f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 1256f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 1257f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 1258f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 1259f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 1260f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 1261f9332757SPaolo Bonziniif targetos != 'windows' 1262f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 1263b81efab7SMarc-André Lureau summary_info += {'Manual directory': get_option('mandir')} 1264f9332757SPaolo Bonzinielse 1265f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 1266f9332757SPaolo Bonziniendif 1267491e74c1SMarc-André Lureausummary_info += {'Doc directory': get_option('docdir')} 1268f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 1269f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 1270f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 1271f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 1272f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 1273f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 1274f9332757SPaolo Bonziniif link_language == 'cpp' 1275f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 1276f9332757SPaolo Bonzinielse 1277f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 1278f9332757SPaolo Bonziniendif 1279f9332757SPaolo Bonziniif targetos == 'darwin' 1280f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 1281f9332757SPaolo Bonziniendif 1282f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 1283f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 1284f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 1285f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 1286f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 1287f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 1288f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 1289f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 1290f9332757SPaolo Bonzini# TODO: add back version 1291f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 1292f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 1293f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 1294f9332757SPaolo Bonziniendif 1295f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 1296f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 1297f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 1298f9332757SPaolo Bonziniendif 1299f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 1300f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 1301f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 1302f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 1303f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 1304f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 1305f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 13063e8529ddSLaurent Viviersummary_info += {'static build': config_host.has_key('CONFIG_STATIC')} 1307f9332757SPaolo Bonziniif targetos == 'darwin' 1308f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 1309f9332757SPaolo Bonziniendif 1310f9332757SPaolo Bonzini# TODO: add back version 131135be72baSPaolo Bonzinisummary_info += {'SDL support': sdl.found()} 131235be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()} 1313f9332757SPaolo Bonzini# TODO: add back version 1314f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 1315f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 1316b7612f45SPaolo Bonzinisummary_info += {'pixman': pixman.found()} 1317f9332757SPaolo Bonzini# TODO: add back version 1318f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 1319f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 1320f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 1321f9332757SPaolo Bonzini# TODO: add back version 1322f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 1323f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 1324f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 1325f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1326f9332757SPaolo Bonziniendif 1327f9332757SPaolo Bonzini# TODO: add back version 1328f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 1329f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 1330f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1331f9332757SPaolo Bonziniendif 1332f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 1333f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 1334f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 1335f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 1336f9332757SPaolo Bonzini# TODO: add back version 1337f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 1338f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 1339f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 1340f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 1341f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 1342f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 1343f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 1344f9332757SPaolo Bonzinisummary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')} 1345a0b93237SPaolo Bonzinisummary_info += {'VNC support': vnc.found()} 1346a0b93237SPaolo Bonziniif vnc.found() 1347a0b93237SPaolo Bonzini summary_info += {'VNC SASL support': sasl.found()} 1348a0b93237SPaolo Bonzini summary_info += {'VNC JPEG support': jpeg.found()} 1349a0b93237SPaolo Bonzini summary_info += {'VNC PNG support': png.found()} 1350f9332757SPaolo Bonziniendif 1351f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 1352f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 1353f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 1354f9332757SPaolo Bonziniendif 1355f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 1356f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 1357f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 1358f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 1359f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 1360f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 1361f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 1362f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 1363f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 1364f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG 1365f9332757SPaolo Bonzini#summary_info += {'KVM support': have_kvm'} 1366f9332757SPaolo Bonzini#summary_info += {'HAX support': have_hax'} 1367f9332757SPaolo Bonzini#summary_info += {'HVF support': have_hvf'} 1368f9332757SPaolo Bonzini#summary_info += {'WHPX support': have_whpx'} 1369f9332757SPaolo Bonzini#summary_info += {'TCG support': have_tcg'} 1370f9332757SPaolo Bonzini#if get_option('tcg') 1371f9332757SPaolo Bonzini# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 1372f9332757SPaolo Bonzini# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 1373f9332757SPaolo Bonzini#endif 1374f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')} 1375f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 1376f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 1377f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 1378f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 1379f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 1380f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 1381f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 1382f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 1383f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 1384f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 1385f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 1386f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 1387f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 1388f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 1389f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 1390f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 1391f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 1392f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 1393f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 1394f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 1395f9332757SPaolo Bonziniendif 1396f9332757SPaolo Bonzini# TODO: add back protocol and server version 1397f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 1398f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 1399f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 1400f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 14010a40bcb7SCésar Belleysummary_info += {'U2F support': u2f.found()} 1402f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 1403f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 1404f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 1405f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 1406f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 1407f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 1408f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 1409f9332757SPaolo Bonziniif targetos == 'windows' 1410f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 1411f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 1412f9332757SPaolo Bonzini endif 1413f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 1414f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 1415f9332757SPaolo Bonzini summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')} 1416f9332757SPaolo Bonziniendif 1417f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 1418f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 1419f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 1420f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 1421f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 1422f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 1423f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 1424bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 1425f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 1426f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 1427f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 1428f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 1429f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 1430f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 1431f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 1432f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 1433f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 1434f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 1435f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 1436f9332757SPaolo Bonzinisummary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')} 1437f9332757SPaolo Bonzinisummary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')} 1438f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 1439f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 1440f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 1441f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 1442f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 1443f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 1444f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 1445f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 1446f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 1447f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 1448f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 1449f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 1450f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 1451f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 1452f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 1453f9332757SPaolo Bonzinisummary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')} 1454f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 1455f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 1456f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 1457f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 1458f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 1459f9332757SPaolo Bonziniendif 1460f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 1461f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 1462f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 1463f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 1464f9332757SPaolo Bonzini 1465f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 1466f9332757SPaolo Bonzini message() 1467f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 1468f9332757SPaolo Bonzini message() 1469f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 1470f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 1471f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1472f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1473f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1474f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1475f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1476f9332757SPaolo Bonziniendif 1477f9332757SPaolo Bonzini 1478f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 1479f9332757SPaolo Bonzini message() 1480f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 1481f9332757SPaolo Bonzini message() 1482f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 1483f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 1484f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1485f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1486f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1487f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1488f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1489f9332757SPaolo Bonziniendif 1490