17d13299dSbellard#!/bin/sh 27d13299dSbellard# 33ef693a0Sbellard# qemu configure script (c) 2003 Fabrice Bellard 47d13299dSbellard# 58cd05ab6SPeter Maydell 699519e67SCornelia Huck# Unset some variables known to interfere with behavior of common tools, 799519e67SCornelia Huck# just as autoconf does. 899519e67SCornelia HuckCLICOLOR_FORCE= GREP_OPTIONS= 999519e67SCornelia Huckunset CLICOLOR_FORCE GREP_OPTIONS 1099519e67SCornelia Huck 115e4dfd3dSJohn Snow# Don't allow CCACHE, if present, to use cached results of compile tests! 125e4dfd3dSJohn Snowexport CCACHE_RECACHE=yes 135e4dfd3dSJohn Snow 14dedad027SDaniel P. Berrangé# make source path absolute 15dedad027SDaniel P. Berrangésource_path=$(cd "$(dirname -- "$0")"; pwd) 16dedad027SDaniel P. Berrangé 17dedad027SDaniel P. Berrangéif test "$PWD" = "$source_path" 18dedad027SDaniel P. Berrangéthen 19dedad027SDaniel P. Berrangé echo "Using './build' as the directory for build output" 20dedad027SDaniel P. Berrangé 21dedad027SDaniel P. Berrangé MARKER=build/auto-created-by-configure 22dedad027SDaniel P. Berrangé 23dedad027SDaniel P. Berrangé if test -e build 24dedad027SDaniel P. Berrangé then 25dedad027SDaniel P. Berrangé if test -f $MARKER 26dedad027SDaniel P. Berrangé then 27dedad027SDaniel P. Berrangé rm -rf build 28dedad027SDaniel P. Berrangé else 29dedad027SDaniel P. Berrangé echo "ERROR: ./build dir already exists and was not previously created by configure" 30dedad027SDaniel P. Berrangé exit 1 31dedad027SDaniel P. Berrangé fi 32dedad027SDaniel P. Berrangé fi 33dedad027SDaniel P. Berrangé 34dedad027SDaniel P. Berrangé mkdir build 35dedad027SDaniel P. Berrangé touch $MARKER 36dedad027SDaniel P. Berrangé 37dedad027SDaniel P. Berrangé cat > GNUmakefile <<'EOF' 38dedad027SDaniel P. Berrangé# This file is auto-generated by configure to support in-source tree 39dedad027SDaniel P. Berrangé# 'make' command invocation 40dedad027SDaniel P. Berrangé 41dedad027SDaniel P. Berrangéifeq ($(MAKECMDGOALS),) 42dedad027SDaniel P. Berrangérecurse: all 43dedad027SDaniel P. Berrangéendif 44dedad027SDaniel P. Berrangé 45dedad027SDaniel P. Berrangé.NOTPARALLEL: % 46dedad027SDaniel P. Berrangé%: force 47dedad027SDaniel P. Berrangé @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...' 48dedad027SDaniel P. Berrangé @$(MAKE) -C build -f Makefile $(MAKECMDGOALS) 49dedad027SDaniel P. Berrangé @if test "$(MAKECMDGOALS)" = "distclean" && \ 50dedad027SDaniel P. Berrangé test -e build/auto-created-by-configure ; \ 51dedad027SDaniel P. Berrangé then \ 52dedad027SDaniel P. Berrangé rm -rf build GNUmakefile ; \ 53dedad027SDaniel P. Berrangé fi 54dedad027SDaniel P. Berrangéforce: ; 55dedad027SDaniel P. Berrangé.PHONY: force 56dedad027SDaniel P. BerrangéGNUmakefile: ; 57dedad027SDaniel P. Berrangé 58dedad027SDaniel P. BerrangéEOF 59dedad027SDaniel P. Berrangé cd build 60dedad027SDaniel P. Berrangé exec $source_path/configure "$@" 61dedad027SDaniel P. Berrangéfi 62dedad027SDaniel P. Berrangé 638cd05ab6SPeter Maydell# Temporary directory used for files created while 648cd05ab6SPeter Maydell# configure runs. Since it is in the build directory 658cd05ab6SPeter Maydell# we can safely blow away any previous version of it 668cd05ab6SPeter Maydell# (and we need not jump through hoops to try to delete 678cd05ab6SPeter Maydell# it when configure exits.) 688cd05ab6SPeter MaydellTMPDIR1="config-temp" 698cd05ab6SPeter Maydellrm -rf "${TMPDIR1}" 708cd05ab6SPeter Maydellmkdir -p "${TMPDIR1}" 718cd05ab6SPeter Maydellif [ $? -ne 0 ]; then 728cd05ab6SPeter Maydell echo "ERROR: failed to create temporary directory" 738cd05ab6SPeter Maydell exit 1 747d13299dSbellardfi 757d13299dSbellard 768cd05ab6SPeter MaydellTMPB="qemu-conf" 778cd05ab6SPeter MaydellTMPC="${TMPDIR1}/${TMPB}.c" 7866518bf6SDon SlutzTMPO="${TMPDIR1}/${TMPB}.o" 799c83ffd8SPeter MaydellTMPCXX="${TMPDIR1}/${TMPB}.cxx" 808cd05ab6SPeter MaydellTMPE="${TMPDIR1}/${TMPB}.exe" 8126fffe29SEmilio G. CotaTMPTXT="${TMPDIR1}/${TMPB}.txt" 827d13299dSbellard 83da1d85e3SGerd Hoffmannrm -f config.log 849ac81bbbSmalc 85b48e3611SPeter Maydell# Print a helpful header at the top of config.log 86b48e3611SPeter Maydellecho "# QEMU configure log $(date)" >> config.log 87979ae168SPeter Maydellprintf "# Configured with:" >> config.log 88979ae168SPeter Maydellprintf " '%s'" "$0" "$@" >> config.log 89979ae168SPeter Maydellecho >> config.log 90b48e3611SPeter Maydellecho "#" >> config.log 91b48e3611SPeter Maydell 92835af899SPaolo Bonziniquote_sh() { 93835af899SPaolo Bonzini printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&'," 94835af899SPaolo Bonzini} 95835af899SPaolo Bonzini 96d880a3baSPaolo Bonziniprint_error() { 97d880a3baSPaolo Bonzini (echo 9876ad07a4SPeter Maydell echo "ERROR: $1" 9976ad07a4SPeter Maydell while test -n "$2"; do 10076ad07a4SPeter Maydell echo " $2" 10176ad07a4SPeter Maydell shift 10276ad07a4SPeter Maydell done 103d880a3baSPaolo Bonzini echo) >&2 104d880a3baSPaolo Bonzini} 105d880a3baSPaolo Bonzini 106d880a3baSPaolo Bonzinierror_exit() { 107d880a3baSPaolo Bonzini print_error "$@" 10876ad07a4SPeter Maydell exit 1 10976ad07a4SPeter Maydell} 11076ad07a4SPeter Maydell 1119c83ffd8SPeter Maydelldo_compiler() { 1129c83ffd8SPeter Maydell # Run the compiler, capturing its output to the log. First argument 1139c83ffd8SPeter Maydell # is compiler binary to execute. 114630d86b7SDavid CARLIER compiler="$1" 1159c83ffd8SPeter Maydell shift 1168bbe05d7SIan Jackson if test -n "$BASH_VERSION"; then eval ' 1178bbe05d7SIan Jackson echo >>config.log " 1188bbe05d7SIan Jacksonfuncs: ${FUNCNAME[*]} 1198bbe05d7SIan Jacksonlines: ${BASH_LINENO[*]}" 1208bbe05d7SIan Jackson '; fi 1219c83ffd8SPeter Maydell echo $compiler "$@" >> config.log 1229c83ffd8SPeter Maydell $compiler "$@" >> config.log 2>&1 || return $? 1238dc38a78SPeter Maydell # Test passed. If this is an --enable-werror build, rerun 1248dc38a78SPeter Maydell # the test with -Werror and bail out if it fails. This 1258dc38a78SPeter Maydell # makes warning-generating-errors in configure test code 1268dc38a78SPeter Maydell # obvious to developers. 1278dc38a78SPeter Maydell if test "$werror" != "yes"; then 1288dc38a78SPeter Maydell return 0 1298dc38a78SPeter Maydell fi 1308dc38a78SPeter Maydell # Don't bother rerunning the compile if we were already using -Werror 1318dc38a78SPeter Maydell case "$*" in 1328dc38a78SPeter Maydell *-Werror*) 1338dc38a78SPeter Maydell return 0 1348dc38a78SPeter Maydell ;; 1358dc38a78SPeter Maydell esac 1369c83ffd8SPeter Maydell echo $compiler -Werror "$@" >> config.log 1379c83ffd8SPeter Maydell $compiler -Werror "$@" >> config.log 2>&1 && return $? 13876ad07a4SPeter Maydell error_exit "configure test passed without -Werror but failed with -Werror." \ 13976ad07a4SPeter Maydell "This is probably a bug in the configure script. The failing command" \ 14076ad07a4SPeter Maydell "will be at the bottom of config.log." \ 14176ad07a4SPeter Maydell "You can run configure with --disable-werror to bypass this check." 1428dc38a78SPeter Maydell} 1438dc38a78SPeter Maydell 1449c83ffd8SPeter Maydelldo_cc() { 1454dba2789SPaolo Bonzini do_compiler "$cc" $CPU_CFLAGS "$@" 1469c83ffd8SPeter Maydell} 1479c83ffd8SPeter Maydell 1489c83ffd8SPeter Maydelldo_cxx() { 1494dba2789SPaolo Bonzini do_compiler "$cxx" $CPU_CFLAGS "$@" 1509c83ffd8SPeter Maydell} 1519c83ffd8SPeter Maydell 15200849b92SRichard Henderson# Append $2 to the variable named $1, with space separation 15300849b92SRichard Hendersonadd_to() { 15400849b92SRichard Henderson eval $1=\${$1:+\"\$$1 \"}\$2 15500849b92SRichard Henderson} 15600849b92SRichard Henderson 1579c83ffd8SPeter Maydellupdate_cxxflags() { 1589c83ffd8SPeter Maydell # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those 1599c83ffd8SPeter Maydell # options which some versions of GCC's C++ compiler complain about 1609c83ffd8SPeter Maydell # because they only make sense for C programs. 16153422040SPaolo Bonzini QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" 1628a9d3d56SRichard Henderson CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/) 1639c83ffd8SPeter Maydell for arg in $QEMU_CFLAGS; do 1649c83ffd8SPeter Maydell case $arg in 1659c83ffd8SPeter Maydell -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ 1669c83ffd8SPeter Maydell -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) 1679c83ffd8SPeter Maydell ;; 1689c83ffd8SPeter Maydell *) 1699c83ffd8SPeter Maydell QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg 1709c83ffd8SPeter Maydell ;; 1719c83ffd8SPeter Maydell esac 1729c83ffd8SPeter Maydell done 1739c83ffd8SPeter Maydell} 1749c83ffd8SPeter Maydell 17552166aa0SJuan Quintelacompile_object() { 176fd0e6053SJohn Snow local_cflags="$1" 1775770e8afSPaolo Bonzini do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC 17852166aa0SJuan Quintela} 17952166aa0SJuan Quintela 18052166aa0SJuan Quintelacompile_prog() { 18152166aa0SJuan Quintela local_cflags="$1" 18252166aa0SJuan Quintela local_ldflags="$2" 1835770e8afSPaolo Bonzini do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \ 1845770e8afSPaolo Bonzini $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags 18552166aa0SJuan Quintela} 18652166aa0SJuan Quintela 18711568d6dSPaolo Bonzini# symbolically link $1 to $2. Portable version of "ln -sf". 18811568d6dSPaolo Bonzinisymlink() { 18972b8b5a1SStefan Weil rm -rf "$2" 190ec5b06d7SAnthony Liguori mkdir -p "$(dirname "$2")" 19172b8b5a1SStefan Weil ln -s "$1" "$2" 19211568d6dSPaolo Bonzini} 19311568d6dSPaolo Bonzini 1940dba6195SLoïc Minier# check whether a command is available to this shell (may be either an 1950dba6195SLoïc Minier# executable or a builtin) 1960dba6195SLoïc Minierhas() { 1970dba6195SLoïc Minier type "$1" >/dev/null 2>&1 1980dba6195SLoïc Minier} 1990dba6195SLoïc Minier 2000a01d76fSMarc-André Lureauversion_ge () { 2012df52b9bSAlex Bennée local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ') 2022df52b9bSAlex Bennée local_ver2=$(echo "$2" | tr . ' ') 2030a01d76fSMarc-André Lureau while true; do 2040a01d76fSMarc-André Lureau set x $local_ver1 2050a01d76fSMarc-André Lureau local_first=${2-0} 206c44a33e2SStefano Garzarella # 'shift 2' if $2 is set, or 'shift' if $2 is not set 207c44a33e2SStefano Garzarella shift ${2:+2} 2080a01d76fSMarc-André Lureau local_ver1=$* 2090a01d76fSMarc-André Lureau set x $local_ver2 2100a01d76fSMarc-André Lureau # the second argument finished, the first must be greater or equal 2110a01d76fSMarc-André Lureau test $# = 1 && return 0 2120a01d76fSMarc-André Lureau test $local_first -lt $2 && return 1 2130a01d76fSMarc-André Lureau test $local_first -gt $2 && return 0 214c44a33e2SStefano Garzarella shift ${2:+2} 2150a01d76fSMarc-André Lureau local_ver2=$* 2160a01d76fSMarc-André Lureau done 2170a01d76fSMarc-André Lureau} 2180a01d76fSMarc-André Lureau 2193b6b7550SPaolo Bonziniglob() { 2203b6b7550SPaolo Bonzini eval test -z '"${1#'"$2"'}"' 2213b6b7550SPaolo Bonzini} 2223b6b7550SPaolo Bonzini 223e9a3591fSChristian Borntraegerld_has() { 224e9a3591fSChristian Borntraeger $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 225e9a3591fSChristian Borntraeger} 226e9a3591fSChristian Borntraeger 2274ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]"; 2284ace32e2SAntonio Ospitethen 2294ace32e2SAntonio Ospite error_exit "main directory cannot contain spaces nor colons" 2304ace32e2SAntonio Ospitefi 2314ace32e2SAntonio Ospite 23214211825SAntonio Ospite# default parameters 2332ff6b91eSJuan Quintelacpu="" 234a31a8642SMichael S. Tsirkiniasl="iasl" 2351e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M" 23643ce4dfeSbellardstatic="no" 2373812c0c4SJoelle van Dynecross_compile="no" 2387d13299dSbellardcross_prefix="" 23987430d5bSPaolo Bonziniaudio_drv_list="default" 240b64ec4e4SFam Zhengblock_drv_rw_whitelist="" 241b64ec4e4SFam Zhengblock_drv_ro_whitelist="" 242e5f05f8cSKevin Wolfblock_drv_whitelist_tools="no" 243e49d021eSPeter Maydellhost_cc="cc" 244957f1f99SMichael Rothlibs_qga="" 2455bc62e01SGerd Hoffmanndebug_info="yes" 246cdad781dSDaniele Buonolto="false" 24763678e17SSteven Noonanstack_protector="" 2481e4f6065SDaniele Buonosafe_stack="" 249afc3a8f9SAlex Bennéeuse_containers="yes" 250f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb") 251ac0df51dSaliguori 25292712822SDaniel P. Berrangeif test -e "$source_path/.git" 25392712822SDaniel P. Berrangethen 2547d7dbf9dSDan Streetman git_submodules_action="update" 25592712822SDaniel P. Berrangeelse 2567d7dbf9dSDan Streetman git_submodules_action="ignore" 25792712822SDaniel P. Berrangefi 2582d652f24SPaolo Bonzini 2592d652f24SPaolo Bonzinigit_submodules="ui/keycodemapdb" 260cc84d63aSDaniel P. Berrangegit="git" 261ac0df51dSaliguori 262afb63ebdSStefan Weil# Don't accept a target_list environment variable. 263afb63ebdSStefan Weilunset target_list 264447e133fSAlex Bennéeunset target_list_exclude 265377529c0SPaolo Bonzini 266377529c0SPaolo Bonzini# Default value for a variable defining feature "foo". 267377529c0SPaolo Bonzini# * foo="no" feature will only be used if --enable-foo arg is given 268377529c0SPaolo Bonzini# * foo="" feature will be searched for, and if found, will be used 269377529c0SPaolo Bonzini# unless --disable-foo is given 270377529c0SPaolo Bonzini# * foo="yes" this value will only be set by --enable-foo flag. 271377529c0SPaolo Bonzini# feature will searched for, 272377529c0SPaolo Bonzini# if not found, configure exits with error 273377529c0SPaolo Bonzini# 274377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args. 275377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it 276377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found. 277377529c0SPaolo Bonzini 278c87ea116SAlex Bennéedefault_feature="" 279c87ea116SAlex Bennée# parse CC options second 280c87ea116SAlex Bennéefor opt do 281c87ea116SAlex Bennée optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 282c87ea116SAlex Bennée case "$opt" in 283c87ea116SAlex Bennée --without-default-features) 284c87ea116SAlex Bennée default_feature="no" 285c87ea116SAlex Bennée ;; 286c87ea116SAlex Bennée esac 287c87ea116SAlex Bennéedone 288c87ea116SAlex Bennée 289c87ea116SAlex Bennéexen_ctrl_version="$default_feature" 290c87ea116SAlex Bennéexfs="$default_feature" 291c87ea116SAlex Bennéemembarrier="$default_feature" 2920848f8acSThomas Huthvhost_kernel="$default_feature" 293c87ea116SAlex Bennéevhost_net="$default_feature" 294c87ea116SAlex Bennéevhost_crypto="$default_feature" 295c87ea116SAlex Bennéevhost_scsi="$default_feature" 296c87ea116SAlex Bennéevhost_vsock="$default_feature" 297d88618f7SStefan Hajnoczivhost_user="no" 298c87ea116SAlex Bennéevhost_user_fs="$default_feature" 2990848f8acSThomas Huthvhost_vdpa="$default_feature" 300c87ea116SAlex Bennéerdma="$default_feature" 301c87ea116SAlex Bennéepvrdma="$default_feature" 302377529c0SPaolo Bonzinigprof="no" 303377529c0SPaolo Bonzinidebug_tcg="no" 304377529c0SPaolo Bonzinidebug="no" 305247724cbSMarc-André Lureausanitizers="no" 3060aebab04SLingfeng Yangtsan="no" 307c87ea116SAlex Bennéefortify_source="$default_feature" 308377529c0SPaolo Bonzinistrip_opt="yes" 309377529c0SPaolo Bonzinimingw32="no" 3101d728c39SBlue Swirlgcov="no" 311c7328271SMiroslav RezaninaEXESUF="" 31217969268SFam Zhengmodules="no" 313bd83c861SChristian Ehrhardtmodule_upgrades="no" 314377529c0SPaolo Bonziniprefix="/usr/local" 31510ff82d1SMarc-André Lureauqemu_suffix="qemu" 316377529c0SPaolo Bonzinibsd="no" 317377529c0SPaolo Bonzinilinux="no" 318377529c0SPaolo Bonzinisolaris="no" 319377529c0SPaolo Bonziniprofiler="no" 320377529c0SPaolo Bonzinisoftmmu="yes" 321377529c0SPaolo Bonzinilinux_user="no" 322377529c0SPaolo Bonzinibsd_user="no" 323377529c0SPaolo Bonzinipkgversion="" 32440d6444eSAvi Kivitypie="" 3253556c233SPaolo Bonziniqom_cast_debug="yes" 326baf86d6bSPaolo Bonzinitrace_backends="log" 327377529c0SPaolo Bonzinitrace_file="trace" 328c87ea116SAlex Bennéeopengl="$default_feature" 3295dd89908SRichard Hendersoncpuid_h="no" 330c87ea116SAlex Bennéeavx2_opt="$default_feature" 331c87ea116SAlex Bennéeguest_agent="$default_feature" 332d9840e25STomoki Sekiyamaguest_agent_with_vss="no" 33350cbebb9SMichael Rothguest_agent_ntddscsi="no" 334c87ea116SAlex Bennéevss_win32_sdk="$default_feature" 335d9840e25STomoki Sekiyamawin_sdk="no" 336c87ea116SAlex Bennéewant_tools="$default_feature" 337519175a2SAlex Barcelocoroutine="" 338c87ea116SAlex Bennéecoroutine_pool="$default_feature" 3397d992e4dSPeter Lievendebug_stack_usage="no" 340f0d92b56SLongpeng(Mike)crypto_afalg="no" 341a1c5e949SDaniel P. Berrangetls_priority="NORMAL" 342c87ea116SAlex Bennéetpm="$default_feature" 343c87ea116SAlex Bennéelibssh="$default_feature" 344c87ea116SAlex Bennéelive_block_migration=${default_feature:-yes} 345c87ea116SAlex Bennéenuma="$default_feature" 346c87ea116SAlex Bennéereplication=${default_feature:-yes} 347c87ea116SAlex Bennéebochs=${default_feature:-yes} 348c87ea116SAlex Bennéecloop=${default_feature:-yes} 349c87ea116SAlex Bennéedmg=${default_feature:-yes} 350c87ea116SAlex Bennéeqcow1=${default_feature:-yes} 351c87ea116SAlex Bennéevdi=${default_feature:-yes} 352c87ea116SAlex Bennéevvfat=${default_feature:-yes} 353c87ea116SAlex Bennéeqed=${default_feature:-yes} 354c87ea116SAlex Bennéeparallels=${default_feature:-yes} 355ba59fb77SPaolo Bonzinidebug_mutex="no" 356ba4dd2aaSAlex Bennéeplugins="$default_feature" 357b767d257SMarek Marczykowski-Góreckirng_none="no" 358c87ea116SAlex Bennéesecret_keyring="$default_feature" 359a5665051SPaolo Bonzinimeson="" 3603b4da132SPaolo Bonzinimeson_args="" 36148328880SPaolo Bonzinininja="" 3623b4da132SPaolo Bonzinigio="$default_feature" 363a5665051SPaolo Bonziniskip_meson=no 364b8e0c493SJoelle van Dyneslirp_smbd="$default_feature" 365377529c0SPaolo Bonzini 3663b4da132SPaolo Bonzini# The following Meson options are handled manually (still they 3673b4da132SPaolo Bonzini# are included in the automatically generated help message) 3683b4da132SPaolo Bonzini 3693b4da132SPaolo Bonzini# 1. Track which submodules are needed 3703b4da132SPaolo Bonzinicapstone="auto" 3713b4da132SPaolo Bonzinifdt="auto" 3723b4da132SPaolo Bonzinislirp="auto" 3733b4da132SPaolo Bonzini 3743b4da132SPaolo Bonzini# 2. Support --with/--without option 3753b4da132SPaolo Bonzinidefault_devices="true" 3763b4da132SPaolo Bonzini 3773b4da132SPaolo Bonzini# 3. Automatically enable/disable other options 3783b4da132SPaolo Bonzinitcg="enabled" 3793b4da132SPaolo Bonzinicfi="false" 3803b4da132SPaolo Bonzini 3813b4da132SPaolo Bonzini# 4. Detection partly done in configure 3823b4da132SPaolo Bonzinixen=${default_feature:+disabled} 383898be3e0SPeter Maydell 384c87ea116SAlex Bennée# parse CC options second 385ac0df51dSaliguorifor opt do 38689138857SStefan Weil optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 387ac0df51dSaliguori case "$opt" in 388ac0df51dSaliguori --cross-prefix=*) cross_prefix="$optarg" 3893812c0c4SJoelle van Dyne cross_compile="yes" 390ac0df51dSaliguori ;; 3913d8df640SPaolo Bonzini --cc=*) CC="$optarg" 392ac0df51dSaliguori ;; 39383f73fceSTomoki Sekiyama --cxx=*) CXX="$optarg" 39483f73fceSTomoki Sekiyama ;; 3952ff6b91eSJuan Quintela --cpu=*) cpu="$optarg" 3962ff6b91eSJuan Quintela ;; 397de385287SAlex Bennée --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" 398db5adeaaSPaolo Bonzini QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 399e2a2ed06SJuan Quintela ;; 40011cde1c8SBruno Dominguez --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" 40111cde1c8SBruno Dominguez ;; 402db5adeaaSPaolo Bonzini --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 403f9943cd5SGerd Hoffmann EXTRA_LDFLAGS="$optarg" 404e2a2ed06SJuan Quintela ;; 4055bc62e01SGerd Hoffmann --enable-debug-info) debug_info="yes" 4065bc62e01SGerd Hoffmann ;; 4075bc62e01SGerd Hoffmann --disable-debug-info) debug_info="no" 4085bc62e01SGerd Hoffmann ;; 409d75402b5SAlex Bennée --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" 410d75402b5SAlex Bennée ;; 411d422b2bcSAlex Bennée --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} 412d422b2bcSAlex Bennée eval "cross_cc_cflags_${cc_arch}=\$optarg" 4132038f8c8SPaolo Bonzini cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" 414d422b2bcSAlex Bennée ;; 415d75402b5SAlex Bennée --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} 4162038f8c8SPaolo Bonzini cc_archs="$cc_archs $cc_arch" 417d75402b5SAlex Bennée eval "cross_cc_${cc_arch}=\$optarg" 4182038f8c8SPaolo Bonzini cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" 419d75402b5SAlex Bennée ;; 420ac0df51dSaliguori esac 421ac0df51dSaliguoridone 422ac0df51dSaliguori# OS specific 423ac0df51dSaliguori# Using uname is really, really broken. Once we have the right set of checks 42493148aa5SStefan Weil# we can eliminate its usage altogether. 425ac0df51dSaliguori 426e49d021eSPeter Maydell# Preferred compiler: 427e49d021eSPeter Maydell# ${CC} (if set) 428e49d021eSPeter Maydell# ${cross_prefix}gcc (if cross-prefix specified) 429e49d021eSPeter Maydell# system compiler 430e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then 431e49d021eSPeter Maydell cc="$host_cc" 432e49d021eSPeter Maydellelse 433b3198cc2SStuart Yoder cc="${CC-${cross_prefix}gcc}" 434e49d021eSPeter Maydellfi 435e49d021eSPeter Maydell 43683f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then 43783f73fceSTomoki Sekiyama cxx="c++" 43883f73fceSTomoki Sekiyamaelse 43983f73fceSTomoki Sekiyama cxx="${CXX-${cross_prefix}g++}" 44083f73fceSTomoki Sekiyamafi 44183f73fceSTomoki Sekiyama 442b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}" 443cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}" 4445f6f0e27SRichard Hendersonccas="${CCAS-$cc}" 4453dd46c78SBlue Swirlcpp="${CPP-$cc -E}" 446b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}" 447b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}" 4489f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}" 4494852ee95SStefan Weilnm="${NM-${cross_prefix}nm}" 450b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}" 451b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}" 45217884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 45317884d7bSSergei Trofimovichquery_pkg_config() { 45417884d7bSSergei Trofimovich "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 45517884d7bSSergei Trofimovich} 45617884d7bSSergei Trofimovichpkg_config=query_pkg_config 45747c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 458ac0df51dSaliguori 459be17dc90SMichael S. Tsirkin# default flags for all hosts 4602d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where 4612d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected 4622d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it 4632d31515bSPeter Maydell# provides these semantics.) 464086d5f75SPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" 465086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" 466c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" 467be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" 4685770e8afSPaolo Bonzini 4695770e8afSPaolo Bonzini# Flags that are needed during configure but later taken care of by Meson 4708a9d3d56SRichard HendersonCONFIGURE_CFLAGS="-std=gnu11 -Wall" 4715770e8afSPaolo BonziniCONFIGURE_LDFLAGS= 472086d5f75SPaolo Bonzini 473be17dc90SMichael S. Tsirkin 474ac0df51dSaliguoricheck_define() { 475ac0df51dSaliguoricat > $TMPC <<EOF 476ac0df51dSaliguori#if !defined($1) 477fd786e1aSPeter Maydell#error $1 not defined 478ac0df51dSaliguori#endif 479ac0df51dSaliguoriint main(void) { return 0; } 480ac0df51dSaliguoriEOF 48152166aa0SJuan Quintela compile_object 482ac0df51dSaliguori} 483ac0df51dSaliguori 484307119e7SGerd Hoffmanncheck_include() { 485307119e7SGerd Hoffmanncat > $TMPC <<EOF 486307119e7SGerd Hoffmann#include <$1> 487307119e7SGerd Hoffmannint main(void) { return 0; } 488307119e7SGerd HoffmannEOF 489307119e7SGerd Hoffmann compile_object 490307119e7SGerd Hoffmann} 491307119e7SGerd Hoffmann 49293b25869SJohn Snowwrite_c_skeleton() { 49393b25869SJohn Snow cat > $TMPC <<EOF 49493b25869SJohn Snowint main(void) { return 0; } 49593b25869SJohn SnowEOF 49693b25869SJohn Snow} 49793b25869SJohn Snow 498bbea4050SPeter Maydellif check_define __linux__ ; then 499bbea4050SPeter Maydell targetos="Linux" 500bbea4050SPeter Maydellelif check_define _WIN32 ; then 501bbea4050SPeter Maydell targetos='MINGW32' 502bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then 503bbea4050SPeter Maydell targetos='OpenBSD' 504bbea4050SPeter Maydellelif check_define __sun__ ; then 505bbea4050SPeter Maydell targetos='SunOS' 506bbea4050SPeter Maydellelif check_define __HAIKU__ ; then 507bbea4050SPeter Maydell targetos='Haiku' 508951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then 509951fedfcSPeter Maydell targetos='FreeBSD' 510951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then 511951fedfcSPeter Maydell targetos='GNU/kFreeBSD' 512951fedfcSPeter Maydellelif check_define __DragonFly__ ; then 513951fedfcSPeter Maydell targetos='DragonFly' 514951fedfcSPeter Maydellelif check_define __NetBSD__; then 515951fedfcSPeter Maydell targetos='NetBSD' 516951fedfcSPeter Maydellelif check_define __APPLE__; then 517951fedfcSPeter Maydell targetos='Darwin' 518bbea4050SPeter Maydellelse 519951fedfcSPeter Maydell # This is a fatal error, but don't report it yet, because we 520951fedfcSPeter Maydell # might be going to just print the --help text, or it might 521951fedfcSPeter Maydell # be the result of a missing compiler. 522951fedfcSPeter Maydell targetos='bogus' 523bbea4050SPeter Maydellfi 524bbea4050SPeter Maydell 525bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use. 526bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're 527bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify 528bbea4050SPeter Maydell# the correct CPU with the --cpu option. 529bbea4050SPeter Maydellcase $targetos in 530bbea4050SPeter MaydellSunOS) 53189138857SStefan Weil # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo 532bbea4050SPeter Maydell if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 533bbea4050SPeter Maydell cpu="x86_64" 534bbea4050SPeter Maydell fi 535bbea4050SPeter Maydellesac 536bbea4050SPeter Maydell 5372ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then 5382ff6b91eSJuan Quintela # command line argument 5392ff6b91eSJuan Quintela : 5402ff6b91eSJuan Quintelaelif check_define __i386__ ; then 541ac0df51dSaliguori cpu="i386" 542ac0df51dSaliguorielif check_define __x86_64__ ; then 543c72b26ecSRichard Henderson if check_define __ILP32__ ; then 544c72b26ecSRichard Henderson cpu="x32" 545c72b26ecSRichard Henderson else 546ac0df51dSaliguori cpu="x86_64" 547c72b26ecSRichard Henderson fi 5483aa9bd6cSblueswir1elif check_define __sparc__ ; then 5493aa9bd6cSblueswir1 if check_define __arch64__ ; then 5503aa9bd6cSblueswir1 cpu="sparc64" 5513aa9bd6cSblueswir1 else 5523aa9bd6cSblueswir1 cpu="sparc" 5533aa9bd6cSblueswir1 fi 554fdf7ed96Smalcelif check_define _ARCH_PPC ; then 555fdf7ed96Smalc if check_define _ARCH_PPC64 ; then 556f8378accSRichard Henderson if check_define _LITTLE_ENDIAN ; then 557f8378accSRichard Henderson cpu="ppc64le" 558f8378accSRichard Henderson else 559fdf7ed96Smalc cpu="ppc64" 560f8378accSRichard Henderson fi 561ac0df51dSaliguori else 562fdf7ed96Smalc cpu="ppc" 563fdf7ed96Smalc fi 564afa05235SAurelien Jarnoelif check_define __mips__ ; then 565afa05235SAurelien Jarno cpu="mips" 566d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then 567d66ed0eaSAurelien Jarno if check_define __s390x__ ; then 568d66ed0eaSAurelien Jarno cpu="s390x" 569d66ed0eaSAurelien Jarno else 570d66ed0eaSAurelien Jarno cpu="s390" 571d66ed0eaSAurelien Jarno fi 572c4f80543SAlistair Franciselif check_define __riscv ; then 573c4f80543SAlistair Francis if check_define _LP64 ; then 574c4f80543SAlistair Francis cpu="riscv64" 575c4f80543SAlistair Francis else 576c4f80543SAlistair Francis cpu="riscv32" 577c4f80543SAlistair Francis fi 57821d89f84SPeter Maydellelif check_define __arm__ ; then 57921d89f84SPeter Maydell cpu="arm" 5801f080313SClaudio Fontanaelif check_define __aarch64__ ; then 5811f080313SClaudio Fontana cpu="aarch64" 582fdf7ed96Smalcelse 58389138857SStefan Weil cpu=$(uname -m) 584ac0df51dSaliguorifi 585ac0df51dSaliguori 586359bc95dSPeter MaydellARCH= 587359bc95dSPeter Maydell# Normalise host CPU name and set ARCH. 588359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests. 5897d13299dSbellardcase "$cpu" in 590ee35e968SThomas Huth ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64) 591898be3e0SPeter Maydell ;; 592f8378accSRichard Henderson ppc64le) 593f8378accSRichard Henderson ARCH="ppc64" 594f8378accSRichard Henderson ;; 5957d13299dSbellard i386|i486|i586|i686|i86pc|BePC) 59697a847bcSbellard cpu="i386" 5977d13299dSbellard ;; 598aaa5fa14Saurel32 x86_64|amd64) 599aaa5fa14Saurel32 cpu="x86_64" 600aaa5fa14Saurel32 ;; 60121d89f84SPeter Maydell armv*b|armv*l|arm) 60221d89f84SPeter Maydell cpu="arm" 6037d13299dSbellard ;; 6041f080313SClaudio Fontana aarch64) 6051f080313SClaudio Fontana cpu="aarch64" 6061f080313SClaudio Fontana ;; 607afa05235SAurelien Jarno mips*) 608afa05235SAurelien Jarno cpu="mips" 609afa05235SAurelien Jarno ;; 6103142255cSblueswir1 sparc|sun4[cdmuv]) 611ae228531Sbellard cpu="sparc" 612ae228531Sbellard ;; 6137d13299dSbellard *) 614359bc95dSPeter Maydell # This will result in either an error or falling back to TCI later 615359bc95dSPeter Maydell ARCH=unknown 6167d13299dSbellard ;; 6177d13299dSbellardesac 618359bc95dSPeter Maydellif test -z "$ARCH"; then 619359bc95dSPeter Maydell ARCH="$cpu" 620359bc95dSPeter Maydellfi 621e2d52ad3SJuan Quintela 6227d13299dSbellard# OS specific 6230dbfc675SJuan Quintela 6247d13299dSbellardcase $targetos in 62567b915a5SbellardMINGW32*) 62667b915a5Sbellard mingw32="yes" 627898be3e0SPeter Maydell supported_os="yes" 6289b8e4298SAlex Bennée plugins="no" 629fb648e9cSDaniel P. Berrangé pie="no" 63067b915a5Sbellard;; 6315c40d2bdSthsGNU/kFreeBSD) 632a167ba50SAurelien Jarno bsd="yes" 6335c40d2bdSths;; 6347d3505c5SbellardFreeBSD) 6357d3505c5Sbellard bsd="yes" 636e2a74729SWarner Losh bsd_user="yes" 6370db4a067SPaolo Bonzini make="${MAKE-gmake}" 638f01576f1SJuergen Lock # needed for kinfo_getvmmap(3) in libutil.h 6397d3505c5Sbellard;; 640c5e97233Sblueswir1DragonFly) 641c5e97233Sblueswir1 bsd="yes" 6420db4a067SPaolo Bonzini make="${MAKE-gmake}" 643c5e97233Sblueswir1;; 6447d3505c5SbellardNetBSD) 6457d3505c5Sbellard bsd="yes" 6460db4a067SPaolo Bonzini make="${MAKE-gmake}" 6477d3505c5Sbellard;; 6487d3505c5SbellardOpenBSD) 6497d3505c5Sbellard bsd="yes" 6500db4a067SPaolo Bonzini make="${MAKE-gmake}" 6517d3505c5Sbellard;; 65283fb7adfSbellardDarwin) 65383fb7adfSbellard bsd="yes" 65483fb7adfSbellard darwin="yes" 655a0b7cf6bSPeter Maydell # Disable attempts to use ObjectiveC features in os/object.h since they 656a0b7cf6bSPeter Maydell # won't work when we're compiling with gcc as a C compiler. 657a0b7cf6bSPeter Maydell QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" 65883fb7adfSbellard;; 659ec530c81SbellardSunOS) 660ec530c81Sbellard solaris="yes" 6610db4a067SPaolo Bonzini make="${MAKE-gmake}" 662e2d8830eSBrad smbd="${SMBD-/usr/sfw/sbin/smbd}" 663d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h 664d741429aSBlue Swirl QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" 665d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h 666d741429aSBlue Swirl QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" 667ec530c81Sbellard;; 668179cf400SAndreas FärberHaiku) 669179cf400SAndreas Färber haiku="yes" 670b8ee198dSRichard Zak pie="no" 671b8ee198dSRichard Zak QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS" 672179cf400SAndreas Färber;; 673898be3e0SPeter MaydellLinux) 6745327cf48Sbellard linux="yes" 675831b7825Sths linux_user="yes" 676c87ea116SAlex Bennée vhost_user=${default_feature:-yes} 677898be3e0SPeter Maydell;; 6787d13299dSbellardesac 6797d13299dSbellard 6800db4a067SPaolo Bonzini: ${make=${MAKE-make}} 681b6daf4d3SPaolo Bonzini 682faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally 683faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so 684ddf90699SEduardo Habkost# we check that too 685faf44142SDaniel P. Berrangépython= 6860a01d76fSMarc-André Lureauexplicit_python=no 687ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python 688faf44142SDaniel P. Berrangédo 689faf44142SDaniel P. Berrangé if has "$binary" 690faf44142SDaniel P. Berrangé then 69195c5f2deSPaolo Bonzini python=$(command -v "$binary") 692faf44142SDaniel P. Berrangé break 693faf44142SDaniel P. Berrangé fi 694faf44142SDaniel P. Berrangédone 695903458c8SMarkus Armbruster 696903458c8SMarkus Armbruster 69739d87c8cSAlex Bennée# Check for ancillary tools used in testing 69839d87c8cSAlex Bennéegenisoimage= 6993df437c7SAlex Bennéefor binary in genisoimage mkisofs 70039d87c8cSAlex Bennéedo 70139d87c8cSAlex Bennée if has $binary 70239d87c8cSAlex Bennée then 70339d87c8cSAlex Bennée genisoimage=$(command -v "$binary") 70439d87c8cSAlex Bennée break 70539d87c8cSAlex Bennée fi 70639d87c8cSAlex Bennéedone 70739d87c8cSAlex Bennée 7083c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC 7093c4a4d0dSPeter Maydellif has clang; then 7103c4a4d0dSPeter Maydell objcc=clang 7113c4a4d0dSPeter Maydellelse 7123c4a4d0dSPeter Maydell objcc="$cc" 7133c4a4d0dSPeter Maydellfi 7143c4a4d0dSPeter Maydell 7153457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then 7163457a3f8SJuan Quintela EXESUF=".exe" 71778e9d4adSStefan Weil # MinGW needs -mthreads for TLS and macro _MT. 7185770e8afSPaolo Bonzini CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS" 71993b25869SJohn Snow write_c_skeleton; 720d17f305aSPaolo Bonzini prefix="/qemu" 72177433a5fSMarc-André Lureau qemu_suffix="" 722105fad6bSBishara AbuHattoum libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga" 7233457a3f8SJuan Quintelafi 7243457a3f8SJuan Quintela 725487fefdbSAnthony Liguoriwerror="" 72685aa5189Sbellard 72761d63097SPaolo Bonzini. $source_path/scripts/meson-buildoptions.sh 72861d63097SPaolo Bonzini 72961d63097SPaolo Bonzinimeson_options= 73061d63097SPaolo Bonzinimeson_option_parse() { 73161d63097SPaolo Bonzini meson_options="$meson_options $(_meson_option_parse "$@")" 73261d63097SPaolo Bonzini if test $? -eq 1; then 73361d63097SPaolo Bonzini echo "ERROR: unknown option $1" 73461d63097SPaolo Bonzini echo "Try '$0 --help' for more information" 73561d63097SPaolo Bonzini exit 1 73661d63097SPaolo Bonzini fi 73761d63097SPaolo Bonzini} 73861d63097SPaolo Bonzini 7397d13299dSbellardfor opt do 74089138857SStefan Weil optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 7417d13299dSbellard case "$opt" in 7422efc3265Sbellard --help|-h) show_help=yes 7432efc3265Sbellard ;; 74499123e13SMike Frysinger --version|-V) exec cat $source_path/VERSION 74599123e13SMike Frysinger ;; 746b1a550a0Spbrook --prefix=*) prefix="$optarg" 7477d13299dSbellard ;; 748b1a550a0Spbrook --interp-prefix=*) interp_prefix="$optarg" 74932ce6337Sbellard ;; 750ac0df51dSaliguori --cross-prefix=*) 7517d13299dSbellard ;; 752ac0df51dSaliguori --cc=*) 7537d13299dSbellard ;; 754b1a550a0Spbrook --host-cc=*) host_cc="$optarg" 75583469015Sbellard ;; 75683f73fceSTomoki Sekiyama --cxx=*) 75783f73fceSTomoki Sekiyama ;; 758e007dbecSMichael S. Tsirkin --iasl=*) iasl="$optarg" 759e007dbecSMichael S. Tsirkin ;; 7603c4a4d0dSPeter Maydell --objcc=*) objcc="$optarg" 7613c4a4d0dSPeter Maydell ;; 762b1a550a0Spbrook --make=*) make="$optarg" 7637d13299dSbellard ;; 764b6daf4d3SPaolo Bonzini --install=*) 7656a882643Spbrook ;; 7660a01d76fSMarc-André Lureau --python=*) python="$optarg" ; explicit_python=yes 767c886edfbSBlue Swirl ;; 7682eb054c2SPeter Maydell --sphinx-build=*) sphinx_build="$optarg" 7692eb054c2SPeter Maydell ;; 770a5665051SPaolo Bonzini --skip-meson) skip_meson=yes 771a5665051SPaolo Bonzini ;; 772a5665051SPaolo Bonzini --meson=*) meson="$optarg" 773a5665051SPaolo Bonzini ;; 77448328880SPaolo Bonzini --ninja=*) ninja="$optarg" 77548328880SPaolo Bonzini ;; 776e2d8830eSBrad --smbd=*) smbd="$optarg" 777e2d8830eSBrad ;; 778e2a2ed06SJuan Quintela --extra-cflags=*) 7797d13299dSbellard ;; 78011cde1c8SBruno Dominguez --extra-cxxflags=*) 78111cde1c8SBruno Dominguez ;; 782e2a2ed06SJuan Quintela --extra-ldflags=*) 7837d13299dSbellard ;; 7845bc62e01SGerd Hoffmann --enable-debug-info) 7855bc62e01SGerd Hoffmann ;; 7865bc62e01SGerd Hoffmann --disable-debug-info) 7875bc62e01SGerd Hoffmann ;; 788d75402b5SAlex Bennée --cross-cc-*) 789d75402b5SAlex Bennée ;; 79017969268SFam Zheng --enable-modules) 79117969268SFam Zheng modules="yes" 79217969268SFam Zheng ;; 7933aa88b31SStefan Hajnoczi --disable-modules) 7943aa88b31SStefan Hajnoczi modules="no" 7953aa88b31SStefan Hajnoczi ;; 796bd83c861SChristian Ehrhardt --disable-module-upgrades) module_upgrades="no" 797bd83c861SChristian Ehrhardt ;; 798bd83c861SChristian Ehrhardt --enable-module-upgrades) module_upgrades="yes" 799bd83c861SChristian Ehrhardt ;; 8002ff6b91eSJuan Quintela --cpu=*) 8017d13299dSbellard ;; 802b1a550a0Spbrook --target-list=*) target_list="$optarg" 803447e133fSAlex Bennée if test "$target_list_exclude"; then 804447e133fSAlex Bennée error_exit "Can't mix --target-list with --target-list-exclude" 805447e133fSAlex Bennée fi 806447e133fSAlex Bennée ;; 807447e133fSAlex Bennée --target-list-exclude=*) target_list_exclude="$optarg" 808447e133fSAlex Bennée if test "$target_list"; then 809447e133fSAlex Bennée error_exit "Can't mix --target-list-exclude with --target-list" 810447e133fSAlex Bennée fi 811de83cd02Sbellard ;; 81274242e0fSPaolo Bonzini --with-trace-file=*) trace_file="$optarg" 8139410b56cSPrerna Saxena ;; 8147bc3ca7fSPaolo Bonzini --with-default-devices) default_devices="true" 815f3494749SPaolo Bonzini ;; 8167bc3ca7fSPaolo Bonzini --without-default-devices) default_devices="false" 817f3494749SPaolo Bonzini ;; 818d1d5e9eeSAlex Bennée --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option" 819d1d5e9eeSAlex Bennée ;; 820d1d5e9eeSAlex Bennée --with-devices-*) device_arch=${opt#--with-devices-}; 821d1d5e9eeSAlex Bennée device_arch=${device_arch%%=*} 822d1d5e9eeSAlex Bennée cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak 823d1d5e9eeSAlex Bennée if test -f "$cf"; then 824d1d5e9eeSAlex Bennée device_archs="$device_archs $device_arch" 825d1d5e9eeSAlex Bennée eval "devices_${device_arch}=\$optarg" 826d1d5e9eeSAlex Bennée else 827d1d5e9eeSAlex Bennée error_exit "File $cf does not exist" 828d1d5e9eeSAlex Bennée fi 829d1d5e9eeSAlex Bennée ;; 830c87ea116SAlex Bennée --without-default-features) # processed above 831c87ea116SAlex Bennée ;; 8327d13299dSbellard --enable-gprof) gprof="yes" 8337d13299dSbellard ;; 8341d728c39SBlue Swirl --enable-gcov) gcov="yes" 8351d728c39SBlue Swirl ;; 83679427693SLoïc Minier --static) 83779427693SLoïc Minier static="yes" 83817884d7bSSergei Trofimovich QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" 83943ce4dfeSbellard ;; 8400b24e75fSPaolo Bonzini --mandir=*) mandir="$optarg" 8410b24e75fSPaolo Bonzini ;; 8420b24e75fSPaolo Bonzini --bindir=*) bindir="$optarg" 8430b24e75fSPaolo Bonzini ;; 8443aa5d2beSAlon Levy --libdir=*) libdir="$optarg" 8453aa5d2beSAlon Levy ;; 8468bf188aaSMichael Tokarev --libexecdir=*) libexecdir="$optarg" 8478bf188aaSMichael Tokarev ;; 8480f94d6daSAlon Levy --includedir=*) includedir="$optarg" 8490f94d6daSAlon Levy ;; 850528ae5b8SEduardo Habkost --datadir=*) datadir="$optarg" 8510b24e75fSPaolo Bonzini ;; 85277433a5fSMarc-André Lureau --with-suffix=*) qemu_suffix="$optarg" 853023d3d67SEduardo Habkost ;; 854c6502638SBruce Rogers --docdir=*) docdir="$optarg" 8550b24e75fSPaolo Bonzini ;; 856fe0038beSPaolo Bonzini --localedir=*) localedir="$optarg" 857fe0038beSPaolo Bonzini ;; 858ca2fb938SAndre Przywara --sysconfdir=*) sysconfdir="$optarg" 85907381cc1SAnthony Liguori ;; 860785c23aeSLuiz Capitulino --localstatedir=*) local_statedir="$optarg" 861785c23aeSLuiz Capitulino ;; 8623d5eecabSGerd Hoffmann --firmwarepath=*) firmwarepath="$optarg" 8633d5eecabSGerd Hoffmann ;; 864181ce1d0SOlaf Hering --host=*|--build=*|\ 865181ce1d0SOlaf Hering --disable-dependency-tracking|\ 866785c23aeSLuiz Capitulino --sbindir=*|--sharedstatedir=*|\ 867fe0038beSPaolo Bonzini --oldincludedir=*|--datarootdir=*|--infodir=*|\ 868023ddd74SMax Filippov --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) 869023ddd74SMax Filippov # These switches are silently ignored, for compatibility with 870023ddd74SMax Filippov # autoconf-generated configure scripts. This allows QEMU's 871023ddd74SMax Filippov # configure to be used by RPM and similar macros that set 872023ddd74SMax Filippov # lots of directory switches by default. 873023ddd74SMax Filippov ;; 8743556c233SPaolo Bonzini --disable-qom-cast-debug) qom_cast_debug="no" 8753556c233SPaolo Bonzini ;; 8763556c233SPaolo Bonzini --enable-qom-cast-debug) qom_cast_debug="yes" 8773556c233SPaolo Bonzini ;; 8780c58ac1cSmalc --audio-drv-list=*) audio_drv_list="$optarg" 8790c58ac1cSmalc ;; 88089138857SStefan Weil --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 881b64ec4e4SFam Zheng ;; 88289138857SStefan Weil --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 883eb852011SMarkus Armbruster ;; 884e5f05f8cSKevin Wolf --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes" 885e5f05f8cSKevin Wolf ;; 886e5f05f8cSKevin Wolf --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no" 887e5f05f8cSKevin Wolf ;; 888f8393946Saurel32 --enable-debug-tcg) debug_tcg="yes" 889f8393946Saurel32 ;; 890f8393946Saurel32 --disable-debug-tcg) debug_tcg="no" 891f8393946Saurel32 ;; 892f3d08ee6SPaul Brook --enable-debug) 893f3d08ee6SPaul Brook # Enable debugging options that aren't excessively noisy 894f3d08ee6SPaul Brook debug_tcg="yes" 8951fcc6d42SPeter Xu debug_mutex="yes" 896f3d08ee6SPaul Brook debug="yes" 897f3d08ee6SPaul Brook strip_opt="no" 898b553a042SJohn Snow fortify_source="no" 899f3d08ee6SPaul Brook ;; 900247724cbSMarc-André Lureau --enable-sanitizers) sanitizers="yes" 901247724cbSMarc-André Lureau ;; 902247724cbSMarc-André Lureau --disable-sanitizers) sanitizers="no" 903247724cbSMarc-André Lureau ;; 9040aebab04SLingfeng Yang --enable-tsan) tsan="yes" 9050aebab04SLingfeng Yang ;; 9060aebab04SLingfeng Yang --disable-tsan) tsan="no" 9070aebab04SLingfeng Yang ;; 9081625af87Saliguori --disable-strip) strip_opt="no" 9091625af87Saliguori ;; 9104d34a86bSPaolo Bonzini --disable-slirp) slirp="disabled" 911c20709aaSbellard ;; 912fd6fc214SPaolo Bonzini --enable-slirp) slirp="enabled" 913fd6fc214SPaolo Bonzini ;; 9144d34a86bSPaolo Bonzini --enable-slirp=git) slirp="internal" 9157c57bdd8SMarc-André Lureau ;; 91603a3c0b3SPaolo Bonzini --enable-slirp=*) slirp="$optarg" 917675b9b53SMarc-André Lureau ;; 9181badb709SPaolo Bonzini --disable-xen) xen="disabled" 919e37630caSaliguori ;; 9201badb709SPaolo Bonzini --enable-xen) xen="enabled" 921fc321b4bSJuan Quintela ;; 9221badb709SPaolo Bonzini --disable-tcg) tcg="disabled" 923d1a14257SAlex Bennée plugins="no" 924b3f6ea7eSPaolo Bonzini ;; 9251badb709SPaolo Bonzini --enable-tcg) tcg="enabled" 926b3f6ea7eSPaolo Bonzini ;; 92705c2a3e7Sbellard --enable-profiler) profiler="yes" 92805c2a3e7Sbellard ;; 929cad25d69Spbrook --disable-system) softmmu="no" 9300a8e90f4Spbrook ;; 931cad25d69Spbrook --enable-system) softmmu="yes" 9320a8e90f4Spbrook ;; 9330953a80fSZachary Amsden --disable-user) 9340953a80fSZachary Amsden linux_user="no" ; 9350953a80fSZachary Amsden bsd_user="no" ; 9360953a80fSZachary Amsden ;; 9370953a80fSZachary Amsden --enable-user) ;; 938831b7825Sths --disable-linux-user) linux_user="no" 9390a8e90f4Spbrook ;; 940831b7825Sths --enable-linux-user) linux_user="yes" 941831b7825Sths ;; 94284778508Sblueswir1 --disable-bsd-user) bsd_user="no" 94384778508Sblueswir1 ;; 94484778508Sblueswir1 --enable-bsd-user) bsd_user="yes" 94584778508Sblueswir1 ;; 94640d6444eSAvi Kivity --enable-pie) pie="yes" 94734005a00SKirill A. Shutemov ;; 94840d6444eSAvi Kivity --disable-pie) pie="no" 94934005a00SKirill A. Shutemov ;; 95085aa5189Sbellard --enable-werror) werror="yes" 95185aa5189Sbellard ;; 95285aa5189Sbellard --disable-werror) werror="no" 95385aa5189Sbellard ;; 954cdad781dSDaniele Buono --enable-lto) lto="true" 955cdad781dSDaniele Buono ;; 956cdad781dSDaniele Buono --disable-lto) lto="false" 957cdad781dSDaniele Buono ;; 95863678e17SSteven Noonan --enable-stack-protector) stack_protector="yes" 95963678e17SSteven Noonan ;; 96063678e17SSteven Noonan --disable-stack-protector) stack_protector="no" 96163678e17SSteven Noonan ;; 9621e4f6065SDaniele Buono --enable-safe-stack) safe_stack="yes" 9631e4f6065SDaniele Buono ;; 9641e4f6065SDaniele Buono --disable-safe-stack) safe_stack="no" 9651e4f6065SDaniele Buono ;; 9669e62ba48SDaniele Buono --enable-cfi) 9679e62ba48SDaniele Buono cfi="true"; 9689e62ba48SDaniele Buono lto="true"; 9699e62ba48SDaniele Buono ;; 9709e62ba48SDaniele Buono --disable-cfi) cfi="false" 9719e62ba48SDaniele Buono ;; 972fbb4121dSPaolo Bonzini --disable-fdt) fdt="disabled" 9732df87df7SJuan Quintela ;; 974fbb4121dSPaolo Bonzini --enable-fdt) fdt="enabled" 975fbb4121dSPaolo Bonzini ;; 976fbb4121dSPaolo Bonzini --enable-fdt=git) fdt="internal" 977fbb4121dSPaolo Bonzini ;; 97803a3c0b3SPaolo Bonzini --enable-fdt=*) fdt="$optarg" 9792df87df7SJuan Quintela ;; 980a40161cbSPaolo Bonzini --disable-membarrier) membarrier="no" 981a40161cbSPaolo Bonzini ;; 982a40161cbSPaolo Bonzini --enable-membarrier) membarrier="yes" 983a40161cbSPaolo Bonzini ;; 9847e563bfbSThomas Huth --with-pkgversion=*) pkgversion="$optarg" 9854a19f1ecSpbrook ;; 986519175a2SAlex Barcelo --with-coroutine=*) coroutine="$optarg" 987519175a2SAlex Barcelo ;; 98870c60c08SStefan Hajnoczi --disable-coroutine-pool) coroutine_pool="no" 98970c60c08SStefan Hajnoczi ;; 99070c60c08SStefan Hajnoczi --enable-coroutine-pool) coroutine_pool="yes" 99170c60c08SStefan Hajnoczi ;; 9927d992e4dSPeter Lieven --enable-debug-stack-usage) debug_stack_usage="yes" 9937d992e4dSPeter Lieven ;; 994f0d92b56SLongpeng(Mike) --enable-crypto-afalg) crypto_afalg="yes" 995f0d92b56SLongpeng(Mike) ;; 996f0d92b56SLongpeng(Mike) --disable-crypto-afalg) crypto_afalg="no" 997f0d92b56SLongpeng(Mike) ;; 998d5970055SMichael S. Tsirkin --disable-vhost-net) vhost_net="no" 999d5970055SMichael S. Tsirkin ;; 1000d5970055SMichael S. Tsirkin --enable-vhost-net) vhost_net="yes" 1001d5970055SMichael S. Tsirkin ;; 1002042cea27SGonglei --disable-vhost-crypto) vhost_crypto="no" 1003042cea27SGonglei ;; 1004299e6f19SPaolo Bonzini --enable-vhost-crypto) vhost_crypto="yes" 1005042cea27SGonglei ;; 10065e9be92dSNicholas Bellinger --disable-vhost-scsi) vhost_scsi="no" 10075e9be92dSNicholas Bellinger ;; 10085e9be92dSNicholas Bellinger --enable-vhost-scsi) vhost_scsi="yes" 10095e9be92dSNicholas Bellinger ;; 1010fc0b9b0eSStefan Hajnoczi --disable-vhost-vsock) vhost_vsock="no" 1011fc0b9b0eSStefan Hajnoczi ;; 1012fc0b9b0eSStefan Hajnoczi --enable-vhost-vsock) vhost_vsock="yes" 1013fc0b9b0eSStefan Hajnoczi ;; 101498fc1adaSDr. David Alan Gilbert --disable-vhost-user-fs) vhost_user_fs="no" 101598fc1adaSDr. David Alan Gilbert ;; 101698fc1adaSDr. David Alan Gilbert --enable-vhost-user-fs) vhost_user_fs="yes" 101798fc1adaSDr. David Alan Gilbert ;; 1018da076ffeSGerd Hoffmann --disable-opengl) opengl="no" 101920ff075bSMichael Walle ;; 1020da076ffeSGerd Hoffmann --enable-opengl) opengl="yes" 102120ff075bSMichael Walle ;; 10228c84cf11SSergei Trofimovich --disable-xfsctl) xfs="no" 10238c84cf11SSergei Trofimovich ;; 10248c84cf11SSergei Trofimovich --enable-xfsctl) xfs="yes" 10258c84cf11SSergei Trofimovich ;; 10261ffb3bbbSPaolo Bonzini --disable-zlib-test) 10271ece9905SAlon Levy ;; 1028d138cee9SMichael Roth --enable-guest-agent) guest_agent="yes" 1029d138cee9SMichael Roth ;; 1030d138cee9SMichael Roth --disable-guest-agent) guest_agent="no" 1031d138cee9SMichael Roth ;; 1032d9840e25STomoki Sekiyama --with-vss-sdk) vss_win32_sdk="" 1033d9840e25STomoki Sekiyama ;; 1034d9840e25STomoki Sekiyama --with-vss-sdk=*) vss_win32_sdk="$optarg" 1035d9840e25STomoki Sekiyama ;; 1036d9840e25STomoki Sekiyama --without-vss-sdk) vss_win32_sdk="no" 1037d9840e25STomoki Sekiyama ;; 1038d9840e25STomoki Sekiyama --with-win-sdk) win_sdk="" 1039d9840e25STomoki Sekiyama ;; 1040d9840e25STomoki Sekiyama --with-win-sdk=*) win_sdk="$optarg" 1041d9840e25STomoki Sekiyama ;; 1042d9840e25STomoki Sekiyama --without-win-sdk) win_sdk="no" 1043d9840e25STomoki Sekiyama ;; 10444b1c11fdSDaniel P. Berrange --enable-tools) want_tools="yes" 10454b1c11fdSDaniel P. Berrange ;; 10464b1c11fdSDaniel P. Berrange --disable-tools) want_tools="no" 10474b1c11fdSDaniel P. Berrange ;; 104886583a07SLiam Merwick --disable-avx2) avx2_opt="no" 104986583a07SLiam Merwick ;; 105086583a07SLiam Merwick --enable-avx2) avx2_opt="yes" 105186583a07SLiam Merwick ;; 10526b8cd447SRobert Hoo --disable-avx512f) avx512f_opt="no" 10536b8cd447SRobert Hoo ;; 10546b8cd447SRobert Hoo --enable-avx512f) avx512f_opt="yes" 10556b8cd447SRobert Hoo ;; 105652b53c04SFam Zheng --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) 105752b53c04SFam Zheng echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 1058583f6e7bSStefan Hajnoczi ;; 1059cb6414dfSFam Zheng --enable-vhdx|--disable-vhdx) 1060cb6414dfSFam Zheng echo "$0: $opt is obsolete, VHDX driver is always built" >&2 1061cb6414dfSFam Zheng ;; 1062315d3184SFam Zheng --enable-uuid|--disable-uuid) 1063315d3184SFam Zheng echo "$0: $opt is obsolete, UUID support is always built" >&2 1064315d3184SFam Zheng ;; 1065a1c5e949SDaniel P. Berrange --tls-priority=*) tls_priority="$optarg" 1066a1c5e949SDaniel P. Berrange ;; 10672da776dbSMichael R. Hines --enable-rdma) rdma="yes" 10682da776dbSMichael R. Hines ;; 10692da776dbSMichael R. Hines --disable-rdma) rdma="no" 10702da776dbSMichael R. Hines ;; 107121ab34c9SMarcel Apfelbaum --enable-pvrdma) pvrdma="yes" 107221ab34c9SMarcel Apfelbaum ;; 107321ab34c9SMarcel Apfelbaum --disable-pvrdma) pvrdma="no" 107421ab34c9SMarcel Apfelbaum ;; 1075e91c793cSCole Robinson --disable-tpm) tpm="no" 1076e91c793cSCole Robinson ;; 1077ab214c29SStefan Berger --enable-tpm) tpm="yes" 1078ab214c29SStefan Berger ;; 1079b10d49d7SPino Toscano --disable-libssh) libssh="no" 10800a12ec87SRichard W.M. Jones ;; 1081b10d49d7SPino Toscano --enable-libssh) libssh="yes" 10820a12ec87SRichard W.M. Jones ;; 1083ed1701c6SDr. David Alan Gilbert --disable-live-block-migration) live_block_migration="no" 1084ed1701c6SDr. David Alan Gilbert ;; 1085ed1701c6SDr. David Alan Gilbert --enable-live-block-migration) live_block_migration="yes" 1086ed1701c6SDr. David Alan Gilbert ;; 1087a99d57bbSWanlong Gao --disable-numa) numa="no" 1088a99d57bbSWanlong Gao ;; 1089a99d57bbSWanlong Gao --enable-numa) numa="yes" 1090a99d57bbSWanlong Gao ;; 1091a6b1d4c0SChanglong Xie --disable-replication) replication="no" 1092a6b1d4c0SChanglong Xie ;; 1093a6b1d4c0SChanglong Xie --enable-replication) replication="yes" 1094a6b1d4c0SChanglong Xie ;; 10952f740136SJeff Cody --disable-bochs) bochs="no" 10962f740136SJeff Cody ;; 10972f740136SJeff Cody --enable-bochs) bochs="yes" 10982f740136SJeff Cody ;; 10992f740136SJeff Cody --disable-cloop) cloop="no" 11002f740136SJeff Cody ;; 11012f740136SJeff Cody --enable-cloop) cloop="yes" 11022f740136SJeff Cody ;; 11032f740136SJeff Cody --disable-dmg) dmg="no" 11042f740136SJeff Cody ;; 11052f740136SJeff Cody --enable-dmg) dmg="yes" 11062f740136SJeff Cody ;; 11072f740136SJeff Cody --disable-qcow1) qcow1="no" 11082f740136SJeff Cody ;; 11092f740136SJeff Cody --enable-qcow1) qcow1="yes" 11102f740136SJeff Cody ;; 11112f740136SJeff Cody --disable-vdi) vdi="no" 11122f740136SJeff Cody ;; 11132f740136SJeff Cody --enable-vdi) vdi="yes" 11142f740136SJeff Cody ;; 11152f740136SJeff Cody --disable-vvfat) vvfat="no" 11162f740136SJeff Cody ;; 11172f740136SJeff Cody --enable-vvfat) vvfat="yes" 11182f740136SJeff Cody ;; 11192f740136SJeff Cody --disable-qed) qed="no" 11202f740136SJeff Cody ;; 11212f740136SJeff Cody --enable-qed) qed="yes" 11222f740136SJeff Cody ;; 11232f740136SJeff Cody --disable-parallels) parallels="no" 11242f740136SJeff Cody ;; 11252f740136SJeff Cody --enable-parallels) parallels="yes" 11262f740136SJeff Cody ;; 1127e6a74868SMarc-André Lureau --disable-vhost-user) vhost_user="no" 1128e6a74868SMarc-André Lureau ;; 1129299e6f19SPaolo Bonzini --enable-vhost-user) vhost_user="yes" 1130299e6f19SPaolo Bonzini ;; 1131108a6481SCindy Lu --disable-vhost-vdpa) vhost_vdpa="no" 1132108a6481SCindy Lu ;; 1133108a6481SCindy Lu --enable-vhost-vdpa) vhost_vdpa="yes" 1134108a6481SCindy Lu ;; 1135299e6f19SPaolo Bonzini --disable-vhost-kernel) vhost_kernel="no" 1136299e6f19SPaolo Bonzini ;; 1137299e6f19SPaolo Bonzini --enable-vhost-kernel) vhost_kernel="yes" 1138e6a74868SMarc-André Lureau ;; 11398b18cdbfSRichard Henderson --disable-capstone) capstone="disabled" 11408ca80760SRichard Henderson ;; 11418b18cdbfSRichard Henderson --enable-capstone) capstone="enabled" 11428ca80760SRichard Henderson ;; 11438b18cdbfSRichard Henderson --enable-capstone=git) capstone="internal" 1144e219c499SRichard Henderson ;; 114503a3c0b3SPaolo Bonzini --enable-capstone=*) capstone="$optarg" 1146e219c499SRichard Henderson ;; 1147cc84d63aSDaniel P. Berrange --with-git=*) git="$optarg" 1148cc84d63aSDaniel P. Berrange ;; 11497d7dbf9dSDan Streetman --with-git-submodules=*) 11507d7dbf9dSDan Streetman git_submodules_action="$optarg" 1151f62bbee5SDaniel P. Berrange ;; 1152ba59fb77SPaolo Bonzini --enable-debug-mutex) debug_mutex=yes 1153ba59fb77SPaolo Bonzini ;; 1154ba59fb77SPaolo Bonzini --disable-debug-mutex) debug_mutex=no 1155ba59fb77SPaolo Bonzini ;; 11569b8e4298SAlex Bennée --enable-plugins) if test "$mingw32" = "yes"; then 11579b8e4298SAlex Bennée error_exit "TCG plugins not currently supported on Windows platforms" 11589b8e4298SAlex Bennée else 11599b8e4298SAlex Bennée plugins="yes" 11609b8e4298SAlex Bennée fi 116140e8c6f4SAlex Bennée ;; 116240e8c6f4SAlex Bennée --disable-plugins) plugins="no" 116340e8c6f4SAlex Bennée ;; 1164afc3a8f9SAlex Bennée --enable-containers) use_containers="yes" 1165afc3a8f9SAlex Bennée ;; 1166afc3a8f9SAlex Bennée --disable-containers) use_containers="no" 1167afc3a8f9SAlex Bennée ;; 1168f48e590aSAlex Bennée --gdb=*) gdb_bin="$optarg" 1169f48e590aSAlex Bennée ;; 1170b767d257SMarek Marczykowski-Górecki --enable-rng-none) rng_none=yes 1171b767d257SMarek Marczykowski-Górecki ;; 1172b767d257SMarek Marczykowski-Górecki --disable-rng-none) rng_none=no 1173b767d257SMarek Marczykowski-Górecki ;; 117454e7aac0SAlexey Krasikov --enable-keyring) secret_keyring="yes" 117554e7aac0SAlexey Krasikov ;; 117654e7aac0SAlexey Krasikov --disable-keyring) secret_keyring="no" 117754e7aac0SAlexey Krasikov ;; 117820cf7b8eSDenis Plotnikov --enable-gio) gio=yes 117920cf7b8eSDenis Plotnikov ;; 118020cf7b8eSDenis Plotnikov --disable-gio) gio=no 118120cf7b8eSDenis Plotnikov ;; 1182b8e0c493SJoelle van Dyne --enable-slirp-smbd) slirp_smbd=yes 1183b8e0c493SJoelle van Dyne ;; 1184b8e0c493SJoelle van Dyne --disable-slirp-smbd) slirp_smbd=no 1185b8e0c493SJoelle van Dyne ;; 11863b4da132SPaolo Bonzini # backwards compatibility options 11873b4da132SPaolo Bonzini --enable-trace-backend=*) meson_option_parse "--enable-trace-backends=$optarg" "$optarg" 11883b4da132SPaolo Bonzini ;; 11893b4da132SPaolo Bonzini --disable-blobs) meson_option_parse --disable-install-blobs "" 11903b4da132SPaolo Bonzini ;; 11913b4da132SPaolo Bonzini --enable-tcmalloc) meson_option_parse --enable-malloc=tcmalloc tcmalloc 11923b4da132SPaolo Bonzini ;; 11933b4da132SPaolo Bonzini --enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc 11943b4da132SPaolo Bonzini ;; 11953b4da132SPaolo Bonzini # everything else has the same name in configure and meson 119661d63097SPaolo Bonzini --enable-* | --disable-*) meson_option_parse "$opt" "$optarg" 119761d63097SPaolo Bonzini ;; 11982d2ad6d0SFam Zheng *) 11992d2ad6d0SFam Zheng echo "ERROR: unknown option $opt" 12002d2ad6d0SFam Zheng echo "Try '$0 --help' for more information" 12012d2ad6d0SFam Zheng exit 1 12027f1559c6Sbalrog ;; 12037d13299dSbellard esac 12047d13299dSbellarddone 12057d13299dSbellard 1206d1a14257SAlex Bennée# test for any invalid configuration combinations 1207d1a14257SAlex Bennéeif test "$plugins" = "yes" -a "$tcg" = "disabled"; then 1208d1a14257SAlex Bennée error_exit "Can't enable plugins on non-TCG builds" 1209d1a14257SAlex Bennéefi 1210d1a14257SAlex Bennée 12117d7dbf9dSDan Streetmancase $git_submodules_action in 12127d7dbf9dSDan Streetman update|validate) 12137d7dbf9dSDan Streetman if test ! -e "$source_path/.git"; then 12147d7dbf9dSDan Streetman echo "ERROR: cannot $git_submodules_action git submodules without .git" 12157d7dbf9dSDan Streetman exit 1 12167d7dbf9dSDan Streetman fi 12177d7dbf9dSDan Streetman ;; 12187d7dbf9dSDan Streetman ignore) 1219b80fd281SPaolo Bonzini if ! test -f "$source_path/ui/keycodemapdb/README" 1220b80fd281SPaolo Bonzini then 1221b80fd281SPaolo Bonzini echo 1222b80fd281SPaolo Bonzini echo "ERROR: missing GIT submodules" 1223b80fd281SPaolo Bonzini echo 1224b80fd281SPaolo Bonzini if test -e "$source_path/.git"; then 1225b80fd281SPaolo Bonzini echo "--with-git-submodules=ignore specified but submodules were not" 1226b80fd281SPaolo Bonzini echo "checked out. Please initialize and update submodules." 1227b80fd281SPaolo Bonzini else 1228b80fd281SPaolo Bonzini echo "This is not a GIT checkout but module content appears to" 1229b80fd281SPaolo Bonzini echo "be missing. Do not use 'git archive' or GitHub download links" 1230b80fd281SPaolo Bonzini echo "to acquire QEMU source archives. Non-GIT builds are only" 1231b80fd281SPaolo Bonzini echo "supported with source archives linked from:" 1232b80fd281SPaolo Bonzini echo 1233b80fd281SPaolo Bonzini echo " https://www.qemu.org/download/#source" 1234b80fd281SPaolo Bonzini echo 1235b80fd281SPaolo Bonzini echo "Developers working with GIT can use scripts/archive-source.sh" 1236b80fd281SPaolo Bonzini echo "if they need to create valid source archives." 1237b80fd281SPaolo Bonzini fi 1238b80fd281SPaolo Bonzini echo 1239b80fd281SPaolo Bonzini exit 1 1240b80fd281SPaolo Bonzini fi 12417d7dbf9dSDan Streetman ;; 12427d7dbf9dSDan Streetman *) 12437d7dbf9dSDan Streetman echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'" 12447d7dbf9dSDan Streetman exit 1 12457d7dbf9dSDan Streetman ;; 12467d7dbf9dSDan Streetmanesac 12477d7dbf9dSDan Streetman 124822a87800SMarc-André Lureaulibdir="${libdir:-$prefix/lib}" 124922a87800SMarc-André Lureaulibexecdir="${libexecdir:-$prefix/libexec}" 125022a87800SMarc-André Lureauincludedir="${includedir:-$prefix/include}" 125122a87800SMarc-André Lureau 125222a87800SMarc-André Lureauif test "$mingw32" = "yes" ; then 125315588a62SJoshua Watt bindir="${bindir:-$prefix}" 125422a87800SMarc-André Lureauelse 125515588a62SJoshua Watt bindir="${bindir:-$prefix/bin}" 125615588a62SJoshua Wattfi 125722a87800SMarc-André Lureaumandir="${mandir:-$prefix/share/man}" 125822a87800SMarc-André Lureaudatadir="${datadir:-$prefix/share}" 1259ca8c0909SMarc-André Lureaudocdir="${docdir:-$prefix/share/doc}" 126022a87800SMarc-André Lureausysconfdir="${sysconfdir:-$prefix/etc}" 126122a87800SMarc-André Lureaulocal_statedir="${local_statedir:-$prefix/var}" 126216bf7a33SPaolo Bonzinifirmwarepath="${firmwarepath:-$datadir/qemu-firmware}" 126316bf7a33SPaolo Bonzinilocaledir="${localedir:-$datadir/locale}" 126422a87800SMarc-André Lureau 126540293e58Sbellardcase "$cpu" in 1266e3608d66SRichard Henderson ppc) 1267e3608d66SRichard Henderson CPU_CFLAGS="-m32" 1268db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 1269e3608d66SRichard Henderson ;; 1270e3608d66SRichard Henderson ppc64) 1271e3608d66SRichard Henderson CPU_CFLAGS="-m64" 1272db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1273e3608d66SRichard Henderson ;; 12749b9c37c3SRichard Henderson sparc) 1275f1079bb8SRichard Henderson CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" 1276db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS" 12773142255cSblueswir1 ;; 1278ed968ff1SJuan Quintela sparc64) 127979f3b12fSPeter Crosthwaite CPU_CFLAGS="-m64 -mcpu=ultrasparc" 1280db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 12813142255cSblueswir1 ;; 128276d83bdeSths s390) 1283061cdd81SRichard Henderson CPU_CFLAGS="-m31" 1284db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS" 128528d7cc49SRichard Henderson ;; 128628d7cc49SRichard Henderson s390x) 1287061cdd81SRichard Henderson CPU_CFLAGS="-m64" 1288db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 128976d83bdeSths ;; 129040293e58Sbellard i386) 129179f3b12fSPeter Crosthwaite CPU_CFLAGS="-m32" 1292db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 129340293e58Sbellard ;; 129440293e58Sbellard x86_64) 12957ebee43eSRichard Henderson # ??? Only extremely old AMD cpus do not have cmpxchg16b. 12967ebee43eSRichard Henderson # If we truly care, we should simply detect this case at 12977ebee43eSRichard Henderson # runtime and generate the fallback to serial emulation. 12987ebee43eSRichard Henderson CPU_CFLAGS="-m64 -mcx16" 1299db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1300379f6698SPaul Brook ;; 1301c72b26ecSRichard Henderson x32) 1302c72b26ecSRichard Henderson CPU_CFLAGS="-mx32" 1303db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS" 1304c72b26ecSRichard Henderson ;; 130530163d89SPeter Maydell # No special flags required for other host CPUs 13063142255cSblueswir1esac 13073142255cSblueswir1 13089557af9cSAlex Bennéeif eval test -z "\${cross_cc_$cpu}"; then 1309b1aa4de1SAlex Bennée eval "cross_cc_${cpu}=\$cc" 13102038f8c8SPaolo Bonzini cross_cc_vars="$cross_cc_vars cross_cc_${cpu}" 13119557af9cSAlex Bennéefi 131279f3b12fSPeter Crosthwaite 1313affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly 1314affc88ccSPeter Maydell# support, even if we're using TCI. 1315affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then 1316affc88ccSPeter Maydell bsd_user="no" 1317affc88ccSPeter Maydell linux_user="no" 1318affc88ccSPeter Maydellfi 1319affc88ccSPeter Maydell 132060e0df25SPeter Maydelldefault_target_list="" 132143692239SMarkus Armbrusterdeprecated_targets_list=ppc64abi32-linux-user 1322fdb75aefSPaolo Bonzinideprecated_features="" 13236e92f823SPeter Maydellmak_wilds="" 13246e92f823SPeter Maydell 132560e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then 1326812b31d3SAlex Bennée mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak" 132760e0df25SPeter Maydellfi 132860e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then 1329812b31d3SAlex Bennée mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak" 133060e0df25SPeter Maydellfi 133160e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then 1332812b31d3SAlex Bennée mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak" 133360e0df25SPeter Maydellfi 133460e0df25SPeter Maydell 13353a5ae4a9SAlex Bennée# If the user doesn't explicitly specify a deprecated target we will 13363a5ae4a9SAlex Bennée# skip it. 13373a5ae4a9SAlex Bennéeif test -z "$target_list"; then 13383a5ae4a9SAlex Bennée if test -z "$target_list_exclude"; then 13393a5ae4a9SAlex Bennée target_list_exclude="$deprecated_targets_list" 13403a5ae4a9SAlex Bennée else 13413a5ae4a9SAlex Bennée target_list_exclude="$target_list_exclude,$deprecated_targets_list" 13423a5ae4a9SAlex Bennée fi 13432d838d9bSAlex Bennéefi 13442d838d9bSAlex Bennée 1345447e133fSAlex Bennéefor config in $mak_wilds; do 1346447e133fSAlex Bennée target="$(basename "$config" .mak)" 134798db9a06SAlex Bennée if echo "$target_list_exclude" | grep -vq "$target"; then 1348447e133fSAlex Bennée default_target_list="${default_target_list} $target" 1349447e133fSAlex Bennée fi 1350447e133fSAlex Bennéedone 13516e92f823SPeter Maydell 1352af5db58eSpbrookif test x"$show_help" = x"yes" ; then 1353af5db58eSpbrookcat << EOF 1354af5db58eSpbrook 1355af5db58eSpbrookUsage: configure [options] 1356af5db58eSpbrookOptions: [defaults in brackets after descriptions] 1357af5db58eSpbrook 135808fb77edSStefan WeilStandard options: 135908fb77edSStefan Weil --help print this message 136008fb77edSStefan Weil --prefix=PREFIX install in PREFIX [$prefix] 136108fb77edSStefan Weil --interp-prefix=PREFIX where to find shared libraries, etc. 136208fb77edSStefan Weil use %M for cpu name [$interp_prefix] 13632deca810SAlex Bennée --target-list=LIST set target list (default: build all non-deprecated) 136408fb77edSStefan Weil$(echo Available targets: $default_target_list | \ 136508fb77edSStefan Weil fold -s -w 53 | sed -e 's/^/ /') 13662deca810SAlex Bennée$(echo Deprecated targets: $deprecated_targets_list | \ 13672deca810SAlex Bennée fold -s -w 53 | sed -e 's/^/ /') 1368447e133fSAlex Bennée --target-list-exclude=LIST exclude a set of targets from the default target-list 136908fb77edSStefan Weil 137008fb77edSStefan WeilAdvanced options (experts only): 13713812c0c4SJoelle van Dyne --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix] 137208fb77edSStefan Weil --cc=CC use C compiler CC [$cc] 137308fb77edSStefan Weil --iasl=IASL use ACPI compiler IASL [$iasl] 137408fb77edSStefan Weil --host-cc=CC use C compiler CC [$host_cc] for code run at 137508fb77edSStefan Weil build time 137608fb77edSStefan Weil --cxx=CXX use C++ compiler CXX [$cxx] 137708fb77edSStefan Weil --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 137808fb77edSStefan Weil --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS 137911cde1c8SBruno Dominguez --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS 138008fb77edSStefan Weil --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1381d75402b5SAlex Bennée --cross-cc-ARCH=CC use compiler when building ARCH guest test cases 1382d422b2bcSAlex Bennée --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests 138308fb77edSStefan Weil --make=MAKE use specified make [$make] 138408fb77edSStefan Weil --python=PYTHON use specified python [$python] 13852eb054c2SPeter Maydell --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] 1386a5665051SPaolo Bonzini --meson=MESON use specified meson [$meson] 138748328880SPaolo Bonzini --ninja=NINJA use specified ninja [$ninja] 138808fb77edSStefan Weil --smbd=SMBD use specified smbd [$smbd] 1389db1b5f13SThomas Huth --with-git=GIT use specified git [$git] 13907d7dbf9dSDan Streetman --with-git-submodules=update update git submodules (default if .git dir exists) 13917d7dbf9dSDan Streetman --with-git-submodules=validate fail if git submodules are not up to date 13927d7dbf9dSDan Streetman --with-git-submodules=ignore do not update or check git submodules (default if no .git dir) 139308fb77edSStefan Weil --static enable static build [$static] 139408fb77edSStefan Weil --mandir=PATH install man pages in PATH 139510ff82d1SMarc-André Lureau --datadir=PATH install firmware in PATH/$qemu_suffix 1396fe0038beSPaolo Bonzini --localedir=PATH install translation in PATH/$qemu_suffix 139710ff82d1SMarc-André Lureau --docdir=PATH install documentation in PATH/$qemu_suffix 139808fb77edSStefan Weil --bindir=PATH install binaries in PATH 139908fb77edSStefan Weil --libdir=PATH install libraries in PATH 1400db1b5f13SThomas Huth --libexecdir=PATH install helper binaries in PATH 140110ff82d1SMarc-André Lureau --sysconfdir=PATH install config in PATH/$qemu_suffix 140208fb77edSStefan Weil --localstatedir=PATH install local state in PATH (set at runtime on win32) 14033d5eecabSGerd Hoffmann --firmwarepath=PATH search PATH for firmware files 140413336606SRobert Foley --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs. 1405ca8c0909SMarc-André Lureau --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] 1406db1b5f13SThomas Huth --with-pkgversion=VERS use specified string as sub-version of the package 1407c035c8d6SPaolo Bonzini --without-default-features default all --enable-* options to "disabled" 1408c035c8d6SPaolo Bonzini --without-default-devices do not include any device that is not needed to 1409c035c8d6SPaolo Bonzini start the emulator (only use if you are including 1410d1d5e9eeSAlex Bennée desired devices in configs/devices/) 1411d1d5e9eeSAlex Bennée --with-devices-ARCH=NAME override default configs/devices 141208fb77edSStefan Weil --enable-debug enable common debug build options 1413247724cbSMarc-André Lureau --enable-sanitizers enable default sanitizers 14140aebab04SLingfeng Yang --enable-tsan enable thread sanitizer 141508fb77edSStefan Weil --disable-strip disable stripping binaries 141608fb77edSStefan Weil --disable-werror disable compilation abort on warning 141763678e17SSteven Noonan --disable-stack-protector disable compiler-provided stack protection 141887430d5bSPaolo Bonzini --audio-drv-list=LIST set audio drivers list 141908fb77edSStefan Weil --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 142008fb77edSStefan Weil --block-drv-rw-whitelist=L 142108fb77edSStefan Weil set block driver read-write whitelist 1422e5f05f8cSKevin Wolf (by default affects only QEMU, not tools like qemu-img) 142308fb77edSStefan Weil --block-drv-ro-whitelist=L 142408fb77edSStefan Weil set block driver read-only whitelist 1425e5f05f8cSKevin Wolf (by default affects only QEMU, not tools like qemu-img) 1426e5f05f8cSKevin Wolf --enable-block-drv-whitelist-in-tools 1427e5f05f8cSKevin Wolf use block whitelist also in tools instead of only QEMU 142808fb77edSStefan Weil --with-trace-file=NAME Full PATH,NAME of file to store traces 142908fb77edSStefan Weil Default:trace-<pid> 1430c23f23b9SMichael Tokarev --cpu=CPU Build for host CPU [$cpu] 143108fb77edSStefan Weil --with-coroutine=BACKEND coroutine backend. Supported options: 143233c53c54SDaniel P. Berrange ucontext, sigaltstack, windows 143308fb77edSStefan Weil --enable-gcov enable test coverage analysis with gcov 1434c23f23b9SMichael Tokarev --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1435c23f23b9SMichael Tokarev --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1436a1c5e949SDaniel P. Berrange --tls-priority default TLS protocol/cipher priority string 1437c12d66aaSLin Ma --enable-gprof QEMU profiling with gprof 1438c12d66aaSLin Ma --enable-profiler profiler support 1439c12d66aaSLin Ma --enable-debug-stack-usage 1440c12d66aaSLin Ma track the maximum stack usage of stacks created by qemu_alloc_stack 144140e8c6f4SAlex Bennée --enable-plugins 144240e8c6f4SAlex Bennée enable plugins via shared library loading 1443afc3a8f9SAlex Bennée --disable-containers don't use containers for cross-building 1444f48e590aSAlex Bennée --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin] 144561d63097SPaolo BonziniEOF 144661d63097SPaolo Bonzini meson_options_help 144761d63097SPaolo Bonzinicat << EOF 1448c23f23b9SMichael Tokarev system all system emulation targets 1449c23f23b9SMichael Tokarev user supported user emulation targets 1450c23f23b9SMichael Tokarev linux-user all linux usermode emulation targets 1451c23f23b9SMichael Tokarev bsd-user all BSD usermode emulation targets 1452c23f23b9SMichael Tokarev guest-agent build the QEMU Guest Agent 1453c23f23b9SMichael Tokarev pie Position Independent Executables 145421e709aaSMarc-André Lureau modules modules support (non-Windows) 1455bd83c861SChristian Ehrhardt module-upgrades try to load modules from alternate paths for upgrades 1456c23f23b9SMichael Tokarev debug-tcg TCG debugging (default is disabled) 1457c23f23b9SMichael Tokarev debug-info debugging information 1458cdad781dSDaniele Buono lto Enable Link-Time Optimization. 14591e4f6065SDaniele Buono safe-stack SafeStack Stack Smash Protection. Depends on 14601e4f6065SDaniele Buono clang/llvm >= 3.7 and requires coroutine backend ucontext. 1461a40161cbSPaolo Bonzini membarrier membarrier system call (for Linux 4.14+ or Windows) 146221ab34c9SMarcel Apfelbaum rdma Enable RDMA-based migration 146321ab34c9SMarcel Apfelbaum pvrdma Enable PVRDMA support 1464299e6f19SPaolo Bonzini vhost-net vhost-net kernel acceleration support 1465299e6f19SPaolo Bonzini vhost-vsock virtio sockets device support 1466299e6f19SPaolo Bonzini vhost-scsi vhost-scsi kernel target support 1467299e6f19SPaolo Bonzini vhost-crypto vhost-user-crypto backend support 1468299e6f19SPaolo Bonzini vhost-kernel vhost kernel backend support 1469299e6f19SPaolo Bonzini vhost-user vhost-user backend support 1470108a6481SCindy Lu vhost-vdpa vhost-vdpa kernel backend support 1471ed1701c6SDr. David Alan Gilbert live-block-migration Block migration in the main migration stream 1472c23f23b9SMichael Tokarev coroutine-pool coroutine freelist (better performance) 1473c23f23b9SMichael Tokarev tpm TPM support 1474b10d49d7SPino Toscano libssh ssh block device support 1475c23f23b9SMichael Tokarev numa libnuma support 147686583a07SLiam Merwick avx2 AVX2 optimization support 14776b8cd447SRobert Hoo avx512f AVX512F optimization support 1478a6b1d4c0SChanglong Xie replication replication support 1479c12d66aaSLin Ma opengl opengl support 1480c12d66aaSLin Ma xfsctl xfsctl support 1481c12d66aaSLin Ma qom-cast-debug cast debugging support 14828de73fa8SCleber Rosa tools build qemu-io, qemu-nbd and qemu-img tools 14832f740136SJeff Cody bochs bochs image format support 14842f740136SJeff Cody cloop cloop image format support 14852f740136SJeff Cody dmg dmg image format support 14862f740136SJeff Cody qcow1 qcow v1 image format support 14872f740136SJeff Cody vdi vdi image format support 14882f740136SJeff Cody vvfat vvfat image format support 14892f740136SJeff Cody qed qed image format support 14902f740136SJeff Cody parallels parallels image format support 1491f0d92b56SLongpeng(Mike) crypto-afalg Linux AF_ALG crypto backend driver 1492ba59fb77SPaolo Bonzini debug-mutex mutex debugging support 1493b767d257SMarek Marczykowski-Górecki rng-none dummy RNG, avoid using /dev/(u)random and getrandom() 149420cf7b8eSDenis Plotnikov gio libgio support 1495b8e0c493SJoelle van Dyne slirp-smbd use smbd (at path --smbd=*) in slirp networking 149608fb77edSStefan Weil 149708fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched 1498af5db58eSpbrookEOF 14992d2ad6d0SFam Zhengexit 0 1500af5db58eSpbrookfi 1501af5db58eSpbrook 15029c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated 1503bb768f71SThomas Huthrm -f */config-devices.mak.d 15049c790242SThomas Huth 1505faf44142SDaniel P. Berrangéif test -z "$python" 1506faf44142SDaniel P. Berrangéthen 1507c53eeaf7SStefan Hajnoczi error_exit "Python not found. Use --python=/path/to/python" 1508c53eeaf7SStefan Hajnoczifi 15098e2c76bdSRoman Bolshakovif ! has "$make" 15108e2c76bdSRoman Bolshakovthen 15118e2c76bdSRoman Bolshakov error_exit "GNU make ($make) not found" 15128e2c76bdSRoman Bolshakovfi 1513c53eeaf7SStefan Hajnoczi 1514c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit 1515c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value. 15161b11f28dSThomas Huthif ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then 15171b11f28dSThomas Huth error_exit "Cannot use '$python', Python >= 3.6 is required." \ 1518c53eeaf7SStefan Hajnoczi "Use --python=/path/to/python to specify a supported Python." 1519c53eeaf7SStefan Hajnoczifi 1520c53eeaf7SStefan Hajnoczi 1521755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it 1522406ab2f3SCleber Rosapython_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null) 1523755ee70fSCleber Rosa 1524c53eeaf7SStefan Hajnoczi# Suppress writing compiled files 1525c53eeaf7SStefan Hajnoczipython="$python -B" 1526c53eeaf7SStefan Hajnoczi 15270a01d76fSMarc-André Lureauif test -z "$meson"; then 1528654d6b04SPaolo Bonzini if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.2; then 15290a01d76fSMarc-André Lureau meson=meson 15307d7dbf9dSDan Streetman elif test $git_submodules_action != 'ignore' ; then 15310a01d76fSMarc-André Lureau meson=git 15320a01d76fSMarc-André Lureau elif test -e "${source_path}/meson/meson.py" ; then 15330a01d76fSMarc-André Lureau meson=internal 15340a01d76fSMarc-André Lureau else 15350a01d76fSMarc-André Lureau if test "$explicit_python" = yes; then 15360a01d76fSMarc-André Lureau error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found." 15370a01d76fSMarc-André Lureau else 1538a5665051SPaolo Bonzini error_exit "Meson not found. Use --meson=/path/to/meson" 1539a5665051SPaolo Bonzini fi 15400a01d76fSMarc-André Lureau fi 15410a01d76fSMarc-André Lureauelse 15420a01d76fSMarc-André Lureau # Meson uses its own Python interpreter to invoke other Python scripts, 15430a01d76fSMarc-André Lureau # but the user wants to use the one they specified with --python. 15440a01d76fSMarc-André Lureau # 15450a01d76fSMarc-André Lureau # We do not want to override the distro Python interpreter (and sometimes 15460a01d76fSMarc-André Lureau # cannot: for example in Homebrew /usr/bin/meson is a bash script), so 15470a01d76fSMarc-André Lureau # just require --meson=git|internal together with --python. 15480a01d76fSMarc-André Lureau if test "$explicit_python" = yes; then 15490a01d76fSMarc-André Lureau case "$meson" in 15500a01d76fSMarc-André Lureau git | internal) ;; 15510a01d76fSMarc-André Lureau *) error_exit "--python requires using QEMU's embedded Meson distribution." ;; 15520a01d76fSMarc-André Lureau esac 15530a01d76fSMarc-André Lureau fi 15540a01d76fSMarc-André Lureaufi 1555a5665051SPaolo Bonzini 15560a01d76fSMarc-André Lureauif test "$meson" = git; then 15570a01d76fSMarc-André Lureau git_submodules="${git_submodules} meson" 15580a01d76fSMarc-André Lureaufi 15590a01d76fSMarc-André Lureau 15600a01d76fSMarc-André Lureaucase "$meson" in 15610a01d76fSMarc-André Lureau git | internal) 15620a01d76fSMarc-André Lureau meson="$python ${source_path}/meson/meson.py" 15630a01d76fSMarc-André Lureau ;; 156484ec0c24SPaolo Bonzini *) meson=$(command -v "$meson") ;; 15650a01d76fSMarc-André Lureauesac 15660a01d76fSMarc-André Lureau 156709e93326SPaolo Bonzini# Probe for ninja 156848328880SPaolo Bonzini 156948328880SPaolo Bonziniif test -z "$ninja"; then 157048328880SPaolo Bonzini for c in ninja ninja-build samu; do 157148328880SPaolo Bonzini if has $c; then 157248328880SPaolo Bonzini ninja=$(command -v "$c") 157348328880SPaolo Bonzini break 157448328880SPaolo Bonzini fi 157548328880SPaolo Bonzini done 157609e93326SPaolo Bonzini if test -z "$ninja"; then 157709e93326SPaolo Bonzini error_exit "Cannot find Ninja" 157809e93326SPaolo Bonzini fi 157948328880SPaolo Bonzinifi 1580a5665051SPaolo Bonzini 15819aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing 15829aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the 15839aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case). 15849aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC. 15859aae6e54SDaniel Henrique Barbozawrite_c_skeleton; 15869aae6e54SDaniel Henrique Barbozaif compile_object ; then 15879aae6e54SDaniel Henrique Barboza : C compiler works ok 15889aae6e54SDaniel Henrique Barbozaelse 15899aae6e54SDaniel Henrique Barboza error_exit "\"$cc\" either does not exist or does not work" 15909aae6e54SDaniel Henrique Barbozafi 15919aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then 15929aae6e54SDaniel Henrique Barboza error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 15939aae6e54SDaniel Henrique Barbozafi 15949aae6e54SDaniel Henrique Barboza 15959c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror 15969c83ffd8SPeter Maydell# by default. Only enable by default for git builds 15979c83ffd8SPeter Maydellif test -z "$werror" ; then 15987d7dbf9dSDan Streetman if test "$git_submodules_action" != "ignore" && \ 1599e633a5c6SEric Blake { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then 16009c83ffd8SPeter Maydell werror="yes" 16019c83ffd8SPeter Maydell else 16029c83ffd8SPeter Maydell werror="no" 16039c83ffd8SPeter Maydell fi 16049c83ffd8SPeter Maydellfi 16059c83ffd8SPeter Maydell 1606975ff037SPaolo Bonziniif test "$targetos" = "bogus"; then 1607fb59dabdSPeter Maydell # Now that we know that we're not printing the help and that 1608fb59dabdSPeter Maydell # the compiler works (so the results of the check_defines we used 1609fb59dabdSPeter Maydell # to identify the OS are reliable), if we didn't recognize the 1610fb59dabdSPeter Maydell # host OS we should stop now. 1611951fedfcSPeter Maydell error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 1612fb59dabdSPeter Maydellfi 1613fb59dabdSPeter Maydell 1614efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements: 1615efc6c070SThomas Huthcat > $TMPC << EOF 1616efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__) 1617efc6c070SThomas Huth# ifdef __apple_build_version__ 16182a85a08cSDaniel P. Berrangé# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0) 16192a85a08cSDaniel P. Berrangé# error You need at least XCode Clang v10.0 to compile QEMU 1620efc6c070SThomas Huth# endif 1621efc6c070SThomas Huth# else 16222a85a08cSDaniel P. Berrangé# if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0) 16232a85a08cSDaniel P. Berrangé# error You need at least Clang v6.0 to compile QEMU 1624efc6c070SThomas Huth# endif 1625efc6c070SThomas Huth# endif 1626efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__) 16273830df5fSnia# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4) 16283830df5fSnia# error You need at least GCC v7.4.0 to compile QEMU 1629efc6c070SThomas Huth# endif 1630efc6c070SThomas Huth#else 1631efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU 1632efc6c070SThomas Huth#endif 1633efc6c070SThomas Huthint main (void) { return 0; } 1634efc6c070SThomas HuthEOF 1635efc6c070SThomas Huthif ! compile_prog "" "" ; then 16363830df5fSnia error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)" 1637efc6c070SThomas Huthfi 1638efc6c070SThomas Huth 163900849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately. 164000849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second. 164100849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all 164200849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would 164300849b92SRichard Henderson# just silently disable some features, so it's too error prone. 164400849b92SRichard Henderson 164500849b92SRichard Hendersonwarn_flags= 164600849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration 164700849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition 164800849b92SRichard Hendersonadd_to warn_flags -Wtype-limits 164900849b92SRichard Hendersonadd_to warn_flags -Wformat-security 165000849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k 165100849b92SRichard Hendersonadd_to warn_flags -Winit-self 165200849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers 165300849b92SRichard Hendersonadd_to warn_flags -Wempty-body 165400849b92SRichard Hendersonadd_to warn_flags -Wnested-externs 165500849b92SRichard Hendersonadd_to warn_flags -Wendif-labels 165600849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined 16570a2ebce9SThomas Huthadd_to warn_flags -Wimplicit-fallthrough=2 165800849b92SRichard Henderson 165900849b92SRichard Hendersonnowarn_flags= 166000849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides 166100849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs 166200849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value 166300849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int 166400849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition 1665aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare 1666bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi 166700849b92SRichard Henderson 166800849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags" 166993b25869SJohn Snow 167093b25869SJohn Snowcc_has_warning_flag() { 167193b25869SJohn Snow write_c_skeleton; 167293b25869SJohn Snow 1673a1d29d6cSPeter Maydell # Use the positive sense of the flag when testing for -Wno-wombat 1674a1d29d6cSPeter Maydell # support (gcc will happily accept the -Wno- form of unknown 1675a1d29d6cSPeter Maydell # warning options). 167693b25869SJohn Snow optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 167793b25869SJohn Snow compile_prog "-Werror $optflag" "" 167893b25869SJohn Snow} 167993b25869SJohn Snow 168093b25869SJohn Snowfor flag in $gcc_flags; do 168193b25869SJohn Snow if cc_has_warning_flag $flag ; then 16828d05095cSPaolo Bonzini QEMU_CFLAGS="$QEMU_CFLAGS $flag" 16838d05095cSPaolo Bonzini fi 16848d05095cSPaolo Bonzinidone 16858d05095cSPaolo Bonzini 168663678e17SSteven Noonanif test "$stack_protector" != "no"; then 1687fccd35a0SRodrigo Rebello cat > $TMPC << EOF 1688fccd35a0SRodrigo Rebelloint main(int argc, char *argv[]) 1689fccd35a0SRodrigo Rebello{ 1690fccd35a0SRodrigo Rebello char arr[64], *p = arr, *c = argv[0]; 1691fccd35a0SRodrigo Rebello while (*c) { 1692fccd35a0SRodrigo Rebello *p++ = *c++; 1693fccd35a0SRodrigo Rebello } 1694fccd35a0SRodrigo Rebello return 0; 1695fccd35a0SRodrigo Rebello} 1696fccd35a0SRodrigo RebelloEOF 169763678e17SSteven Noonan gcc_flags="-fstack-protector-strong -fstack-protector-all" 16983b463a3fSMiroslav Rezanina sp_on=0 169963678e17SSteven Noonan for flag in $gcc_flags; do 1700590e5dd9SPeter Maydell # We need to check both a compile and a link, since some compiler 1701590e5dd9SPeter Maydell # setups fail only on a .c->.o compile and some only at link time 1702086d5f75SPaolo Bonzini if compile_object "-Werror $flag" && 1703590e5dd9SPeter Maydell compile_prog "-Werror $flag" ""; then 170463678e17SSteven Noonan QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1705db5adeaaSPaolo Bonzini QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 17063b463a3fSMiroslav Rezanina sp_on=1 170763678e17SSteven Noonan break 170863678e17SSteven Noonan fi 170963678e17SSteven Noonan done 17103b463a3fSMiroslav Rezanina if test "$stack_protector" = yes; then 17113b463a3fSMiroslav Rezanina if test $sp_on = 0; then 17123b463a3fSMiroslav Rezanina error_exit "Stack protector not supported" 17133b463a3fSMiroslav Rezanina fi 17143b463a3fSMiroslav Rezanina fi 171537746c5eSMarc-André Lureaufi 171637746c5eSMarc-André Lureau 171720bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for 171820bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}. 171920bc94a2SPaolo Bonzinicat > $TMPC << EOF 172020bc94a2SPaolo Bonzinistruct { 172120bc94a2SPaolo Bonzini int a[2]; 172220bc94a2SPaolo Bonzini} x = {0}; 172320bc94a2SPaolo BonziniEOF 172420bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then 172520bc94a2SPaolo Bonzini : 172620bc94a2SPaolo Bonzinielse 172720bc94a2SPaolo Bonzini QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 172820bc94a2SPaolo Bonzinifi 172920bc94a2SPaolo Bonzini 173021e709aaSMarc-André Lureau# Our module code doesn't support Windows 173121e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then 173221e709aaSMarc-André Lureau error_exit "Modules are not available for Windows" 173321e709aaSMarc-André Lureaufi 173421e709aaSMarc-André Lureau 1735bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled 1736bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then 1737bd83c861SChristian Ehrhardt error_exit "Can't enable module-upgrades as Modules are not enabled" 1738bd83c861SChristian Ehrhardtfi 1739bd83c861SChristian Ehrhardt 17405f2453acSAlex Bennée# Static linking is not possible with plugins, modules or PIE 174140d6444eSAvi Kivityif test "$static" = "yes" ; then 1742aa0d1f44SPaolo Bonzini if test "$modules" = "yes" ; then 1743aa0d1f44SPaolo Bonzini error_exit "static and modules are mutually incompatible" 1744aa0d1f44SPaolo Bonzini fi 17455f2453acSAlex Bennée if test "$plugins" = "yes"; then 17465f2453acSAlex Bennée error_exit "static and plugins are mutually incompatible" 1747ba4dd2aaSAlex Bennée else 1748ba4dd2aaSAlex Bennée plugins="no" 17495f2453acSAlex Bennée fi 175040d6444eSAvi Kivityfi 175140d6444eSAvi Kivity 1752768b7855SEmilio G. Cota# Unconditional check for compiler __thread support 1753768b7855SEmilio G. Cota cat > $TMPC << EOF 1754768b7855SEmilio G. Cotastatic __thread int tls_var; 1755768b7855SEmilio G. Cotaint main(void) { return tls_var; } 1756768b7855SEmilio G. CotaEOF 1757768b7855SEmilio G. Cota 1758768b7855SEmilio G. Cotaif ! compile_prog "-Werror" "" ; then 1759768b7855SEmilio G. Cota error_exit "Your compiler does not support the __thread specifier for " \ 1760768b7855SEmilio G. Cota "Thread-Local Storage (TLS). Please upgrade to a version that does." 1761768b7855SEmilio G. Cotafi 1762768b7855SEmilio G. Cota 176340d6444eSAvi Kivitycat > $TMPC << EOF 176421d4a791SAvi Kivity 176521d4a791SAvi Kivity#ifdef __linux__ 176621d4a791SAvi Kivity# define THREAD __thread 176721d4a791SAvi Kivity#else 176821d4a791SAvi Kivity# define THREAD 176921d4a791SAvi Kivity#endif 177021d4a791SAvi Kivitystatic THREAD int tls_var; 177121d4a791SAvi Kivityint main(void) { return tls_var; } 177240d6444eSAvi KivityEOF 1773b2634124SRichard Henderson 1774*ffd205efSJessica Clarke# Check we support -fno-pie and -no-pie first; we will need the former for 1775*ffd205efSJessica Clarke# building ROMs, and both for everything if --disable-pie is passed. 1776412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then 1777412aeacdSAlex Bennée CFLAGS_NOPIE="-fno-pie" 1778*ffd205efSJessica Clarke LDFLAGS_NOPIE="-no-pie" 1779412aeacdSAlex Bennéefi 1780412aeacdSAlex Bennée 178112781462SRichard Hendersonif test "$static" = "yes"; then 1782eca7a8e6SRichard Henderson if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then 17835770e8afSPaolo Bonzini CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 178412781462SRichard Henderson QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS" 178512781462SRichard Henderson pie="yes" 178612781462SRichard Henderson elif test "$pie" = "yes"; then 178712781462SRichard Henderson error_exit "-static-pie not available due to missing toolchain support" 178812781462SRichard Henderson else 178912781462SRichard Henderson QEMU_LDFLAGS="-static $QEMU_LDFLAGS" 179012781462SRichard Henderson pie="no" 179112781462SRichard Henderson fi 179212781462SRichard Hendersonelif test "$pie" = "no"; then 17935770e8afSPaolo Bonzini CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS" 1794*ffd205efSJessica Clarke CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS" 1795eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then 17965770e8afSPaolo Bonzini CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 17975770e8afSPaolo Bonzini CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS" 179840d6444eSAvi Kivity pie="yes" 17992c674109SRichard Hendersonelif test "$pie" = "yes"; then 180076ad07a4SPeter Maydell error_exit "PIE not available due to missing toolchain support" 180140d6444eSAvi Kivityelse 180240d6444eSAvi Kivity echo "Disabling PIE due to missing toolchain support" 180340d6444eSAvi Kivity pie="no" 180440d6444eSAvi Kivityfi 180540d6444eSAvi Kivity 1806e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW. 1807e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too. 1808e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 1809e6cbd751SRichard Henderson QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" 1810e6cbd751SRichard Hendersonfi 1811e6cbd751SRichard Henderson 181209dada40SPaolo Bonzini########################################## 181309dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains 181409dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit 181509dada40SPaolo Bonzini# specification is necessary 181609dada40SPaolo Bonzini 181709dada40SPaolo Bonziniif test "$cpu" = "i386"; then 181809dada40SPaolo Bonzini cat > $TMPC << EOF 181909dada40SPaolo Bonzinistatic int sfaa(int *ptr) 182009dada40SPaolo Bonzini{ 182109dada40SPaolo Bonzini return __sync_fetch_and_and(ptr, 0); 182209dada40SPaolo Bonzini} 182309dada40SPaolo Bonzini 182409dada40SPaolo Bonziniint main(void) 182509dada40SPaolo Bonzini{ 182609dada40SPaolo Bonzini int val = 42; 18271405b629SStefan Weil val = __sync_val_compare_and_swap(&val, 0, 1); 182809dada40SPaolo Bonzini sfaa(&val); 182909dada40SPaolo Bonzini return val; 183009dada40SPaolo Bonzini} 183109dada40SPaolo BonziniEOF 183209dada40SPaolo Bonzini if ! compile_prog "" "" ; then 183309dada40SPaolo Bonzini QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 183409dada40SPaolo Bonzini fi 183509dada40SPaolo Bonzinifi 183609dada40SPaolo Bonzini 183756267b62SPhilippe Mathieu-Daudéif test "$tcg" = "enabled"; then 183856267b62SPhilippe Mathieu-Daudé git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" 183956267b62SPhilippe Mathieu-Daudé git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" 184056267b62SPhilippe Mathieu-Daudéfi 184156267b62SPhilippe Mathieu-Daudé 1842afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then 1843fdb75aefSPaolo Bonzini default_targets=yes 1844d880a3baSPaolo Bonzini for target in $default_target_list; do 1845d880a3baSPaolo Bonzini target_list="$target_list $target" 1846d880a3baSPaolo Bonzini done 1847d880a3baSPaolo Bonzini target_list="${target_list# }" 1848121afa9eSAnthony Liguorielse 1849fdb75aefSPaolo Bonzini default_targets=no 185089138857SStefan Weil target_list=$(echo "$target_list" | sed -e 's/,/ /g') 1851d880a3baSPaolo Bonzini for target in $target_list; do 185225b48338SPeter Maydell # Check that we recognised the target name; this allows a more 185325b48338SPeter Maydell # friendly error message than if we let it fall through. 185425b48338SPeter Maydell case " $default_target_list " in 185525b48338SPeter Maydell *" $target "*) 185625b48338SPeter Maydell ;; 185725b48338SPeter Maydell *) 185825b48338SPeter Maydell error_exit "Unknown target name '$target'" 185925b48338SPeter Maydell ;; 186025b48338SPeter Maydell esac 186125b48338SPeter Maydell done 1862d880a3baSPaolo Bonzinifi 186325b48338SPeter Maydell 1864fdb75aefSPaolo Bonzinifor target in $target_list; do 1865fdb75aefSPaolo Bonzini # if a deprecated target is enabled we note it here 1866fdb75aefSPaolo Bonzini if echo "$deprecated_targets_list" | grep -q "$target"; then 1867fdb75aefSPaolo Bonzini add_to deprecated_features $target 1868fdb75aefSPaolo Bonzini fi 1869fdb75aefSPaolo Bonzinidone 1870fdb75aefSPaolo Bonzini 1871f55fe278SPaolo Bonzini# see if system emulation was really requested 1872f55fe278SPaolo Bonzinicase " $target_list " in 1873f55fe278SPaolo Bonzini *"-softmmu "*) softmmu=yes 1874f55fe278SPaolo Bonzini ;; 1875f55fe278SPaolo Bonzini *) softmmu=no 1876f55fe278SPaolo Bonzini ;; 1877f55fe278SPaolo Bonziniesac 18785327cf48Sbellard 1879249247c9SJuan Quintelafeature_not_found() { 1880249247c9SJuan Quintela feature=$1 188121684af0SStewart Smith remedy=$2 1882249247c9SJuan Quintela 188376ad07a4SPeter Maydell error_exit "User requested feature $feature" \ 188421684af0SStewart Smith "configure was not able to find it." \ 188521684af0SStewart Smith "$remedy" 1886249247c9SJuan Quintela} 1887249247c9SJuan Quintela 18887d13299dSbellard# --- 18897d13299dSbellard# big/little endian test 18907d13299dSbellardcat > $TMPC << EOF 1891659eb157SThomas Huth#include <stdio.h> 189261cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 189361cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 1894659eb157SThomas Huthint main(int argc, char *argv[]) 1895659eb157SThomas Huth{ 1896659eb157SThomas Huth return printf("%s %s\n", (char *)big_endian, (char *)little_endian); 18977d13299dSbellard} 18987d13299dSbellardEOF 18997d13299dSbellard 1900659eb157SThomas Huthif compile_prog ; then 1901659eb157SThomas Huth if strings -a $TMPE | grep -q BiGeNdIaN ; then 190261cc919fSMike Frysinger bigendian="yes" 1903659eb157SThomas Huth elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then 190461cc919fSMike Frysinger bigendian="no" 19057d13299dSbellard else 19067d13299dSbellard echo big/little test failed 1907659eb157SThomas Huth exit 1 19087d13299dSbellard fi 19097d13299dSbellardelse 191061cc919fSMike Frysinger echo big/little test failed 1911659eb157SThomas Huth exit 1 19127d13299dSbellardfi 19137d13299dSbellard 1914b0a47e79SJuan Quintela########################################## 1915e10ee3f5SPhilippe Mathieu-Daudé# system tools 1916e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then 1917e10ee3f5SPhilippe Mathieu-Daudé if test "$softmmu" = "no"; then 1918e10ee3f5SPhilippe Mathieu-Daudé want_tools=no 1919e10ee3f5SPhilippe Mathieu-Daudé else 1920e10ee3f5SPhilippe Mathieu-Daudé want_tools=yes 1921e10ee3f5SPhilippe Mathieu-Daudé fi 1922e10ee3f5SPhilippe Mathieu-Daudéfi 1923e10ee3f5SPhilippe Mathieu-Daudé 1924e10ee3f5SPhilippe Mathieu-Daudé########################################## 1925015a33bdSGonglei# L2TPV3 probe 1926015a33bdSGonglei 1927015a33bdSGongleicat > $TMPC <<EOF 1928015a33bdSGonglei#include <sys/socket.h> 1929bff6cb72SMichael Tokarev#include <linux/ip.h> 1930015a33bdSGongleiint main(void) { return sizeof(struct mmsghdr); } 1931015a33bdSGongleiEOF 1932015a33bdSGongleiif compile_prog "" "" ; then 1933015a33bdSGonglei l2tpv3=yes 1934015a33bdSGongleielse 1935015a33bdSGonglei l2tpv3=no 1936015a33bdSGongleifi 1937015a33bdSGonglei 1938299e6f19SPaolo Bonzini######################################### 1939299e6f19SPaolo Bonzini# vhost interdependencies and host support 1940299e6f19SPaolo Bonzini 1941299e6f19SPaolo Bonzini# vhost backends 1942d88618f7SStefan Hajnocziif test "$vhost_user" = "yes" && test "$linux" != "yes"; then 1943d88618f7SStefan Hajnoczi error_exit "vhost-user is only available on Linux" 1944299e6f19SPaolo Bonzinifi 1945108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux 1946108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then 1947108a6481SCindy Lu error_exit "vhost-vdpa is only available on Linux" 1948108a6481SCindy Lufi 1949299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux 1950299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then 1951299e6f19SPaolo Bonzini error_exit "vhost-kernel is only available on Linux" 1952299e6f19SPaolo Bonzinifi 1953299e6f19SPaolo Bonzini 1954299e6f19SPaolo Bonzini# vhost-kernel devices 1955299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel 1956299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then 1957299e6f19SPaolo Bonzini error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" 1958299e6f19SPaolo Bonzinifi 1959299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel 1960299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then 1961299e6f19SPaolo Bonzini error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" 1962299e6f19SPaolo Bonzinifi 1963299e6f19SPaolo Bonzini 1964299e6f19SPaolo Bonzini# vhost-user backends 1965299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user 1966299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then 1967299e6f19SPaolo Bonzini error_exit "--enable-vhost-net-user requires --enable-vhost-user" 1968299e6f19SPaolo Bonzinifi 1969299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user 1970299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then 1971299e6f19SPaolo Bonzini error_exit "--enable-vhost-crypto requires --enable-vhost-user" 1972299e6f19SPaolo Bonzinifi 197398fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user 197498fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then 197598fc1adaSDr. David Alan Gilbert error_exit "--enable-vhost-user-fs requires --enable-vhost-user" 197698fc1adaSDr. David Alan Gilbertfi 1977108a6481SCindy Lu#vhost-vdpa backends 1978108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa 1979108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then 1980108a6481SCindy Lu error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" 1981108a6481SCindy Lufi 1982299e6f19SPaolo Bonzini 198340bc0ca9SLaurent Vivier# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity 1984299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then 1985299e6f19SPaolo Bonzini test "$vhost_net_user" = "yes" && vhost_net=yes 198640bc0ca9SLaurent Vivier test "$vhost_net_vdpa" = "yes" && vhost_net=yes 1987299e6f19SPaolo Bonzini test "$vhost_kernel" = "yes" && vhost_net=yes 1988299e6f19SPaolo Bonzinifi 1989299e6f19SPaolo Bonzini 1990015a33bdSGonglei########################################## 1991779ab5e3SStefan Weil# pkg-config probe 1992779ab5e3SStefan Weil 1993779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then 199476ad07a4SPeter Maydell error_exit "pkg-config binary '$pkg_config_exe' not found" 1995779ab5e3SStefan Weilfi 1996779ab5e3SStefan Weil 1997779ab5e3SStefan Weil########################################## 1998b0a47e79SJuan Quintela# NPTL probe 1999b0a47e79SJuan Quintela 200024cb36a6SPeter Maydellif test "$linux_user" = "yes"; then 2001bd0c5661Spbrook cat > $TMPC <<EOF 2002bd0c5661Spbrook#include <sched.h> 200330813ceaSpbrook#include <linux/futex.h> 2004182eacc0SStefan Weilint main(void) { 2005bd0c5661Spbrook#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2006bd0c5661Spbrook#error bork 2007bd0c5661Spbrook#endif 2008182eacc0SStefan Weil return 0; 2009bd0c5661Spbrook} 2010bd0c5661SpbrookEOF 201124cb36a6SPeter Maydell if ! compile_object ; then 201221684af0SStewart Smith feature_not_found "nptl" "Install glibc and linux kernel headers." 2013b0a47e79SJuan Quintela fi 2014bd0c5661Spbrookfi 2015bd0c5661Spbrook 2016ac62922eSbalrog########################################## 2017e37630caSaliguori# xen probe 2018e37630caSaliguori 20191badb709SPaolo Bonziniif test "$xen" != "disabled" ; then 2020c1cdd9d5SJuergen Gross # Check whether Xen library path is specified via --extra-ldflags to avoid 2021c1cdd9d5SJuergen Gross # overriding this setting with pkg-config output. If not, try pkg-config 2022c1cdd9d5SJuergen Gross # to obtain all needed flags. 2023c1cdd9d5SJuergen Gross 2024c1cdd9d5SJuergen Gross if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2025c1cdd9d5SJuergen Gross $pkg_config --exists xencontrol ; then 2026c1cdd9d5SJuergen Gross xen_ctrl_version="$(printf '%d%02d%02d' \ 2027c1cdd9d5SJuergen Gross $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 20281badb709SPaolo Bonzini xen=enabled 20295b6a8f43SMichael Tokarev xen_pc="xencontrol xenstore xenforeignmemory xengnttab" 2030c1cdd9d5SJuergen Gross xen_pc="$xen_pc xenevtchn xendevicemodel" 203158ea9a7aSAnthony PERARD if $pkg_config --exists xentoolcore; then 203258ea9a7aSAnthony PERARD xen_pc="$xen_pc xentoolcore" 203358ea9a7aSAnthony PERARD fi 2034582ea95fSMarc-André Lureau xen_cflags="$($pkg_config --cflags $xen_pc)" 2035582ea95fSMarc-André Lureau xen_libs="$($pkg_config --libs $xen_pc)" 2036c1cdd9d5SJuergen Gross else 2037c1cdd9d5SJuergen Gross 20385b6a8f43SMichael Tokarev xen_libs="-lxenstore -lxenctrl" 2039d9506cabSAnthony PERARD xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2040d5b93ddfSAnthony PERARD 204150ced5b3SStefan Weil # First we test whether Xen headers and libraries are available. 204250ced5b3SStefan Weil # If no, we are done and there is no Xen support. 204350ced5b3SStefan Weil # If yes, more tests are run to detect the Xen version. 204450ced5b3SStefan Weil 204550ced5b3SStefan Weil # Xen (any) 204650ced5b3SStefan Weil cat > $TMPC <<EOF 204750ced5b3SStefan Weil#include <xenctrl.h> 204850ced5b3SStefan Weilint main(void) { 204950ced5b3SStefan Weil return 0; 205050ced5b3SStefan Weil} 205150ced5b3SStefan WeilEOF 205250ced5b3SStefan Weil if ! compile_prog "" "$xen_libs" ; then 205350ced5b3SStefan Weil # Xen not found 20541badb709SPaolo Bonzini if test "$xen" = "enabled" ; then 205521684af0SStewart Smith feature_not_found "xen" "Install xen devel" 205650ced5b3SStefan Weil fi 20571badb709SPaolo Bonzini xen=disabled 205850ced5b3SStefan Weil 2059d5b93ddfSAnthony PERARD # Xen unstable 206069deef08SPeter Maydell elif 206169deef08SPeter Maydell cat > $TMPC <<EOF && 20622cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API 20632cbf8903SRoss Lagerwall#define __XEN_TOOLS__ 20642cbf8903SRoss Lagerwall#include <xendevicemodel.h> 2065d3c49ebbSPaul Durrant#include <xenforeignmemory.h> 20662cbf8903SRoss Lagerwallint main(void) { 20672cbf8903SRoss Lagerwall xendevicemodel_handle *xd; 2068d3c49ebbSPaul Durrant xenforeignmemory_handle *xfmem; 20692cbf8903SRoss Lagerwall 20702cbf8903SRoss Lagerwall xd = xendevicemodel_open(0, 0); 20712cbf8903SRoss Lagerwall xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 20722cbf8903SRoss Lagerwall 2073d3c49ebbSPaul Durrant xfmem = xenforeignmemory_open(0, 0); 2074d3c49ebbSPaul Durrant xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2075d3c49ebbSPaul Durrant 20762cbf8903SRoss Lagerwall return 0; 20772cbf8903SRoss Lagerwall} 20782cbf8903SRoss LagerwallEOF 20792cbf8903SRoss Lagerwall compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 20802cbf8903SRoss Lagerwall then 20812cbf8903SRoss Lagerwall xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 20822cbf8903SRoss Lagerwall xen_ctrl_version=41100 20831badb709SPaolo Bonzini xen=enabled 20842cbf8903SRoss Lagerwall elif 20852cbf8903SRoss Lagerwall cat > $TMPC <<EOF && 20865ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API 20875ba3d756SIgor Druzhinin#include <xenforeignmemory.h> 208858ea9a7aSAnthony PERARD#include <xentoolcore.h> 20895ba3d756SIgor Druzhininint main(void) { 20905ba3d756SIgor Druzhinin xenforeignmemory_handle *xfmem; 20915ba3d756SIgor Druzhinin 20925ba3d756SIgor Druzhinin xfmem = xenforeignmemory_open(0, 0); 20935ba3d756SIgor Druzhinin xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 209458ea9a7aSAnthony PERARD xentoolcore_restrict_all(0); 20955ba3d756SIgor Druzhinin 20965ba3d756SIgor Druzhinin return 0; 20975ba3d756SIgor Druzhinin} 20985ba3d756SIgor DruzhininEOF 209958ea9a7aSAnthony PERARD compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 21005ba3d756SIgor Druzhinin then 210158ea9a7aSAnthony PERARD xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 21025ba3d756SIgor Druzhinin xen_ctrl_version=41000 21031badb709SPaolo Bonzini xen=enabled 21045ba3d756SIgor Druzhinin elif 21055ba3d756SIgor Druzhinin cat > $TMPC <<EOF && 2106da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API 2107da8090ccSPaul Durrant#define __XEN_TOOLS__ 2108da8090ccSPaul Durrant#include <xendevicemodel.h> 2109da8090ccSPaul Durrantint main(void) { 2110da8090ccSPaul Durrant xendevicemodel_handle *xd; 2111da8090ccSPaul Durrant 2112da8090ccSPaul Durrant xd = xendevicemodel_open(0, 0); 2113da8090ccSPaul Durrant xendevicemodel_close(xd); 2114da8090ccSPaul Durrant 2115da8090ccSPaul Durrant return 0; 2116da8090ccSPaul Durrant} 2117da8090ccSPaul DurrantEOF 2118da8090ccSPaul Durrant compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2119da8090ccSPaul Durrant then 2120da8090ccSPaul Durrant xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2121f1167ee6SJuergen Gross xen_ctrl_version=40900 21221badb709SPaolo Bonzini xen=enabled 2123da8090ccSPaul Durrant elif 2124da8090ccSPaul Durrant cat > $TMPC <<EOF && 21255eeb39c2SIan Campbell/* 21265eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat 21275eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given. 2128b6eb9b45SPaulina Szubarczyk * 2129b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and 2130b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented. 2131b6eb9b45SPaulina Szubarczyk */ 2132b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API 2133b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API 2134b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2135b6eb9b45SPaulina Szubarczyk#include <xenctrl.h> 2136b6eb9b45SPaulina Szubarczyk#include <xenstore.h> 2137b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h> 2138b6eb9b45SPaulina Szubarczyk#include <xengnttab.h> 2139b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h> 2140b6eb9b45SPaulina Szubarczyk#include <stdint.h> 2141b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h> 2142b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS) 2143b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined 2144b6eb9b45SPaulina Szubarczyk#endif 2145b6eb9b45SPaulina Szubarczykint main(void) { 2146b6eb9b45SPaulina Szubarczyk xc_interface *xc = NULL; 2147b6eb9b45SPaulina Szubarczyk xenforeignmemory_handle *xfmem; 2148b6eb9b45SPaulina Szubarczyk xenevtchn_handle *xe; 2149b6eb9b45SPaulina Szubarczyk xengnttab_handle *xg; 2150b6eb9b45SPaulina Szubarczyk xengnttab_grant_copy_segment_t* seg = NULL; 2151b6eb9b45SPaulina Szubarczyk 2152b6eb9b45SPaulina Szubarczyk xs_daemon_open(); 2153b6eb9b45SPaulina Szubarczyk 2154b6eb9b45SPaulina Szubarczyk xc = xc_interface_open(0, 0, 0); 2155b6eb9b45SPaulina Szubarczyk xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2156b6eb9b45SPaulina Szubarczyk xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2157b6eb9b45SPaulina Szubarczyk xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2158b6eb9b45SPaulina Szubarczyk xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2159b6eb9b45SPaulina Szubarczyk 2160b6eb9b45SPaulina Szubarczyk xfmem = xenforeignmemory_open(0, 0); 2161b6eb9b45SPaulina Szubarczyk xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2162b6eb9b45SPaulina Szubarczyk 2163b6eb9b45SPaulina Szubarczyk xe = xenevtchn_open(0, 0); 2164b6eb9b45SPaulina Szubarczyk xenevtchn_fd(xe); 2165b6eb9b45SPaulina Szubarczyk 2166b6eb9b45SPaulina Szubarczyk xg = xengnttab_open(0, 0); 2167b6eb9b45SPaulina Szubarczyk xengnttab_grant_copy(xg, 0, seg); 2168b6eb9b45SPaulina Szubarczyk 2169b6eb9b45SPaulina Szubarczyk return 0; 2170b6eb9b45SPaulina Szubarczyk} 2171b6eb9b45SPaulina SzubarczykEOF 2172b6eb9b45SPaulina Szubarczyk compile_prog "" "$xen_libs $xen_stable_libs" 2173b6eb9b45SPaulina Szubarczyk then 2174f1167ee6SJuergen Gross xen_ctrl_version=40800 21751badb709SPaolo Bonzini xen=enabled 2176b6eb9b45SPaulina Szubarczyk elif 2177b6eb9b45SPaulina Szubarczyk cat > $TMPC <<EOF && 2178b6eb9b45SPaulina Szubarczyk/* 2179b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat 2180b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given. 21815eeb39c2SIan Campbell */ 21825eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API 21835eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API 21845eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API 21855eeb39c2SIan Campbell#include <xenctrl.h> 21865eeb39c2SIan Campbell#include <xenstore.h> 21875eeb39c2SIan Campbell#include <xenevtchn.h> 21885eeb39c2SIan Campbell#include <xengnttab.h> 21895eeb39c2SIan Campbell#include <xenforeignmemory.h> 21905eeb39c2SIan Campbell#include <stdint.h> 21915eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h> 21925eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS) 21935eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined 21945eeb39c2SIan Campbell#endif 21955eeb39c2SIan Campbellint main(void) { 21965eeb39c2SIan Campbell xc_interface *xc = NULL; 21975eeb39c2SIan Campbell xenforeignmemory_handle *xfmem; 21985eeb39c2SIan Campbell xenevtchn_handle *xe; 21995eeb39c2SIan Campbell xengnttab_handle *xg; 22005eeb39c2SIan Campbell 22015eeb39c2SIan Campbell xs_daemon_open(); 22025eeb39c2SIan Campbell 22035eeb39c2SIan Campbell xc = xc_interface_open(0, 0, 0); 22045eeb39c2SIan Campbell xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 22055eeb39c2SIan Campbell xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 22065eeb39c2SIan Campbell xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 22075eeb39c2SIan Campbell xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 22085eeb39c2SIan Campbell 22095eeb39c2SIan Campbell xfmem = xenforeignmemory_open(0, 0); 22105eeb39c2SIan Campbell xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 22115eeb39c2SIan Campbell 22125eeb39c2SIan Campbell xe = xenevtchn_open(0, 0); 22135eeb39c2SIan Campbell xenevtchn_fd(xe); 22145eeb39c2SIan Campbell 22155eeb39c2SIan Campbell xg = xengnttab_open(0, 0); 22165eeb39c2SIan Campbell xengnttab_map_grant_ref(xg, 0, 0, 0); 22175eeb39c2SIan Campbell 22185eeb39c2SIan Campbell return 0; 22195eeb39c2SIan Campbell} 22205eeb39c2SIan CampbellEOF 22215eeb39c2SIan Campbell compile_prog "" "$xen_libs $xen_stable_libs" 22225eeb39c2SIan Campbell then 2223f1167ee6SJuergen Gross xen_ctrl_version=40701 22241badb709SPaolo Bonzini xen=enabled 2225cdadde39SRoger Pau Monne 2226cdadde39SRoger Pau Monne # Xen 4.6 2227cdadde39SRoger Pau Monne elif 2228cdadde39SRoger Pau Monne cat > $TMPC <<EOF && 2229cdadde39SRoger Pau Monne#include <xenctrl.h> 2230e108a3c1SAnthony PERARD#include <xenstore.h> 2231d5b93ddfSAnthony PERARD#include <stdint.h> 2232d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h> 2233d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS) 2234d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined 2235d5b93ddfSAnthony PERARD#endif 2236d5b93ddfSAnthony PERARDint main(void) { 2237d5b93ddfSAnthony PERARD xc_interface *xc; 2238d5b93ddfSAnthony PERARD xs_daemon_open(); 2239d5b93ddfSAnthony PERARD xc = xc_interface_open(0, 0, 0); 2240d5b93ddfSAnthony PERARD xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2241d5b93ddfSAnthony PERARD xc_gnttab_open(NULL, 0); 2242b87de24eSAnthony PERARD xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 22438688e065SStefano Stabellini xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2244d8b441a3SJan Beulich xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 224520a544c7SKonrad Rzeszutek Wilk xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2246d8b441a3SJan Beulich return 0; 2247d8b441a3SJan Beulich} 2248d8b441a3SJan BeulichEOF 2249d8b441a3SJan Beulich compile_prog "" "$xen_libs" 2250d8b441a3SJan Beulich then 2251f1167ee6SJuergen Gross xen_ctrl_version=40600 22521badb709SPaolo Bonzini xen=enabled 2253d8b441a3SJan Beulich 2254d8b441a3SJan Beulich # Xen 4.5 2255d8b441a3SJan Beulich elif 2256d8b441a3SJan Beulich cat > $TMPC <<EOF && 2257d8b441a3SJan Beulich#include <xenctrl.h> 2258d8b441a3SJan Beulich#include <xenstore.h> 2259d8b441a3SJan Beulich#include <stdint.h> 2260d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h> 2261d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS) 2262d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined 2263d8b441a3SJan Beulich#endif 2264d8b441a3SJan Beulichint main(void) { 2265d8b441a3SJan Beulich xc_interface *xc; 2266d8b441a3SJan Beulich xs_daemon_open(); 2267d8b441a3SJan Beulich xc = xc_interface_open(0, 0, 0); 2268d8b441a3SJan Beulich xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2269d8b441a3SJan Beulich xc_gnttab_open(NULL, 0); 2270d8b441a3SJan Beulich xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2271d8b441a3SJan Beulich xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 22723996e85cSPaul Durrant xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 22733996e85cSPaul Durrant return 0; 22743996e85cSPaul Durrant} 22753996e85cSPaul DurrantEOF 22763996e85cSPaul Durrant compile_prog "" "$xen_libs" 22773996e85cSPaul Durrant then 2278f1167ee6SJuergen Gross xen_ctrl_version=40500 22791badb709SPaolo Bonzini xen=enabled 22803996e85cSPaul Durrant 22813996e85cSPaul Durrant elif 22823996e85cSPaul Durrant cat > $TMPC <<EOF && 22833996e85cSPaul Durrant#include <xenctrl.h> 22843996e85cSPaul Durrant#include <xenstore.h> 22853996e85cSPaul Durrant#include <stdint.h> 22863996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h> 22873996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS) 22883996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined 22893996e85cSPaul Durrant#endif 22903996e85cSPaul Durrantint main(void) { 22913996e85cSPaul Durrant xc_interface *xc; 22923996e85cSPaul Durrant xs_daemon_open(); 22933996e85cSPaul Durrant xc = xc_interface_open(0, 0, 0); 22943996e85cSPaul Durrant xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 22953996e85cSPaul Durrant xc_gnttab_open(NULL, 0); 22963996e85cSPaul Durrant xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 22973996e85cSPaul Durrant xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 22988688e065SStefano Stabellini return 0; 22998688e065SStefano Stabellini} 23008688e065SStefano StabelliniEOF 23018688e065SStefano Stabellini compile_prog "" "$xen_libs" 230269deef08SPeter Maydell then 2303f1167ee6SJuergen Gross xen_ctrl_version=40200 23041badb709SPaolo Bonzini xen=enabled 23058688e065SStefano Stabellini 2306e37630caSaliguori else 23071badb709SPaolo Bonzini if test "$xen" = "enabled" ; then 2308edfb07edSIan Campbell feature_not_found "xen (unsupported version)" \ 2309edfb07edSIan Campbell "Install a supported xen (xen 4.2 or newer)" 2310fc321b4bSJuan Quintela fi 23111badb709SPaolo Bonzini xen=disabled 2312e37630caSaliguori fi 2313d5b93ddfSAnthony PERARD 23141badb709SPaolo Bonzini if test "$xen" = enabled; then 2315f1167ee6SJuergen Gross if test $xen_ctrl_version -ge 40701 ; then 2316582ea95fSMarc-André Lureau xen_libs="$xen_libs $xen_stable_libs " 23175eeb39c2SIan Campbell fi 2318d5b93ddfSAnthony PERARD fi 2319e37630caSaliguori fi 2320c1cdd9d5SJuergen Grossfi 2321e37630caSaliguori 2322d661d9a4SJustin Terry (VM)########################################## 23232da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries 23242da776dbSMichael R. Hinesif test "$rdma" != "no" ; then 23252da776dbSMichael R. Hines cat > $TMPC <<EOF 23262da776dbSMichael R. Hines#include <rdma/rdma_cma.h> 23272da776dbSMichael R. Hinesint main(void) { return 0; } 23282da776dbSMichael R. HinesEOF 2329ef6d4ccdSYuval Shaia rdma_libs="-lrdmacm -libverbs -libumad" 23302da776dbSMichael R. Hines if compile_prog "" "$rdma_libs" ; then 23312da776dbSMichael R. Hines rdma="yes" 23322da776dbSMichael R. Hines else 23332da776dbSMichael R. Hines if test "$rdma" = "yes" ; then 23342da776dbSMichael R. Hines error_exit \ 2335ef6d4ccdSYuval Shaia " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 23362da776dbSMichael R. Hines " Your options:" \ 2337ef6d4ccdSYuval Shaia " (1) Fast: Install infiniband packages (devel) from your distro." \ 23382da776dbSMichael R. Hines " (2) Cleanest: Install libraries from www.openfabrics.org" \ 23392da776dbSMichael R. Hines " (3) Also: Install softiwarp if you don't have RDMA hardware" 23402da776dbSMichael R. Hines fi 23412da776dbSMichael R. Hines rdma="no" 23422da776dbSMichael R. Hines fi 23432da776dbSMichael R. Hinesfi 23442da776dbSMichael R. Hines 234521ab34c9SMarcel Apfelbaum########################################## 234621ab34c9SMarcel Apfelbaum# PVRDMA detection 234721ab34c9SMarcel Apfelbaum 234821ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF && 234921ab34c9SMarcel Apfelbaum#include <sys/mman.h> 235021ab34c9SMarcel Apfelbaum 235121ab34c9SMarcel Apfelbaumint 235221ab34c9SMarcel Apfelbaummain(void) 235321ab34c9SMarcel Apfelbaum{ 235421ab34c9SMarcel Apfelbaum char buf = 0; 235521ab34c9SMarcel Apfelbaum void *addr = &buf; 235621ab34c9SMarcel Apfelbaum addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 235721ab34c9SMarcel Apfelbaum 235821ab34c9SMarcel Apfelbaum return 0; 235921ab34c9SMarcel Apfelbaum} 236021ab34c9SMarcel ApfelbaumEOF 236121ab34c9SMarcel Apfelbaum 236221ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then 236321ab34c9SMarcel Apfelbaum case "$pvrdma" in 236421ab34c9SMarcel Apfelbaum "") 236521ab34c9SMarcel Apfelbaum if compile_prog "" ""; then 236621ab34c9SMarcel Apfelbaum pvrdma="yes" 236721ab34c9SMarcel Apfelbaum else 236821ab34c9SMarcel Apfelbaum pvrdma="no" 236921ab34c9SMarcel Apfelbaum fi 237021ab34c9SMarcel Apfelbaum ;; 237121ab34c9SMarcel Apfelbaum "yes") 237221ab34c9SMarcel Apfelbaum if ! compile_prog "" ""; then 237321ab34c9SMarcel Apfelbaum error_exit "PVRDMA is not supported since mremap is not implemented" 237421ab34c9SMarcel Apfelbaum fi 237521ab34c9SMarcel Apfelbaum pvrdma="yes" 237621ab34c9SMarcel Apfelbaum ;; 237721ab34c9SMarcel Apfelbaum "no") 237821ab34c9SMarcel Apfelbaum pvrdma="no" 237921ab34c9SMarcel Apfelbaum ;; 238021ab34c9SMarcel Apfelbaum esac 238121ab34c9SMarcel Apfelbaumelse 238221ab34c9SMarcel Apfelbaum if test "$pvrdma" = "yes" ; then 238321ab34c9SMarcel Apfelbaum error_exit "PVRDMA requires rdma suppport" 238421ab34c9SMarcel Apfelbaum fi 238521ab34c9SMarcel Apfelbaum pvrdma="no" 238621ab34c9SMarcel Apfelbaumfi 238795c6bff3SBenoît Canet 2388ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported 2389ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then 2390ee108585SYuval Shaia 2391ee108585SYuval Shaiacat > $TMPC <<EOF && 2392ee108585SYuval Shaia#include <infiniband/verbs.h> 2393ee108585SYuval Shaia 2394ee108585SYuval Shaiaint 2395ee108585SYuval Shaiamain(void) 2396ee108585SYuval Shaia{ 2397ee108585SYuval Shaia struct ibv_mr *mr; 2398ee108585SYuval Shaia struct ibv_pd *pd = NULL; 2399ee108585SYuval Shaia size_t length = 10; 2400ee108585SYuval Shaia uint64_t iova = 0; 2401ee108585SYuval Shaia int access = 0; 2402ee108585SYuval Shaia void *addr = NULL; 2403ee108585SYuval Shaia 2404ee108585SYuval Shaia mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 2405ee108585SYuval Shaia 2406ee108585SYuval Shaia ibv_dereg_mr(mr); 2407ee108585SYuval Shaia 2408ee108585SYuval Shaia return 0; 2409ee108585SYuval Shaia} 2410ee108585SYuval ShaiaEOF 2411ee108585SYuval Shaia if ! compile_prog "" "-libverbs"; then 2412ee108585SYuval Shaia QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 2413ee108585SYuval Shaia fi 2414ee108585SYuval Shaiafi 2415ee108585SYuval Shaia 241695c6bff3SBenoît Canet########################################## 2417c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c 2418dce512deSChristoph Hellwigif test "$xfs" != "no" ; then 2419dce512deSChristoph Hellwig cat > $TMPC << EOF 2420ffc41d10SStefan Weil#include <stddef.h> /* NULL */ 2421dce512deSChristoph Hellwig#include <xfs/xfs.h> 2422dce512deSChristoph Hellwigint main(void) 2423dce512deSChristoph Hellwig{ 2424dce512deSChristoph Hellwig xfsctl(NULL, 0, 0, NULL); 2425dce512deSChristoph Hellwig return 0; 2426dce512deSChristoph Hellwig} 2427dce512deSChristoph HellwigEOF 2428dce512deSChristoph Hellwig if compile_prog "" "" ; then 2429dce512deSChristoph Hellwig xfs="yes" 2430dce512deSChristoph Hellwig else 2431dce512deSChristoph Hellwig if test "$xfs" = "yes" ; then 2432e3a6e0daSzhaolichang feature_not_found "xfs" "Install xfsprogs/xfslibs devel" 2433dce512deSChristoph Hellwig fi 2434dce512deSChristoph Hellwig xfs=no 2435dce512deSChristoph Hellwig fi 2436dce512deSChristoph Hellwigfi 2437dce512deSChristoph Hellwig 2438dce512deSChristoph Hellwig########################################## 2439ba4dd2aaSAlex Bennée# plugin linker support probe 2440ba4dd2aaSAlex Bennée 2441ba4dd2aaSAlex Bennéeif test "$plugins" != "no"; then 2442ba4dd2aaSAlex Bennée 2443ba4dd2aaSAlex Bennée ######################################### 2444ba4dd2aaSAlex Bennée # See if --dynamic-list is supported by the linker 2445ba4dd2aaSAlex Bennée 2446ba4dd2aaSAlex Bennée ld_dynamic_list="no" 2447ba4dd2aaSAlex Bennée cat > $TMPTXT <<EOF 2448ba4dd2aaSAlex Bennée{ 2449ba4dd2aaSAlex Bennée foo; 2450ba4dd2aaSAlex Bennée}; 2451ba4dd2aaSAlex BennéeEOF 2452ba4dd2aaSAlex Bennée 2453ba4dd2aaSAlex Bennée cat > $TMPC <<EOF 2454ba4dd2aaSAlex Bennée#include <stdio.h> 2455ba4dd2aaSAlex Bennéevoid foo(void); 2456ba4dd2aaSAlex Bennée 2457ba4dd2aaSAlex Bennéevoid foo(void) 2458ba4dd2aaSAlex Bennée{ 2459ba4dd2aaSAlex Bennée printf("foo\n"); 2460ba4dd2aaSAlex Bennée} 2461ba4dd2aaSAlex Bennée 2462ba4dd2aaSAlex Bennéeint main(void) 2463ba4dd2aaSAlex Bennée{ 2464ba4dd2aaSAlex Bennée foo(); 2465ba4dd2aaSAlex Bennée return 0; 2466ba4dd2aaSAlex Bennée} 2467ba4dd2aaSAlex BennéeEOF 2468ba4dd2aaSAlex Bennée 2469ba4dd2aaSAlex Bennée if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 2470ba4dd2aaSAlex Bennée ld_dynamic_list="yes" 2471ba4dd2aaSAlex Bennée fi 2472ba4dd2aaSAlex Bennée 2473ba4dd2aaSAlex Bennée ######################################### 2474ba4dd2aaSAlex Bennée # See if -exported_symbols_list is supported by the linker 2475ba4dd2aaSAlex Bennée 2476ba4dd2aaSAlex Bennée ld_exported_symbols_list="no" 2477ba4dd2aaSAlex Bennée cat > $TMPTXT <<EOF 2478ba4dd2aaSAlex Bennée _foo 2479ba4dd2aaSAlex BennéeEOF 2480ba4dd2aaSAlex Bennée 2481ba4dd2aaSAlex Bennée if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 2482ba4dd2aaSAlex Bennée ld_exported_symbols_list="yes" 2483ba4dd2aaSAlex Bennée fi 2484ba4dd2aaSAlex Bennée 2485ba4dd2aaSAlex Bennée if test "$ld_dynamic_list" = "no" && 2486ba4dd2aaSAlex Bennée test "$ld_exported_symbols_list" = "no" ; then 2487ba4dd2aaSAlex Bennée if test "$plugins" = "yes"; then 2488ba4dd2aaSAlex Bennée error_exit \ 2489ba4dd2aaSAlex Bennée "Plugin support requires dynamic linking and specifying a set of symbols " \ 2490ba4dd2aaSAlex Bennée "that are exported to plugins. Unfortunately your linker doesn't " \ 2491ba4dd2aaSAlex Bennée "support the flag (--dynamic-list or -exported_symbols_list) used " \ 2492ba4dd2aaSAlex Bennée "for this purpose." 2493ba4dd2aaSAlex Bennée else 2494ba4dd2aaSAlex Bennée plugins="no" 2495ba4dd2aaSAlex Bennée fi 2496ba4dd2aaSAlex Bennée else 2497ba4dd2aaSAlex Bennée plugins="yes" 2498ba4dd2aaSAlex Bennée fi 2499ba4dd2aaSAlex Bennéefi 2500ba4dd2aaSAlex Bennée 2501ba4dd2aaSAlex Bennée########################################## 2502e18df141SAnthony Liguori# glib support probe 2503a52d28afSPaolo Bonzini 2504b4c6036fSDaniel P. Berrangéglib_req_ver=2.56 2505aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0 2506aa0d1f44SPaolo Bonziniif test "$modules" = yes; then 2507a88afc64SGerd Hoffmann glib_modules="$glib_modules gmodule-export-2.0" 2508b906acacSPaolo Bonzinielif test "$plugins" = "yes"; then 2509b906acacSPaolo Bonzini glib_modules="$glib_modules gmodule-no-export-2.0" 251054cb65d8SEmilio G. Cotafi 2511e26110cfSFam Zheng 2512aa0d1f44SPaolo Bonzinifor i in $glib_modules; do 2513e26110cfSFam Zheng if $pkg_config --atleast-version=$glib_req_ver $i; then 251489138857SStefan Weil glib_cflags=$($pkg_config --cflags $i) 251589138857SStefan Weil glib_libs=$($pkg_config --libs $i) 2516e18df141SAnthony Liguori else 2517e26110cfSFam Zheng error_exit "glib-$glib_req_ver $i is required to compile QEMU" 2518e26110cfSFam Zheng fi 2519e26110cfSFam Zhengdone 2520e26110cfSFam Zheng 2521215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it 2522215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 2523215b0c2fSPaolo Bonzini 2524215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then 2525215b0c2fSPaolo Bonzini glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags" 2526215b0c2fSPaolo Bonzinifi 2527215b0c2fSPaolo Bonzini 252820cf7b8eSDenis Plotnikovif ! test "$gio" = "no"; then 252920cf7b8eSDenis Plotnikov pass=no 2530f876b765SMarc-André Lureau if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 2531f876b765SMarc-André Lureau gio_cflags=$($pkg_config --cflags gio-2.0) 2532f876b765SMarc-André Lureau gio_libs=$($pkg_config --libs gio-2.0) 253325a97a56SMarc-André Lureau gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 25345ecfb76cSPaolo Bonzini if ! has "$gdbus_codegen"; then 25350dba4897SMarc-André Lureau gdbus_codegen= 25360dba4897SMarc-André Lureau fi 253776346b62SPeter Maydell # Check that the libraries actually work -- Ubuntu 18.04 ships 253876346b62SPeter Maydell # with pkg-config --static --libs data for gio-2.0 that is missing 253976346b62SPeter Maydell # -lblkid and will give a link error. 254013ceae66SPeter Maydell cat > $TMPC <<EOF 254113ceae66SPeter Maydell#include <gio/gio.h> 254213ceae66SPeter Maydellint main(void) 254313ceae66SPeter Maydell{ 254413ceae66SPeter Maydell g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0); 254513ceae66SPeter Maydell return 0; 254613ceae66SPeter Maydell} 254713ceae66SPeter MaydellEOF 254813ceae66SPeter Maydell if compile_prog "$gio_cflags" "$gio_libs" ; then 254920cf7b8eSDenis Plotnikov pass=yes 255076346b62SPeter Maydell else 255120cf7b8eSDenis Plotnikov pass=no 2552f876b765SMarc-André Lureau fi 2553f876b765SMarc-André Lureau 255420cf7b8eSDenis Plotnikov if test "$pass" = "yes" && 255520cf7b8eSDenis Plotnikov $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 255625a97a56SMarc-André Lureau gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 255725a97a56SMarc-André Lureau gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 255825a97a56SMarc-André Lureau fi 255920cf7b8eSDenis Plotnikov fi 256020cf7b8eSDenis Plotnikov 256120cf7b8eSDenis Plotnikov if test "$pass" = "no"; then 256220cf7b8eSDenis Plotnikov if test "$gio" = "yes"; then 256320cf7b8eSDenis Plotnikov feature_not_found "gio" "Install libgio >= 2.0" 256420cf7b8eSDenis Plotnikov else 256520cf7b8eSDenis Plotnikov gio=no 256620cf7b8eSDenis Plotnikov fi 256720cf7b8eSDenis Plotnikov else 256820cf7b8eSDenis Plotnikov gio=yes 256920cf7b8eSDenis Plotnikov fi 257020cf7b8eSDenis Plotnikovfi 257125a97a56SMarc-André Lureau 2572977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the 2573977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches 2574977a82abSDaniel P. Berrange# problems on multi-arch where people try to build 2575977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers 2576977a82abSDaniel P. Berrangecat > $TMPC <<EOF 2577977a82abSDaniel P. Berrange#include <glib.h> 2578977a82abSDaniel P. Berrange#include <unistd.h> 2579977a82abSDaniel P. Berrange 2580977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \ 2581977a82abSDaniel P. Berrange typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 2582977a82abSDaniel P. Berrange 2583977a82abSDaniel P. Berrangeint main(void) { 2584977a82abSDaniel P. Berrange QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 2585977a82abSDaniel P. Berrange return 0; 2586977a82abSDaniel P. Berrange} 2587977a82abSDaniel P. BerrangeEOF 2588977a82abSDaniel P. Berrange 2589215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then 2590977a82abSDaniel P. Berrange error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 2591977a82abSDaniel P. Berrange "You probably need to set PKG_CONFIG_LIBDIR"\ 2592977a82abSDaniel P. Berrange "to point to the right pkg-config files for your"\ 2593977a82abSDaniel P. Berrange "build target" 2594977a82abSDaniel P. Berrangefi 2595977a82abSDaniel P. Berrange 25969bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2 25979bda600bSEric Blakecat > $TMPC << EOF 25989bda600bSEric Blake#include <glib.h> 25999bda600bSEric Blaketypedef struct Foo { 26009bda600bSEric Blake int i; 26019bda600bSEric Blake} Foo; 26029bda600bSEric Blakestatic void foo_free(Foo *f) 26039bda600bSEric Blake{ 26049bda600bSEric Blake g_free(f); 26059bda600bSEric Blake} 26069bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 26079bda600bSEric Blakeint main(void) { return 0; } 26089bda600bSEric BlakeEOF 26099bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 26109bda600bSEric Blake if cc_has_warning_flag "-Wno-unused-function"; then 26119bda600bSEric Blake glib_cflags="$glib_cflags -Wno-unused-function" 26125770e8afSPaolo Bonzini CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function" 26139bda600bSEric Blake fi 26149bda600bSEric Blakefi 26159bda600bSEric Blake 2616e26110cfSFam Zheng########################################## 2617e26110cfSFam Zheng# SHA command probe for modules 2618e26110cfSFam Zhengif test "$modules" = yes; then 2619e26110cfSFam Zheng shacmd_probe="sha1sum sha1 shasum" 2620e26110cfSFam Zheng for c in $shacmd_probe; do 26218ccefb91SFam Zheng if has $c; then 2622e26110cfSFam Zheng shacmd="$c" 2623e26110cfSFam Zheng break 2624e26110cfSFam Zheng fi 2625e26110cfSFam Zheng done 2626e26110cfSFam Zheng if test "$shacmd" = ""; then 2627e26110cfSFam Zheng error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 2628e26110cfSFam Zheng fi 2629e18df141SAnthony Liguorifi 2630e18df141SAnthony Liguori 2631e18df141SAnthony Liguori########################################## 2632b10d49d7SPino Toscano# libssh probe 2633b10d49d7SPino Toscanoif test "$libssh" != "no" ; then 2634b4c10fc6SThomas Huth if $pkg_config --exists "libssh >= 0.8.7"; then 2635b10d49d7SPino Toscano libssh_cflags=$($pkg_config libssh --cflags) 2636b10d49d7SPino Toscano libssh_libs=$($pkg_config libssh --libs) 2637b10d49d7SPino Toscano libssh=yes 26380a12ec87SRichard W.M. Jones else 2639b10d49d7SPino Toscano if test "$libssh" = "yes" ; then 2640b10d49d7SPino Toscano error_exit "libssh required for --enable-libssh" 26410a12ec87SRichard W.M. Jones fi 2642b10d49d7SPino Toscano libssh=no 26430a12ec87SRichard W.M. Jones fi 26440a12ec87SRichard W.M. Jonesfi 26450a12ec87SRichard W.M. Jones 26460a12ec87SRichard W.M. Jones########################################## 26477aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX 26483b8acc11SPaolo Bonzini 26497aaa6a16SPaolo Bonziniif test "$tpm" = ""; then 26507aaa6a16SPaolo Bonzini if test "$mingw32" = "yes"; then 26517aaa6a16SPaolo Bonzini tpm=no 26523b8acc11SPaolo Bonzini else 26537aaa6a16SPaolo Bonzini tpm=yes 26547aaa6a16SPaolo Bonzini fi 26557aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then 26567aaa6a16SPaolo Bonzini if test "$mingw32" = "yes" ; then 26577aaa6a16SPaolo Bonzini error_exit "TPM emulation only available on POSIX systems" 26587aaa6a16SPaolo Bonzini fi 26593b8acc11SPaolo Bonzinifi 26603b8acc11SPaolo Bonzini 26613b8acc11SPaolo Bonzini########################################## 2662f652e6afSaurel32# fdt probe 2663e169e1e1SPeter Maydell 2664fbb4121dSPaolo Bonzinicase "$fdt" in 2665fbb4121dSPaolo Bonzini auto | enabled | internal) 2666fbb4121dSPaolo Bonzini # Simpler to always update submodule, even if not needed. 2667aef45d51SDaniel P. Berrange git_submodules="${git_submodules} dtc" 2668fbb4121dSPaolo Bonzini ;; 2669fbb4121dSPaolo Bonziniesac 2670f652e6afSaurel32 267120ff075bSMichael Walle########################################## 26729d49bcf6SMarkus Armbruster# opengl probe (for sdl2, gtk) 2673b1546f32SGerd Hoffmann 2674da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then 2675bc6a3565SAkihiko Odaki epoxy=no 2676bc6a3565SAkihiko Odaki if $pkg_config epoxy; then 2677bc6a3565SAkihiko Odaki cat > $TMPC << EOF 2678bc6a3565SAkihiko Odaki#include <epoxy/egl.h> 2679bc6a3565SAkihiko Odakiint main(void) { return 0; } 2680bc6a3565SAkihiko OdakiEOF 2681bc6a3565SAkihiko Odaki if compile_prog "" "" ; then 2682bc6a3565SAkihiko Odaki epoxy=yes 2683bc6a3565SAkihiko Odaki fi 2684bc6a3565SAkihiko Odaki fi 2685bc6a3565SAkihiko Odaki 2686bc6a3565SAkihiko Odaki if test "$epoxy" = "yes" ; then 2687bc6a3565SAkihiko Odaki opengl_cflags="$($pkg_config --cflags epoxy)" 2688bc6a3565SAkihiko Odaki opengl_libs="$($pkg_config --libs epoxy)" 2689da076ffeSGerd Hoffmann opengl=yes 269020ff075bSMichael Walle else 2691da076ffeSGerd Hoffmann if test "$opengl" = "yes" ; then 2692bc6a3565SAkihiko Odaki feature_not_found "opengl" "Please install epoxy with EGL" 269320ff075bSMichael Walle fi 2694f676c67eSJeremy White opengl_cflags="" 2695da076ffeSGerd Hoffmann opengl_libs="" 2696da076ffeSGerd Hoffmann opengl=no 269720ff075bSMichael Walle fi 269820ff075bSMichael Wallefi 269920ff075bSMichael Walle 2700dcc38d1cSMarcelo Tosatti########################################## 2701a99d57bbSWanlong Gao# libnuma probe 2702a99d57bbSWanlong Gao 2703a99d57bbSWanlong Gaoif test "$numa" != "no" ; then 2704a99d57bbSWanlong Gao cat > $TMPC << EOF 2705a99d57bbSWanlong Gao#include <numa.h> 2706a99d57bbSWanlong Gaoint main(void) { return numa_available(); } 2707a99d57bbSWanlong GaoEOF 2708a99d57bbSWanlong Gao 2709a99d57bbSWanlong Gao if compile_prog "" "-lnuma" ; then 2710a99d57bbSWanlong Gao numa=yes 2711ab318051SMarc-André Lureau numa_libs="-lnuma" 2712a99d57bbSWanlong Gao else 2713a99d57bbSWanlong Gao if test "$numa" = "yes" ; then 2714a99d57bbSWanlong Gao feature_not_found "numa" "install numactl devel" 2715a99d57bbSWanlong Gao fi 2716a99d57bbSWanlong Gao numa=no 2717a99d57bbSWanlong Gao fi 2718a99d57bbSWanlong Gaofi 2719a99d57bbSWanlong Gao 2720955727d2SCortland Tölva# check for usbfs 2721955727d2SCortland Tölvahave_usbfs=no 2722955727d2SCortland Tölvaif test "$linux_user" = "yes"; then 272396566d09SThomas Petazzoni cat > $TMPC << EOF 272496566d09SThomas Petazzoni#include <linux/usbdevice_fs.h> 272596566d09SThomas Petazzoni 272696566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES 272796566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined" 272896566d09SThomas Petazzoni#endif 272996566d09SThomas Petazzoni 273096566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM 273196566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined" 273296566d09SThomas Petazzoni#endif 273396566d09SThomas Petazzoni 273496566d09SThomas Petazzoniint main(void) 273596566d09SThomas Petazzoni{ 273696566d09SThomas Petazzoni return 0; 273796566d09SThomas Petazzoni} 273896566d09SThomas PetazzoniEOF 273996566d09SThomas Petazzoni if compile_prog "" ""; then 2740955727d2SCortland Tölva have_usbfs=yes 2741955727d2SCortland Tölva fi 2742955727d2SCortland Tölvafi 2743751bcc39SMarc-André Lureau 2744de5071c5SBlue Swirl########################################## 2745d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win 2746d9840e25STomoki Sekiyama 2747e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 2748e633a5c6SEric Blake test "$vss_win32_sdk" != "no" ; then 2749d9840e25STomoki Sekiyama case "$vss_win32_sdk" in 2750690604f6SMichael Roth "") vss_win32_include="-isystem $source_path" ;; 2751d9840e25STomoki Sekiyama *\ *) # The SDK is installed in "Program Files" by default, but we cannot 2752d9840e25STomoki Sekiyama # handle path with spaces. So we symlink the headers into ".sdk/vss". 2753690604f6SMichael Roth vss_win32_include="-isystem $source_path/.sdk/vss" 2754d9840e25STomoki Sekiyama symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 2755d9840e25STomoki Sekiyama ;; 2756690604f6SMichael Roth *) vss_win32_include="-isystem $vss_win32_sdk" 2757d9840e25STomoki Sekiyama esac 2758d9840e25STomoki Sekiyama cat > $TMPC << EOF 2759d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__ 2760d9840e25STomoki Sekiyama#include <inc/win2003/vss.h> 2761d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; } 2762d9840e25STomoki SekiyamaEOF 2763d9840e25STomoki Sekiyama if compile_prog "$vss_win32_include" "" ; then 2764d9840e25STomoki Sekiyama guest_agent_with_vss="yes" 2765d9840e25STomoki Sekiyama QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 2766315d3184SFam Zheng libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 2767f33ca81fSMichael Roth qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 2768d9840e25STomoki Sekiyama else 2769d9840e25STomoki Sekiyama if test "$vss_win32_sdk" != "" ; then 2770d9840e25STomoki Sekiyama echo "ERROR: Please download and install Microsoft VSS SDK:" 2771d9840e25STomoki Sekiyama echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 2772d9840e25STomoki Sekiyama echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 2773d9840e25STomoki Sekiyama echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 2774d9840e25STomoki Sekiyama echo "ERROR: The headers are extracted in the directory \`inc'." 2775d9840e25STomoki Sekiyama feature_not_found "VSS support" 2776d9840e25STomoki Sekiyama fi 2777d9840e25STomoki Sekiyama guest_agent_with_vss="no" 2778d9840e25STomoki Sekiyama fi 2779d9840e25STomoki Sekiyamafi 2780d9840e25STomoki Sekiyama 2781d9840e25STomoki Sekiyama########################################## 2782d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified) 2783d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent 2784d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the 2785d9840e25STomoki Sekiyama# pre-compiled .tlb file is included. 2786d9840e25STomoki Sekiyama 2787e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 2788e633a5c6SEric Blake test "$guest_agent_with_vss" = "yes" ; then 2789d9840e25STomoki Sekiyama if test -z "$win_sdk"; then 2790d9840e25STomoki Sekiyama programfiles="$PROGRAMFILES" 2791d9840e25STomoki Sekiyama test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 2792d9840e25STomoki Sekiyama if test -n "$programfiles"; then 2793d9840e25STomoki Sekiyama win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 2794d9840e25STomoki Sekiyama else 2795d9840e25STomoki Sekiyama feature_not_found "Windows SDK" 2796d9840e25STomoki Sekiyama fi 2797d9840e25STomoki Sekiyama elif test "$win_sdk" = "no"; then 2798d9840e25STomoki Sekiyama win_sdk="" 2799d9840e25STomoki Sekiyama fi 2800d9840e25STomoki Sekiyamafi 2801d9840e25STomoki Sekiyama 2802d9840e25STomoki Sekiyama########################################## 280350cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h 2804e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 280550cbebb9SMichael Roth cat > $TMPC << EOF 280650cbebb9SMichael Roth#include <windows.h> 280750cbebb9SMichael Roth#include <ntddscsi.h> 280850cbebb9SMichael Rothint main(void) { 280950cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS) 281050cbebb9SMichael Roth#error Missing required ioctl definitions 281150cbebb9SMichael Roth#endif 281250cbebb9SMichael Roth SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 281350cbebb9SMichael Roth return addr.Lun; 281450cbebb9SMichael Roth} 281550cbebb9SMichael RothEOF 281650cbebb9SMichael Roth if compile_prog "" "" ; then 281750cbebb9SMichael Roth guest_agent_ntddscsi=yes 2818996b9cdcSMatt Hines libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 281950cbebb9SMichael Roth fi 282050cbebb9SMichael Rothfi 282150cbebb9SMichael Roth 282250cbebb9SMichael Roth########################################## 28238ca80760SRichard Henderson# capstone 28248ca80760SRichard Henderson 2825e219c499SRichard Hendersoncase "$capstone" in 28268b18cdbfSRichard Henderson auto | enabled | internal) 28278b18cdbfSRichard Henderson # Simpler to always update submodule, even if not needed. 2828e219c499SRichard Henderson git_submodules="${git_submodules} capstone" 2829e219c499SRichard Henderson ;; 2830e219c499SRichard Hendersonesac 28318ca80760SRichard Henderson 28328ca80760SRichard Henderson########################################## 2833519175a2SAlex Barcelo# check and set a backend for coroutine 2834d0e2fce5SAneesh Kumar K.V 28357c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback 283633c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows 283733c53c54SDaniel P. Berrange# specific one. 28387c2acc70SPeter Maydell 28397c2acc70SPeter Maydellucontext_works=no 2840d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then 2841d0e2fce5SAneesh Kumar K.V cat > $TMPC << EOF 2842d0e2fce5SAneesh Kumar K.V#include <ucontext.h> 2843cdf84806SPeter Maydell#ifdef __stub_makecontext 2844cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail 2845cdf84806SPeter Maydell#endif 284675cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; } 2847d0e2fce5SAneesh Kumar K.VEOF 2848d0e2fce5SAneesh Kumar K.V if compile_prog "" "" ; then 28497c2acc70SPeter Maydell ucontext_works=yes 2850d0e2fce5SAneesh Kumar K.V fi 2851519175a2SAlex Barcelofi 28527c2acc70SPeter Maydell 28537c2acc70SPeter Maydellif test "$coroutine" = ""; then 28547c2acc70SPeter Maydell if test "$mingw32" = "yes"; then 28557c2acc70SPeter Maydell coroutine=win32 28567c2acc70SPeter Maydell elif test "$ucontext_works" = "yes"; then 28577c2acc70SPeter Maydell coroutine=ucontext 2858519175a2SAlex Barcelo else 28597c2acc70SPeter Maydell coroutine=sigaltstack 28607c2acc70SPeter Maydell fi 28617c2acc70SPeter Maydellelse 28627c2acc70SPeter Maydell case $coroutine in 28637c2acc70SPeter Maydell windows) 28647c2acc70SPeter Maydell if test "$mingw32" != "yes"; then 28657c2acc70SPeter Maydell error_exit "'windows' coroutine backend only valid for Windows" 28667c2acc70SPeter Maydell fi 28677c2acc70SPeter Maydell # Unfortunately the user visible backend name doesn't match the 28687c2acc70SPeter Maydell # coroutine-*.c filename for this case, so we have to adjust it here. 28697c2acc70SPeter Maydell coroutine=win32 28707c2acc70SPeter Maydell ;; 28717c2acc70SPeter Maydell ucontext) 28727c2acc70SPeter Maydell if test "$ucontext_works" != "yes"; then 28737c2acc70SPeter Maydell feature_not_found "ucontext" 28747c2acc70SPeter Maydell fi 28757c2acc70SPeter Maydell ;; 287633c53c54SDaniel P. Berrange sigaltstack) 28777c2acc70SPeter Maydell if test "$mingw32" = "yes"; then 28787c2acc70SPeter Maydell error_exit "only the 'windows' coroutine backend is valid for Windows" 28797c2acc70SPeter Maydell fi 28807c2acc70SPeter Maydell ;; 28817c2acc70SPeter Maydell *) 288276ad07a4SPeter Maydell error_exit "unknown coroutine backend $coroutine" 28837c2acc70SPeter Maydell ;; 28847c2acc70SPeter Maydell esac 2885d0e2fce5SAneesh Kumar K.Vfi 2886d0e2fce5SAneesh Kumar K.V 288770c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then 288870c60c08SStefan Hajnoczi coroutine_pool=yes 288970c60c08SStefan Hajnoczifi 289070c60c08SStefan Hajnoczi 28917d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then 28927d992e4dSPeter Lieven if test "$coroutine_pool" = "yes"; then 28937d992e4dSPeter Lieven echo "WARN: disabling coroutine pool for stack usage debugging" 28947d992e4dSPeter Lieven coroutine_pool=no 28957d992e4dSPeter Lieven fi 28967d992e4dSPeter Lievenfi 28977d992e4dSPeter Lieven 28981e4f6065SDaniele Buono################################################## 28991e4f6065SDaniele Buono# SafeStack 29001e4f6065SDaniele Buono 29011e4f6065SDaniele Buono 29021e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then 29031e4f6065SDaniele Buonocat > $TMPC << EOF 29041e4f6065SDaniele Buonoint main(int argc, char *argv[]) 29051e4f6065SDaniele Buono{ 29061e4f6065SDaniele Buono#if ! __has_feature(safe_stack) 29071e4f6065SDaniele Buono#error SafeStack Disabled 29081e4f6065SDaniele Buono#endif 29091e4f6065SDaniele Buono return 0; 29101e4f6065SDaniele Buono} 29111e4f6065SDaniele BuonoEOF 29121e4f6065SDaniele Buono flag="-fsanitize=safe-stack" 29131e4f6065SDaniele Buono # Check that safe-stack is supported and enabled. 29141e4f6065SDaniele Buono if compile_prog "-Werror $flag" "$flag"; then 29151e4f6065SDaniele Buono # Flag needed both at compilation and at linking 29161e4f6065SDaniele Buono QEMU_CFLAGS="$QEMU_CFLAGS $flag" 29171e4f6065SDaniele Buono QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 29181e4f6065SDaniele Buono else 29191e4f6065SDaniele Buono error_exit "SafeStack not supported by your compiler" 29201e4f6065SDaniele Buono fi 29211e4f6065SDaniele Buono if test "$coroutine" != "ucontext"; then 29221e4f6065SDaniele Buono error_exit "SafeStack is only supported by the coroutine backend ucontext" 29231e4f6065SDaniele Buono fi 29241e4f6065SDaniele Buonoelse 29251e4f6065SDaniele Buonocat > $TMPC << EOF 29261e4f6065SDaniele Buonoint main(int argc, char *argv[]) 29271e4f6065SDaniele Buono{ 29281e4f6065SDaniele Buono#if defined(__has_feature) 29291e4f6065SDaniele Buono#if __has_feature(safe_stack) 29301e4f6065SDaniele Buono#error SafeStack Enabled 29311e4f6065SDaniele Buono#endif 29321e4f6065SDaniele Buono#endif 29331e4f6065SDaniele Buono return 0; 29341e4f6065SDaniele Buono} 29351e4f6065SDaniele BuonoEOF 29361e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then 29371e4f6065SDaniele Buono # Make sure that safe-stack is disabled 29381e4f6065SDaniele Buono if ! compile_prog "-Werror" ""; then 29391e4f6065SDaniele Buono # SafeStack was already enabled, try to explicitly remove the feature 29401e4f6065SDaniele Buono flag="-fno-sanitize=safe-stack" 29411e4f6065SDaniele Buono if ! compile_prog "-Werror $flag" "$flag"; then 29421e4f6065SDaniele Buono error_exit "Configure cannot disable SafeStack" 29431e4f6065SDaniele Buono fi 29441e4f6065SDaniele Buono QEMU_CFLAGS="$QEMU_CFLAGS $flag" 29451e4f6065SDaniele Buono QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 29461e4f6065SDaniele Buono fi 29471e4f6065SDaniele Buonoelse # "$safe_stack" = "" 29481e4f6065SDaniele Buono # Set safe_stack to yes or no based on pre-existing flags 29491e4f6065SDaniele Buono if compile_prog "-Werror" ""; then 29501e4f6065SDaniele Buono safe_stack="no" 29511e4f6065SDaniele Buono else 29521e4f6065SDaniele Buono safe_stack="yes" 29531e4f6065SDaniele Buono if test "$coroutine" != "ucontext"; then 29541e4f6065SDaniele Buono error_exit "SafeStack is only supported by the coroutine backend ucontext" 29551e4f6065SDaniele Buono fi 29561e4f6065SDaniele Buono fi 29571e4f6065SDaniele Buonofi 29581e4f6065SDaniele Buonofi 29597d992e4dSPeter Lieven 296076a347e1SRichard Henderson######################################## 296176a347e1SRichard Henderson# check if cpuid.h is usable. 296276a347e1SRichard Henderson 296376a347e1SRichard Hendersoncat > $TMPC << EOF 296476a347e1SRichard Henderson#include <cpuid.h> 296576a347e1SRichard Hendersonint main(void) { 2966774d566cSPeter Maydell unsigned a, b, c, d; 2967774d566cSPeter Maydell int max = __get_cpuid_max(0, 0); 2968774d566cSPeter Maydell 2969774d566cSPeter Maydell if (max >= 1) { 2970774d566cSPeter Maydell __cpuid(1, a, b, c, d); 2971774d566cSPeter Maydell } 2972774d566cSPeter Maydell 2973774d566cSPeter Maydell if (max >= 7) { 2974774d566cSPeter Maydell __cpuid_count(7, 0, a, b, c, d); 2975774d566cSPeter Maydell } 2976774d566cSPeter Maydell 297776a347e1SRichard Henderson return 0; 297876a347e1SRichard Henderson} 297976a347e1SRichard HendersonEOF 298076a347e1SRichard Hendersonif compile_prog "" "" ; then 298176a347e1SRichard Henderson cpuid_h=yes 298276a347e1SRichard Hendersonfi 298376a347e1SRichard Henderson 29845dd89908SRichard Henderson########################################## 29855dd89908SRichard Henderson# avx2 optimization requirement check 29865dd89908SRichard Henderson# 29875dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable, 29885dd89908SRichard Henderson# since we won't be able to select the new routines. 29895dd89908SRichard Henderson 2990e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 29915dd89908SRichard Henderson cat > $TMPC << EOF 29925dd89908SRichard Henderson#pragma GCC push_options 29935dd89908SRichard Henderson#pragma GCC target("avx2") 29945dd89908SRichard Henderson#include <cpuid.h> 29955dd89908SRichard Henderson#include <immintrin.h> 29965dd89908SRichard Hendersonstatic int bar(void *a) { 29975dd89908SRichard Henderson __m256i x = *(__m256i *)a; 29985dd89908SRichard Henderson return _mm256_testz_si256(x, x); 29995dd89908SRichard Henderson} 30005dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); } 30015dd89908SRichard HendersonEOF 30025b945f23SRichard Henderson if compile_object "-Werror" ; then 30035dd89908SRichard Henderson avx2_opt="yes" 300486583a07SLiam Merwick else 300586583a07SLiam Merwick avx2_opt="no" 30065dd89908SRichard Henderson fi 30075dd89908SRichard Hendersonfi 30085dd89908SRichard Henderson 30096b8cd447SRobert Hoo########################################## 30106b8cd447SRobert Hoo# avx512f optimization requirement check 30116b8cd447SRobert Hoo# 30126b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable, 30136b8cd447SRobert Hoo# since we won't be able to select the new routines. 30146b8cd447SRobert Hoo# by default, it is turned off. 30156b8cd447SRobert Hoo# if user explicitly want to enable it, check environment 30166b8cd447SRobert Hoo 30176b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 30186b8cd447SRobert Hoo cat > $TMPC << EOF 30196b8cd447SRobert Hoo#pragma GCC push_options 30206b8cd447SRobert Hoo#pragma GCC target("avx512f") 30216b8cd447SRobert Hoo#include <cpuid.h> 30226b8cd447SRobert Hoo#include <immintrin.h> 30236b8cd447SRobert Hoostatic int bar(void *a) { 30246b8cd447SRobert Hoo __m512i x = *(__m512i *)a; 30256b8cd447SRobert Hoo return _mm512_test_epi64_mask(x, x); 30266b8cd447SRobert Hoo} 30276b8cd447SRobert Hooint main(int argc, char *argv[]) 30286b8cd447SRobert Hoo{ 30296b8cd447SRobert Hoo return bar(argv[0]); 30306b8cd447SRobert Hoo} 30316b8cd447SRobert HooEOF 30325b945f23SRichard Henderson if ! compile_object "-Werror" ; then 30336b8cd447SRobert Hoo avx512f_opt="no" 30346b8cd447SRobert Hoo fi 30356b8cd447SRobert Hooelse 30366b8cd447SRobert Hoo avx512f_opt="no" 30376b8cd447SRobert Hoofi 30386b8cd447SRobert Hoo 3039f540166bSRichard Henderson######################################## 3040f540166bSRichard Henderson# check if __[u]int128_t is usable. 3041f540166bSRichard Henderson 3042f540166bSRichard Hendersonint128=no 3043f540166bSRichard Hendersoncat > $TMPC << EOF 3044f540166bSRichard Henderson__int128_t a; 3045f540166bSRichard Henderson__uint128_t b; 3046f540166bSRichard Hendersonint main (void) { 3047f540166bSRichard Henderson a = a + b; 3048f540166bSRichard Henderson b = a * b; 3049464e3671SPeter Maydell a = a * a; 3050f540166bSRichard Henderson return 0; 3051f540166bSRichard Henderson} 3052f540166bSRichard HendersonEOF 3053f540166bSRichard Hendersonif compile_prog "" "" ; then 3054f540166bSRichard Henderson int128=yes 3055f540166bSRichard Hendersonfi 305676a347e1SRichard Henderson 30577ebee43eSRichard Henderson######################################### 30587ebee43eSRichard Henderson# See if 128-bit atomic operations are supported. 30597ebee43eSRichard Henderson 30607ebee43eSRichard Hendersonatomic128=no 30617ebee43eSRichard Hendersonif test "$int128" = "yes"; then 30627ebee43eSRichard Henderson cat > $TMPC << EOF 30637ebee43eSRichard Hendersonint main(void) 30647ebee43eSRichard Henderson{ 30657ebee43eSRichard Henderson unsigned __int128 x = 0, y = 0; 3066bceac547SThomas Huth y = __atomic_load(&x, 0); 3067bceac547SThomas Huth __atomic_store(&x, y, 0); 3068bceac547SThomas Huth __atomic_compare_exchange(&x, &y, x, 0, 0, 0); 30697ebee43eSRichard Henderson return 0; 30707ebee43eSRichard Henderson} 30717ebee43eSRichard HendersonEOF 30727ebee43eSRichard Henderson if compile_prog "" "" ; then 30737ebee43eSRichard Henderson atomic128=yes 30747ebee43eSRichard Henderson fi 30757ebee43eSRichard Hendersonfi 30767ebee43eSRichard Henderson 3077e6cd4bb5SRichard Hendersoncmpxchg128=no 3078e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then 3079e6cd4bb5SRichard Henderson cat > $TMPC << EOF 3080e6cd4bb5SRichard Hendersonint main(void) 3081e6cd4bb5SRichard Henderson{ 3082e6cd4bb5SRichard Henderson unsigned __int128 x = 0, y = 0; 3083e6cd4bb5SRichard Henderson __sync_val_compare_and_swap_16(&x, y, x); 3084e6cd4bb5SRichard Henderson return 0; 3085e6cd4bb5SRichard Henderson} 3086e6cd4bb5SRichard HendersonEOF 3087e6cd4bb5SRichard Henderson if compile_prog "" "" ; then 3088e6cd4bb5SRichard Henderson cmpxchg128=yes 3089e6cd4bb5SRichard Henderson fi 3090e6cd4bb5SRichard Hendersonfi 3091e6cd4bb5SRichard Henderson 3092fd0e6053SJohn Snow######################################## 3093fd0e6053SJohn Snow# check if ccache is interfering with 3094fd0e6053SJohn Snow# semantic analysis of macros 3095fd0e6053SJohn Snow 30965e4dfd3dSJohn Snowunset CCACHE_CPP2 3097fd0e6053SJohn Snowccache_cpp2=no 3098fd0e6053SJohn Snowcat > $TMPC << EOF 3099fd0e6053SJohn Snowstatic const int Z = 1; 3100fd0e6053SJohn Snow#define fn() ({ Z; }) 3101fd0e6053SJohn Snow#define TAUT(X) ((X) == Z) 3102fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y) 3103fd0e6053SJohn Snow#define ID(X) (X) 3104fd0e6053SJohn Snowint main(int argc, char *argv[]) 3105fd0e6053SJohn Snow{ 3106fd0e6053SJohn Snow int x = 0, y = 0; 3107fd0e6053SJohn Snow x = ID(x); 3108fd0e6053SJohn Snow x = fn(); 3109fd0e6053SJohn Snow fn(); 3110fd0e6053SJohn Snow if (PAREN(x, y)) return 0; 3111fd0e6053SJohn Snow if (TAUT(Z)) return 0; 3112fd0e6053SJohn Snow return 0; 3113fd0e6053SJohn Snow} 3114fd0e6053SJohn SnowEOF 3115fd0e6053SJohn Snow 3116fd0e6053SJohn Snowif ! compile_object "-Werror"; then 3117fd0e6053SJohn Snow ccache_cpp2=yes 3118fd0e6053SJohn Snowfi 3119fd0e6053SJohn Snow 3120b553a042SJohn Snow################################################# 3121b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE. 3122b553a042SJohn Snow 3123b553a042SJohn Snowif test "$fortify_source" != "no"; then 3124b553a042SJohn Snow if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 3125b553a042SJohn Snow fortify_source="no"; 3126e189091fSPeter Maydell elif test -n "$cxx" && has $cxx && 3127cfcc7c14SJohn Snow echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 3128b553a042SJohn Snow fortify_source="no"; 3129b553a042SJohn Snow else 3130b553a042SJohn Snow fortify_source="yes" 3131b553a042SJohn Snow fi 3132b553a042SJohn Snowfi 3133b553a042SJohn Snow 3134d2042378SAneesh Kumar K.V########################################## 3135a40161cbSPaolo Bonzini# check for usable membarrier system call 3136a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then 3137a40161cbSPaolo Bonzini have_membarrier=no 3138a40161cbSPaolo Bonzini if test "$mingw32" = "yes" ; then 3139a40161cbSPaolo Bonzini have_membarrier=yes 3140a40161cbSPaolo Bonzini elif test "$linux" = "yes" ; then 3141a40161cbSPaolo Bonzini cat > $TMPC << EOF 3142a40161cbSPaolo Bonzini #include <linux/membarrier.h> 3143a40161cbSPaolo Bonzini #include <sys/syscall.h> 3144a40161cbSPaolo Bonzini #include <unistd.h> 3145a40161cbSPaolo Bonzini #include <stdlib.h> 3146a40161cbSPaolo Bonzini int main(void) { 3147a40161cbSPaolo Bonzini syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 3148a40161cbSPaolo Bonzini syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 3149a40161cbSPaolo Bonzini exit(0); 3150a40161cbSPaolo Bonzini } 3151a40161cbSPaolo BonziniEOF 3152a40161cbSPaolo Bonzini if compile_prog "" "" ; then 3153a40161cbSPaolo Bonzini have_membarrier=yes 3154a40161cbSPaolo Bonzini fi 3155a40161cbSPaolo Bonzini fi 3156a40161cbSPaolo Bonzini if test "$have_membarrier" = "no"; then 3157a40161cbSPaolo Bonzini feature_not_found "membarrier" "membarrier system call not available" 3158a40161cbSPaolo Bonzini fi 3159a40161cbSPaolo Bonzinielse 3160a40161cbSPaolo Bonzini # Do not enable it by default even for Mingw32, because it doesn't 3161a40161cbSPaolo Bonzini # work on Wine. 3162a40161cbSPaolo Bonzini membarrier=no 3163a40161cbSPaolo Bonzinifi 3164a40161cbSPaolo Bonzini 3165a40161cbSPaolo Bonzini########################################## 3166f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment 31674f67366eSThomas Huthhave_afalg=no 3168f0d92b56SLongpeng(Mike)cat > $TMPC << EOF 3169f0d92b56SLongpeng(Mike)#include <errno.h> 3170f0d92b56SLongpeng(Mike)#include <sys/types.h> 3171f0d92b56SLongpeng(Mike)#include <sys/socket.h> 3172f0d92b56SLongpeng(Mike)#include <linux/if_alg.h> 3173f0d92b56SLongpeng(Mike)int main(void) { 3174f0d92b56SLongpeng(Mike) int sock; 3175f0d92b56SLongpeng(Mike) sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 3176f0d92b56SLongpeng(Mike) return sock; 3177f0d92b56SLongpeng(Mike)} 3178f0d92b56SLongpeng(Mike)EOF 3179f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then 3180f0d92b56SLongpeng(Mike) have_afalg=yes 3181f0d92b56SLongpeng(Mike)fi 3182f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" 3183f0d92b56SLongpeng(Mike)then 3184f0d92b56SLongpeng(Mike) if test "$have_afalg" != "yes" 3185f0d92b56SLongpeng(Mike) then 3186f0d92b56SLongpeng(Mike) error_exit "AF_ALG requested but could not be detected" 3187f0d92b56SLongpeng(Mike) fi 3188f0d92b56SLongpeng(Mike)fi 3189f0d92b56SLongpeng(Mike) 3190f0d92b56SLongpeng(Mike) 3191db1ed1abSRichard Henderson########################################## 3192247724cbSMarc-André Lureau# checks for sanitizers 3193247724cbSMarc-André Lureau 3194247724cbSMarc-André Lureauhave_asan=no 3195247724cbSMarc-André Lureauhave_ubsan=no 3196d83414e1SMarc-André Lureauhave_asan_iface_h=no 3197d83414e1SMarc-André Lureauhave_asan_iface_fiber=no 3198247724cbSMarc-André Lureau 3199247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then 3200b9f44da2SMarc-André Lureau write_c_skeleton 3201247724cbSMarc-André Lureau if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 3202247724cbSMarc-André Lureau have_asan=yes 3203247724cbSMarc-André Lureau fi 3204b9f44da2SMarc-André Lureau 3205b9f44da2SMarc-André Lureau # we could use a simple skeleton for flags checks, but this also 3206b9f44da2SMarc-André Lureau # detect the static linking issue of ubsan, see also: 3207b9f44da2SMarc-André Lureau # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 3208b9f44da2SMarc-André Lureau cat > $TMPC << EOF 3209b9f44da2SMarc-André Lureau#include <stdlib.h> 3210b9f44da2SMarc-André Lureauint main(void) { 3211b9f44da2SMarc-André Lureau void *tmp = malloc(10); 3212f2dfe54cSLeonid Bloch if (tmp != NULL) { 3213b9f44da2SMarc-André Lureau return *(int *)(tmp + 2); 3214b9f44da2SMarc-André Lureau } 3215d1abf3fcSOlaf Hering return 1; 3216f2dfe54cSLeonid Bloch} 3217b9f44da2SMarc-André LureauEOF 3218247724cbSMarc-André Lureau if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 3219247724cbSMarc-André Lureau have_ubsan=yes 3220247724cbSMarc-André Lureau fi 3221d83414e1SMarc-André Lureau 3222d83414e1SMarc-André Lureau if check_include "sanitizer/asan_interface.h" ; then 3223d83414e1SMarc-André Lureau have_asan_iface_h=yes 3224d83414e1SMarc-André Lureau fi 3225d83414e1SMarc-André Lureau 3226d83414e1SMarc-André Lureau cat > $TMPC << EOF 3227d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h> 3228d83414e1SMarc-André Lureauint main(void) { 3229d83414e1SMarc-André Lureau __sanitizer_start_switch_fiber(0, 0, 0); 3230d83414e1SMarc-André Lureau return 0; 3231d83414e1SMarc-André Lureau} 3232d83414e1SMarc-André LureauEOF 3233d83414e1SMarc-André Lureau if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 3234d83414e1SMarc-André Lureau have_asan_iface_fiber=yes 3235d83414e1SMarc-André Lureau fi 3236247724cbSMarc-André Lureaufi 3237247724cbSMarc-André Lureau 32380aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers; 32390aebab04SLingfeng Yang# keep it separate until that is not the case. 32400aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 32410aebab04SLingfeng Yang error_exit "TSAN is not supported with other sanitiziers." 32420aebab04SLingfeng Yangfi 32430aebab04SLingfeng Yanghave_tsan=no 32440aebab04SLingfeng Yanghave_tsan_iface_fiber=no 32450aebab04SLingfeng Yangif test "$tsan" = "yes" ; then 32460aebab04SLingfeng Yang write_c_skeleton 32470aebab04SLingfeng Yang if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 32480aebab04SLingfeng Yang have_tsan=yes 32490aebab04SLingfeng Yang fi 32500aebab04SLingfeng Yang cat > $TMPC << EOF 32510aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h> 32520aebab04SLingfeng Yangint main(void) { 32530aebab04SLingfeng Yang __tsan_create_fiber(0); 32540aebab04SLingfeng Yang return 0; 32550aebab04SLingfeng Yang} 32560aebab04SLingfeng YangEOF 32570aebab04SLingfeng Yang if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 32580aebab04SLingfeng Yang have_tsan_iface_fiber=yes 32590aebab04SLingfeng Yang fi 32600aebab04SLingfeng Yangfi 32610aebab04SLingfeng Yang 3262adc28027SAlexander Bulekov########################################## 3263675b9b53SMarc-André Lureau# check for slirp 3264675b9b53SMarc-André Lureau 3265675b9b53SMarc-André Lureaucase "$slirp" in 32664d34a86bSPaolo Bonzini auto | enabled | internal) 32674d34a86bSPaolo Bonzini # Simpler to always update submodule, even if not needed. 32687c57bdd8SMarc-André Lureau git_submodules="${git_submodules} slirp" 3269675b9b53SMarc-André Lureau ;; 3270675b9b53SMarc-André Lureauesac 3271675b9b53SMarc-André Lureau 3272b8e0c493SJoelle van Dyne# Check for slirp smbd dupport 3273b8e0c493SJoelle van Dyne: ${smbd=${SMBD-/usr/sbin/smbd}} 3274b8e0c493SJoelle van Dyneif test "$slirp_smbd" != "no" ; then 3275b8e0c493SJoelle van Dyne if test "$mingw32" = "yes" ; then 3276b8e0c493SJoelle van Dyne if test "$slirp_smbd" = "yes" ; then 3277b8e0c493SJoelle van Dyne error_exit "Host smbd not supported on this platform." 3278b8e0c493SJoelle van Dyne fi 3279b8e0c493SJoelle van Dyne slirp_smbd=no 3280b8e0c493SJoelle van Dyne else 3281b8e0c493SJoelle van Dyne slirp_smbd=yes 3282b8e0c493SJoelle van Dyne fi 3283b8e0c493SJoelle van Dynefi 3284b8e0c493SJoelle van Dyne 328554e7aac0SAlexey Krasikov########################################## 328654e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall 328754e7aac0SAlexey Krasikov 328854e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then 328954e7aac0SAlexey Krasikov 329054e7aac0SAlexey Krasikov have_keyring=no 329154e7aac0SAlexey Krasikov cat > $TMPC << EOF 329254e7aac0SAlexey Krasikov#include <errno.h> 329354e7aac0SAlexey Krasikov#include <asm/unistd.h> 329454e7aac0SAlexey Krasikov#include <linux/keyctl.h> 329554e7aac0SAlexey Krasikov#include <unistd.h> 329654e7aac0SAlexey Krasikovint main(void) { 329754e7aac0SAlexey Krasikov return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 329854e7aac0SAlexey Krasikov} 329954e7aac0SAlexey KrasikovEOF 330054e7aac0SAlexey Krasikov if compile_prog "" "" ; then 330154e7aac0SAlexey Krasikov have_keyring=yes 330254e7aac0SAlexey Krasikov fi 330354e7aac0SAlexey Krasikovfi 330454e7aac0SAlexey Krasikovif test "$secret_keyring" != "no" 330554e7aac0SAlexey Krasikovthen 3306b418d265SDavid Edmondson if test "$have_keyring" = "yes" 330754e7aac0SAlexey Krasikov then 330854e7aac0SAlexey Krasikov secret_keyring=yes 330954e7aac0SAlexey Krasikov else 331054e7aac0SAlexey Krasikov if test "$secret_keyring" = "yes" 331154e7aac0SAlexey Krasikov then 331254e7aac0SAlexey Krasikov error_exit "syscall __NR_keyctl requested, \ 331354e7aac0SAlexey Krasikovbut not implemented on your system" 331454e7aac0SAlexey Krasikov else 331554e7aac0SAlexey Krasikov secret_keyring=no 331654e7aac0SAlexey Krasikov fi 331754e7aac0SAlexey Krasikov fi 331854e7aac0SAlexey Krasikovfi 331954e7aac0SAlexey Krasikov 332092500362SAlexey Krasikov########################################## 3321e86ecd4bSJuan Quintela# End of CC checks 3322e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs 3323e86ecd4bSJuan Quintela 3324d83414e1SMarc-André Lureauwrite_c_skeleton 3325d83414e1SMarc-André Lureau 33261d728c39SBlue Swirlif test "$gcov" = "yes" ; then 3327bf0e56a3SMarc-André Lureau : 3328b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then 3329086d5f75SPaolo Bonzini QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 3330086d5f75SPaolo Bonzini debug=no 3331086d5f75SPaolo Bonzinifi 3332086d5f75SPaolo Bonzini 3333086d5f75SPaolo Bonzinicase "$ARCH" in 3334086d5f75SPaolo Bonzinialpha) 3335086d5f75SPaolo Bonzini # Ensure there's only a single GP 3336086d5f75SPaolo Bonzini QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 3337086d5f75SPaolo Bonzini;; 3338086d5f75SPaolo Bonziniesac 3339086d5f75SPaolo Bonzini 3340086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then 3341086d5f75SPaolo Bonzini QEMU_CFLAGS="-p $QEMU_CFLAGS" 3342086d5f75SPaolo Bonzini QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 3343086d5f75SPaolo Bonzinifi 3344a316e378SJuan Quintela 3345247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then 3346db5adeaaSPaolo Bonzini QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 3347db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 3348d83414e1SMarc-André Lureau if test "$have_asan_iface_h" = "no" ; then 3349d83414e1SMarc-André Lureau echo "ASAN build enabled, but ASAN header missing." \ 3350d83414e1SMarc-André Lureau "Without code annotation, the report may be inferior." 3351d83414e1SMarc-André Lureau elif test "$have_asan_iface_fiber" = "no" ; then 3352d83414e1SMarc-André Lureau echo "ASAN build enabled, but ASAN header is too old." \ 3353d83414e1SMarc-André Lureau "Without code annotation, the report may be inferior." 3354d83414e1SMarc-André Lureau fi 3355247724cbSMarc-André Lureaufi 33560aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then 33570aebab04SLingfeng Yang if test "$have_tsan_iface_fiber" = "yes" ; then 33580aebab04SLingfeng Yang QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 33590aebab04SLingfeng Yang QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 33600aebab04SLingfeng Yang else 33610aebab04SLingfeng Yang error_exit "Cannot enable TSAN due to missing fiber annotation interface." 33620aebab04SLingfeng Yang fi 33630aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then 33640aebab04SLingfeng Yang error_exit "Cannot enable TSAN due to missing sanitize thread interface." 33650aebab04SLingfeng Yangfi 3366247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then 3367db5adeaaSPaolo Bonzini QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 3368db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 3369247724cbSMarc-André Lureaufi 3370247724cbSMarc-André Lureau 33716542aa9cSPeter Lieven########################################## 33723efac6ebSTomáš Golembiovský 33730aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 33740aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then 3375e86ecd4bSJuan Quintela if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 3376db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 3377e86ecd4bSJuan Quintela fi 3378e86ecd4bSJuan Quintelafi 3379e86ecd4bSJuan Quintela 3380952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available 3381952afb71SBlue Swirlif test "$mingw32" = "yes" ; then 3382cb8baa77SMark Cave-Ayland flags="--no-seh --nxcompat" 3383cb8baa77SMark Cave-Ayland 3384cb8baa77SMark Cave-Ayland # Disable ASLR for debug builds to allow debugging with gdb 3385cb8baa77SMark Cave-Ayland if test "$debug" = "no" ; then 3386cb8baa77SMark Cave-Ayland flags="--dynamicbase $flags" 3387cb8baa77SMark Cave-Ayland fi 3388cb8baa77SMark Cave-Ayland 3389cb8baa77SMark Cave-Ayland for flag in $flags; do 3390e9a3591fSChristian Borntraeger if ld_has $flag ; then 3391db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 3392952afb71SBlue Swirl fi 3393952afb71SBlue Swirl done 3394952afb71SBlue Swirlfi 3395952afb71SBlue Swirl 33969d6bc27bSMichael Roth# Probe for guest agent support/options 33979d6bc27bSMichael Roth 3398e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then 3399a5125905SLaurent Vivier if [ "$softmmu" = no -a "$want_tools" = no ] ; then 3400a5125905SLaurent Vivier guest_agent=no 3401a5125905SLaurent Vivier elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 3402e8ef31a3SMichael Tokarev guest_agent=yes 3403e8ef31a3SMichael Tokarev elif [ "$guest_agent" != yes ]; then 3404e8ef31a3SMichael Tokarev guest_agent=no 3405e8ef31a3SMichael Tokarev else 3406e8ef31a3SMichael Tokarev error_exit "Guest agent is not supported on this platform" 3407ca35f780SPaolo Bonzini fi 34084b1c11fdSDaniel P. Berrangefi 3409ca35f780SPaolo Bonzini 3410b846ab7cSPaolo Bonzini# Guest agent Windows MSI package 34119d6bc27bSMichael Roth 34129d6bc27bSMichael Rothif test "$QEMU_GA_MANUFACTURER" = ""; then 34139d6bc27bSMichael Roth QEMU_GA_MANUFACTURER=QEMU 34149d6bc27bSMichael Rothfi 34159d6bc27bSMichael Rothif test "$QEMU_GA_DISTRO" = ""; then 34169d6bc27bSMichael Roth QEMU_GA_DISTRO=Linux 34179d6bc27bSMichael Rothfi 34189d6bc27bSMichael Rothif test "$QEMU_GA_VERSION" = ""; then 341989138857SStefan Weil QEMU_GA_VERSION=$(cat $source_path/VERSION) 34209d6bc27bSMichael Rothfi 34219d6bc27bSMichael Roth 3422b846ab7cSPaolo BonziniQEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin" 34239d6bc27bSMichael Roth 3424ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler 3425ca35f780SPaolo Bonziniroms= 3426e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 3427e633a5c6SEric Blake test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 34287000a12eSThomas Huth test "$targetos" != "Haiku" && test "$softmmu" = yes ; then 3429e57218b6SPeter Maydell # Different host OS linkers have different ideas about the name of the ELF 3430c65d5e4eSBrad Smith # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 3431c65d5e4eSBrad Smith # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 3432c65d5e4eSBrad Smith for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 3433e57218b6SPeter Maydell if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 3434e57218b6SPeter Maydell ld_i386_emulation="$emu" 3435ca35f780SPaolo Bonzini roms="optionrom" 3436e57218b6SPeter Maydell break 3437e57218b6SPeter Maydell fi 3438e57218b6SPeter Maydell done 3439ca35f780SPaolo Bonzinifi 3440ca35f780SPaolo Bonzini 34412e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 3442a5b2afd5SThomas Huth# or -march=z10 (which is the lowest architecture level that Clang supports) 34439933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then 34442e33c3f8SThomas Huth write_c_skeleton 3445a5b2afd5SThomas Huth compile_prog "-march=z900" "" 3446a5b2afd5SThomas Huth has_z900=$? 34473af448b3SThomas Huth if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then 3448a5b2afd5SThomas Huth if [ $has_z900 != 0 ]; then 3449a5b2afd5SThomas Huth echo "WARNING: Your compiler does not support the z900!" 3450a5b2afd5SThomas Huth echo " The s390-ccw bios will only work with guest CPUs >= z10." 3451a5b2afd5SThomas Huth fi 34529933c305SChristian Borntraeger roms="$roms s390-ccw" 34531ef6bfc2SPhilippe Mathieu-Daudé # SLOF is required for building the s390-ccw firmware on s390x, 34541ef6bfc2SPhilippe Mathieu-Daudé # since it is using the libnet code from SLOF for network booting. 34551ef6bfc2SPhilippe Mathieu-Daudé git_submodules="${git_submodules} roms/SLOF" 34561ef6bfc2SPhilippe Mathieu-Daudé fi 34579933c305SChristian Borntraegerfi 34589933c305SChristian Borntraeger 345911cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler. 346011cde1c8SBruno Dominguez# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 346111cde1c8SBruno Dominguezif has $cxx; then 346211cde1c8SBruno Dominguez cat > $TMPC <<EOF 346311cde1c8SBruno Dominguezint c_function(void); 346411cde1c8SBruno Dominguezint main(void) { return c_function(); } 346511cde1c8SBruno DominguezEOF 346611cde1c8SBruno Dominguez 346711cde1c8SBruno Dominguez compile_object 346811cde1c8SBruno Dominguez 346911cde1c8SBruno Dominguez cat > $TMPCXX <<EOF 347011cde1c8SBruno Dominguezextern "C" { 347111cde1c8SBruno Dominguez int c_function(void); 347211cde1c8SBruno Dominguez} 347311cde1c8SBruno Dominguezint c_function(void) { return 42; } 347411cde1c8SBruno DominguezEOF 347511cde1c8SBruno Dominguez 347611cde1c8SBruno Dominguez update_cxxflags 347711cde1c8SBruno Dominguez 34785770e8afSPaolo Bonzini if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 347911cde1c8SBruno Dominguez # C++ compiler $cxx works ok with C compiler $cc 348011cde1c8SBruno Dominguez : 348111cde1c8SBruno Dominguez else 348211cde1c8SBruno Dominguez echo "C++ compiler $cxx does not work with C compiler $cc" 348311cde1c8SBruno Dominguez echo "Disabling C++ specific optional code" 348411cde1c8SBruno Dominguez cxx= 348511cde1c8SBruno Dominguez fi 348611cde1c8SBruno Dominguezelse 348711cde1c8SBruno Dominguez echo "No C++ compiler available; disabling C++ specific optional code" 348811cde1c8SBruno Dominguez cxx= 348911cde1c8SBruno Dominguezfi 349011cde1c8SBruno Dominguez 34917d7dbf9dSDan Streetmanif !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then 34927d7dbf9dSDan Streetman exit 1 34935d91a2edSYonggang Luofi 34945d91a2edSYonggang Luo 349598ec69acSJuan Quintelaconfig_host_mak="config-host.mak" 349697a847bcSbellard 349798ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak 349898ec69acSJuan Quintelaecho >> $config_host_mak 349998ec69acSJuan Quintela 3500e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak 3501cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak 3502aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 35037d7dbf9dSDan Streetmanecho "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak 3504804edf29SJuan Quintela 350598ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak 3506727e5283SPaolo Bonzini 3507f8393946Saurel32if test "$debug_tcg" = "yes" ; then 35082358a494SJuan Quintela echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 3509f8393946Saurel32fi 35101625af87Saliguoriif test "$strip_opt" = "yes" ; then 351152ba784dSHollis Blanchard echo "STRIP=${strip}" >> $config_host_mak 35121625af87Saliguorifi 351367b915a5Sbellardif test "$mingw32" = "yes" ; then 351498ec69acSJuan Quintela echo "CONFIG_WIN32=y" >> $config_host_mak 3515d9840e25STomoki Sekiyama if test "$guest_agent_with_vss" = "yes" ; then 3516d9840e25STomoki Sekiyama echo "CONFIG_QGA_VSS=y" >> $config_host_mak 3517f33ca81fSMichael Roth echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 3518d9840e25STomoki Sekiyama echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 3519d9840e25STomoki Sekiyama fi 352050cbebb9SMichael Roth if test "$guest_agent_ntddscsi" = "yes" ; then 352176dc75caSTomáš Golembiovský echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 352250cbebb9SMichael Roth fi 35239dacf32dSYossi Hindin echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 35249dacf32dSYossi Hindin echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 35259dacf32dSYossi Hindin echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 35269dacf32dSYossi Hindin echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 3527210fa556Spbrookelse 352835f4df27SJuan Quintela echo "CONFIG_POSIX=y" >> $config_host_mak 3529210fa556Spbrookfi 3530128ab2ffSblueswir1 3531dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then 3532dffcb71cSMark McLoughlin echo "CONFIG_LINUX=y" >> $config_host_mak 3533dffcb71cSMark McLoughlinfi 3534dffcb71cSMark McLoughlin 353583fb7adfSbellardif test "$darwin" = "yes" ; then 353698ec69acSJuan Quintela echo "CONFIG_DARWIN=y" >> $config_host_mak 353783fb7adfSbellardfi 3538b29fe3edSmalc 3539ec530c81Sbellardif test "$solaris" = "yes" ; then 354098ec69acSJuan Quintela echo "CONFIG_SOLARIS=y" >> $config_host_mak 3541ec530c81Sbellardfi 3542179cf400SAndreas Färberif test "$haiku" = "yes" ; then 3543179cf400SAndreas Färber echo "CONFIG_HAIKU=y" >> $config_host_mak 3544179cf400SAndreas Färberfi 354597a847bcSbellardif test "$static" = "yes" ; then 354698ec69acSJuan Quintela echo "CONFIG_STATIC=y" >> $config_host_mak 354797a847bcSbellardfi 35481ba16968SStefan Weilif test "$profiler" = "yes" ; then 35492358a494SJuan Quintela echo "CONFIG_PROFILER=y" >> $config_host_mak 355005c2a3e7Sbellardfi 3551c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then 3552c932ce31SPaolo Bonzini echo "CONFIG_TOOLS=y" >> $config_host_mak 3553c932ce31SPaolo Bonzinifi 3554f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then 3555f15bff25SPaolo Bonzini echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 3556f15bff25SPaolo Bonzinifi 3557b8e0c493SJoelle van Dyneif test "$slirp_smbd" = "yes" ; then 3558b8e0c493SJoelle van Dyne echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak 3559e2d8830eSBrad echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 3560b8e0c493SJoelle van Dynefi 3561015a33bdSGongleiif test "$l2tpv3" = "yes" ; then 3562015a33bdSGonglei echo "CONFIG_L2TPV3=y" >> $config_host_mak 3563015a33bdSGongleifi 35644cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then 35654cc600d2SPaolo Bonzini echo "CONFIG_GPROF=y" >> $config_host_mak 35664cc600d2SPaolo Bonzinifi 3567b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 3568b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 3569e5f05f8cSKevin Wolfif test "$block_drv_whitelist_tools" = "yes" ; then 3570e5f05f8cSKevin Wolf echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak 3571e5f05f8cSKevin Wolffi 3572dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then 3573dce512deSChristoph Hellwig echo "CONFIG_XFS=y" >> $config_host_mak 3574dce512deSChristoph Hellwigfi 357589138857SStefan Weilqemu_version=$(head $source_path/VERSION) 35762358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak 357798ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak 35782b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak 357917969268SFam Zhengif test "$modules" = "yes"; then 3580e26110cfSFam Zheng # $shacmd can generate a hash started with digit, which the compiler doesn't 3581e26110cfSFam Zheng # like as an symbol. So prefix it with an underscore 358289138857SStefan Weil echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 358317969268SFam Zheng echo "CONFIG_MODULES=y" >> $config_host_mak 358417969268SFam Zhengfi 3585bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then 3586bd83c861SChristian Ehrhardt echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 3587bd83c861SChristian Ehrhardtfi 3588955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then 3589955727d2SCortland Tölva echo "CONFIG_USBFS=y" >> $config_host_mak 3590955727d2SCortland Tölvafi 3591f876b765SMarc-André Lureauif test "$gio" = "yes" ; then 3592f876b765SMarc-André Lureau echo "CONFIG_GIO=y" >> $config_host_mak 3593f876b765SMarc-André Lureau echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 3594f876b765SMarc-André Lureau echo "GIO_LIBS=$gio_libs" >> $config_host_mak 35955ecfb76cSPaolo Bonzinifi 35965ecfb76cSPaolo Bonziniif test "$gdbus_codegen" != "" ; then 359725a97a56SMarc-André Lureau echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 3598f876b765SMarc-André Lureaufi 3599a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 3600277abf15SJan Vesely 36011badb709SPaolo Bonziniif test "$xen" = "enabled" ; then 36026dbd588aSJan Kiszka echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 3603d5b93ddfSAnthony PERARD echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 3604582ea95fSMarc-André Lureau echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 3605582ea95fSMarc-André Lureau echo "XEN_LIBS=$xen_libs" >> $config_host_mak 3606e37630caSaliguorifi 36075e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then 36085e9be92dSNicholas Bellinger echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 36095e9be92dSNicholas Bellingerfi 3610af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then 3611af3bba76SPaolo Bonzini echo "CONFIG_VHOST_NET=y" >> $config_host_mak 3612af3bba76SPaolo Bonzinifi 3613af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then 361456f41de7SPaolo Bonzini echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 361503ce5744SNikolay Nikolaevfi 3616108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then 3617108a6481SCindy Lu echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 3618108a6481SCindy Lufi 3619042cea27SGongleiif test "$vhost_crypto" = "yes" ; then 3620042cea27SGonglei echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 3621042cea27SGongleifi 3622fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then 3623fc0b9b0eSStefan Hajnoczi echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 36245fe97d88SStefano Garzarella if test "$vhost_user" = "yes" ; then 36255fe97d88SStefano Garzarella echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 36265fe97d88SStefano Garzarella fi 3627fc0b9b0eSStefan Hajnoczifi 3628299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then 3629299e6f19SPaolo Bonzini echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 3630299e6f19SPaolo Bonzinifi 3631e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then 3632e6a74868SMarc-André Lureau echo "CONFIG_VHOST_USER=y" >> $config_host_mak 3633e6a74868SMarc-André Lureaufi 3634108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then 3635108a6481SCindy Lu echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 3636108a6481SCindy Lufi 363798fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then 363898fc1adaSDr. David Alan Gilbert echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 363998fc1adaSDr. David Alan Gilbertfi 3640a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then 3641a40161cbSPaolo Bonzini echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 3642a40161cbSPaolo Bonzinifi 3643e5b46549SRichard Hendersonif test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then 3644e5b46549SRichard Henderson echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 3645e5b46549SRichard Hendersonfi 364658d3f3ffSGerd Hoffmann 3647da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then 3648da076ffeSGerd Hoffmann echo "CONFIG_OPENGL=y" >> $config_host_mak 3649de2d3005SPaolo Bonzini echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 3650da076ffeSGerd Hoffmann echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 365120ff075bSMichael Wallefi 365220ff075bSMichael Walle 365399f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then 365499f2dbd3SLiang Li echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 365599f2dbd3SLiang Lifi 365699f2dbd3SLiang Li 36576b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then 36586b8cd447SRobert Hoo echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 36596b8cd447SRobert Hoofi 36606b8cd447SRobert Hoo 366183fb7adfSbellard# XXX: suppress that 36627d3505c5Sbellardif [ "$bsd" = "yes" ] ; then 36632358a494SJuan Quintela echo "CONFIG_BSD=y" >> $config_host_mak 36647d3505c5Sbellardfi 36657d3505c5Sbellard 36663556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then 36673556c233SPaolo Bonzini echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 36683556c233SPaolo Bonzinifi 366920ff6c80SAnthony Liguori 36707c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 367170c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then 367270c60c08SStefan Hajnoczi echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 367370c60c08SStefan Hajnoczielse 367470c60c08SStefan Hajnoczi echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 367570c60c08SStefan Hajnoczifi 3676d0e2fce5SAneesh Kumar K.V 36777d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then 36787d992e4dSPeter Lieven echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 36797d992e4dSPeter Lievenfi 36807d992e4dSPeter Lieven 3681f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then 3682f0d92b56SLongpeng(Mike) echo "CONFIG_AF_ALG=y" >> $config_host_mak 3683f0d92b56SLongpeng(Mike)fi 3684f0d92b56SLongpeng(Mike) 3685d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then 3686d83414e1SMarc-André Lureau echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 3687d83414e1SMarc-André Lureaufi 3688d83414e1SMarc-André Lureau 36890aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 36900aebab04SLingfeng Yang echo "CONFIG_TSAN=y" >> $config_host_mak 36910aebab04SLingfeng Yangfi 36920aebab04SLingfeng Yang 369376a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then 369476a347e1SRichard Henderson echo "CONFIG_CPUID_H=y" >> $config_host_mak 369576a347e1SRichard Hendersonfi 369676a347e1SRichard Henderson 3697f540166bSRichard Hendersonif test "$int128" = "yes" ; then 3698f540166bSRichard Henderson echo "CONFIG_INT128=y" >> $config_host_mak 3699f540166bSRichard Hendersonfi 3700f540166bSRichard Henderson 37017ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then 37027ebee43eSRichard Henderson echo "CONFIG_ATOMIC128=y" >> $config_host_mak 37037ebee43eSRichard Hendersonfi 37047ebee43eSRichard Henderson 3705e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then 3706e6cd4bb5SRichard Henderson echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 3707e6cd4bb5SRichard Hendersonfi 3708e6cd4bb5SRichard Henderson 3709b10d49d7SPino Toscanoif test "$libssh" = "yes" ; then 3710484e2cc7SPaolo Bonzini echo "CONFIG_LIBSSH=y" >> $config_host_mak 3711b10d49d7SPino Toscano echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 3712b10d49d7SPino Toscano echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 37130a12ec87SRichard W.M. Jonesfi 37140a12ec87SRichard W.M. Jones 3715ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then 3716ed1701c6SDr. David Alan Gilbert echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 3717ed1701c6SDr. David Alan Gilbertfi 3718ed1701c6SDr. David Alan Gilbert 37193b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then 37203cae16dbSPaolo Bonzini echo 'CONFIG_TPM=y' >> $config_host_mak 37213b8acc11SPaolo Bonzinifi 37223b8acc11SPaolo Bonzini 37232da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then 37242da776dbSMichael R. Hines echo "CONFIG_RDMA=y" >> $config_host_mak 3725392fb643SFam Zheng echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 37262da776dbSMichael R. Hinesfi 37272da776dbSMichael R. Hines 372821ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then 372921ab34c9SMarcel Apfelbaum echo "CONFIG_PVRDMA=y" >> $config_host_mak 373021ab34c9SMarcel Apfelbaumfi 373121ab34c9SMarcel Apfelbaum 3732a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then 3733a6b1d4c0SChanglong Xie echo "CONFIG_REPLICATION=y" >> $config_host_mak 3734a6b1d4c0SChanglong Xiefi 3735a6b1d4c0SChanglong Xie 3736ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then 3737ba59fb77SPaolo Bonzini echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 3738ba59fb77SPaolo Bonzinifi 3739e0580342SKamil Rytarowski 37402f740136SJeff Codyif test "$bochs" = "yes" ; then 37412f740136SJeff Cody echo "CONFIG_BOCHS=y" >> $config_host_mak 37422f740136SJeff Codyfi 37432f740136SJeff Codyif test "$cloop" = "yes" ; then 37442f740136SJeff Cody echo "CONFIG_CLOOP=y" >> $config_host_mak 37452f740136SJeff Codyfi 37462f740136SJeff Codyif test "$dmg" = "yes" ; then 37472f740136SJeff Cody echo "CONFIG_DMG=y" >> $config_host_mak 37482f740136SJeff Codyfi 37492f740136SJeff Codyif test "$qcow1" = "yes" ; then 37502f740136SJeff Cody echo "CONFIG_QCOW1=y" >> $config_host_mak 37512f740136SJeff Codyfi 37522f740136SJeff Codyif test "$vdi" = "yes" ; then 37532f740136SJeff Cody echo "CONFIG_VDI=y" >> $config_host_mak 37542f740136SJeff Codyfi 37552f740136SJeff Codyif test "$vvfat" = "yes" ; then 37562f740136SJeff Cody echo "CONFIG_VVFAT=y" >> $config_host_mak 37572f740136SJeff Codyfi 37582f740136SJeff Codyif test "$qed" = "yes" ; then 37592f740136SJeff Cody echo "CONFIG_QED=y" >> $config_host_mak 37602f740136SJeff Codyfi 37612f740136SJeff Codyif test "$parallels" = "yes" ; then 37622f740136SJeff Cody echo "CONFIG_PARALLELS=y" >> $config_host_mak 37632f740136SJeff Codyfi 37642f740136SJeff Cody 376540e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then 376640e8c6f4SAlex Bennée echo "CONFIG_PLUGIN=y" >> $config_host_mak 376726fffe29SEmilio G. Cota # Copy the export object list to the build dir 376826fffe29SEmilio G. Cota if test "$ld_dynamic_list" = "yes" ; then 376926fffe29SEmilio G. Cota echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 377026fffe29SEmilio G. Cota ld_symbols=qemu-plugins-ld.symbols 377126fffe29SEmilio G. Cota cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 377226fffe29SEmilio G. Cota elif test "$ld_exported_symbols_list" = "yes" ; then 377326fffe29SEmilio G. Cota echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 377426fffe29SEmilio G. Cota ld64_symbols=qemu-plugins-ld64.symbols 377526fffe29SEmilio G. Cota echo "# Automatically generated by configure - do not modify" > $ld64_symbols 377626fffe29SEmilio G. Cota grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 377726fffe29SEmilio G. Cota sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 377826fffe29SEmilio G. Cota else 377926fffe29SEmilio G. Cota error_exit \ 378026fffe29SEmilio G. Cota "If \$plugins=yes, either \$ld_dynamic_list or " \ 378126fffe29SEmilio G. Cota "\$ld_exported_symbols_list should have been set to 'yes'." 378226fffe29SEmilio G. Cota fi 378340e8c6f4SAlex Bennéefi 378440e8c6f4SAlex Bennée 3785f48e590aSAlex Bennéeif test -n "$gdb_bin"; then 3786b1863cccSAlex Bennée gdb_version=$($gdb_bin --version | head -n 1) 3787d6a66c81SAlex Bennée if version_ge ${gdb_version##* } 9.1; then 3788f48e590aSAlex Bennée echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 3789f48e590aSAlex Bennée fi 3790b1863cccSAlex Bennéefi 3791f48e590aSAlex Bennée 379254e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then 379354e7aac0SAlexey Krasikov echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 379454e7aac0SAlexey Krasikovfi 379554e7aac0SAlexey Krasikov 379698ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak 3797804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak 3798c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak 379939d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak 3800a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak 380109e93326SPaolo Bonziniecho "NINJA=$ninja" >> $config_host_mak 3802804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak 3803433de74cSBastian Koppelmannecho "HOST_CC=$host_cc" >> $config_host_mak 3804a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then 3805859aef02SPaolo Bonzini echo "CONFIG_IASL=$iasl" >> $config_host_mak 3806a31a8642SMichael S. Tsirkinfi 3807804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak 3808cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak 38095f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak 38103dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak 3811804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak 3812804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak 381346eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 3814a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 381511cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 3816a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 3817a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak 38188a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 3819e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 3820804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak 3821f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak 3822804edf29SJuan Quintela 3823b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then 3824b767d257SMarek Marczykowski-Górecki echo "CONFIG_RNG_NONE=y" >> $config_host_mak 3825b767d257SMarek Marczykowski-Góreckifi 3826b767d257SMarek Marczykowski-Górecki 38276efd7517SPeter Maydell# use included Linux headers 38286efd7517SPeter Maydellif test "$linux" = "yes" ; then 3829a307beb6SAndreas Färber mkdir -p linux-headers 38306efd7517SPeter Maydell case "$cpu" in 3831c72b26ecSRichard Henderson i386|x86_64|x32) 383208312a63SPeter Maydell linux_arch=x86 38336efd7517SPeter Maydell ;; 3834f8378accSRichard Henderson ppc|ppc64|ppc64le) 383508312a63SPeter Maydell linux_arch=powerpc 38366efd7517SPeter Maydell ;; 38376efd7517SPeter Maydell s390x) 383808312a63SPeter Maydell linux_arch=s390 383908312a63SPeter Maydell ;; 38401f080313SClaudio Fontana aarch64) 38411f080313SClaudio Fontana linux_arch=arm64 38421f080313SClaudio Fontana ;; 3843222e7d11SSanjay Lal mips64) 3844222e7d11SSanjay Lal linux_arch=mips 3845222e7d11SSanjay Lal ;; 384608312a63SPeter Maydell *) 384708312a63SPeter Maydell # For most CPUs the kernel architecture name and QEMU CPU name match. 384808312a63SPeter Maydell linux_arch="$cpu" 38496efd7517SPeter Maydell ;; 38506efd7517SPeter Maydell esac 385108312a63SPeter Maydell # For non-KVM architectures we will not have asm headers 385208312a63SPeter Maydell if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 385308312a63SPeter Maydell symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 385408312a63SPeter Maydell fi 38556efd7517SPeter Maydellfi 38566efd7517SPeter Maydell 385797a847bcSbellardfor target in $target_list; do 385897a847bcSbellard target_dir="$target" 385989138857SStefan Weil target_name=$(echo $target | cut -d '-' -f 1) 386097a847bcSbellard mkdir -p $target_dir 3861fdb75aefSPaolo Bonzini case $target in 3862fdb75aefSPaolo Bonzini *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; 3863fdb75aefSPaolo Bonzini *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; 38642408a527Saurel32 esac 386556aebc89Spbrookdone 38667d13299dSbellard 3867765686d6SPaolo Bonziniecho "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak 3868fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then 3869fdb75aefSPaolo Bonzini echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak 3870fdb75aefSPaolo Bonzinifi 3871a540f158SPeter Crosthwaite 3872a99d57bbSWanlong Gaoif test "$numa" = "yes"; then 3873a99d57bbSWanlong Gao echo "CONFIG_NUMA=y" >> $config_host_mak 3874ab318051SMarc-André Lureau echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 3875a99d57bbSWanlong Gaofi 3876a99d57bbSWanlong Gao 3877fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then 3878fd0e6053SJohn Snow echo "export CCACHE_CPP2=y" >> $config_host_mak 3879fd0e6053SJohn Snowfi 3880fd0e6053SJohn Snow 38811e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then 38821e4f6065SDaniele Buono echo "CONFIG_SAFESTACK=y" >> $config_host_mak 38831e4f6065SDaniele Buonofi 38841e4f6065SDaniele Buono 3885e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now. 3886e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree; 3887e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree 3888e29e5c6eSPeter Maydell# (these can be both files and directories). 3889e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This 3890e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is 3891e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun 3892e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and 3893e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own 3894e29e5c6eSPeter Maydell# directory and symlink the directory instead. 389509db9b9dSGerd Hoffmann# UNLINK is used to remove symlinks from older development versions 389609db9b9dSGerd Hoffmann# that might get into the way when doing "git update" without doing 389709db9b9dSGerd Hoffmann# a "make distclean" in between. 38989d49bcf6SMarkus ArmbrusterDIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos" 38991cf4323eSThomas HuthDIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 3900b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi" 3901744a928cSAlexey KardashevskiyDIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 39028db2a4fdSGerd HoffmannDIRS="$DIRS roms/seabios" 3903c17a386bSAlex BennéeDIRS="$DIRS contrib/plugins/" 39042038f8c8SPaolo BonziniLINKS="Makefile" 39053941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target" 3906ddcf607fSGerd HoffmannLINKS="$LINKS pc-bios/optionrom/Makefile" 3907e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile" 39088db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile" 3909e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp" 3910e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 391139950353SPeter MaydellLINKS="$LINKS tests/acceptance tests/data" 391239950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check" 39138f8fd9edSCleber RosaLINKS="$LINKS python" 3914c17a386bSAlex BennéeLINKS="$LINKS contrib/plugins/Makefile " 391509db9b9dSGerd HoffmannUNLINK="pc-bios/keymaps" 3916753d11f2SRichard Hendersonfor bios_file in \ 3917753d11f2SRichard Henderson $source_path/pc-bios/*.bin \ 39183a631b8eSBin Meng $source_path/pc-bios/*.elf \ 3919225a9ab8SAlexey Kardashevskiy $source_path/pc-bios/*.lid \ 3920753d11f2SRichard Henderson $source_path/pc-bios/*.rom \ 3921753d11f2SRichard Henderson $source_path/pc-bios/*.dtb \ 3922e89e33e1SDominik Dingel $source_path/pc-bios/*.img \ 3923753d11f2SRichard Henderson $source_path/pc-bios/openbios-* \ 39244e73c781SAlexander Graf $source_path/pc-bios/u-boot.* \ 392526ce90fdSLaszlo Ersek $source_path/pc-bios/edk2-*.fd.bz2 \ 3926cd946e5cSJohn Arbuckle $source_path/pc-bios/palcode-* \ 3927cd946e5cSJohn Arbuckle $source_path/pc-bios/qemu_vga.ndrv 3928cd946e5cSJohn Arbuckle 3929753d11f2SRichard Hendersondo 3930e29e5c6eSPeter Maydell LINKS="$LINKS pc-bios/$(basename $bios_file)" 39317ea78b74SJan Kiszkadone 3932d1807a4fSPaolo Bonzinimkdir -p $DIRS 3933e29e5c6eSPeter Maydellfor f in $LINKS ; do 39340f4d8894SPaolo Bonzini if [ -e "$source_path/$f" ]; then 3935f9245e10SPeter Maydell symlink "$source_path/$f" "$f" 3936f9245e10SPeter Maydell fi 39377d13299dSbellarddone 393809db9b9dSGerd Hoffmannfor f in $UNLINK ; do 393909db9b9dSGerd Hoffmann if [ -L "$f" ]; then 394009db9b9dSGerd Hoffmann rm -f "$f" 394109db9b9dSGerd Hoffmann fi 394209db9b9dSGerd Hoffmanndone 39431ad2134fSPaul Brook 39442038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do 39452038f8c8SPaolo Bonzini export $i 39462038f8c8SPaolo Bonzinidone 3947de6d7e6bSAlex Bennéeexport target_list source_path use_containers ARCH 39482038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh) 39492038f8c8SPaolo Bonzini 3950c34ebfdcSAnthony Liguori# temporary config to build submodules 39518db2a4fdSGerd Hoffmannfor rom in seabios; do 3952c34ebfdcSAnthony Liguori config_mak=roms/$rom/config.mak 395337116c89SStefan Weil echo "# Automatically generated by configure - do not modify" > $config_mak 3954c34ebfdcSAnthony Liguori echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 3955cdbd727cSRichard Henderson echo "AS=$as" >> $config_mak 39565f6f0e27SRichard Henderson echo "CCAS=$ccas" >> $config_mak 3957c34ebfdcSAnthony Liguori echo "CC=$cc" >> $config_mak 3958c34ebfdcSAnthony Liguori echo "BCC=bcc" >> $config_mak 39593dd46c78SBlue Swirl echo "CPP=$cpp" >> $config_mak 3960c34ebfdcSAnthony Liguori echo "OBJCOPY=objcopy" >> $config_mak 3961a31a8642SMichael S. Tsirkin echo "IASL=$iasl" >> $config_mak 3962c34ebfdcSAnthony Liguori echo "LD=$ld" >> $config_mak 39639f81aeb5SAlistair Francis echo "RANLIB=$ranlib" >> $config_mak 3964c34ebfdcSAnthony Liguoridone 3965c34ebfdcSAnthony Liguori 3966a5665051SPaolo Bonziniif test "$skip_meson" = no; then 3967fc929892SMarc-André Lureau cross="config-meson.cross.new" 3968fc929892SMarc-André Lureau meson_quote() { 396947b30835SPaolo Bonzini echo "'$(echo $* | sed "s/ /','/g")'" 3970fc929892SMarc-André Lureau } 3971fc929892SMarc-André Lureau 3972fc929892SMarc-André Lureau echo "# Automatically generated by configure - do not modify" > $cross 3973fc929892SMarc-André Lureau echo "[properties]" >> $cross 3974d1d5e9eeSAlex Bennée 3975d1d5e9eeSAlex Bennée # unroll any custom device configs 3976d1d5e9eeSAlex Bennée for a in $device_archs; do 3977d1d5e9eeSAlex Bennée eval "c=\$devices_${a}" 3978d1d5e9eeSAlex Bennée echo "${a}-softmmu = '$c'" >> $cross 3979d1d5e9eeSAlex Bennée done 3980d1d5e9eeSAlex Bennée 3981fc929892SMarc-André Lureau test -z "$cxx" && echo "link_language = 'c'" >> $cross 398247b30835SPaolo Bonzini echo "[built-in options]" >> $cross 398347b30835SPaolo Bonzini echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross 398447b30835SPaolo Bonzini echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross 398547b30835SPaolo Bonzini echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 398647b30835SPaolo Bonzini echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 3987fc929892SMarc-André Lureau echo "[binaries]" >> $cross 39884dba2789SPaolo Bonzini echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross 39894dba2789SPaolo Bonzini test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross 39904dba2789SPaolo Bonzini test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross 399147b30835SPaolo Bonzini echo "ar = [$(meson_quote $ar)]" >> $cross 399247b30835SPaolo Bonzini echo "nm = [$(meson_quote $nm)]" >> $cross 399347b30835SPaolo Bonzini echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross 399447b30835SPaolo Bonzini echo "ranlib = [$(meson_quote $ranlib)]" >> $cross 3995e8178514SPaolo Bonzini if has $sdl2_config; then 399647b30835SPaolo Bonzini echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross 3997e8178514SPaolo Bonzini fi 399847b30835SPaolo Bonzini echo "strip = [$(meson_quote $strip)]" >> $cross 399947b30835SPaolo Bonzini echo "windres = [$(meson_quote $windres)]" >> $cross 40003812c0c4SJoelle van Dyne if test "$cross_compile" = "yes"; then 4001fc929892SMarc-André Lureau cross_arg="--cross-file config-meson.cross" 4002fc929892SMarc-André Lureau echo "[host_machine]" >> $cross 4003fc929892SMarc-André Lureau if test "$mingw32" = "yes" ; then 4004fc929892SMarc-André Lureau echo "system = 'windows'" >> $cross 4005fc929892SMarc-André Lureau fi 4006853b4bafSThomas Huth if test "$linux" = "yes" ; then 4007853b4bafSThomas Huth echo "system = 'linux'" >> $cross 4008853b4bafSThomas Huth fi 40090ca321eaSJoelle van Dyne if test "$darwin" = "yes" ; then 40100ca321eaSJoelle van Dyne echo "system = 'darwin'" >> $cross 40110ca321eaSJoelle van Dyne fi 4012fc929892SMarc-André Lureau case "$ARCH" in 4013f6bca9dfSJoelle van Dyne i386) 4014fc929892SMarc-André Lureau echo "cpu_family = 'x86'" >> $cross 4015fc929892SMarc-André Lureau ;; 4016f8bb7e1cSDavid Michael x86_64|x32) 4017f6bca9dfSJoelle van Dyne echo "cpu_family = 'x86_64'" >> $cross 4018f6bca9dfSJoelle van Dyne ;; 4019fc929892SMarc-André Lureau ppc64le) 4020fc929892SMarc-André Lureau echo "cpu_family = 'ppc64'" >> $cross 4021fc929892SMarc-André Lureau ;; 4022fc929892SMarc-André Lureau *) 4023fc929892SMarc-André Lureau echo "cpu_family = '$ARCH'" >> $cross 4024fc929892SMarc-André Lureau ;; 4025fc929892SMarc-André Lureau esac 4026fc929892SMarc-André Lureau echo "cpu = '$cpu'" >> $cross 4027fc929892SMarc-André Lureau if test "$bigendian" = "yes" ; then 4028fc929892SMarc-André Lureau echo "endian = 'big'" >> $cross 4029fc929892SMarc-André Lureau else 4030fc929892SMarc-André Lureau echo "endian = 'little'" >> $cross 4031fc929892SMarc-André Lureau fi 4032fc929892SMarc-André Lureau else 4033fc929892SMarc-André Lureau cross_arg="--native-file config-meson.cross" 4034fc929892SMarc-André Lureau fi 4035fc929892SMarc-André Lureau mv $cross config-meson.cross 4036fc929892SMarc-André Lureau 4037a5665051SPaolo Bonzini rm -rf meson-private meson-info meson-logs 403861d63097SPaolo Bonzini run_meson() { 403909e93326SPaolo Bonzini NINJA=$ninja $meson setup \ 4040d17f305aSPaolo Bonzini --prefix "$prefix" \ 4041d17f305aSPaolo Bonzini --libdir "$libdir" \ 4042d17f305aSPaolo Bonzini --libexecdir "$libexecdir" \ 4043d17f305aSPaolo Bonzini --bindir "$bindir" \ 4044d17f305aSPaolo Bonzini --includedir "$includedir" \ 4045d17f305aSPaolo Bonzini --datadir "$datadir" \ 4046d17f305aSPaolo Bonzini --mandir "$mandir" \ 4047d17f305aSPaolo Bonzini --sysconfdir "$sysconfdir" \ 404816bf7a33SPaolo Bonzini --localedir "$localedir" \ 4049d17f305aSPaolo Bonzini --localstatedir "$local_statedir" \ 40503b4da132SPaolo Bonzini -Daudio_drv_list=$audio_drv_list \ 40513b4da132SPaolo Bonzini -Ddefault_devices=$default_devices \ 4052d17f305aSPaolo Bonzini -Ddocdir="$docdir" \ 405316bf7a33SPaolo Bonzini -Dqemu_firmwarepath="$firmwarepath" \ 405473f3aa37SMarc-André Lureau -Dqemu_suffix="$qemu_suffix" \ 40553b4da132SPaolo Bonzini -Dsphinx_build="$sphinx_build" \ 40563b4da132SPaolo Bonzini -Dtrace_file="$trace_file" \ 4057a5665051SPaolo Bonzini -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 4058a5665051SPaolo Bonzini -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 4059a5665051SPaolo Bonzini -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 4060a5665051SPaolo Bonzini -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 4061da6d48b9SMarc-André Lureau -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 4062bf0e56a3SMarc-André Lureau -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 40633b4da132SPaolo Bonzini -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \ 40643b4da132SPaolo Bonzini -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \ 4065537b7248SPaolo Bonzini $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \ 4066332008e0SThomas Huth $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \ 406761d63097SPaolo Bonzini "$@" $cross_arg "$PWD" "$source_path" 406861d63097SPaolo Bonzini } 406961d63097SPaolo Bonzini eval run_meson $meson_options 4070a5665051SPaolo Bonzini if test "$?" -ne 0 ; then 4071a5665051SPaolo Bonzini error_exit "meson setup failed" 4072a5665051SPaolo Bonzini fi 4073699d3884SPaolo Bonzinielse 4074699d3884SPaolo Bonzini if test -f meson-private/cmd_line.txt; then 4075699d3884SPaolo Bonzini # Adjust old command line options whose type was changed 4076699d3884SPaolo Bonzini # Avoids having to use "setup --wipe" when Meson is upgraded 4077699d3884SPaolo Bonzini perl -i -ne ' 4078699d3884SPaolo Bonzini s/^gettext = true$/gettext = auto/; 4079699d3884SPaolo Bonzini s/^gettext = false$/gettext = disabled/; 4080654d6b04SPaolo Bonzini /^b_staticpic/ && next; 4081699d3884SPaolo Bonzini print;' meson-private/cmd_line.txt 4082699d3884SPaolo Bonzini fi 4083a5665051SPaolo Bonzinifi 4084a5665051SPaolo Bonzini 40852d838d9bSAlex Bennéeif test -n "${deprecated_features}"; then 40862d838d9bSAlex Bennée echo "Warning, deprecated features enabled." 4087a476b216SMao Zhongyi echo "Please see docs/about/deprecated.rst" 40882d838d9bSAlex Bennée echo " features: ${deprecated_features}" 40892d838d9bSAlex Bennéefi 40902d838d9bSAlex Bennée 4091e0447a83SThomas Huth# Create list of config switches that should be poisoned in common code... 4092e0447a83SThomas Huth# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special. 409354b0306eSThomas Huthtarget_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null) 409454b0306eSThomas Huthif test -n "$target_configs_h" ; then 4095e0447a83SThomas Huth sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \ 4096e0447a83SThomas Huth -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \ 409754b0306eSThomas Huth $target_configs_h | sort -u > config-poison.h 409854b0306eSThomas Huthelse 409954b0306eSThomas Huth :> config-poison.h 410054b0306eSThomas Huthfi 4101e0447a83SThomas Huth 4102dc655404SMichael S. Tsirkin# Save the configure command line for later reuse. 4103dc655404SMichael S. Tsirkincat <<EOD >config.status 4104dc655404SMichael S. Tsirkin#!/bin/sh 4105dc655404SMichael S. Tsirkin# Generated by configure. 4106dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration. 4107dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging 4108dc655404SMichael S. Tsirkin# configure, is in config.log if it exists. 4109dc655404SMichael S. TsirkinEOD 4110e811da7fSDaniel P. Berrangé 4111e811da7fSDaniel P. Berrangépreserve_env() { 4112e811da7fSDaniel P. Berrangé envname=$1 4113e811da7fSDaniel P. Berrangé 4114e811da7fSDaniel P. Berrangé eval envval=\$$envname 4115e811da7fSDaniel P. Berrangé 4116e811da7fSDaniel P. Berrangé if test -n "$envval" 4117e811da7fSDaniel P. Berrangé then 4118e811da7fSDaniel P. Berrangé echo "$envname='$envval'" >> config.status 4119e811da7fSDaniel P. Berrangé echo "export $envname" >> config.status 4120e811da7fSDaniel P. Berrangé else 4121e811da7fSDaniel P. Berrangé echo "unset $envname" >> config.status 4122e811da7fSDaniel P. Berrangé fi 4123e811da7fSDaniel P. Berrangé} 4124e811da7fSDaniel P. Berrangé 4125e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what 4126e811da7fSDaniel P. Berrangé# features/build target configure will detect 4127e811da7fSDaniel P. Berrangépreserve_env AR 4128e811da7fSDaniel P. Berrangépreserve_env AS 4129e811da7fSDaniel P. Berrangépreserve_env CC 4130e811da7fSDaniel P. Berrangépreserve_env CPP 4131e811da7fSDaniel P. Berrangépreserve_env CXX 4132e811da7fSDaniel P. Berrangépreserve_env INSTALL 4133e811da7fSDaniel P. Berrangépreserve_env LD 4134e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH 4135e811da7fSDaniel P. Berrangépreserve_env LIBTOOL 4136e811da7fSDaniel P. Berrangépreserve_env MAKE 4137e811da7fSDaniel P. Berrangépreserve_env NM 4138e811da7fSDaniel P. Berrangépreserve_env OBJCOPY 4139e811da7fSDaniel P. Berrangépreserve_env PATH 4140e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG 4141e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR 4142e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH 4143e811da7fSDaniel P. Berrangépreserve_env PYTHON 4144e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG 4145e811da7fSDaniel P. Berrangépreserve_env SMBD 4146e811da7fSDaniel P. Berrangépreserve_env STRIP 4147e811da7fSDaniel P. Berrangépreserve_env WINDRES 4148e811da7fSDaniel P. Berrangé 4149dc655404SMichael S. Tsirkinprintf "exec" >>config.status 4150a5665051SPaolo Bonzinifor i in "$0" "$@"; do 4151835af899SPaolo Bonzini test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status 4152a5665051SPaolo Bonzinidone 4153cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status 4154dc655404SMichael S. Tsirkinchmod +x config.status 4155dc655404SMichael S. Tsirkin 41568cd05ab6SPeter Maydellrm -r "$TMPDIR1" 4157