1a5665051SPaolo Bonziniproject('qemu', ['c'], meson_version: '>=0.55.0', 290756b2fSGerd Hoffmann default_options: ['warning_level=1', 'c_std=gnu99', 'cpp_std=gnu++11', 33e0e5190SPaolo Bonzini 'b_colorout=auto'], 4a5665051SPaolo Bonzini version: run_command('head', meson.source_root() / 'VERSION').stdout().strip()) 5a5665051SPaolo Bonzini 6a5665051SPaolo Bonzininot_found = dependency('', required: false) 7b29b40f4SPaolo Bonziniif meson.version().version_compare('>=0.56.0') 8b29b40f4SPaolo Bonzini keyval = import('keyval') 9b29b40f4SPaolo Bonzinielse 10a5665051SPaolo Bonzini keyval = import('unstable-keyval') 11b29b40f4SPaolo Bonziniendif 12a81df1b6SPaolo Bonziniss = import('sourceset') 13a81df1b6SPaolo Bonzini 14ce1c1e7aSPaolo Bonzinish = find_program('sh') 15a81df1b6SPaolo Bonzinicc = meson.get_compiler('c') 16a5665051SPaolo Bonziniconfig_host = keyval.load(meson.current_build_dir() / 'config-host.mak') 173154fee4SMarc-André Lureauenable_modules = 'CONFIG_MODULES' in config_host 1835be72baSPaolo Bonzinienable_static = 'CONFIG_STATIC' in config_host 19f8aa24eaSPaolo Bonzinibuild_docs = 'BUILD_DOCS' in config_host 20ab4c0996SMarc-André Lureauqemu_datadir = get_option('datadir') / get_option('qemu_suffix') 21491e74c1SMarc-André Lureauqemu_docdir = get_option('docdir') / get_option('qemu_suffix') 22859aef02SPaolo Bonziniconfig_host_data = configuration_data() 23859aef02SPaolo Bonzinigenh = [] 24a5665051SPaolo Bonzini 25760e4327SPaolo Bonzinitarget_dirs = config_host['TARGET_DIRS'].split() 26760e4327SPaolo Bonzinihave_user = false 27760e4327SPaolo Bonzinihave_system = false 28760e4327SPaolo Bonziniforeach target : target_dirs 29760e4327SPaolo Bonzini have_user = have_user or target.endswith('-user') 30760e4327SPaolo Bonzini have_system = have_system or target.endswith('-softmmu') 31760e4327SPaolo Bonziniendforeach 32760e4327SPaolo Bonzinihave_tools = 'CONFIG_TOOLS' in config_host 33760e4327SPaolo Bonzinihave_block = have_system or have_tools 34760e4327SPaolo Bonzini 35*201e8ed7SPaolo Bonzinipython = import('python').find_installation() 36*201e8ed7SPaolo Bonzini 37*201e8ed7SPaolo Bonzinisupported_oses = ['windows', 'freebsd', 'netbsd', 'openbsd', 'darwin', 'sunos', 'linux'] 38*201e8ed7SPaolo Bonzinisupported_cpus = ['ppc', 'ppc64', 's390x', 'sparc64', 'riscv32', 'riscv64', 'x86', 'x86_64', 39*201e8ed7SPaolo Bonzini 'arm', 'aarch64', 'mips', 'mips64', 'sparc', 'sparc64'] 40*201e8ed7SPaolo Bonzini 41*201e8ed7SPaolo Bonzinicpu = host_machine.cpu_family() 42*201e8ed7SPaolo Bonzinitargetos = host_machine.system() 43*201e8ed7SPaolo Bonzini 44*201e8ed7SPaolo Bonziniconfigure_file(input: files('scripts/ninjatool.py'), 45*201e8ed7SPaolo Bonzini output: 'ninjatool', 46*201e8ed7SPaolo Bonzini configuration: config_host) 47*201e8ed7SPaolo Bonzini 48*201e8ed7SPaolo Bonzini################## 49*201e8ed7SPaolo Bonzini# Compiler flags # 50*201e8ed7SPaolo Bonzini################## 51*201e8ed7SPaolo Bonzini 52a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CFLAGS'].split(), 53a5665051SPaolo Bonzini native: false, language: ['c', 'objc']) 54a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_CXXFLAGS'].split(), 55a5665051SPaolo Bonzini native: false, language: 'cpp') 56a5665051SPaolo Bonziniadd_project_link_arguments(config_host['QEMU_LDFLAGS'].split(), 57a5665051SPaolo Bonzini native: false, language: ['c', 'cpp', 'objc']) 58a5665051SPaolo Bonziniadd_project_arguments(config_host['QEMU_INCLUDES'].split(), 59a5665051SPaolo Bonzini language: ['c', 'cpp', 'objc']) 60a5665051SPaolo Bonzini 61fc929892SMarc-André Lureaulink_language = meson.get_external_property('link_language', 'cpp') 62fc929892SMarc-André Lureauif link_language == 'cpp' 63fc929892SMarc-André Lureau add_languages('cpp', required: true, native: false) 64fc929892SMarc-André Lureauendif 65a5665051SPaolo Bonziniif host_machine.system() == 'darwin' 66a5665051SPaolo Bonzini add_languages('objc', required: false, native: false) 67a5665051SPaolo Bonziniendif 68a5665051SPaolo Bonzini 69968b4db3SPaolo Bonziniif 'SPARSE_CFLAGS' in config_host 70968b4db3SPaolo Bonzini run_target('sparse', 71968b4db3SPaolo Bonzini command: [find_program('scripts/check_sparse.py'), 72968b4db3SPaolo Bonzini config_host['SPARSE_CFLAGS'].split(), 73968b4db3SPaolo Bonzini 'compile_commands.json']) 74968b4db3SPaolo Bonziniendif 75968b4db3SPaolo Bonzini 76a81df1b6SPaolo Bonzinim = cc.find_library('m', required: false) 77a81df1b6SPaolo Bonziniutil = cc.find_library('util', required: false) 784a96337dSPaolo Bonziniwinmm = [] 79a81df1b6SPaolo Bonzinisocket = [] 8004c6f1e7SMarc-André Lureauversion_res = [] 81d92989aaSMarc-André Lureaucoref = [] 82d92989aaSMarc-André Lureauiokit = [] 83d92989aaSMarc-André Lureaucocoa = [] 84d92989aaSMarc-André Lureauhvf = [] 85a81df1b6SPaolo Bonziniif targetos == 'windows' 86a81df1b6SPaolo Bonzini socket = cc.find_library('ws2_32') 874a96337dSPaolo Bonzini winmm = cc.find_library('winmm') 8804c6f1e7SMarc-André Lureau 8904c6f1e7SMarc-André Lureau win = import('windows') 9004c6f1e7SMarc-André Lureau version_res = win.compile_resources('version.rc', 9104c6f1e7SMarc-André Lureau depend_files: files('pc-bios/qemu-nsis.ico'), 9204c6f1e7SMarc-André Lureau include_directories: include_directories('.')) 93d92989aaSMarc-André Lureauelif targetos == 'darwin' 94d92989aaSMarc-André Lureau coref = dependency('appleframeworks', modules: 'CoreFoundation') 95d92989aaSMarc-André Lureau iokit = dependency('appleframeworks', modules: 'IOKit') 96d92989aaSMarc-André Lureau cocoa = dependency('appleframeworks', modules: 'Cocoa') 97d92989aaSMarc-André Lureau hvf = dependency('appleframeworks', modules: 'Hypervisor') 98cfad62f1SPaolo Bonzinielif targetos == 'sunos' 99cfad62f1SPaolo Bonzini socket = [cc.find_library('socket'), 100cfad62f1SPaolo Bonzini cc.find_library('nsl'), 101cfad62f1SPaolo Bonzini cc.find_library('resolv')] 102cfad62f1SPaolo Bonzinielif targetos == 'haiku' 103cfad62f1SPaolo Bonzini socket = [cc.find_library('posix_error_mapper'), 104cfad62f1SPaolo Bonzini cc.find_library('network'), 105cfad62f1SPaolo Bonzini cc.find_library('bsd')] 106a81df1b6SPaolo Bonziniendif 107a81df1b6SPaolo Bonziniglib = declare_dependency(compile_args: config_host['GLIB_CFLAGS'].split(), 108a81df1b6SPaolo Bonzini link_args: config_host['GLIB_LIBS'].split()) 109a81df1b6SPaolo Bonzinigio = not_found 110a81df1b6SPaolo Bonziniif 'CONFIG_GIO' in config_host 111a81df1b6SPaolo Bonzini gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 112a81df1b6SPaolo Bonzini link_args: config_host['GIO_LIBS'].split()) 113a81df1b6SPaolo Bonziniendif 114a81df1b6SPaolo Bonzinilttng = not_found 115a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 116a81df1b6SPaolo Bonzini lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split()) 117a81df1b6SPaolo Bonziniendif 118a81df1b6SPaolo Bonziniurcubp = not_found 119a81df1b6SPaolo Bonziniif 'CONFIG_TRACE_UST' in config_host 120a81df1b6SPaolo Bonzini urcubp = declare_dependency(link_args: config_host['URCU_BP_LIBS'].split()) 121a81df1b6SPaolo Bonziniendif 12246859d93SDaniel P. Berrangégcrypt = not_found 12346859d93SDaniel P. Berrangéif 'CONFIG_GCRYPT' in config_host 12446859d93SDaniel P. Berrangé gcrypt = declare_dependency(compile_args: config_host['GCRYPT_CFLAGS'].split(), 12546859d93SDaniel P. Berrangé link_args: config_host['GCRYPT_LIBS'].split()) 12646859d93SDaniel P. Berrangéendif 127a81df1b6SPaolo Bonzininettle = not_found 128a81df1b6SPaolo Bonziniif 'CONFIG_NETTLE' in config_host 129a81df1b6SPaolo Bonzini nettle = declare_dependency(compile_args: config_host['NETTLE_CFLAGS'].split(), 130a81df1b6SPaolo Bonzini link_args: config_host['NETTLE_LIBS'].split()) 131a81df1b6SPaolo Bonziniendif 132a81df1b6SPaolo Bonzinignutls = not_found 133a81df1b6SPaolo Bonziniif 'CONFIG_GNUTLS' in config_host 134a81df1b6SPaolo Bonzini gnutls = declare_dependency(compile_args: config_host['GNUTLS_CFLAGS'].split(), 135a81df1b6SPaolo Bonzini link_args: config_host['GNUTLS_LIBS'].split()) 136a81df1b6SPaolo Bonziniendif 137b7612f45SPaolo Bonzinipixman = not_found 138b7612f45SPaolo Bonziniif have_system or have_tools 139b7612f45SPaolo Bonzini pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8', 1401a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 141b7612f45SPaolo Bonziniendif 1425e7fbd25SMarc-André Lureaupam = not_found 1435e7fbd25SMarc-André Lureauif 'CONFIG_AUTH_PAM' in config_host 1445e7fbd25SMarc-André Lureau pam = cc.find_library('pam') 1455e7fbd25SMarc-André Lureauendif 1465e5733e5SMarc-André Lureaulibaio = cc.find_library('aio', required: false) 1471ffb3bbbSPaolo Bonzinizlib = dependency('zlib', required: true, static: enable_static) 1485e5733e5SMarc-André Lureaulinux_io_uring = not_found 1495e5733e5SMarc-André Lureauif 'CONFIG_LINUX_IO_URING' in config_host 1505e5733e5SMarc-André Lureau linux_io_uring = declare_dependency(compile_args: config_host['LINUX_IO_URING_CFLAGS'].split(), 1515e5733e5SMarc-André Lureau link_args: config_host['LINUX_IO_URING_LIBS'].split()) 1525e5733e5SMarc-André Lureauendif 1535e5733e5SMarc-André Lureaulibxml2 = not_found 1545e5733e5SMarc-André Lureauif 'CONFIG_LIBXML2' in config_host 1555e5733e5SMarc-André Lureau libxml2 = declare_dependency(compile_args: config_host['LIBXML2_CFLAGS'].split(), 1565e5733e5SMarc-André Lureau link_args: config_host['LIBXML2_LIBS'].split()) 1575e5733e5SMarc-André Lureauendif 1585e5733e5SMarc-André Lureaulibnfs = not_found 1595e5733e5SMarc-André Lureauif 'CONFIG_LIBNFS' in config_host 1605e5733e5SMarc-André Lureau libnfs = declare_dependency(link_args: config_host['LIBNFS_LIBS'].split()) 1615e5733e5SMarc-André Lureauendif 162ec0d5893SMarc-André Lureaulibattr = not_found 163ec0d5893SMarc-André Lureauif 'CONFIG_ATTR' in config_host 164ec0d5893SMarc-André Lureau libattr = declare_dependency(link_args: config_host['LIBATTR_LIBS'].split()) 165ec0d5893SMarc-André Lureauendif 1663f99cf57SPaolo Bonziniseccomp = not_found 1673f99cf57SPaolo Bonziniif 'CONFIG_SECCOMP' in config_host 1683f99cf57SPaolo Bonzini seccomp = declare_dependency(compile_args: config_host['SECCOMP_CFLAGS'].split(), 1693f99cf57SPaolo Bonzini link_args: config_host['SECCOMP_LIBS'].split()) 1703f99cf57SPaolo Bonziniendif 1713f99cf57SPaolo Bonzinilibcap_ng = not_found 1723f99cf57SPaolo Bonziniif 'CONFIG_LIBCAP_NG' in config_host 1733f99cf57SPaolo Bonzini libcap_ng = declare_dependency(link_args: config_host['LIBCAP_NG_LIBS'].split()) 1743f99cf57SPaolo Bonziniendif 1751917ec6dSPaolo Bonziniif get_option('xkbcommon').auto() and not have_system and not have_tools 1761917ec6dSPaolo Bonzini xkbcommon = not_found 1771917ec6dSPaolo Bonzinielse 1781917ec6dSPaolo Bonzini xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'), 1791a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 180ade60d4fSMarc-André Lureauendif 181cdaf0722SMarc-André Lureauslirp = not_found 182cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_SLIRP') 183cdaf0722SMarc-André Lureau slirp = declare_dependency(compile_args: config_host['SLIRP_CFLAGS'].split(), 184cdaf0722SMarc-André Lureau link_args: config_host['SLIRP_LIBS'].split()) 185cdaf0722SMarc-André Lureauendif 186cdaf0722SMarc-André Lureauvde = not_found 187cdaf0722SMarc-André Lureauif config_host.has_key('CONFIG_VDE') 188cdaf0722SMarc-André Lureau vde = declare_dependency(link_args: config_host['VDE_LIBS'].split()) 189cdaf0722SMarc-André Lureauendif 190478e943fSPaolo Bonzinipulse = not_found 191478e943fSPaolo Bonziniif 'CONFIG_LIBPULSE' in config_host 192478e943fSPaolo Bonzini pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(), 193478e943fSPaolo Bonzini link_args: config_host['PULSE_LIBS'].split()) 194478e943fSPaolo Bonziniendif 195478e943fSPaolo Bonzinialsa = not_found 196478e943fSPaolo Bonziniif 'CONFIG_ALSA' in config_host 197478e943fSPaolo Bonzini alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(), 198478e943fSPaolo Bonzini link_args: config_host['ALSA_LIBS'].split()) 199478e943fSPaolo Bonziniendif 200478e943fSPaolo Bonzinijack = not_found 201478e943fSPaolo Bonziniif 'CONFIG_LIBJACK' in config_host 202478e943fSPaolo Bonzini jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) 203478e943fSPaolo Bonziniendif 2042634733cSPaolo Bonzinispice = not_found 2052634733cSPaolo Bonziniif 'CONFIG_SPICE' in config_host 2062634733cSPaolo Bonzini spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(), 2072634733cSPaolo Bonzini link_args: config_host['SPICE_LIBS'].split()) 2082634733cSPaolo Bonziniendif 2095ee24e78SMarc-André Lureaurt = cc.find_library('rt', required: false) 210897b5afaSMarc-André Lureaulibmpathpersist = not_found 211897b5afaSMarc-André Lureauif config_host.has_key('CONFIG_MPATH') 212897b5afaSMarc-André Lureau libmpathpersist = cc.find_library('mpathpersist') 213897b5afaSMarc-André Lureauendif 21499650b62SPaolo Bonzinilibiscsi = not_found 21599650b62SPaolo Bonziniif 'CONFIG_LIBISCSI' in config_host 21699650b62SPaolo Bonzini libiscsi = declare_dependency(compile_args: config_host['LIBISCSI_CFLAGS'].split(), 21799650b62SPaolo Bonzini link_args: config_host['LIBISCSI_LIBS'].split()) 21899650b62SPaolo Bonziniendif 2195e5733e5SMarc-André Lureauzstd = not_found 2205e5733e5SMarc-André Lureauif 'CONFIG_ZSTD' in config_host 2215e5733e5SMarc-André Lureau zstd = declare_dependency(compile_args: config_host['ZSTD_CFLAGS'].split(), 2225e5733e5SMarc-André Lureau link_args: config_host['ZSTD_LIBS'].split()) 2235e5733e5SMarc-André Lureauendif 224ea458960SMarc-André Lureaugbm = not_found 225ea458960SMarc-André Lureauif 'CONFIG_GBM' in config_host 226ea458960SMarc-André Lureau gbm = declare_dependency(compile_args: config_host['GBM_CFLAGS'].split(), 227ea458960SMarc-André Lureau link_args: config_host['GBM_LIBS'].split()) 228ea458960SMarc-André Lureauendif 229ea458960SMarc-André Lureauvirgl = not_found 230ea458960SMarc-André Lureauif 'CONFIG_VIRGL' in config_host 231ea458960SMarc-André Lureau virgl = declare_dependency(compile_args: config_host['VIRGL_CFLAGS'].split(), 232ea458960SMarc-André Lureau link_args: config_host['VIRGL_LIBS'].split()) 233ea458960SMarc-André Lureauendif 2341d7bb6abSMarc-André Lureaucurl = not_found 2351d7bb6abSMarc-André Lureauif 'CONFIG_CURL' in config_host 2361d7bb6abSMarc-André Lureau curl = declare_dependency(compile_args: config_host['CURL_CFLAGS'].split(), 2371d7bb6abSMarc-André Lureau link_args: config_host['CURL_LIBS'].split()) 2381d7bb6abSMarc-André Lureauendif 239f15bff25SPaolo Bonzinilibudev = not_found 240f15bff25SPaolo Bonziniif 'CONFIG_LIBUDEV' in config_host 241f15bff25SPaolo Bonzini libudev = declare_dependency(link_args: config_host['LIBUDEV_LIBS'].split()) 242f15bff25SPaolo Bonziniendif 2432634733cSPaolo Bonzinibrlapi = not_found 2442634733cSPaolo Bonziniif 'CONFIG_BRLAPI' in config_host 2452634733cSPaolo Bonzini brlapi = declare_dependency(link_args: config_host['BRLAPI_LIBS'].split()) 2462634733cSPaolo Bonziniendif 24735be72baSPaolo Bonzini 248760e4327SPaolo Bonzinisdl = not_found 249760e4327SPaolo Bonziniif have_system 250363743daSYonggang Luo sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static) 25135be72baSPaolo Bonzini sdl_image = not_found 252760e4327SPaolo Bonziniendif 25335be72baSPaolo Bonziniif sdl.found() 25435be72baSPaolo Bonzini # work around 2.0.8 bug 25535be72baSPaolo Bonzini sdl = declare_dependency(compile_args: '-Wno-undef', 25635be72baSPaolo Bonzini dependencies: sdl) 2577161a433SVolker Rümelin sdl_image = dependency('SDL2_image', required: get_option('sdl_image'), 2581a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 25935be72baSPaolo Bonzinielse 26035be72baSPaolo Bonzini if get_option('sdl_image').enabled() 26135be72baSPaolo Bonzini error('sdl-image required, but SDL was @0@', 26235be72baSPaolo Bonzini get_option('sdl').disabled() ? 'disabled' : 'not found') 2632634733cSPaolo Bonzini endif 26435be72baSPaolo Bonzini sdl_image = not_found 26535be72baSPaolo Bonziniendif 26635be72baSPaolo Bonzini 2675e5733e5SMarc-André Lureaurbd = not_found 2685e5733e5SMarc-André Lureauif 'CONFIG_RBD' in config_host 2695e5733e5SMarc-André Lureau rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split()) 2705e5733e5SMarc-André Lureauendif 2715e5733e5SMarc-André Lureauglusterfs = not_found 2725e5733e5SMarc-André Lureauif 'CONFIG_GLUSTERFS' in config_host 2735e5733e5SMarc-André Lureau glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(), 2745e5733e5SMarc-André Lureau link_args: config_host['GLUSTERFS_LIBS'].split()) 2755e5733e5SMarc-André Lureauendif 2765e5733e5SMarc-André Lureaulibssh = not_found 2775e5733e5SMarc-André Lureauif 'CONFIG_LIBSSH' in config_host 2785e5733e5SMarc-André Lureau libssh = declare_dependency(compile_args: config_host['LIBSSH_CFLAGS'].split(), 2795e5733e5SMarc-André Lureau link_args: config_host['LIBSSH_LIBS'].split()) 2805e5733e5SMarc-André Lureauendif 2815e5733e5SMarc-André Lureaulibbzip2 = not_found 2825e5733e5SMarc-André Lureauif 'CONFIG_BZIP2' in config_host 2835e5733e5SMarc-André Lureau libbzip2 = declare_dependency(link_args: config_host['BZIP2_LIBS'].split()) 2845e5733e5SMarc-André Lureauendif 2855e5733e5SMarc-André Lureauliblzfse = not_found 2865e5733e5SMarc-André Lureauif 'CONFIG_LZFSE' in config_host 2875e5733e5SMarc-André Lureau liblzfse = declare_dependency(link_args: config_host['LZFSE_LIBS'].split()) 2885e5733e5SMarc-André Lureauendif 289478e943fSPaolo Bonzinioss = not_found 290478e943fSPaolo Bonziniif 'CONFIG_AUDIO_OSS' in config_host 291478e943fSPaolo Bonzini oss = declare_dependency(link_args: config_host['OSS_LIBS'].split()) 292478e943fSPaolo Bonziniendif 293478e943fSPaolo Bonzinidsound = not_found 294478e943fSPaolo Bonziniif 'CONFIG_AUDIO_DSOUND' in config_host 295478e943fSPaolo Bonzini dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split()) 296478e943fSPaolo Bonziniendif 297478e943fSPaolo Bonzinicoreaudio = not_found 298478e943fSPaolo Bonziniif 'CONFIG_AUDIO_COREAUDIO' in config_host 299478e943fSPaolo Bonzini coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split()) 300478e943fSPaolo Bonziniendif 3012b1ccdf4SMarc-André Lureauopengl = not_found 3022b1ccdf4SMarc-André Lureauif 'CONFIG_OPENGL' in config_host 3032b1ccdf4SMarc-André Lureau opengl = declare_dependency(link_args: config_host['OPENGL_LIBS'].split()) 3042b1ccdf4SMarc-André Lureauelse 3052b1ccdf4SMarc-André Lureauendif 3062b1ccdf4SMarc-André Lureaugtk = not_found 3072b1ccdf4SMarc-André Lureauif 'CONFIG_GTK' in config_host 3082b1ccdf4SMarc-André Lureau gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(), 3092b1ccdf4SMarc-André Lureau link_args: config_host['GTK_LIBS'].split()) 3102b1ccdf4SMarc-André Lureauendif 3112b1ccdf4SMarc-André Lureauvte = not_found 3122b1ccdf4SMarc-André Lureauif 'CONFIG_VTE' in config_host 3132b1ccdf4SMarc-André Lureau vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(), 3142b1ccdf4SMarc-André Lureau link_args: config_host['VTE_LIBS'].split()) 3152b1ccdf4SMarc-André Lureauendif 3162b1ccdf4SMarc-André Lureaux11 = not_found 3172b1ccdf4SMarc-André Lureauif 'CONFIG_X11' in config_host 3182b1ccdf4SMarc-André Lureau x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(), 3192b1ccdf4SMarc-André Lureau link_args: config_host['X11_LIBS'].split()) 3202b1ccdf4SMarc-André Lureauendif 3212b1ccdf4SMarc-André Lureaucurses = not_found 3222b1ccdf4SMarc-André Lureauif 'CONFIG_CURSES' in config_host 3232b1ccdf4SMarc-André Lureau curses = declare_dependency(compile_args: config_host['CURSES_CFLAGS'].split(), 3242b1ccdf4SMarc-André Lureau link_args: config_host['CURSES_LIBS'].split()) 3252b1ccdf4SMarc-André Lureauendif 3262b1ccdf4SMarc-André Lureauiconv = not_found 3272b1ccdf4SMarc-André Lureauif 'CONFIG_ICONV' in config_host 3282b1ccdf4SMarc-André Lureau iconv = declare_dependency(compile_args: config_host['ICONV_CFLAGS'].split(), 3292b1ccdf4SMarc-André Lureau link_args: config_host['ICONV_LIBS'].split()) 3302b1ccdf4SMarc-André Lureauendif 3312b1ccdf4SMarc-André Lureaugio = not_found 3322b1ccdf4SMarc-André Lureauif 'CONFIG_GIO' in config_host 3332b1ccdf4SMarc-André Lureau gio = declare_dependency(compile_args: config_host['GIO_CFLAGS'].split(), 3342b1ccdf4SMarc-André Lureau link_args: config_host['GIO_LIBS'].split()) 3352b1ccdf4SMarc-André Lureauendif 336a0b93237SPaolo Bonzinivnc = not_found 3372b1ccdf4SMarc-André Lureaupng = not_found 3382b1ccdf4SMarc-André Lureaujpeg = not_found 3392b1ccdf4SMarc-André Lureausasl = not_found 340a0b93237SPaolo Bonziniif get_option('vnc').enabled() 341a0b93237SPaolo Bonzini vnc = declare_dependency() # dummy dependency 342a0b93237SPaolo Bonzini png = dependency('libpng', required: get_option('vnc_png'), 3431a94933fSPaolo Bonzini method: 'pkg-config', static: enable_static) 344a0b93237SPaolo Bonzini jpeg = cc.find_library('jpeg', has_headers: ['jpeglib.h'], 345a0b93237SPaolo Bonzini required: get_option('vnc_jpeg'), 346a0b93237SPaolo Bonzini static: enable_static) 347a0b93237SPaolo Bonzini sasl = cc.find_library('sasl2', has_headers: ['sasl/sasl.h'], 348a0b93237SPaolo Bonzini required: get_option('vnc_sasl'), 349a0b93237SPaolo Bonzini static: enable_static) 350a0b93237SPaolo Bonzini if sasl.found() 351a0b93237SPaolo Bonzini sasl = declare_dependency(dependencies: sasl, 352a0b93237SPaolo Bonzini compile_args: '-DSTRUCT_IOVEC_DEFINED') 353a0b93237SPaolo Bonzini endif 3542b1ccdf4SMarc-André Lureauendif 3554a96337dSPaolo Bonzinifdt = not_found 3564a96337dSPaolo Bonziniif 'CONFIG_FDT' in config_host 3574a96337dSPaolo Bonzini fdt = declare_dependency(compile_args: config_host['FDT_CFLAGS'].split(), 3584a96337dSPaolo Bonzini link_args: config_host['FDT_LIBS'].split()) 3594a96337dSPaolo Bonziniendif 360708eab42SMarc-André Lureausnappy = not_found 361708eab42SMarc-André Lureauif 'CONFIG_SNAPPY' in config_host 362708eab42SMarc-André Lureau snappy = declare_dependency(link_args: config_host['SNAPPY_LIBS'].split()) 363708eab42SMarc-André Lureauendif 364708eab42SMarc-André Lureaulzo = not_found 365708eab42SMarc-André Lureauif 'CONFIG_LZO' in config_host 366708eab42SMarc-André Lureau lzo = declare_dependency(link_args: config_host['LZO_LIBS'].split()) 367708eab42SMarc-André Lureauendif 36855166230SMarc-André Lureaurdma = not_found 36955166230SMarc-André Lureauif 'CONFIG_RDMA' in config_host 37055166230SMarc-André Lureau rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split()) 37155166230SMarc-André Lureauendif 372ab318051SMarc-André Lureaunuma = not_found 373ab318051SMarc-André Lureauif 'CONFIG_NUMA' in config_host 374ab318051SMarc-André Lureau numa = declare_dependency(link_args: config_host['NUMA_LIBS'].split()) 375ab318051SMarc-André Lureauendif 376582ea95fSMarc-André Lureauxen = not_found 377582ea95fSMarc-André Lureauif 'CONFIG_XEN_BACKEND' in config_host 378582ea95fSMarc-André Lureau xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(), 379582ea95fSMarc-André Lureau link_args: config_host['XEN_LIBS'].split()) 380582ea95fSMarc-André Lureauendif 38106677ce1SPaolo Bonzinicacard = not_found 38206677ce1SPaolo Bonziniif 'CONFIG_SMARTCARD' in config_host 38306677ce1SPaolo Bonzini cacard = declare_dependency(compile_args: config_host['SMARTCARD_CFLAGS'].split(), 38406677ce1SPaolo Bonzini link_args: config_host['SMARTCARD_LIBS'].split()) 38506677ce1SPaolo Bonziniendif 3860a40bcb7SCésar Belleyu2f = not_found 3870a40bcb7SCésar Belleyif have_system 3880a40bcb7SCésar Belley u2f = dependency('u2f-emu', required: get_option('u2f'), 3890a40bcb7SCésar Belley method: 'pkg-config', 3900a40bcb7SCésar Belley static: enable_static) 3910a40bcb7SCésar Belleyendif 39206677ce1SPaolo Bonziniusbredir = not_found 39306677ce1SPaolo Bonziniif 'CONFIG_USB_REDIR' in config_host 39406677ce1SPaolo Bonzini usbredir = declare_dependency(compile_args: config_host['USB_REDIR_CFLAGS'].split(), 39506677ce1SPaolo Bonzini link_args: config_host['USB_REDIR_LIBS'].split()) 39606677ce1SPaolo Bonziniendif 39706677ce1SPaolo Bonzinilibusb = not_found 39806677ce1SPaolo Bonziniif 'CONFIG_USB_LIBUSB' in config_host 39906677ce1SPaolo Bonzini libusb = declare_dependency(compile_args: config_host['LIBUSB_CFLAGS'].split(), 40006677ce1SPaolo Bonzini link_args: config_host['LIBUSB_LIBS'].split()) 40106677ce1SPaolo Bonziniendif 402c9322ab5SMarc-André Lureaucapstone = not_found 403c9322ab5SMarc-André Lureauif 'CONFIG_CAPSTONE' in config_host 404c9322ab5SMarc-André Lureau capstone = declare_dependency(compile_args: config_host['CAPSTONE_CFLAGS'].split(), 405c9322ab5SMarc-André Lureau link_args: config_host['CAPSTONE_LIBS'].split()) 406c9322ab5SMarc-André Lureauendif 407c9322ab5SMarc-André Lureaulibpmem = not_found 408c9322ab5SMarc-André Lureauif 'CONFIG_LIBPMEM' in config_host 409c9322ab5SMarc-André Lureau libpmem = declare_dependency(compile_args: config_host['LIBPMEM_CFLAGS'].split(), 410c9322ab5SMarc-André Lureau link_args: config_host['LIBPMEM_LIBS'].split()) 411c9322ab5SMarc-André Lureauendif 412c7c91a74SBruce Rogerslibdaxctl = not_found 413c7c91a74SBruce Rogersif 'CONFIG_LIBDAXCTL' in config_host 414c7c91a74SBruce Rogers libdaxctl = declare_dependency(link_args: config_host['LIBDAXCTL_LIBS'].split()) 415c7c91a74SBruce Rogersendif 4168ce0a45fSMarc-André Lureautasn1 = not_found 4178ce0a45fSMarc-André Lureauif 'CONFIG_TASN1' in config_host 4188ce0a45fSMarc-André Lureau tasn1 = declare_dependency(compile_args: config_host['TASN1_CFLAGS'].split(), 4198ce0a45fSMarc-André Lureau link_args: config_host['TASN1_LIBS'].split()) 4208ce0a45fSMarc-André Lureauendif 421af04e89dSMarc-André Lureaukeyutils = dependency('libkeyutils', required: false, 422af04e89dSMarc-André Lureau method: 'pkg-config', static: enable_static) 423a81df1b6SPaolo Bonzini 4243909def8SMarc-André Lureauhas_gettid = cc.has_function('gettid') 4253909def8SMarc-André Lureau 426859aef02SPaolo Bonzini# Create config-host.h 427859aef02SPaolo Bonzini 42835be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL', sdl.found()) 42935be72baSPaolo Bonziniconfig_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found()) 430a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC', vnc.found()) 431a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) 432a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_PNG', png.found()) 433a0b93237SPaolo Bonziniconfig_host_data.set('CONFIG_VNC_SASL', sasl.found()) 4344113f4cfSLaurent Vivierconfig_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found()) 435af04e89dSMarc-André Lureauconfig_host_data.set('CONFIG_KEYUTILS', keyutils.found()) 4363909def8SMarc-André Lureauconfig_host_data.set('CONFIG_GETTID', has_gettid) 437859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version())) 438859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]) 439859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1]) 440859aef02SPaolo Bonziniconfig_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2]) 441859aef02SPaolo Bonzini 442859aef02SPaolo Bonziniarrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST'] 443859aef02SPaolo Bonzinistrings = ['HOST_DSOSUF', 'CONFIG_IASL', 'qemu_confdir', 'qemu_datadir', 444859aef02SPaolo Bonzini 'qemu_moddir', 'qemu_localstatedir', 'qemu_helperdir', 'qemu_localedir', 445859aef02SPaolo Bonzini 'qemu_icondir', 'qemu_desktopdir', 'qemu_firmwarepath'] 446859aef02SPaolo Bonziniforeach k, v: config_host 447859aef02SPaolo Bonzini if arrays.contains(k) 448859aef02SPaolo Bonzini if v != '' 449859aef02SPaolo Bonzini v = '"' + '", "'.join(v.split()) + '", ' 450859aef02SPaolo Bonzini endif 451859aef02SPaolo Bonzini config_host_data.set(k, v) 452859aef02SPaolo Bonzini elif k == 'ARCH' 453859aef02SPaolo Bonzini config_host_data.set('HOST_' + v.to_upper(), 1) 454859aef02SPaolo Bonzini elif strings.contains(k) 455859aef02SPaolo Bonzini if not k.startswith('CONFIG_') 456859aef02SPaolo Bonzini k = 'CONFIG_' + k.to_upper() 457859aef02SPaolo Bonzini endif 458859aef02SPaolo Bonzini config_host_data.set_quoted(k, v) 459859aef02SPaolo Bonzini elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_') 460859aef02SPaolo Bonzini config_host_data.set(k, v == 'y' ? 1 : v) 461859aef02SPaolo Bonzini endif 462859aef02SPaolo Bonziniendforeach 463859aef02SPaolo Bonzinigenh += configure_file(output: 'config-host.h', configuration: config_host_data) 464859aef02SPaolo Bonzini 4652becc36aSPaolo Bonziniminikconf = find_program('scripts/minikconf.py') 466a98006bcSPaolo Bonziniconfig_all_devices = {} 467ca0fc784SPaolo Bonziniconfig_all_disas = {} 4682becc36aSPaolo Bonziniconfig_devices_mak_list = [] 4692becc36aSPaolo Bonziniconfig_devices_h = {} 470859aef02SPaolo Bonziniconfig_target_h = {} 4712becc36aSPaolo Bonziniconfig_target_mak = {} 472ca0fc784SPaolo Bonzini 473ca0fc784SPaolo Bonzinidisassemblers = { 474ca0fc784SPaolo Bonzini 'alpha' : ['CONFIG_ALPHA_DIS'], 475ca0fc784SPaolo Bonzini 'arm' : ['CONFIG_ARM_DIS'], 476ca0fc784SPaolo Bonzini 'avr' : ['CONFIG_AVR_DIS'], 477ca0fc784SPaolo Bonzini 'cris' : ['CONFIG_CRIS_DIS'], 478ca0fc784SPaolo Bonzini 'hppa' : ['CONFIG_HPPA_DIS'], 479ca0fc784SPaolo Bonzini 'i386' : ['CONFIG_I386_DIS'], 480ca0fc784SPaolo Bonzini 'x86_64' : ['CONFIG_I386_DIS'], 481ca0fc784SPaolo Bonzini 'x32' : ['CONFIG_I386_DIS'], 482ca0fc784SPaolo Bonzini 'lm32' : ['CONFIG_LM32_DIS'], 483ca0fc784SPaolo Bonzini 'm68k' : ['CONFIG_M68K_DIS'], 484ca0fc784SPaolo Bonzini 'microblaze' : ['CONFIG_MICROBLAZE_DIS'], 485ca0fc784SPaolo Bonzini 'mips' : ['CONFIG_MIPS_DIS'], 486ca0fc784SPaolo Bonzini 'moxie' : ['CONFIG_MOXIE_DIS'], 487ca0fc784SPaolo Bonzini 'nios2' : ['CONFIG_NIOS2_DIS'], 488ca0fc784SPaolo Bonzini 'or1k' : ['CONFIG_OPENRISC_DIS'], 489ca0fc784SPaolo Bonzini 'ppc' : ['CONFIG_PPC_DIS'], 490ca0fc784SPaolo Bonzini 'riscv' : ['CONFIG_RISCV_DIS'], 491ca0fc784SPaolo Bonzini 'rx' : ['CONFIG_RX_DIS'], 492ca0fc784SPaolo Bonzini 's390' : ['CONFIG_S390_DIS'], 493ca0fc784SPaolo Bonzini 'sh4' : ['CONFIG_SH4_DIS'], 494ca0fc784SPaolo Bonzini 'sparc' : ['CONFIG_SPARC_DIS'], 495ca0fc784SPaolo Bonzini 'xtensa' : ['CONFIG_XTENSA_DIS'], 496ca0fc784SPaolo Bonzini} 497ca0fc784SPaolo Bonziniif link_language == 'cpp' 498ca0fc784SPaolo Bonzini disassemblers += { 499ca0fc784SPaolo Bonzini 'aarch64' : [ 'CONFIG_ARM_A64_DIS'], 500ca0fc784SPaolo Bonzini 'arm' : [ 'CONFIG_ARM_DIS', 'CONFIG_ARM_A64_DIS'], 501ca0fc784SPaolo Bonzini 'mips' : [ 'CONFIG_MIPS_DIS', 'CONFIG_NANOMIPS_DIS'], 502ca0fc784SPaolo Bonzini } 503ca0fc784SPaolo Bonziniendif 504ca0fc784SPaolo Bonzini 5052becc36aSPaolo Bonzinikconfig_external_symbols = [ 5062becc36aSPaolo Bonzini 'CONFIG_KVM', 5072becc36aSPaolo Bonzini 'CONFIG_XEN', 5082becc36aSPaolo Bonzini 'CONFIG_TPM', 5092becc36aSPaolo Bonzini 'CONFIG_SPICE', 5102becc36aSPaolo Bonzini 'CONFIG_IVSHMEM', 5112becc36aSPaolo Bonzini 'CONFIG_OPENGL', 5122becc36aSPaolo Bonzini 'CONFIG_X11', 5132becc36aSPaolo Bonzini 'CONFIG_VHOST_USER', 5142becc36aSPaolo Bonzini 'CONFIG_VHOST_KERNEL', 5152becc36aSPaolo Bonzini 'CONFIG_VIRTFS', 5162becc36aSPaolo Bonzini 'CONFIG_LINUX', 5172becc36aSPaolo Bonzini 'CONFIG_PVRDMA', 5182becc36aSPaolo Bonzini] 519859aef02SPaolo Bonziniignored = ['TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_DIRS'] 520ca0fc784SPaolo Bonzini 521a81df1b6SPaolo Bonziniforeach target : target_dirs 522859aef02SPaolo Bonzini config_target = keyval.load(meson.current_build_dir() / target / 'config-target.mak') 523859aef02SPaolo Bonzini 524ca0fc784SPaolo Bonzini foreach k, v: disassemblers 525ca0fc784SPaolo Bonzini if config_host['ARCH'].startswith(k) or config_target['TARGET_BASE_ARCH'].startswith(k) 526ca0fc784SPaolo Bonzini foreach sym: v 527ca0fc784SPaolo Bonzini config_target += { sym: 'y' } 528ca0fc784SPaolo Bonzini config_all_disas += { sym: 'y' } 529ca0fc784SPaolo Bonzini endforeach 530ca0fc784SPaolo Bonzini endif 531ca0fc784SPaolo Bonzini endforeach 532ca0fc784SPaolo Bonzini 533859aef02SPaolo Bonzini config_target_data = configuration_data() 534859aef02SPaolo Bonzini foreach k, v: config_target 535859aef02SPaolo Bonzini if not k.startswith('TARGET_') and not k.startswith('CONFIG_') 536859aef02SPaolo Bonzini # do nothing 537859aef02SPaolo Bonzini elif ignored.contains(k) 538859aef02SPaolo Bonzini # do nothing 539859aef02SPaolo Bonzini elif k == 'TARGET_BASE_ARCH' 540859aef02SPaolo Bonzini config_target_data.set('TARGET_' + v.to_upper(), 1) 541859aef02SPaolo Bonzini elif k == 'TARGET_NAME' 542859aef02SPaolo Bonzini config_target_data.set_quoted(k, v) 543859aef02SPaolo Bonzini elif v == 'y' 544859aef02SPaolo Bonzini config_target_data.set(k, 1) 545859aef02SPaolo Bonzini else 546859aef02SPaolo Bonzini config_target_data.set(k, v) 547859aef02SPaolo Bonzini endif 548859aef02SPaolo Bonzini endforeach 549859aef02SPaolo Bonzini config_target_h += {target: configure_file(output: target + '-config-target.h', 550859aef02SPaolo Bonzini configuration: config_target_data)} 5512becc36aSPaolo Bonzini 5522becc36aSPaolo Bonzini if target.endswith('-softmmu') 5532becc36aSPaolo Bonzini base_kconfig = [] 5542becc36aSPaolo Bonzini foreach sym : kconfig_external_symbols 555859aef02SPaolo Bonzini if sym in config_target or sym in config_host 5562becc36aSPaolo Bonzini base_kconfig += '@0@=y'.format(sym) 5572becc36aSPaolo Bonzini endif 5582becc36aSPaolo Bonzini endforeach 5592becc36aSPaolo Bonzini 5602becc36aSPaolo Bonzini config_devices_mak = target + '-config-devices.mak' 5612becc36aSPaolo Bonzini config_devices_mak = configure_file( 5622becc36aSPaolo Bonzini input: ['default-configs' / target + '.mak', 'Kconfig'], 5632becc36aSPaolo Bonzini output: config_devices_mak, 5642becc36aSPaolo Bonzini depfile: config_devices_mak + '.d', 5652becc36aSPaolo Bonzini capture: true, 5662becc36aSPaolo Bonzini command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], 5672becc36aSPaolo Bonzini config_devices_mak, '@DEPFILE@', '@INPUT@', 5682becc36aSPaolo Bonzini base_kconfig]) 569859aef02SPaolo Bonzini 570859aef02SPaolo Bonzini config_devices_data = configuration_data() 571859aef02SPaolo Bonzini config_devices = keyval.load(config_devices_mak) 572859aef02SPaolo Bonzini foreach k, v: config_devices 573859aef02SPaolo Bonzini config_devices_data.set(k, 1) 574859aef02SPaolo Bonzini endforeach 5752becc36aSPaolo Bonzini config_devices_mak_list += config_devices_mak 576859aef02SPaolo Bonzini config_devices_h += {target: configure_file(output: target + '-config-devices.h', 577859aef02SPaolo Bonzini configuration: config_devices_data)} 578859aef02SPaolo Bonzini config_target += config_devices 579a98006bcSPaolo Bonzini config_all_devices += config_devices 5802becc36aSPaolo Bonzini endif 5812becc36aSPaolo Bonzini config_target_mak += {target: config_target} 582a81df1b6SPaolo Bonziniendforeach 583a81df1b6SPaolo Bonzini 5842becc36aSPaolo Bonzini# This configuration is used to build files that are shared by 5852becc36aSPaolo Bonzini# multiple binaries, and then extracted out of the "common" 5862becc36aSPaolo Bonzini# static_library target. 5872becc36aSPaolo Bonzini# 5882becc36aSPaolo Bonzini# We do not use all_sources()/all_dependencies(), because it would 5892becc36aSPaolo Bonzini# build literally all source files, including devices only used by 5902becc36aSPaolo Bonzini# targets that are not built for this compilation. The CONFIG_ALL 5912becc36aSPaolo Bonzini# pseudo symbol replaces it. 5922becc36aSPaolo Bonzini 5932becc36aSPaolo Bonziniconfig_all = config_all_devices 5942becc36aSPaolo Bonziniconfig_all += config_host 5952becc36aSPaolo Bonziniconfig_all += config_all_disas 5962becc36aSPaolo Bonziniconfig_all += { 5972becc36aSPaolo Bonzini 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), 5982becc36aSPaolo Bonzini 'CONFIG_SOFTMMU': have_system, 5992becc36aSPaolo Bonzini 'CONFIG_USER_ONLY': have_user, 6002becc36aSPaolo Bonzini 'CONFIG_ALL': true, 6012becc36aSPaolo Bonzini} 6022becc36aSPaolo Bonzini 603a81df1b6SPaolo Bonzini# Generators 604a81df1b6SPaolo Bonzini 6053f885659SMarc-André Lureauhxtool = find_program('scripts/hxtool') 606650b5d54SMarc-André Lureaushaderinclude = find_program('scripts/shaderinclude.pl') 607a81df1b6SPaolo Bonziniqapi_gen = find_program('scripts/qapi-gen.py') 608a81df1b6SPaolo Bonziniqapi_gen_depends = [ meson.source_root() / 'scripts/qapi/__init__.py', 609a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/commands.py', 610a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 611a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 612a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/error.py', 613a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/events.py', 614a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/expr.py', 615a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/gen.py', 616a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/introspect.py', 617a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/parser.py', 618a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/schema.py', 619a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/source.py', 620a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/types.py', 621a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/visit.py', 622a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/common.py', 623a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi/doc.py', 624a81df1b6SPaolo Bonzini meson.source_root() / 'scripts/qapi-gen.py' 625a81df1b6SPaolo Bonzini] 626a81df1b6SPaolo Bonzini 627a81df1b6SPaolo Bonzinitracetool = [ 628a81df1b6SPaolo Bonzini python, files('scripts/tracetool.py'), 629a81df1b6SPaolo Bonzini '--backend=' + config_host['TRACE_BACKENDS'] 630a81df1b6SPaolo Bonzini] 631a81df1b6SPaolo Bonzini 6322c273f32SMarc-André Lureauqemu_version_cmd = [find_program('scripts/qemu-version.sh'), 6332c273f32SMarc-André Lureau meson.current_source_dir(), 634859aef02SPaolo Bonzini config_host['PKGVERSION'], meson.project_version()] 6352c273f32SMarc-André Lureauqemu_version = custom_target('qemu-version.h', 6362c273f32SMarc-André Lureau output: 'qemu-version.h', 6372c273f32SMarc-André Lureau command: qemu_version_cmd, 6382c273f32SMarc-André Lureau capture: true, 6392c273f32SMarc-André Lureau build_by_default: true, 6402c273f32SMarc-André Lureau build_always_stale: true) 6412c273f32SMarc-André Lureaugenh += qemu_version 6422c273f32SMarc-André Lureau 6433f885659SMarc-André Lureauhxdep = [] 6443f885659SMarc-André Lureauhx_headers = [ 6453f885659SMarc-André Lureau ['qemu-options.hx', 'qemu-options.def'], 6463f885659SMarc-André Lureau ['qemu-img-cmds.hx', 'qemu-img-cmds.h'], 6473f885659SMarc-André Lureau] 6483f885659SMarc-André Lureauif have_system 6493f885659SMarc-André Lureau hx_headers += [ 6503f885659SMarc-André Lureau ['hmp-commands.hx', 'hmp-commands.h'], 6513f885659SMarc-André Lureau ['hmp-commands-info.hx', 'hmp-commands-info.h'], 6523f885659SMarc-André Lureau ] 6533f885659SMarc-André Lureauendif 6543f885659SMarc-André Lureauforeach d : hx_headers 655b7c70bf2SMarc-André Lureau hxdep += custom_target(d[1], 6563f885659SMarc-André Lureau input: files(d[0]), 6573f885659SMarc-André Lureau output: d[1], 6583f885659SMarc-André Lureau capture: true, 6593f885659SMarc-André Lureau build_by_default: true, # to be removed when added to a target 6603f885659SMarc-André Lureau command: [hxtool, '-h', '@INPUT0@']) 6613f885659SMarc-André Lureauendforeach 6623f885659SMarc-André Lureaugenh += hxdep 6633f885659SMarc-André Lureau 664a81df1b6SPaolo Bonzini# Collect sourcesets. 665a81df1b6SPaolo Bonzini 666a81df1b6SPaolo Bonziniutil_ss = ss.source_set() 667a81df1b6SPaolo Bonzinistub_ss = ss.source_set() 668a81df1b6SPaolo Bonzinitrace_ss = ss.source_set() 6693154fee4SMarc-André Lureaublock_ss = ss.source_set() 6704a96337dSPaolo Bonziniblockdev_ss = ss.source_set() 671ff219dcaSPaolo Bonziniqmp_ss = ss.source_set() 6722becc36aSPaolo Bonzinicommon_ss = ss.source_set() 6732becc36aSPaolo Bonzinisoftmmu_ss = ss.source_set() 6742becc36aSPaolo Bonziniuser_ss = ss.source_set() 6752becc36aSPaolo Bonzinibsd_user_ss = ss.source_set() 6762becc36aSPaolo Bonzinilinux_user_ss = ss.source_set() 6772becc36aSPaolo Bonzinispecific_ss = ss.source_set() 67864ed6f92SPaolo Bonzinispecific_fuzz_ss = ss.source_set() 6792becc36aSPaolo Bonzini 6803154fee4SMarc-André Lureaumodules = {} 6812becc36aSPaolo Bonzinihw_arch = {} 6822becc36aSPaolo Bonzinitarget_arch = {} 6832becc36aSPaolo Bonzinitarget_softmmu_arch = {} 684a81df1b6SPaolo Bonzini 685a81df1b6SPaolo Bonzini############### 686a81df1b6SPaolo Bonzini# Trace files # 687a81df1b6SPaolo Bonzini############### 688a81df1b6SPaolo Bonzini 689c9322ab5SMarc-André Lureau# TODO: add each directory to the subdirs from its own meson.build, once 690c9322ab5SMarc-André Lureau# we have those 691a81df1b6SPaolo Bonzinitrace_events_subdirs = [ 692a81df1b6SPaolo Bonzini 'accel/kvm', 693a81df1b6SPaolo Bonzini 'accel/tcg', 694a81df1b6SPaolo Bonzini 'crypto', 695a81df1b6SPaolo Bonzini 'monitor', 696a81df1b6SPaolo Bonzini] 697a81df1b6SPaolo Bonziniif have_user 698a81df1b6SPaolo Bonzini trace_events_subdirs += [ 'linux-user' ] 699a81df1b6SPaolo Bonziniendif 700a81df1b6SPaolo Bonziniif have_block 701a81df1b6SPaolo Bonzini trace_events_subdirs += [ 702a81df1b6SPaolo Bonzini 'authz', 703a81df1b6SPaolo Bonzini 'block', 704a81df1b6SPaolo Bonzini 'io', 705a81df1b6SPaolo Bonzini 'nbd', 706a81df1b6SPaolo Bonzini 'scsi', 707a81df1b6SPaolo Bonzini ] 708a81df1b6SPaolo Bonziniendif 709a81df1b6SPaolo Bonziniif have_system 710a81df1b6SPaolo Bonzini trace_events_subdirs += [ 711a81df1b6SPaolo Bonzini 'audio', 712a81df1b6SPaolo Bonzini 'backends', 713a81df1b6SPaolo Bonzini 'backends/tpm', 714a81df1b6SPaolo Bonzini 'chardev', 715a81df1b6SPaolo Bonzini 'hw/9pfs', 716a81df1b6SPaolo Bonzini 'hw/acpi', 717a81df1b6SPaolo Bonzini 'hw/alpha', 718a81df1b6SPaolo Bonzini 'hw/arm', 719a81df1b6SPaolo Bonzini 'hw/audio', 720a81df1b6SPaolo Bonzini 'hw/block', 721a81df1b6SPaolo Bonzini 'hw/block/dataplane', 722a81df1b6SPaolo Bonzini 'hw/char', 723a81df1b6SPaolo Bonzini 'hw/display', 724a81df1b6SPaolo Bonzini 'hw/dma', 725a81df1b6SPaolo Bonzini 'hw/hppa', 726a81df1b6SPaolo Bonzini 'hw/hyperv', 727a81df1b6SPaolo Bonzini 'hw/i2c', 728a81df1b6SPaolo Bonzini 'hw/i386', 729a81df1b6SPaolo Bonzini 'hw/i386/xen', 730a81df1b6SPaolo Bonzini 'hw/ide', 731a81df1b6SPaolo Bonzini 'hw/input', 732a81df1b6SPaolo Bonzini 'hw/intc', 733a81df1b6SPaolo Bonzini 'hw/isa', 734a81df1b6SPaolo Bonzini 'hw/mem', 735a81df1b6SPaolo Bonzini 'hw/mips', 736a81df1b6SPaolo Bonzini 'hw/misc', 737a81df1b6SPaolo Bonzini 'hw/misc/macio', 738a81df1b6SPaolo Bonzini 'hw/net', 739a81df1b6SPaolo Bonzini 'hw/nvram', 740a81df1b6SPaolo Bonzini 'hw/pci', 741a81df1b6SPaolo Bonzini 'hw/pci-host', 742a81df1b6SPaolo Bonzini 'hw/ppc', 743a81df1b6SPaolo Bonzini 'hw/rdma', 744a81df1b6SPaolo Bonzini 'hw/rdma/vmw', 745a81df1b6SPaolo Bonzini 'hw/rtc', 746a81df1b6SPaolo Bonzini 'hw/s390x', 747a81df1b6SPaolo Bonzini 'hw/scsi', 748a81df1b6SPaolo Bonzini 'hw/sd', 749a81df1b6SPaolo Bonzini 'hw/sparc', 750a81df1b6SPaolo Bonzini 'hw/sparc64', 751a81df1b6SPaolo Bonzini 'hw/ssi', 752a81df1b6SPaolo Bonzini 'hw/timer', 753a81df1b6SPaolo Bonzini 'hw/tpm', 754a81df1b6SPaolo Bonzini 'hw/usb', 755a81df1b6SPaolo Bonzini 'hw/vfio', 756a81df1b6SPaolo Bonzini 'hw/virtio', 757a81df1b6SPaolo Bonzini 'hw/watchdog', 758a81df1b6SPaolo Bonzini 'hw/xen', 759a81df1b6SPaolo Bonzini 'hw/gpio', 760a81df1b6SPaolo Bonzini 'hw/riscv', 761a81df1b6SPaolo Bonzini 'migration', 762a81df1b6SPaolo Bonzini 'net', 763a81df1b6SPaolo Bonzini 'ui', 764a81df1b6SPaolo Bonzini ] 765a81df1b6SPaolo Bonziniendif 766a81df1b6SPaolo Bonzinitrace_events_subdirs += [ 767a81df1b6SPaolo Bonzini 'hw/core', 768a81df1b6SPaolo Bonzini 'qapi', 769a81df1b6SPaolo Bonzini 'qom', 770a81df1b6SPaolo Bonzini 'target/arm', 771a81df1b6SPaolo Bonzini 'target/hppa', 772a81df1b6SPaolo Bonzini 'target/i386', 773a81df1b6SPaolo Bonzini 'target/mips', 774a81df1b6SPaolo Bonzini 'target/ppc', 775a81df1b6SPaolo Bonzini 'target/riscv', 776a81df1b6SPaolo Bonzini 'target/s390x', 777a81df1b6SPaolo Bonzini 'target/sparc', 778a81df1b6SPaolo Bonzini 'util', 779a81df1b6SPaolo Bonzini] 780a81df1b6SPaolo Bonzini 781a81df1b6SPaolo Bonzinisubdir('qapi') 782a81df1b6SPaolo Bonzinisubdir('qobject') 783a81df1b6SPaolo Bonzinisubdir('stubs') 784a81df1b6SPaolo Bonzinisubdir('trace') 785a81df1b6SPaolo Bonzinisubdir('util') 7865582c58fSMarc-André Lureausubdir('qom') 7875582c58fSMarc-André Lureausubdir('authz') 788a81df1b6SPaolo Bonzinisubdir('crypto') 7892d78b56eSMarc-André Lureausubdir('ui') 790a81df1b6SPaolo Bonzini 7913154fee4SMarc-André Lureau 7923154fee4SMarc-André Lureauif enable_modules 7933154fee4SMarc-André Lureau libmodulecommon = static_library('module-common', files('module-common.c') + genh, pic: true, c_args: '-DBUILD_DSO') 7943154fee4SMarc-André Lureau modulecommon = declare_dependency(link_whole: libmodulecommon, compile_args: '-DBUILD_DSO') 7953154fee4SMarc-André Lureauendif 7963154fee4SMarc-André Lureau 797a81df1b6SPaolo Bonzini# Build targets from sourcesets 798a81df1b6SPaolo Bonzini 7992becc36aSPaolo Bonzinistub_ss = stub_ss.apply(config_all, strict: false) 800a81df1b6SPaolo Bonzini 801a81df1b6SPaolo Bonziniutil_ss.add_all(trace_ss) 8022becc36aSPaolo Bonziniutil_ss = util_ss.apply(config_all, strict: false) 803a81df1b6SPaolo Bonzinilibqemuutil = static_library('qemuutil', 804a81df1b6SPaolo Bonzini sources: util_ss.sources() + stub_ss.sources() + genh, 805a81df1b6SPaolo Bonzini dependencies: [util_ss.dependencies(), m, glib, socket]) 806a81df1b6SPaolo Bonziniqemuutil = declare_dependency(link_with: libqemuutil, 80704c6f1e7SMarc-André Lureau sources: genh + version_res) 808a81df1b6SPaolo Bonzini 809abff1abfSPaolo Bonzinidecodetree = generator(find_program('scripts/decodetree.py'), 810abff1abfSPaolo Bonzini output: 'decode-@BASENAME@.c.inc', 811abff1abfSPaolo Bonzini arguments: ['@INPUT@', '@EXTRA_ARGS@', '-o', '@OUTPUT@']) 812abff1abfSPaolo Bonzini 813478e943fSPaolo Bonzinisubdir('audio') 8147fcfd456SMarc-André Lureausubdir('io') 815848e8ff6SMarc-André Lureausubdir('chardev') 816ec0d5893SMarc-André Lureausubdir('fsdev') 817abff1abfSPaolo Bonzinisubdir('libdecnumber') 818d3b18480SMarc-André Lureausubdir('target') 819708eab42SMarc-André Lureausubdir('dump') 820ec0d5893SMarc-André Lureau 8215e5733e5SMarc-André Lureaublock_ss.add(files( 8225e5733e5SMarc-André Lureau 'block.c', 8235e5733e5SMarc-André Lureau 'blockjob.c', 8245e5733e5SMarc-André Lureau 'job.c', 8255e5733e5SMarc-André Lureau 'qemu-io-cmds.c', 8265e5733e5SMarc-André Lureau)) 8275e5733e5SMarc-André Lureaublock_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c')) 8285e5733e5SMarc-André Lureau 8295e5733e5SMarc-André Lureausubdir('nbd') 8305e5733e5SMarc-André Lureausubdir('scsi') 8315e5733e5SMarc-André Lureausubdir('block') 8325e5733e5SMarc-André Lureau 8334a96337dSPaolo Bonziniblockdev_ss.add(files( 8344a96337dSPaolo Bonzini 'blockdev.c', 8354a96337dSPaolo Bonzini 'blockdev-nbd.c', 8364a96337dSPaolo Bonzini 'iothread.c', 8374a96337dSPaolo Bonzini 'job-qmp.c', 8384a96337dSPaolo Bonzini)) 8394a96337dSPaolo Bonzini 8404a96337dSPaolo Bonzini# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon, 8414a96337dSPaolo Bonzini# os-win32.c does not 8424a96337dSPaolo Bonziniblockdev_ss.add(when: 'CONFIG_POSIX', if_true: files('os-posix.c')) 8434a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_WIN32', if_true: [files('os-win32.c')]) 8444a96337dSPaolo Bonzini 8454a96337dSPaolo Bonzinisoftmmu_ss.add_all(blockdev_ss) 8464a96337dSPaolo Bonzinisoftmmu_ss.add(files( 8474a96337dSPaolo Bonzini 'bootdevice.c', 8484a96337dSPaolo Bonzini 'dma-helpers.c', 8494a96337dSPaolo Bonzini 'qdev-monitor.c', 8504a96337dSPaolo Bonzini), sdl) 8514a96337dSPaolo Bonzini 8524a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_TPM', if_true: files('tpm.c')) 8534a96337dSPaolo Bonzinisoftmmu_ss.add(when: 'CONFIG_SECCOMP', if_true: [files('qemu-seccomp.c'), seccomp]) 8544a96337dSPaolo Bonzinisoftmmu_ss.add(when: ['CONFIG_FDT', fdt], if_true: [files('device_tree.c')]) 8554a96337dSPaolo Bonzini 8564a96337dSPaolo Bonzinicommon_ss.add(files('cpus-common.c')) 8574a96337dSPaolo Bonzini 8585d3ea0e1SPaolo Bonzinisubdir('softmmu') 859c9322ab5SMarc-André Lureau 860c7c91a74SBruce Rogersspecific_ss.add(files('disas.c', 'exec.c', 'gdbstub.c'), capstone, libpmem, libdaxctl) 861c9322ab5SMarc-André Lureauspecific_ss.add(files('exec-vary.c')) 862c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG', if_true: files( 863c9322ab5SMarc-André Lureau 'fpu/softfloat.c', 864c9322ab5SMarc-André Lureau 'tcg/optimize.c', 865c9322ab5SMarc-André Lureau 'tcg/tcg-common.c', 866c9322ab5SMarc-André Lureau 'tcg/tcg-op-gvec.c', 867c9322ab5SMarc-André Lureau 'tcg/tcg-op-vec.c', 868c9322ab5SMarc-André Lureau 'tcg/tcg-op.c', 869c9322ab5SMarc-André Lureau 'tcg/tcg.c', 870c9322ab5SMarc-André Lureau)) 871c9322ab5SMarc-André Lureauspecific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('disas/tci.c', 'tcg/tci.c')) 872c9322ab5SMarc-André Lureau 873ab318051SMarc-André Lureausubdir('backends') 874c574e161SMarc-André Lureausubdir('disas') 87555166230SMarc-André Lureausubdir('migration') 876ff219dcaSPaolo Bonzinisubdir('monitor') 877cdaf0722SMarc-André Lureausubdir('net') 87817ef2af6SMarc-André Lureausubdir('replay') 879582ea95fSMarc-André Lureausubdir('hw') 8801a82878aSMarc-André Lureausubdir('accel') 881f556b4a1SPaolo Bonzinisubdir('plugins') 882b309c321SMarc-André Lureausubdir('bsd-user') 8833a30446aSMarc-André Lureausubdir('linux-user') 8843a30446aSMarc-André Lureau 885b309c321SMarc-André Lureaubsd_user_ss.add(files('gdbstub.c')) 886b309c321SMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_BSD_USER', if_true: bsd_user_ss) 887b309c321SMarc-André Lureau 8883a30446aSMarc-André Lureaulinux_user_ss.add(files('gdbstub.c', 'thunk.c')) 8893a30446aSMarc-André Lureauspecific_ss.add_all(when: 'CONFIG_LINUX_USER', if_true: linux_user_ss) 8905d3ea0e1SPaolo Bonzini 891a2ce7dbdSPaolo Bonzini# needed for fuzzing binaries 892a2ce7dbdSPaolo Bonzinisubdir('tests/qtest/libqos') 89364ed6f92SPaolo Bonzinisubdir('tests/qtest/fuzz') 894a2ce7dbdSPaolo Bonzini 8953154fee4SMarc-André Lureaublock_mods = [] 8963154fee4SMarc-André Lureausoftmmu_mods = [] 8973154fee4SMarc-André Lureauforeach d, list : modules 8983154fee4SMarc-André Lureau foreach m, module_ss : list 8993154fee4SMarc-André Lureau if enable_modules and targetos != 'windows' 9003154fee4SMarc-André Lureau module_ss = module_ss.apply(config_host, strict: false) 9013154fee4SMarc-André Lureau sl = static_library(d + '-' + m, [genh, module_ss.sources()], 9023154fee4SMarc-André Lureau dependencies: [modulecommon, module_ss.dependencies()], pic: true) 9033154fee4SMarc-André Lureau if d == 'block' 9043154fee4SMarc-André Lureau block_mods += sl 9053154fee4SMarc-André Lureau else 9063154fee4SMarc-André Lureau softmmu_mods += sl 9073154fee4SMarc-André Lureau endif 9083154fee4SMarc-André Lureau else 9093154fee4SMarc-André Lureau if d == 'block' 9103154fee4SMarc-André Lureau block_ss.add_all(module_ss) 9113154fee4SMarc-André Lureau else 9123154fee4SMarc-André Lureau softmmu_ss.add_all(module_ss) 9133154fee4SMarc-André Lureau endif 9143154fee4SMarc-André Lureau endif 9153154fee4SMarc-André Lureau endforeach 9163154fee4SMarc-André Lureauendforeach 9173154fee4SMarc-André Lureau 9183154fee4SMarc-André Lureaunm = find_program('nm') 9193154fee4SMarc-André Lureauundefsym = find_program('scripts/undefsym.sh') 9203154fee4SMarc-André Lureaublock_syms = custom_target('block.syms', output: 'block.syms', 9213154fee4SMarc-André Lureau input: [libqemuutil, block_mods], 9223154fee4SMarc-André Lureau capture: true, 9233154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 9243154fee4SMarc-André Lureauqemu_syms = custom_target('qemu.syms', output: 'qemu.syms', 9253154fee4SMarc-André Lureau input: [libqemuutil, softmmu_mods], 9263154fee4SMarc-André Lureau capture: true, 9273154fee4SMarc-André Lureau command: [undefsym, nm, '@INPUT@']) 9283154fee4SMarc-André Lureau 9295e5733e5SMarc-André Lureaublock_ss = block_ss.apply(config_host, strict: false) 9305e5733e5SMarc-André Lureaulibblock = static_library('block', block_ss.sources() + genh, 9315e5733e5SMarc-André Lureau dependencies: block_ss.dependencies(), 9325e5733e5SMarc-André Lureau link_depends: block_syms, 9335e5733e5SMarc-André Lureau name_suffix: 'fa', 9345e5733e5SMarc-André Lureau build_by_default: false) 9355e5733e5SMarc-André Lureau 9365e5733e5SMarc-André Lureaublock = declare_dependency(link_whole: [libblock], 937b7c70bf2SMarc-André Lureau link_args: '@block.syms', 938b7c70bf2SMarc-André Lureau dependencies: [crypto, io]) 9395e5733e5SMarc-André Lureau 940ff219dcaSPaolo Bonziniqmp_ss = qmp_ss.apply(config_host, strict: false) 941ff219dcaSPaolo Bonzinilibqmp = static_library('qmp', qmp_ss.sources() + genh, 942ff219dcaSPaolo Bonzini dependencies: qmp_ss.dependencies(), 943ff219dcaSPaolo Bonzini name_suffix: 'fa', 944ff219dcaSPaolo Bonzini build_by_default: false) 945ff219dcaSPaolo Bonzini 946ff219dcaSPaolo Bonziniqmp = declare_dependency(link_whole: [libqmp]) 947ff219dcaSPaolo Bonzini 9483154fee4SMarc-André Lureauforeach m : block_mods + softmmu_mods 9493154fee4SMarc-André Lureau shared_module(m.name(), 9503154fee4SMarc-André Lureau name_prefix: '', 9513154fee4SMarc-André Lureau link_whole: m, 9523154fee4SMarc-André Lureau install: true, 9533154fee4SMarc-André Lureau install_dir: config_host['qemu_moddir']) 9543154fee4SMarc-André Lureauendforeach 9553154fee4SMarc-André Lureau 95664ed6f92SPaolo Bonzinisoftmmu_ss.add(authz, block, chardev, crypto, io, qmp) 95764ed6f92SPaolo Bonzinicommon_ss.add(qom, qemuutil) 95864ed6f92SPaolo Bonzini 95964ed6f92SPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: [softmmu_ss]) 9602becc36aSPaolo Bonzinicommon_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) 9612becc36aSPaolo Bonzini 9622becc36aSPaolo Bonzinicommon_all = common_ss.apply(config_all, strict: false) 9632becc36aSPaolo Bonzinicommon_all = static_library('common', 9642becc36aSPaolo Bonzini build_by_default: false, 9652becc36aSPaolo Bonzini sources: common_all.sources() + genh, 9662becc36aSPaolo Bonzini dependencies: common_all.dependencies(), 9672becc36aSPaolo Bonzini name_suffix: 'fa') 9682becc36aSPaolo Bonzini 969c9322ab5SMarc-André Lureaufeature_to_c = find_program('scripts/feature_to_c.sh') 970c9322ab5SMarc-André Lureau 97164ed6f92SPaolo Bonziniemulators = [] 9722becc36aSPaolo Bonziniforeach target : target_dirs 9732becc36aSPaolo Bonzini config_target = config_target_mak[target] 9742becc36aSPaolo Bonzini target_name = config_target['TARGET_NAME'] 9752becc36aSPaolo Bonzini arch = config_target['TARGET_BASE_ARCH'] 976859aef02SPaolo Bonzini arch_srcs = [config_target_h[target]] 97764ed6f92SPaolo Bonzini arch_deps = [] 97864ed6f92SPaolo Bonzini c_args = ['-DNEED_CPU_H', 97964ed6f92SPaolo Bonzini '-DCONFIG_TARGET="@0@-config-target.h"'.format(target), 98064ed6f92SPaolo Bonzini '-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] 98164ed6f92SPaolo Bonzini link_args = [] 9822becc36aSPaolo Bonzini 983859aef02SPaolo Bonzini config_target += config_host 9842becc36aSPaolo Bonzini target_inc = [include_directories('target' / config_target['TARGET_BASE_ARCH'])] 9852becc36aSPaolo Bonzini if targetos == 'linux' 9862becc36aSPaolo Bonzini target_inc += include_directories('linux-headers', is_system: true) 9872becc36aSPaolo Bonzini endif 9882becc36aSPaolo Bonzini if target.endswith('-softmmu') 9892becc36aSPaolo Bonzini qemu_target_name = 'qemu-system-' + target_name 9902becc36aSPaolo Bonzini target_type='system' 991abff1abfSPaolo Bonzini t = target_softmmu_arch[arch].apply(config_target, strict: false) 992abff1abfSPaolo Bonzini arch_srcs += t.sources() 99364ed6f92SPaolo Bonzini arch_deps += t.dependencies() 994abff1abfSPaolo Bonzini 9952c44220dSMarc-André Lureau hw_dir = target_name == 'sparc64' ? 'sparc64' : arch 9962c44220dSMarc-André Lureau hw = hw_arch[hw_dir].apply(config_target, strict: false) 9972c44220dSMarc-André Lureau arch_srcs += hw.sources() 99864ed6f92SPaolo Bonzini arch_deps += hw.dependencies() 9992c44220dSMarc-André Lureau 10002becc36aSPaolo Bonzini arch_srcs += config_devices_h[target] 100164ed6f92SPaolo Bonzini link_args += ['@block.syms', '@qemu.syms'] 10022becc36aSPaolo Bonzini else 10033a30446aSMarc-André Lureau abi = config_target['TARGET_ABI_DIR'] 10042becc36aSPaolo Bonzini target_type='user' 10052becc36aSPaolo Bonzini qemu_target_name = 'qemu-' + target_name 10062becc36aSPaolo Bonzini if 'CONFIG_LINUX_USER' in config_target 10072becc36aSPaolo Bonzini base_dir = 'linux-user' 10082becc36aSPaolo Bonzini target_inc += include_directories('linux-user/host/' / config_host['ARCH']) 10092becc36aSPaolo Bonzini else 10102becc36aSPaolo Bonzini base_dir = 'bsd-user' 10112becc36aSPaolo Bonzini endif 10122becc36aSPaolo Bonzini target_inc += include_directories( 10132becc36aSPaolo Bonzini base_dir, 10143a30446aSMarc-André Lureau base_dir / abi, 10152becc36aSPaolo Bonzini ) 10163a30446aSMarc-André Lureau if 'CONFIG_LINUX_USER' in config_target 10173a30446aSMarc-André Lureau dir = base_dir / abi 10183a30446aSMarc-André Lureau arch_srcs += files(dir / 'signal.c', dir / 'cpu_loop.c') 10193a30446aSMarc-André Lureau if config_target.has_key('TARGET_SYSTBL_ABI') 10203a30446aSMarc-André Lureau arch_srcs += \ 10213a30446aSMarc-André Lureau syscall_nr_generators[abi].process(base_dir / abi / config_target['TARGET_SYSTBL'], 10223a30446aSMarc-André Lureau extra_args : config_target['TARGET_SYSTBL_ABI']) 10233a30446aSMarc-André Lureau endif 10243a30446aSMarc-André Lureau endif 10252becc36aSPaolo Bonzini endif 10262becc36aSPaolo Bonzini 1027c9322ab5SMarc-André Lureau if 'TARGET_XML_FILES' in config_target 1028c9322ab5SMarc-André Lureau gdbstub_xml = custom_target(target + '-gdbstub-xml.c', 1029c9322ab5SMarc-André Lureau output: target + '-gdbstub-xml.c', 1030c9322ab5SMarc-André Lureau input: files(config_target['TARGET_XML_FILES'].split()), 1031c9322ab5SMarc-André Lureau command: [feature_to_c, '@INPUT@'], 1032c9322ab5SMarc-André Lureau capture: true) 1033c9322ab5SMarc-André Lureau arch_srcs += gdbstub_xml 1034c9322ab5SMarc-André Lureau endif 1035c9322ab5SMarc-André Lureau 1036abff1abfSPaolo Bonzini t = target_arch[arch].apply(config_target, strict: false) 1037abff1abfSPaolo Bonzini arch_srcs += t.sources() 103864ed6f92SPaolo Bonzini arch_deps += t.dependencies() 1039abff1abfSPaolo Bonzini 10402becc36aSPaolo Bonzini target_common = common_ss.apply(config_target, strict: false) 10412becc36aSPaolo Bonzini objects = common_all.extract_objects(target_common.sources()) 104264ed6f92SPaolo Bonzini deps = target_common.dependencies() 10432becc36aSPaolo Bonzini 10442becc36aSPaolo Bonzini target_specific = specific_ss.apply(config_target, strict: false) 10452becc36aSPaolo Bonzini arch_srcs += target_specific.sources() 104664ed6f92SPaolo Bonzini arch_deps += target_specific.dependencies() 10472becc36aSPaolo Bonzini 104864ed6f92SPaolo Bonzini lib = static_library('qemu-' + target, 1049859aef02SPaolo Bonzini sources: arch_srcs + genh, 1050b7612f45SPaolo Bonzini dependencies: arch_deps, 10512becc36aSPaolo Bonzini objects: objects, 10522becc36aSPaolo Bonzini include_directories: target_inc, 105364ed6f92SPaolo Bonzini c_args: c_args, 105464ed6f92SPaolo Bonzini build_by_default: false, 10552becc36aSPaolo Bonzini name_suffix: 'fa') 105664ed6f92SPaolo Bonzini 105764ed6f92SPaolo Bonzini if target.endswith('-softmmu') 105864ed6f92SPaolo Bonzini execs = [{ 105964ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name, 106064ed6f92SPaolo Bonzini 'gui': false, 106164ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 106264ed6f92SPaolo Bonzini 'dependencies': [] 106364ed6f92SPaolo Bonzini }] 106435be72baSPaolo Bonzini if targetos == 'windows' and (sdl.found() or gtk.found()) 106564ed6f92SPaolo Bonzini execs += [{ 106664ed6f92SPaolo Bonzini 'name': 'qemu-system-' + target_name + 'w', 106764ed6f92SPaolo Bonzini 'gui': true, 106864ed6f92SPaolo Bonzini 'sources': files('softmmu/main.c'), 106964ed6f92SPaolo Bonzini 'dependencies': [] 107064ed6f92SPaolo Bonzini }] 107164ed6f92SPaolo Bonzini endif 107264ed6f92SPaolo Bonzini if config_host.has_key('CONFIG_FUZZ') 107364ed6f92SPaolo Bonzini specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false) 107464ed6f92SPaolo Bonzini execs += [{ 107564ed6f92SPaolo Bonzini 'name': 'qemu-fuzz-' + target_name, 107664ed6f92SPaolo Bonzini 'gui': false, 107764ed6f92SPaolo Bonzini 'sources': specific_fuzz.sources(), 107864ed6f92SPaolo Bonzini 'dependencies': specific_fuzz.dependencies(), 107964ed6f92SPaolo Bonzini 'link_depends': [files('tests/qtest/fuzz/fork_fuzz.ld')], 108064ed6f92SPaolo Bonzini }] 108164ed6f92SPaolo Bonzini endif 108264ed6f92SPaolo Bonzini else 108364ed6f92SPaolo Bonzini execs = [{ 108464ed6f92SPaolo Bonzini 'name': 'qemu-' + target_name, 108564ed6f92SPaolo Bonzini 'gui': false, 108664ed6f92SPaolo Bonzini 'sources': [], 108764ed6f92SPaolo Bonzini 'dependencies': [] 108864ed6f92SPaolo Bonzini }] 108964ed6f92SPaolo Bonzini endif 109064ed6f92SPaolo Bonzini foreach exe: execs 109164ed6f92SPaolo Bonzini emulators += executable(exe['name'], exe['sources'], 109264ed6f92SPaolo Bonzini install: true, 109364ed6f92SPaolo Bonzini c_args: c_args, 109464ed6f92SPaolo Bonzini dependencies: arch_deps + deps + exe['dependencies'], 109564ed6f92SPaolo Bonzini objects: lib.extract_all_objects(recursive: true), 109664ed6f92SPaolo Bonzini link_language: link_language, 109764ed6f92SPaolo Bonzini link_depends: [block_syms, qemu_syms] + exe.get('link_depends', []), 109864ed6f92SPaolo Bonzini link_args: link_args, 109964ed6f92SPaolo Bonzini gui_app: exe['gui']) 110010e1d263SMarc-André Lureau 110110e1d263SMarc-André Lureau if 'CONFIG_TRACE_SYSTEMTAP' in config_host 110210e1d263SMarc-André Lureau foreach stp: [ 1103bd5f973aSStefan Hajnoczi {'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false}, 1104bd5f973aSStefan Hajnoczi {'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true}, 110510e1d263SMarc-André Lureau {'ext': '-simpletrace.stp', 'fmt': 'simpletrace-stap', 'bin': '', 'install': true}, 110610e1d263SMarc-André Lureau {'ext': '-log.stp', 'fmt': 'log-stap', 'bin': '', 'install': true}, 110710e1d263SMarc-André Lureau ] 1108bd5f973aSStefan Hajnoczi custom_target(exe['name'] + stp['ext'], 110910e1d263SMarc-André Lureau input: trace_events_all, 1110bd5f973aSStefan Hajnoczi output: exe['name'] + stp['ext'], 111110e1d263SMarc-André Lureau capture: true, 111210e1d263SMarc-André Lureau install: stp['install'], 1113ab4c0996SMarc-André Lureau install_dir: qemu_datadir / '../systemtap/tapset', 111410e1d263SMarc-André Lureau command: [ 111510e1d263SMarc-André Lureau tracetool, '--group=all', '--format=' + stp['fmt'], 111610e1d263SMarc-André Lureau '--binary=' + stp['bin'], 111710e1d263SMarc-André Lureau '--target-name=' + target_name, 111810e1d263SMarc-André Lureau '--target-type=' + target_type, 111910e1d263SMarc-André Lureau '--probe-prefix=qemu.' + target_type + '.' + target_name, 112010e1d263SMarc-André Lureau '@INPUT@', 112110e1d263SMarc-André Lureau ]) 112210e1d263SMarc-André Lureau endforeach 112310e1d263SMarc-André Lureau endif 112464ed6f92SPaolo Bonzini endforeach 11252becc36aSPaolo Bonziniendforeach 11262becc36aSPaolo Bonzini 1127931049b4SPaolo Bonzini# Other build targets 1128897b5afaSMarc-André Lureau 1129f556b4a1SPaolo Bonziniif 'CONFIG_PLUGIN' in config_host 1130f556b4a1SPaolo Bonzini install_headers('include/qemu/qemu-plugin.h') 1131f556b4a1SPaolo Bonziniendif 1132f556b4a1SPaolo Bonzini 1133f15bff25SPaolo Bonziniif 'CONFIG_GUEST_AGENT' in config_host 1134f15bff25SPaolo Bonzini subdir('qga') 1135f15bff25SPaolo Bonziniendif 1136f15bff25SPaolo Bonzini 11379755c94aSLaurent Vivier# Don't build qemu-keymap if xkbcommon is not explicitly enabled 11389755c94aSLaurent Vivier# when we don't build tools or system 11394113f4cfSLaurent Vivierif xkbcommon.found() 114028742467SMarc-André Lureau # used for the update-keymaps target, so include rules even if !have_tools 114128742467SMarc-André Lureau qemu_keymap = executable('qemu-keymap', files('qemu-keymap.c', 'ui/input-keymap.c') + genh, 114228742467SMarc-André Lureau dependencies: [qemuutil, xkbcommon], install: have_tools) 114328742467SMarc-André Lureauendif 114428742467SMarc-André Lureau 11458855e8f0SPhilippe Mathieu-Daudéqemu_block_tools = [] 1146931049b4SPaolo Bonziniif have_tools 1147b7c70bf2SMarc-André Lureau qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], 1148b7c70bf2SMarc-André Lureau dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) 1149b7c70bf2SMarc-André Lureau qemu_io = executable('qemu-io', files('qemu-io.c'), 1150b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1151b7c70bf2SMarc-André Lureau qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), 1152b7c70bf2SMarc-André Lureau dependencies: [block, qemuutil], install: true) 1153b7c70bf2SMarc-André Lureau 11547c58bb76SPaolo Bonzini subdir('storage-daemon') 1155a9c9727cSPaolo Bonzini subdir('contrib/rdmacm-mux') 11561d7bb6abSMarc-André Lureau subdir('contrib/elf2dmp') 1157a9c9727cSPaolo Bonzini 1158157e7b13SMarc-André Lureau executable('qemu-edid', files('qemu-edid.c', 'hw/display/edid-generate.c'), 1159157e7b13SMarc-André Lureau dependencies: qemuutil, 1160157e7b13SMarc-André Lureau install: true) 1161157e7b13SMarc-André Lureau 1162931049b4SPaolo Bonzini if 'CONFIG_VHOST_USER' in config_host 1163931049b4SPaolo Bonzini subdir('contrib/libvhost-user') 11642d7ac0afSPaolo Bonzini subdir('contrib/vhost-user-blk') 1165ea458960SMarc-André Lureau subdir('contrib/vhost-user-gpu') 116632fcc624SMarc-André Lureau subdir('contrib/vhost-user-input') 116799650b62SPaolo Bonzini subdir('contrib/vhost-user-scsi') 1168931049b4SPaolo Bonzini endif 11698f51e01cSMarc-André Lureau 11708f51e01cSMarc-André Lureau if targetos == 'linux' 11718f51e01cSMarc-André Lureau executable('qemu-bridge-helper', files('qemu-bridge-helper.c'), 11728f51e01cSMarc-André Lureau dependencies: [qemuutil, libcap_ng], 11738f51e01cSMarc-André Lureau install: true, 11748f51e01cSMarc-André Lureau install_dir: get_option('libexecdir')) 1175897b5afaSMarc-André Lureau 1176897b5afaSMarc-André Lureau executable('qemu-pr-helper', files('scsi/qemu-pr-helper.c', 'scsi/utils.c'), 1177897b5afaSMarc-André Lureau dependencies: [authz, crypto, io, qom, qemuutil, 1178897b5afaSMarc-André Lureau libcap_ng, libudev, libmpathpersist], 1179897b5afaSMarc-André Lureau install: true) 11808f51e01cSMarc-André Lureau endif 11818f51e01cSMarc-André Lureau 11825ee24e78SMarc-André Lureau if 'CONFIG_IVSHMEM' in config_host 11835ee24e78SMarc-André Lureau subdir('contrib/ivshmem-client') 11845ee24e78SMarc-André Lureau subdir('contrib/ivshmem-server') 11855ee24e78SMarc-André Lureau endif 1186931049b4SPaolo Bonziniendif 1187931049b4SPaolo Bonzini 1188f5aa6320SMarc-André Lureausubdir('scripts') 11893f99cf57SPaolo Bonzinisubdir('tools') 1190bdcbea7aSMarc-André Lureausubdir('pc-bios') 1191ce1c1e7aSPaolo Bonzinisubdir('tests') 1192f8aa24eaSPaolo Bonzinisubdir('docs') 1193e8f3bd71SMarc-André Lureauif 'CONFIG_GTK' in config_host 1194e8f3bd71SMarc-André Lureau subdir('po') 1195e8f3bd71SMarc-André Lureauendif 11963f99cf57SPaolo Bonzini 1197acfdaac5SPaolo Bonziniif build_docs 1198acfdaac5SPaolo Bonzini makeinfo = find_program('makeinfo', required: build_docs) 1199acfdaac5SPaolo Bonzini 1200acfdaac5SPaolo Bonzini docs_inc = [ 1201acfdaac5SPaolo Bonzini '-I', meson.current_source_dir(), 1202acfdaac5SPaolo Bonzini '-I', meson.current_build_dir() / 'docs', 1203acfdaac5SPaolo Bonzini '-I', '@OUTDIR@', 1204acfdaac5SPaolo Bonzini ] 1205acfdaac5SPaolo Bonzini 1206acfdaac5SPaolo Bonzini version_texi = configure_file(output: 'version.texi', 1207acfdaac5SPaolo Bonzini input: 'version.texi.in', 1208acfdaac5SPaolo Bonzini configuration: {'VERSION': meson.project_version(), 1209acfdaac5SPaolo Bonzini 'qemu_confdir': config_host['qemu_confdir']}) 1210acfdaac5SPaolo Bonzini 1211acfdaac5SPaolo Bonzini texi = { 1212acfdaac5SPaolo Bonzini 'qemu-qmp-ref': ['docs/interop/qemu-qmp-ref.texi', qapi_doc_texi, version_texi], 1213acfdaac5SPaolo Bonzini } 1214acfdaac5SPaolo Bonzini if 'CONFIG_GUEST_AGENT' in config_host 1215acfdaac5SPaolo Bonzini texi += {'qemu-ga-ref': ['docs/interop/qemu-ga-ref.texi', qga_qapi_doc_texi, version_texi]} 1216acfdaac5SPaolo Bonzini endif 1217acfdaac5SPaolo Bonzini 1218acfdaac5SPaolo Bonzini if makeinfo.found() 1219acfdaac5SPaolo Bonzini cmd = [ 1220acfdaac5SPaolo Bonzini 'env', 'LC_ALL=C', makeinfo, '--no-split', '--number-sections', docs_inc, 1221acfdaac5SPaolo Bonzini '@INPUT0@', '-o', '@OUTPUT@', 1222acfdaac5SPaolo Bonzini ] 1223acfdaac5SPaolo Bonzini foreach ext, args: { 1224acfdaac5SPaolo Bonzini 'info': [], 1225acfdaac5SPaolo Bonzini 'html': ['--no-headers', '--html'], 1226acfdaac5SPaolo Bonzini 'txt': ['--no-headers', '--plaintext'], 1227acfdaac5SPaolo Bonzini } 1228acfdaac5SPaolo Bonzini t = [] 1229acfdaac5SPaolo Bonzini foreach doc, input: texi 1230acfdaac5SPaolo Bonzini output = doc + '.' + ext 1231acfdaac5SPaolo Bonzini t += custom_target(output, 1232acfdaac5SPaolo Bonzini input: input, 1233acfdaac5SPaolo Bonzini output: output, 1234acfdaac5SPaolo Bonzini install: true, 1235491e74c1SMarc-André Lureau install_dir: qemu_docdir / 'interop', 1236acfdaac5SPaolo Bonzini command: cmd + args) 1237acfdaac5SPaolo Bonzini endforeach 1238acfdaac5SPaolo Bonzini alias_target(ext, t) 1239acfdaac5SPaolo Bonzini endforeach 1240acfdaac5SPaolo Bonzini endif 1241acfdaac5SPaolo Bonzini 1242acfdaac5SPaolo Bonzini texi2pdf = find_program('texi2pdf', required: false) 1243acfdaac5SPaolo Bonzini 1244acfdaac5SPaolo Bonzini if texi2pdf.found() 1245acfdaac5SPaolo Bonzini pdfs = [] 1246acfdaac5SPaolo Bonzini foreach doc, input: texi 1247acfdaac5SPaolo Bonzini output = doc + '.pdf' 1248acfdaac5SPaolo Bonzini pdfs += custom_target(output, 1249acfdaac5SPaolo Bonzini input: input, 1250acfdaac5SPaolo Bonzini output: output, 1251acfdaac5SPaolo Bonzini command: [texi2pdf, '-q', docs_inc, '@INPUT0@', '-o', '@OUTPUT@'], 1252acfdaac5SPaolo Bonzini build_by_default: false) 1253acfdaac5SPaolo Bonzini endforeach 1254acfdaac5SPaolo Bonzini alias_target('pdf', pdfs) 1255acfdaac5SPaolo Bonzini endif 1256acfdaac5SPaolo Bonzini 1257acfdaac5SPaolo Bonzini texi2pod = find_program('scripts/texi2pod.pl') 1258acfdaac5SPaolo Bonzini pod2man = find_program('pod2man', required: build_docs) 1259acfdaac5SPaolo Bonzini 1260acfdaac5SPaolo Bonzini if pod2man.found() 1261acfdaac5SPaolo Bonzini foreach doc, input: texi 1262acfdaac5SPaolo Bonzini man = doc + '.7' 1263acfdaac5SPaolo Bonzini pod = custom_target(man + '.pod', 1264acfdaac5SPaolo Bonzini input: input, 1265acfdaac5SPaolo Bonzini output: man + '.pod', 1266acfdaac5SPaolo Bonzini command: [texi2pod, 1267acfdaac5SPaolo Bonzini '-DVERSION="' + meson.project_version() + '"', 1268acfdaac5SPaolo Bonzini '-DCONFDIR="' + config_host['qemu_confdir'] + '"', 1269acfdaac5SPaolo Bonzini '@INPUT0@', '@OUTPUT@']) 1270acfdaac5SPaolo Bonzini man = custom_target(man, 1271acfdaac5SPaolo Bonzini input: pod, 1272acfdaac5SPaolo Bonzini output: man, 1273acfdaac5SPaolo Bonzini capture: true, 1274acfdaac5SPaolo Bonzini install: true, 1275b81efab7SMarc-André Lureau install_dir: get_option('mandir') / 'man7', 1276acfdaac5SPaolo Bonzini command: [pod2man, '--utf8', '--section=7', '--center=" "', 1277acfdaac5SPaolo Bonzini '--release=" "', '@INPUT@']) 1278acfdaac5SPaolo Bonzini endforeach 1279acfdaac5SPaolo Bonzini endif 1280acfdaac5SPaolo Bonziniendif 1281acfdaac5SPaolo Bonzini 12828adfeba9SMarc-André Lureauif host_machine.system() == 'windows' 12838adfeba9SMarc-André Lureau nsis_cmd = [ 12848adfeba9SMarc-André Lureau find_program('scripts/nsis.py'), 12858adfeba9SMarc-André Lureau '@OUTPUT@', 12868adfeba9SMarc-André Lureau get_option('prefix'), 12878adfeba9SMarc-André Lureau meson.current_source_dir(), 12888adfeba9SMarc-André Lureau host_machine.cpu_family(), 12898adfeba9SMarc-André Lureau '--', 12908adfeba9SMarc-André Lureau '-DDISPLAYVERSION=' + meson.project_version(), 12918adfeba9SMarc-André Lureau ] 12928adfeba9SMarc-André Lureau if build_docs 12938adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_DOCUMENTATION=y' 12948adfeba9SMarc-André Lureau endif 12958adfeba9SMarc-André Lureau if 'CONFIG_GTK' in config_host 12968adfeba9SMarc-André Lureau nsis_cmd += '-DCONFIG_GTK=y' 12978adfeba9SMarc-André Lureau endif 12988adfeba9SMarc-André Lureau 12998adfeba9SMarc-André Lureau nsis = custom_target('nsis', 13008adfeba9SMarc-André Lureau output: 'qemu-setup-' + meson.project_version() + '.exe', 13018adfeba9SMarc-André Lureau input: files('qemu.nsi'), 13028adfeba9SMarc-André Lureau build_always_stale: true, 13038adfeba9SMarc-André Lureau command: nsis_cmd + ['@INPUT@']) 13048adfeba9SMarc-André Lureau alias_target('installer', nsis) 13058adfeba9SMarc-André Lureauendif 13068adfeba9SMarc-André Lureau 1307f9332757SPaolo Bonzinisummary_info = {} 1308f9332757SPaolo Bonzinisummary_info += {'Install prefix': config_host['prefix']} 1309f9332757SPaolo Bonzinisummary_info += {'BIOS directory': config_host['qemu_datadir']} 1310f9332757SPaolo Bonzinisummary_info += {'firmware path': config_host['qemu_firmwarepath']} 1311f9332757SPaolo Bonzinisummary_info += {'binary directory': config_host['bindir']} 1312f9332757SPaolo Bonzinisummary_info += {'library directory': config_host['libdir']} 1313f9332757SPaolo Bonzinisummary_info += {'module directory': config_host['qemu_moddir']} 1314f9332757SPaolo Bonzinisummary_info += {'libexec directory': config_host['libexecdir']} 1315f9332757SPaolo Bonzinisummary_info += {'include directory': config_host['includedir']} 1316f9332757SPaolo Bonzinisummary_info += {'config directory': config_host['sysconfdir']} 1317f9332757SPaolo Bonziniif targetos != 'windows' 1318f9332757SPaolo Bonzini summary_info += {'local state directory': config_host['qemu_localstatedir']} 1319b81efab7SMarc-André Lureau summary_info += {'Manual directory': get_option('mandir')} 1320f9332757SPaolo Bonzinielse 1321f9332757SPaolo Bonzini summary_info += {'local state directory': 'queried at runtime'} 1322f9332757SPaolo Bonziniendif 1323491e74c1SMarc-André Lureausummary_info += {'Doc directory': get_option('docdir')} 1324f9332757SPaolo Bonzinisummary_info += {'Build directory': meson.current_build_dir()} 1325f9332757SPaolo Bonzinisummary_info += {'Source path': meson.current_source_dir()} 1326f9332757SPaolo Bonzinisummary_info += {'GIT binary': config_host['GIT']} 1327f9332757SPaolo Bonzinisummary_info += {'GIT submodules': config_host['GIT_SUBMODULES']} 1328f9332757SPaolo Bonzinisummary_info += {'C compiler': meson.get_compiler('c').cmd_array()[0]} 1329f9332757SPaolo Bonzinisummary_info += {'Host C compiler': meson.get_compiler('c', native: true).cmd_array()[0]} 1330f9332757SPaolo Bonziniif link_language == 'cpp' 1331f9332757SPaolo Bonzini summary_info += {'C++ compiler': meson.get_compiler('cpp').cmd_array()[0]} 1332f9332757SPaolo Bonzinielse 1333f9332757SPaolo Bonzini summary_info += {'C++ compiler': false} 1334f9332757SPaolo Bonziniendif 1335f9332757SPaolo Bonziniif targetos == 'darwin' 1336f9332757SPaolo Bonzini summary_info += {'Objective-C compiler': meson.get_compiler('objc').cmd_array()[0]} 1337f9332757SPaolo Bonziniendif 1338f9332757SPaolo Bonzinisummary_info += {'ARFLAGS': config_host['ARFLAGS']} 1339f9332757SPaolo Bonzinisummary_info += {'CFLAGS': config_host['CFLAGS']} 1340f9332757SPaolo Bonzinisummary_info += {'QEMU_CFLAGS': config_host['QEMU_CFLAGS']} 1341f9332757SPaolo Bonzinisummary_info += {'QEMU_LDFLAGS': config_host['QEMU_LDFLAGS']} 1342f9332757SPaolo Bonzinisummary_info += {'make': config_host['MAKE']} 1343f9332757SPaolo Bonzinisummary_info += {'install': config_host['INSTALL']} 1344f9332757SPaolo Bonzinisummary_info += {'python': '@0@ (version: @1@)'.format(python.full_path(), python.language_version())} 1345f9332757SPaolo Bonzinisummary_info += {'sphinx-build': config_host['SPHINX_BUILD']} 1346f9332757SPaolo Bonzinisummary_info += {'genisoimage': config_host['GENISOIMAGE']} 1347f9332757SPaolo Bonzini# TODO: add back version 1348f9332757SPaolo Bonzinisummary_info += {'slirp support': config_host.has_key('CONFIG_SLIRP')} 1349f9332757SPaolo Bonziniif config_host.has_key('CONFIG_SLIRP') 1350f9332757SPaolo Bonzini summary_info += {'smbd': config_host['CONFIG_SMBD_COMMAND']} 1351f9332757SPaolo Bonziniendif 1352f9332757SPaolo Bonzinisummary_info += {'module support': config_host.has_key('CONFIG_MODULES')} 1353f9332757SPaolo Bonziniif config_host.has_key('CONFIG_MODULES') 1354f9332757SPaolo Bonzini summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')} 1355f9332757SPaolo Bonziniendif 1356f9332757SPaolo Bonzinisummary_info += {'host CPU': cpu} 1357f9332757SPaolo Bonzinisummary_info += {'host endianness': build_machine.endian()} 1358f9332757SPaolo Bonzinisummary_info += {'target list': config_host['TARGET_DIRS']} 1359f9332757SPaolo Bonzinisummary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')} 1360f9332757SPaolo Bonzinisummary_info += {'sparse enabled': meson.get_compiler('c').cmd_array().contains('cgcc')} 1361f9332757SPaolo Bonzinisummary_info += {'strip binaries': get_option('strip')} 1362f9332757SPaolo Bonzinisummary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')} 1363f9332757SPaolo Bonzinisummary_info += {'static build': config_host.has_key('CONFIG_TOOLS')} 1364f9332757SPaolo Bonziniif targetos == 'darwin' 1365f9332757SPaolo Bonzini summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')} 1366f9332757SPaolo Bonziniendif 1367f9332757SPaolo Bonzini# TODO: add back version 136835be72baSPaolo Bonzinisummary_info += {'SDL support': sdl.found()} 136935be72baSPaolo Bonzinisummary_info += {'SDL image support': sdl_image.found()} 1370f9332757SPaolo Bonzini# TODO: add back version 1371f9332757SPaolo Bonzinisummary_info += {'GTK support': config_host.has_key('CONFIG_GTK')} 1372f9332757SPaolo Bonzinisummary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')} 1373b7612f45SPaolo Bonzinisummary_info += {'pixman': pixman.found()} 1374f9332757SPaolo Bonzini# TODO: add back version 1375f9332757SPaolo Bonzinisummary_info += {'VTE support': config_host.has_key('CONFIG_VTE')} 1376f9332757SPaolo Bonzinisummary_info += {'TLS priority': config_host['CONFIG_TLS_PRIORITY']} 1377f9332757SPaolo Bonzinisummary_info += {'GNUTLS support': config_host.has_key('CONFIG_GNUTLS')} 1378f9332757SPaolo Bonzini# TODO: add back version 1379f9332757SPaolo Bonzinisummary_info += {'libgcrypt': config_host.has_key('CONFIG_GCRYPT')} 1380f9332757SPaolo Bonziniif config_host.has_key('CONFIG_GCRYPT') 1381f9332757SPaolo Bonzini summary_info += {' hmac': config_host.has_key('CONFIG_GCRYPT_HMAC')} 1382f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1383f9332757SPaolo Bonziniendif 1384f9332757SPaolo Bonzini# TODO: add back version 1385f9332757SPaolo Bonzinisummary_info += {'nettle': config_host.has_key('CONFIG_NETTLE')} 1386f9332757SPaolo Bonziniif config_host.has_key('CONFIG_NETTLE') 1387f9332757SPaolo Bonzini summary_info += {' XTS': not config_host.has_key('CONFIG_QEMU_PRIVATE_XTS')} 1388f9332757SPaolo Bonziniendif 1389f9332757SPaolo Bonzinisummary_info += {'libtasn1': config_host.has_key('CONFIG_TASN1')} 1390f9332757SPaolo Bonzinisummary_info += {'PAM': config_host.has_key('CONFIG_AUTH_PAM')} 1391f9332757SPaolo Bonzinisummary_info += {'iconv support': config_host.has_key('CONFIG_ICONV')} 1392f9332757SPaolo Bonzinisummary_info += {'curses support': config_host.has_key('CONFIG_CURSES')} 1393f9332757SPaolo Bonzini# TODO: add back version 1394f9332757SPaolo Bonzinisummary_info += {'virgl support': config_host.has_key('CONFIG_VIRGL')} 1395f9332757SPaolo Bonzinisummary_info += {'curl support': config_host.has_key('CONFIG_CURL')} 1396f9332757SPaolo Bonzinisummary_info += {'mingw32 support': targetos == 'windows'} 1397f9332757SPaolo Bonzinisummary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']} 1398f9332757SPaolo Bonzinisummary_info += {'Block whitelist (rw)': config_host['CONFIG_BDRV_RW_WHITELIST']} 1399f9332757SPaolo Bonzinisummary_info += {'Block whitelist (ro)': config_host['CONFIG_BDRV_RO_WHITELIST']} 1400f9332757SPaolo Bonzinisummary_info += {'VirtFS support': config_host.has_key('CONFIG_VIRTFS')} 1401f9332757SPaolo Bonzinisummary_info += {'Multipath support': config_host.has_key('CONFIG_MPATH')} 1402a0b93237SPaolo Bonzinisummary_info += {'VNC support': vnc.found()} 1403a0b93237SPaolo Bonziniif vnc.found() 1404a0b93237SPaolo Bonzini summary_info += {'VNC SASL support': sasl.found()} 1405a0b93237SPaolo Bonzini summary_info += {'VNC JPEG support': jpeg.found()} 1406a0b93237SPaolo Bonzini summary_info += {'VNC PNG support': png.found()} 1407f9332757SPaolo Bonziniendif 1408f9332757SPaolo Bonzinisummary_info += {'xen support': config_host.has_key('CONFIG_XEN_BACKEND')} 1409f9332757SPaolo Bonziniif config_host.has_key('CONFIG_XEN_BACKEND') 1410f9332757SPaolo Bonzini summary_info += {'xen ctrl version': config_host['CONFIG_XEN_CTRL_INTERFACE_VERSION']} 1411f9332757SPaolo Bonziniendif 1412f9332757SPaolo Bonzinisummary_info += {'brlapi support': config_host.has_key('CONFIG_BRLAPI')} 1413f9332757SPaolo Bonzinisummary_info += {'Documentation': config_host.has_key('BUILD_DOCS')} 1414f9332757SPaolo Bonzinisummary_info += {'PIE': get_option('b_pie')} 1415f9332757SPaolo Bonzinisummary_info += {'vde support': config_host.has_key('CONFIG_VDE')} 1416f9332757SPaolo Bonzinisummary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')} 1417f9332757SPaolo Bonzinisummary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')} 1418f9332757SPaolo Bonzinisummary_info += {'Linux io_uring support': config_host.has_key('CONFIG_LINUX_IO_URING')} 1419f9332757SPaolo Bonzinisummary_info += {'ATTR/XATTR support': config_host.has_key('CONFIG_ATTR')} 1420f9332757SPaolo Bonzinisummary_info += {'Install blobs': config_host.has_key('INSTALL_BLOBS')} 1421f9332757SPaolo Bonzini# TODO: add back KVM/HAX/HVF/WHPX/TCG 1422f9332757SPaolo Bonzini#summary_info += {'KVM support': have_kvm'} 1423f9332757SPaolo Bonzini#summary_info += {'HAX support': have_hax'} 1424f9332757SPaolo Bonzini#summary_info += {'HVF support': have_hvf'} 1425f9332757SPaolo Bonzini#summary_info += {'WHPX support': have_whpx'} 1426f9332757SPaolo Bonzini#summary_info += {'TCG support': have_tcg'} 1427f9332757SPaolo Bonzini#if get_option('tcg') 1428f9332757SPaolo Bonzini# summary_info += {'TCG debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')} 1429f9332757SPaolo Bonzini# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')} 1430f9332757SPaolo Bonzini#endif 1431f9332757SPaolo Bonzinisummary_info += {'malloc trim support': config_host.has_key('CONFIG_MALLOC_TRIM')} 1432f9332757SPaolo Bonzinisummary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')} 1433f9332757SPaolo Bonzinisummary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')} 1434f9332757SPaolo Bonzinisummary_info += {'fdt support': config_host.has_key('CONFIG_FDT')} 1435f9332757SPaolo Bonzinisummary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')} 1436f9332757SPaolo Bonzinisummary_info += {'preadv support': config_host.has_key('CONFIG_PREADV')} 1437f9332757SPaolo Bonzinisummary_info += {'fdatasync': config_host.has_key('CONFIG_FDATASYNC')} 1438f9332757SPaolo Bonzinisummary_info += {'madvise': config_host.has_key('CONFIG_MADVISE')} 1439f9332757SPaolo Bonzinisummary_info += {'posix_madvise': config_host.has_key('CONFIG_POSIX_MADVISE')} 1440f9332757SPaolo Bonzinisummary_info += {'posix_memalign': config_host.has_key('CONFIG_POSIX_MEMALIGN')} 1441f9332757SPaolo Bonzinisummary_info += {'libcap-ng support': config_host.has_key('CONFIG_LIBCAP_NG')} 1442f9332757SPaolo Bonzinisummary_info += {'vhost-net support': config_host.has_key('CONFIG_VHOST_NET')} 1443f9332757SPaolo Bonzinisummary_info += {'vhost-crypto support': config_host.has_key('CONFIG_VHOST_CRYPTO')} 1444f9332757SPaolo Bonzinisummary_info += {'vhost-scsi support': config_host.has_key('CONFIG_VHOST_SCSI')} 1445f9332757SPaolo Bonzinisummary_info += {'vhost-vsock support': config_host.has_key('CONFIG_VHOST_VSOCK')} 1446f9332757SPaolo Bonzinisummary_info += {'vhost-user support': config_host.has_key('CONFIG_VHOST_KERNEL')} 1447f9332757SPaolo Bonzinisummary_info += {'vhost-user-fs support': config_host.has_key('CONFIG_VHOST_USER_FS')} 1448f9332757SPaolo Bonzinisummary_info += {'vhost-vdpa support': config_host.has_key('CONFIG_VHOST_VDPA')} 1449f9332757SPaolo Bonzinisummary_info += {'Trace backends': config_host['TRACE_BACKENDS']} 1450f9332757SPaolo Bonziniif config_host['TRACE_BACKENDS'].split().contains('simple') 1451f9332757SPaolo Bonzini summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'} 1452f9332757SPaolo Bonziniendif 1453f9332757SPaolo Bonzini# TODO: add back protocol and server version 1454f9332757SPaolo Bonzinisummary_info += {'spice support': config_host.has_key('CONFIG_SPICE')} 1455f9332757SPaolo Bonzinisummary_info += {'rbd support': config_host.has_key('CONFIG_RBD')} 1456f9332757SPaolo Bonzinisummary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')} 1457f9332757SPaolo Bonzinisummary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')} 14580a40bcb7SCésar Belleysummary_info += {'U2F support': u2f.found()} 1459f9332757SPaolo Bonzinisummary_info += {'libusb': config_host.has_key('CONFIG_USB_LIBUSB')} 1460f9332757SPaolo Bonzinisummary_info += {'usb net redir': config_host.has_key('CONFIG_USB_REDIR')} 1461f9332757SPaolo Bonzinisummary_info += {'OpenGL support': config_host.has_key('CONFIG_OPENGL')} 1462f9332757SPaolo Bonzinisummary_info += {'OpenGL dmabufs': config_host.has_key('CONFIG_OPENGL_DMABUF')} 1463f9332757SPaolo Bonzinisummary_info += {'libiscsi support': config_host.has_key('CONFIG_LIBISCSI')} 1464f9332757SPaolo Bonzinisummary_info += {'libnfs support': config_host.has_key('CONFIG_LIBNFS')} 1465f9332757SPaolo Bonzinisummary_info += {'build guest agent': config_host.has_key('CONFIG_GUEST_AGENT')} 1466f9332757SPaolo Bonziniif targetos == 'windows' 1467f9332757SPaolo Bonzini if 'WIN_SDK' in config_host 1468f9332757SPaolo Bonzini summary_info += {'Windows SDK': config_host['WIN_SDK']} 1469f9332757SPaolo Bonzini endif 1470f9332757SPaolo Bonzini summary_info += {'QGA VSS support': config_host.has_key('CONFIG_QGA_VSS')} 1471f9332757SPaolo Bonzini summary_info += {'QGA w32 disk info': config_host.has_key('CONFIG_QGA_NTDDSCSI')} 1472f9332757SPaolo Bonzini summary_info += {'QGA MSI support': config_host.has_key('CONFIG_QGA_MSI_ENABLED')} 1473f9332757SPaolo Bonziniendif 1474f9332757SPaolo Bonzinisummary_info += {'seccomp support': config_host.has_key('CONFIG_SECCOMP')} 1475f9332757SPaolo Bonzinisummary_info += {'coroutine backend': config_host['CONFIG_COROUTINE_BACKEND']} 1476f9332757SPaolo Bonzinisummary_info += {'coroutine pool': config_host['CONFIG_COROUTINE_POOL'] == '1'} 1477f9332757SPaolo Bonzinisummary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')} 1478f9332757SPaolo Bonzinisummary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')} 1479f9332757SPaolo Bonzinisummary_info += {'crypto afalg': config_host.has_key('CONFIG_AF_ALG')} 1480f9332757SPaolo Bonzinisummary_info += {'GlusterFS support': config_host.has_key('CONFIG_GLUSTERFS')} 1481bf0e56a3SMarc-André Lureausummary_info += {'gcov': get_option('b_coverage')} 1482f9332757SPaolo Bonzinisummary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} 1483f9332757SPaolo Bonzinisummary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} 1484f9332757SPaolo Bonzinisummary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} 1485f9332757SPaolo Bonzinisummary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} 1486f9332757SPaolo Bonzinisummary_info += {'lzo support': config_host.has_key('CONFIG_LZO')} 1487f9332757SPaolo Bonzinisummary_info += {'snappy support': config_host.has_key('CONFIG_SNAPPY')} 1488f9332757SPaolo Bonzinisummary_info += {'bzip2 support': config_host.has_key('CONFIG_BZIP2')} 1489f9332757SPaolo Bonzinisummary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')} 1490f9332757SPaolo Bonzinisummary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')} 1491f9332757SPaolo Bonzinisummary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')} 1492f9332757SPaolo Bonzinisummary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')} 1493f9332757SPaolo Bonzinisummary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')} 1494f9332757SPaolo Bonzinisummary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')} 1495f9332757SPaolo Bonzinisummary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')} 1496f9332757SPaolo Bonzinisummary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')} 1497f9332757SPaolo Bonzinisummary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')} 1498f9332757SPaolo Bonzinisummary_info += {'bochs support': config_host.has_key('CONFIG_BOCHS')} 1499f9332757SPaolo Bonzinisummary_info += {'cloop support': config_host.has_key('CONFIG_CLOOP')} 1500f9332757SPaolo Bonzinisummary_info += {'dmg support': config_host.has_key('CONFIG_DMG')} 1501f9332757SPaolo Bonzinisummary_info += {'qcow v1 support': config_host.has_key('CONFIG_QCOW1')} 1502f9332757SPaolo Bonzinisummary_info += {'vdi support': config_host.has_key('CONFIG_VDI')} 1503f9332757SPaolo Bonzinisummary_info += {'vvfat support': config_host.has_key('CONFIG_VVFAT')} 1504f9332757SPaolo Bonzinisummary_info += {'qed support': config_host.has_key('CONFIG_QED')} 1505f9332757SPaolo Bonzinisummary_info += {'parallels support': config_host.has_key('CONFIG_PARALLELS')} 1506f9332757SPaolo Bonzinisummary_info += {'sheepdog support': config_host.has_key('CONFIG_SHEEPDOG')} 1507f9332757SPaolo Bonzinisummary_info += {'capstone': config_host.has_key('CONFIG_CAPSTONE')} 1508f9332757SPaolo Bonzinisummary_info += {'libpmem support': config_host.has_key('CONFIG_LIBPMEM')} 1509f9332757SPaolo Bonzinisummary_info += {'libdaxctl support': config_host.has_key('CONFIG_LIBDAXCTL')} 1510f9332757SPaolo Bonzinisummary_info += {'libudev': config_host.has_key('CONFIG_LIBUDEV')} 1511f9332757SPaolo Bonzinisummary_info += {'default devices': config_host['CONFIG_MINIKCONF_MODE'] == '--defconfig'} 1512f9332757SPaolo Bonzinisummary_info += {'plugin support': config_host.has_key('CONFIG_PLUGIN')} 1513f9332757SPaolo Bonzinisummary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')} 1514f9332757SPaolo Bonziniif config_host.has_key('HAVE_GDB_BIN') 1515f9332757SPaolo Bonzini summary_info += {'gdb': config_host['HAVE_GDB_BIN']} 1516f9332757SPaolo Bonziniendif 1517f9332757SPaolo Bonzinisummary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')} 1518f9332757SPaolo Bonzinisummary_info += {'rng-none': config_host.has_key('CONFIG_RNG_NONE')} 1519f9332757SPaolo Bonzinisummary_info += {'Linux keyring': config_host.has_key('CONFIG_SECRET_KEYRING')} 1520f9332757SPaolo Bonzinisummary(summary_info, bool_yn: true) 1521f9332757SPaolo Bonzini 1522f9332757SPaolo Bonziniif not supported_cpus.contains(cpu) 1523f9332757SPaolo Bonzini message() 1524f9332757SPaolo Bonzini warning('SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!') 1525f9332757SPaolo Bonzini message() 1526f9332757SPaolo Bonzini message('CPU host architecture ' + cpu + ' support is not currently maintained.') 1527f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host CPU in') 1528f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1529f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1530f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1531f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1532f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1533f9332757SPaolo Bonziniendif 1534f9332757SPaolo Bonzini 1535f9332757SPaolo Bonziniif not supported_oses.contains(targetos) 1536f9332757SPaolo Bonzini message() 1537f9332757SPaolo Bonzini warning('WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!') 1538f9332757SPaolo Bonzini message() 1539f9332757SPaolo Bonzini message('Host OS ' + targetos + 'support is not currently maintained.') 1540f9332757SPaolo Bonzini message('The QEMU project intends to remove support for this host OS in') 1541f9332757SPaolo Bonzini message('a future release if nobody volunteers to maintain it and to') 1542f9332757SPaolo Bonzini message('provide a build host for our continuous integration setup.') 1543f9332757SPaolo Bonzini message('configure has succeeded and you can continue to build, but') 1544f9332757SPaolo Bonzini message('if you care about QEMU on this platform you should contact') 1545f9332757SPaolo Bonzini message('us upstream at qemu-devel@nongnu.org.') 1546f9332757SPaolo Bonziniendif 1547