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" 177*a2866660SPaolo Bonzini do_cc $CFLAGS $EXTRA_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" 183*a2866660SPaolo Bonzini do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \ 184*a2866660SPaolo Bonzini $LDFLAGS $EXTRA_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 289*a2866660SPaolo BonziniEXTRA_CFLAGS="" 290*a2866660SPaolo BonziniEXTRA_CXXFLAGS="" 291*a2866660SPaolo BonziniEXTRA_LDFLAGS="" 292*a2866660SPaolo Bonzini 293c87ea116SAlex Bennéexen_ctrl_version="$default_feature" 294c87ea116SAlex Bennéexfs="$default_feature" 295c87ea116SAlex Bennéemembarrier="$default_feature" 2960848f8acSThomas Huthvhost_kernel="$default_feature" 297c87ea116SAlex Bennéevhost_net="$default_feature" 298c87ea116SAlex Bennéevhost_crypto="$default_feature" 299c87ea116SAlex Bennéevhost_scsi="$default_feature" 300c87ea116SAlex Bennéevhost_vsock="$default_feature" 301d88618f7SStefan Hajnoczivhost_user="no" 302c87ea116SAlex Bennéevhost_user_fs="$default_feature" 3030848f8acSThomas Huthvhost_vdpa="$default_feature" 304c87ea116SAlex Bennéerdma="$default_feature" 305c87ea116SAlex Bennéepvrdma="$default_feature" 306377529c0SPaolo Bonzinigprof="no" 307377529c0SPaolo Bonzinidebug_tcg="no" 308377529c0SPaolo Bonzinidebug="no" 309247724cbSMarc-André Lureausanitizers="no" 3100aebab04SLingfeng Yangtsan="no" 311c87ea116SAlex Bennéefortify_source="$default_feature" 312377529c0SPaolo Bonzinistrip_opt="yes" 313377529c0SPaolo Bonzinimingw32="no" 3141d728c39SBlue Swirlgcov="no" 315c7328271SMiroslav RezaninaEXESUF="" 31617969268SFam Zhengmodules="no" 317bd83c861SChristian Ehrhardtmodule_upgrades="no" 318377529c0SPaolo Bonziniprefix="/usr/local" 31910ff82d1SMarc-André Lureauqemu_suffix="qemu" 320377529c0SPaolo Bonzinibsd="no" 321377529c0SPaolo Bonzinilinux="no" 322377529c0SPaolo Bonzinisolaris="no" 323377529c0SPaolo Bonziniprofiler="no" 324377529c0SPaolo Bonzinisoftmmu="yes" 325377529c0SPaolo Bonzinilinux_user="no" 326377529c0SPaolo Bonzinibsd_user="no" 327377529c0SPaolo Bonzinipkgversion="" 32840d6444eSAvi Kivitypie="" 3293556c233SPaolo Bonziniqom_cast_debug="yes" 330baf86d6bSPaolo Bonzinitrace_backends="log" 331377529c0SPaolo Bonzinitrace_file="trace" 332c87ea116SAlex Bennéeopengl="$default_feature" 3335dd89908SRichard Hendersoncpuid_h="no" 334c87ea116SAlex Bennéeavx2_opt="$default_feature" 335c87ea116SAlex Bennéeguest_agent="$default_feature" 336d9840e25STomoki Sekiyamaguest_agent_with_vss="no" 33750cbebb9SMichael Rothguest_agent_ntddscsi="no" 338c87ea116SAlex Bennéevss_win32_sdk="$default_feature" 339d9840e25STomoki Sekiyamawin_sdk="no" 340c87ea116SAlex Bennéewant_tools="$default_feature" 341519175a2SAlex Barcelocoroutine="" 342c87ea116SAlex Bennéecoroutine_pool="$default_feature" 3437d992e4dSPeter Lievendebug_stack_usage="no" 344f0d92b56SLongpeng(Mike)crypto_afalg="no" 345a1c5e949SDaniel P. Berrangetls_priority="NORMAL" 346c87ea116SAlex Bennéetpm="$default_feature" 347c87ea116SAlex Bennéelibssh="$default_feature" 348c87ea116SAlex Bennéelive_block_migration=${default_feature:-yes} 349c87ea116SAlex Bennéenuma="$default_feature" 350c87ea116SAlex Bennéereplication=${default_feature:-yes} 351c87ea116SAlex Bennéebochs=${default_feature:-yes} 352c87ea116SAlex Bennéecloop=${default_feature:-yes} 353c87ea116SAlex Bennéedmg=${default_feature:-yes} 354c87ea116SAlex Bennéeqcow1=${default_feature:-yes} 355c87ea116SAlex Bennéevdi=${default_feature:-yes} 356c87ea116SAlex Bennéevvfat=${default_feature:-yes} 357c87ea116SAlex Bennéeqed=${default_feature:-yes} 358c87ea116SAlex Bennéeparallels=${default_feature:-yes} 359ba59fb77SPaolo Bonzinidebug_mutex="no" 360ba4dd2aaSAlex Bennéeplugins="$default_feature" 361b767d257SMarek Marczykowski-Góreckirng_none="no" 362c87ea116SAlex Bennéesecret_keyring="$default_feature" 363a5665051SPaolo Bonzinimeson="" 3643b4da132SPaolo Bonzinimeson_args="" 36548328880SPaolo Bonzinininja="" 3663b4da132SPaolo Bonzinigio="$default_feature" 367a5665051SPaolo Bonziniskip_meson=no 368b8e0c493SJoelle van Dyneslirp_smbd="$default_feature" 369377529c0SPaolo Bonzini 3703b4da132SPaolo Bonzini# The following Meson options are handled manually (still they 3713b4da132SPaolo Bonzini# are included in the automatically generated help message) 3723b4da132SPaolo Bonzini 3733b4da132SPaolo Bonzini# 1. Track which submodules are needed 3743b4da132SPaolo Bonzinicapstone="auto" 3753b4da132SPaolo Bonzinifdt="auto" 3763b4da132SPaolo Bonzinislirp="auto" 3773b4da132SPaolo Bonzini 3783b4da132SPaolo Bonzini# 2. Support --with/--without option 3793b4da132SPaolo Bonzinidefault_devices="true" 3803b4da132SPaolo Bonzini 3813b4da132SPaolo Bonzini# 3. Automatically enable/disable other options 3823b4da132SPaolo Bonzinitcg="enabled" 3833b4da132SPaolo Bonzinicfi="false" 3843b4da132SPaolo Bonzini 3853b4da132SPaolo Bonzini# 4. Detection partly done in configure 3863b4da132SPaolo Bonzinixen=${default_feature:+disabled} 387898be3e0SPeter Maydell 388c87ea116SAlex Bennée# parse CC options second 389ac0df51dSaliguorifor opt do 39089138857SStefan Weil optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 391ac0df51dSaliguori case "$opt" in 392ac0df51dSaliguori --cross-prefix=*) cross_prefix="$optarg" 3933812c0c4SJoelle van Dyne cross_compile="yes" 394ac0df51dSaliguori ;; 3953d8df640SPaolo Bonzini --cc=*) CC="$optarg" 396ac0df51dSaliguori ;; 39783f73fceSTomoki Sekiyama --cxx=*) CXX="$optarg" 39883f73fceSTomoki Sekiyama ;; 3992ff6b91eSJuan Quintela --cpu=*) cpu="$optarg" 4002ff6b91eSJuan Quintela ;; 401*a2866660SPaolo Bonzini --extra-cflags=*) 402*a2866660SPaolo Bonzini EXTRA_CFLAGS="$EXTRA_CFLAGS $optarg" 403*a2866660SPaolo Bonzini EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg" 404e2a2ed06SJuan Quintela ;; 405*a2866660SPaolo Bonzini --extra-cxxflags=*) EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg" 40611cde1c8SBruno Dominguez ;; 407*a2866660SPaolo Bonzini --extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg" 408e2a2ed06SJuan Quintela ;; 4095bc62e01SGerd Hoffmann --enable-debug-info) debug_info="yes" 4105bc62e01SGerd Hoffmann ;; 4115bc62e01SGerd Hoffmann --disable-debug-info) debug_info="no" 4125bc62e01SGerd Hoffmann ;; 413d75402b5SAlex Bennée --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" 414d75402b5SAlex Bennée ;; 415d422b2bcSAlex Bennée --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} 416d422b2bcSAlex Bennée eval "cross_cc_cflags_${cc_arch}=\$optarg" 4172038f8c8SPaolo Bonzini cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" 418d422b2bcSAlex Bennée ;; 419d75402b5SAlex Bennée --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} 4202038f8c8SPaolo Bonzini cc_archs="$cc_archs $cc_arch" 421d75402b5SAlex Bennée eval "cross_cc_${cc_arch}=\$optarg" 4222038f8c8SPaolo Bonzini cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" 423d75402b5SAlex Bennée ;; 424ac0df51dSaliguori esac 425ac0df51dSaliguoridone 426ac0df51dSaliguori# OS specific 427ac0df51dSaliguori# Using uname is really, really broken. Once we have the right set of checks 42893148aa5SStefan Weil# we can eliminate its usage altogether. 429ac0df51dSaliguori 430e49d021eSPeter Maydell# Preferred compiler: 431e49d021eSPeter Maydell# ${CC} (if set) 432e49d021eSPeter Maydell# ${cross_prefix}gcc (if cross-prefix specified) 433e49d021eSPeter Maydell# system compiler 434e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then 435e49d021eSPeter Maydell cc="$host_cc" 436e49d021eSPeter Maydellelse 437b3198cc2SStuart Yoder cc="${CC-${cross_prefix}gcc}" 438e49d021eSPeter Maydellfi 439e49d021eSPeter Maydell 44083f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then 44183f73fceSTomoki Sekiyama cxx="c++" 44283f73fceSTomoki Sekiyamaelse 44383f73fceSTomoki Sekiyama cxx="${CXX-${cross_prefix}g++}" 44483f73fceSTomoki Sekiyamafi 44583f73fceSTomoki Sekiyama 446b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}" 447cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}" 4485f6f0e27SRichard Hendersonccas="${CCAS-$cc}" 4493dd46c78SBlue Swirlcpp="${CPP-$cc -E}" 450b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}" 451b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}" 4529f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}" 4534852ee95SStefan Weilnm="${NM-${cross_prefix}nm}" 454b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}" 455b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}" 45617884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 45717884d7bSSergei Trofimovichquery_pkg_config() { 45817884d7bSSergei Trofimovich "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 45917884d7bSSergei Trofimovich} 46017884d7bSSergei Trofimovichpkg_config=query_pkg_config 46147c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 462ac0df51dSaliguori 463be17dc90SMichael S. Tsirkin# default flags for all hosts 4642d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where 4652d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected 4662d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it 4672d31515bSPeter Maydell# provides these semantics.) 468086d5f75SPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" 469086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" 470c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" 471be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" 4725770e8afSPaolo Bonzini 4735770e8afSPaolo Bonzini# Flags that are needed during configure but later taken care of by Meson 4748a9d3d56SRichard HendersonCONFIGURE_CFLAGS="-std=gnu11 -Wall" 4755770e8afSPaolo BonziniCONFIGURE_LDFLAGS= 476086d5f75SPaolo Bonzini 477be17dc90SMichael S. Tsirkin 478ac0df51dSaliguoricheck_define() { 479ac0df51dSaliguoricat > $TMPC <<EOF 480ac0df51dSaliguori#if !defined($1) 481fd786e1aSPeter Maydell#error $1 not defined 482ac0df51dSaliguori#endif 483ac0df51dSaliguoriint main(void) { return 0; } 484ac0df51dSaliguoriEOF 48552166aa0SJuan Quintela compile_object 486ac0df51dSaliguori} 487ac0df51dSaliguori 488307119e7SGerd Hoffmanncheck_include() { 489307119e7SGerd Hoffmanncat > $TMPC <<EOF 490307119e7SGerd Hoffmann#include <$1> 491307119e7SGerd Hoffmannint main(void) { return 0; } 492307119e7SGerd HoffmannEOF 493307119e7SGerd Hoffmann compile_object 494307119e7SGerd Hoffmann} 495307119e7SGerd Hoffmann 49693b25869SJohn Snowwrite_c_skeleton() { 49793b25869SJohn Snow cat > $TMPC <<EOF 49893b25869SJohn Snowint main(void) { return 0; } 49993b25869SJohn SnowEOF 50093b25869SJohn Snow} 50193b25869SJohn Snow 502bbea4050SPeter Maydellif check_define __linux__ ; then 503bbea4050SPeter Maydell targetos="Linux" 504bbea4050SPeter Maydellelif check_define _WIN32 ; then 505bbea4050SPeter Maydell targetos='MINGW32' 506bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then 507bbea4050SPeter Maydell targetos='OpenBSD' 508bbea4050SPeter Maydellelif check_define __sun__ ; then 509bbea4050SPeter Maydell targetos='SunOS' 510bbea4050SPeter Maydellelif check_define __HAIKU__ ; then 511bbea4050SPeter Maydell targetos='Haiku' 512951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then 513951fedfcSPeter Maydell targetos='FreeBSD' 514951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then 515951fedfcSPeter Maydell targetos='GNU/kFreeBSD' 516951fedfcSPeter Maydellelif check_define __DragonFly__ ; then 517951fedfcSPeter Maydell targetos='DragonFly' 518951fedfcSPeter Maydellelif check_define __NetBSD__; then 519951fedfcSPeter Maydell targetos='NetBSD' 520951fedfcSPeter Maydellelif check_define __APPLE__; then 521951fedfcSPeter Maydell targetos='Darwin' 522bbea4050SPeter Maydellelse 523951fedfcSPeter Maydell # This is a fatal error, but don't report it yet, because we 524951fedfcSPeter Maydell # might be going to just print the --help text, or it might 525951fedfcSPeter Maydell # be the result of a missing compiler. 526951fedfcSPeter Maydell targetos='bogus' 527bbea4050SPeter Maydellfi 528bbea4050SPeter Maydell 529bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use. 530bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're 531bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify 532bbea4050SPeter Maydell# the correct CPU with the --cpu option. 533bbea4050SPeter Maydellcase $targetos in 534bbea4050SPeter MaydellSunOS) 53589138857SStefan Weil # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo 536bbea4050SPeter Maydell if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 537bbea4050SPeter Maydell cpu="x86_64" 538bbea4050SPeter Maydell fi 539bbea4050SPeter Maydellesac 540bbea4050SPeter Maydell 5412ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then 5422ff6b91eSJuan Quintela # command line argument 5432ff6b91eSJuan Quintela : 5442ff6b91eSJuan Quintelaelif check_define __i386__ ; then 545ac0df51dSaliguori cpu="i386" 546ac0df51dSaliguorielif check_define __x86_64__ ; then 547c72b26ecSRichard Henderson if check_define __ILP32__ ; then 548c72b26ecSRichard Henderson cpu="x32" 549c72b26ecSRichard Henderson else 550ac0df51dSaliguori cpu="x86_64" 551c72b26ecSRichard Henderson fi 5523aa9bd6cSblueswir1elif check_define __sparc__ ; then 5533aa9bd6cSblueswir1 if check_define __arch64__ ; then 5543aa9bd6cSblueswir1 cpu="sparc64" 5553aa9bd6cSblueswir1 else 5563aa9bd6cSblueswir1 cpu="sparc" 5573aa9bd6cSblueswir1 fi 558fdf7ed96Smalcelif check_define _ARCH_PPC ; then 559fdf7ed96Smalc if check_define _ARCH_PPC64 ; then 560f8378accSRichard Henderson if check_define _LITTLE_ENDIAN ; then 561f8378accSRichard Henderson cpu="ppc64le" 562f8378accSRichard Henderson else 563fdf7ed96Smalc cpu="ppc64" 564f8378accSRichard Henderson fi 565ac0df51dSaliguori else 566fdf7ed96Smalc cpu="ppc" 567fdf7ed96Smalc fi 568afa05235SAurelien Jarnoelif check_define __mips__ ; then 569afa05235SAurelien Jarno cpu="mips" 570d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then 571d66ed0eaSAurelien Jarno if check_define __s390x__ ; then 572d66ed0eaSAurelien Jarno cpu="s390x" 573d66ed0eaSAurelien Jarno else 574d66ed0eaSAurelien Jarno cpu="s390" 575d66ed0eaSAurelien Jarno fi 576c4f80543SAlistair Franciselif check_define __riscv ; then 577ba0e7333SRichard Henderson cpu="riscv" 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 590ba0e7333SRichard Henderson ppc|ppc64|s390x|sparc64|x32|riscv) 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 1266ff66ee53SPaolo Bonzini ppc) CPU_CFLAGS="-m32" ;; 1267ff66ee53SPaolo Bonzini ppc64) CPU_CFLAGS="-m64" ;; 1268ff66ee53SPaolo Bonzini sparc) CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" ;; 1269ff66ee53SPaolo Bonzini sparc64) CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;; 1270ff66ee53SPaolo Bonzini s390) CPU_CFLAGS="-m31" ;; 1271ff66ee53SPaolo Bonzini s390x) CPU_CFLAGS="-m64" ;; 1272ff66ee53SPaolo Bonzini i386) CPU_CFLAGS="-m32" ;; 1273ff66ee53SPaolo Bonzini x32) CPU_CFLAGS="-mx32" ;; 1274ff66ee53SPaolo Bonzini 12757ebee43eSRichard Henderson # ??? Only extremely old AMD cpus do not have cmpxchg16b. 12767ebee43eSRichard Henderson # If we truly care, we should simply detect this case at 12777ebee43eSRichard Henderson # runtime and generate the fallback to serial emulation. 1278ff66ee53SPaolo Bonzini x86_64) CPU_CFLAGS="-m64 -mcx16" ;; 1279ff66ee53SPaolo Bonzini 128030163d89SPeter Maydell # No special flags required for other host CPUs 12813142255cSblueswir1esac 12823142255cSblueswir1 12839557af9cSAlex Bennéeif eval test -z "\${cross_cc_$cpu}"; then 1284b1aa4de1SAlex Bennée eval "cross_cc_${cpu}=\$cc" 12852038f8c8SPaolo Bonzini cross_cc_vars="$cross_cc_vars cross_cc_${cpu}" 12869557af9cSAlex Bennéefi 128779f3b12fSPeter Crosthwaite 1288affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly 1289affc88ccSPeter Maydell# support, even if we're using TCI. 1290affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then 1291affc88ccSPeter Maydell bsd_user="no" 1292affc88ccSPeter Maydell linux_user="no" 1293affc88ccSPeter Maydellfi 1294affc88ccSPeter Maydell 129560e0df25SPeter Maydelldefault_target_list="" 129643692239SMarkus Armbrusterdeprecated_targets_list=ppc64abi32-linux-user 1297fdb75aefSPaolo Bonzinideprecated_features="" 12986e92f823SPeter Maydellmak_wilds="" 12996e92f823SPeter Maydell 130060e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then 1301812b31d3SAlex Bennée mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak" 130260e0df25SPeter Maydellfi 130360e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then 1304812b31d3SAlex Bennée mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak" 130560e0df25SPeter Maydellfi 130660e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then 1307812b31d3SAlex Bennée mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak" 130860e0df25SPeter Maydellfi 130960e0df25SPeter Maydell 13103a5ae4a9SAlex Bennée# If the user doesn't explicitly specify a deprecated target we will 13113a5ae4a9SAlex Bennée# skip it. 13123a5ae4a9SAlex Bennéeif test -z "$target_list"; then 13133a5ae4a9SAlex Bennée if test -z "$target_list_exclude"; then 13143a5ae4a9SAlex Bennée target_list_exclude="$deprecated_targets_list" 13153a5ae4a9SAlex Bennée else 13163a5ae4a9SAlex Bennée target_list_exclude="$target_list_exclude,$deprecated_targets_list" 13173a5ae4a9SAlex Bennée fi 13182d838d9bSAlex Bennéefi 13192d838d9bSAlex Bennée 1320447e133fSAlex Bennéefor config in $mak_wilds; do 1321447e133fSAlex Bennée target="$(basename "$config" .mak)" 132298db9a06SAlex Bennée if echo "$target_list_exclude" | grep -vq "$target"; then 1323447e133fSAlex Bennée default_target_list="${default_target_list} $target" 1324447e133fSAlex Bennée fi 1325447e133fSAlex Bennéedone 13266e92f823SPeter Maydell 1327af5db58eSpbrookif test x"$show_help" = x"yes" ; then 1328af5db58eSpbrookcat << EOF 1329af5db58eSpbrook 1330af5db58eSpbrookUsage: configure [options] 1331af5db58eSpbrookOptions: [defaults in brackets after descriptions] 1332af5db58eSpbrook 133308fb77edSStefan WeilStandard options: 133408fb77edSStefan Weil --help print this message 133508fb77edSStefan Weil --prefix=PREFIX install in PREFIX [$prefix] 133608fb77edSStefan Weil --interp-prefix=PREFIX where to find shared libraries, etc. 133708fb77edSStefan Weil use %M for cpu name [$interp_prefix] 13382deca810SAlex Bennée --target-list=LIST set target list (default: build all non-deprecated) 133908fb77edSStefan Weil$(echo Available targets: $default_target_list | \ 134008fb77edSStefan Weil fold -s -w 53 | sed -e 's/^/ /') 13412deca810SAlex Bennée$(echo Deprecated targets: $deprecated_targets_list | \ 13422deca810SAlex Bennée fold -s -w 53 | sed -e 's/^/ /') 1343447e133fSAlex Bennée --target-list-exclude=LIST exclude a set of targets from the default target-list 134408fb77edSStefan Weil 134508fb77edSStefan WeilAdvanced options (experts only): 13463812c0c4SJoelle van Dyne --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix] 134708fb77edSStefan Weil --cc=CC use C compiler CC [$cc] 134808fb77edSStefan Weil --iasl=IASL use ACPI compiler IASL [$iasl] 134908fb77edSStefan Weil --host-cc=CC use C compiler CC [$host_cc] for code run at 135008fb77edSStefan Weil build time 135108fb77edSStefan Weil --cxx=CXX use C++ compiler CXX [$cxx] 135208fb77edSStefan Weil --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 1353*a2866660SPaolo Bonzini --extra-cflags=CFLAGS append extra C compiler flags CFLAGS 1354*a2866660SPaolo Bonzini --extra-cxxflags=CXXFLAGS append extra C++ compiler flags CXXFLAGS 135508fb77edSStefan Weil --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1356d75402b5SAlex Bennée --cross-cc-ARCH=CC use compiler when building ARCH guest test cases 1357d422b2bcSAlex Bennée --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests 135808fb77edSStefan Weil --make=MAKE use specified make [$make] 135908fb77edSStefan Weil --python=PYTHON use specified python [$python] 13602eb054c2SPeter Maydell --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] 1361a5665051SPaolo Bonzini --meson=MESON use specified meson [$meson] 136248328880SPaolo Bonzini --ninja=NINJA use specified ninja [$ninja] 136308fb77edSStefan Weil --smbd=SMBD use specified smbd [$smbd] 1364db1b5f13SThomas Huth --with-git=GIT use specified git [$git] 13657d7dbf9dSDan Streetman --with-git-submodules=update update git submodules (default if .git dir exists) 13667d7dbf9dSDan Streetman --with-git-submodules=validate fail if git submodules are not up to date 13677d7dbf9dSDan Streetman --with-git-submodules=ignore do not update or check git submodules (default if no .git dir) 136808fb77edSStefan Weil --static enable static build [$static] 136908fb77edSStefan Weil --mandir=PATH install man pages in PATH 137010ff82d1SMarc-André Lureau --datadir=PATH install firmware in PATH/$qemu_suffix 1371fe0038beSPaolo Bonzini --localedir=PATH install translation in PATH/$qemu_suffix 137210ff82d1SMarc-André Lureau --docdir=PATH install documentation in PATH/$qemu_suffix 137308fb77edSStefan Weil --bindir=PATH install binaries in PATH 137408fb77edSStefan Weil --libdir=PATH install libraries in PATH 1375db1b5f13SThomas Huth --libexecdir=PATH install helper binaries in PATH 137610ff82d1SMarc-André Lureau --sysconfdir=PATH install config in PATH/$qemu_suffix 137708fb77edSStefan Weil --localstatedir=PATH install local state in PATH (set at runtime on win32) 13783d5eecabSGerd Hoffmann --firmwarepath=PATH search PATH for firmware files 137913336606SRobert Foley --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs. 1380ca8c0909SMarc-André Lureau --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] 1381db1b5f13SThomas Huth --with-pkgversion=VERS use specified string as sub-version of the package 1382c035c8d6SPaolo Bonzini --without-default-features default all --enable-* options to "disabled" 1383c035c8d6SPaolo Bonzini --without-default-devices do not include any device that is not needed to 1384c035c8d6SPaolo Bonzini start the emulator (only use if you are including 1385d1d5e9eeSAlex Bennée desired devices in configs/devices/) 1386d1d5e9eeSAlex Bennée --with-devices-ARCH=NAME override default configs/devices 138708fb77edSStefan Weil --enable-debug enable common debug build options 1388247724cbSMarc-André Lureau --enable-sanitizers enable default sanitizers 13890aebab04SLingfeng Yang --enable-tsan enable thread sanitizer 139008fb77edSStefan Weil --disable-strip disable stripping binaries 139108fb77edSStefan Weil --disable-werror disable compilation abort on warning 139263678e17SSteven Noonan --disable-stack-protector disable compiler-provided stack protection 139316bfbc70SPaolo Bonzini --audio-drv-list=LIST set audio drivers to try if -audiodev is not used 139408fb77edSStefan Weil --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 139508fb77edSStefan Weil --block-drv-rw-whitelist=L 139608fb77edSStefan Weil set block driver read-write whitelist 1397e5f05f8cSKevin Wolf (by default affects only QEMU, not tools like qemu-img) 139808fb77edSStefan Weil --block-drv-ro-whitelist=L 139908fb77edSStefan Weil set block driver read-only whitelist 1400e5f05f8cSKevin Wolf (by default affects only QEMU, not tools like qemu-img) 1401e5f05f8cSKevin Wolf --enable-block-drv-whitelist-in-tools 1402e5f05f8cSKevin Wolf use block whitelist also in tools instead of only QEMU 140308fb77edSStefan Weil --with-trace-file=NAME Full PATH,NAME of file to store traces 140408fb77edSStefan Weil Default:trace-<pid> 1405c23f23b9SMichael Tokarev --cpu=CPU Build for host CPU [$cpu] 140608fb77edSStefan Weil --with-coroutine=BACKEND coroutine backend. Supported options: 140733c53c54SDaniel P. Berrange ucontext, sigaltstack, windows 140808fb77edSStefan Weil --enable-gcov enable test coverage analysis with gcov 1409c23f23b9SMichael Tokarev --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1410c23f23b9SMichael Tokarev --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1411a1c5e949SDaniel P. Berrange --tls-priority default TLS protocol/cipher priority string 1412c12d66aaSLin Ma --enable-gprof QEMU profiling with gprof 1413c12d66aaSLin Ma --enable-profiler profiler support 1414c12d66aaSLin Ma --enable-debug-stack-usage 1415c12d66aaSLin Ma track the maximum stack usage of stacks created by qemu_alloc_stack 141640e8c6f4SAlex Bennée --enable-plugins 141740e8c6f4SAlex Bennée enable plugins via shared library loading 1418afc3a8f9SAlex Bennée --disable-containers don't use containers for cross-building 1419f48e590aSAlex Bennée --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin] 142061d63097SPaolo BonziniEOF 142161d63097SPaolo Bonzini meson_options_help 142261d63097SPaolo Bonzinicat << EOF 1423c23f23b9SMichael Tokarev system all system emulation targets 1424c23f23b9SMichael Tokarev user supported user emulation targets 1425c23f23b9SMichael Tokarev linux-user all linux usermode emulation targets 1426c23f23b9SMichael Tokarev bsd-user all BSD usermode emulation targets 1427c23f23b9SMichael Tokarev guest-agent build the QEMU Guest Agent 1428c23f23b9SMichael Tokarev pie Position Independent Executables 142921e709aaSMarc-André Lureau modules modules support (non-Windows) 1430bd83c861SChristian Ehrhardt module-upgrades try to load modules from alternate paths for upgrades 1431c23f23b9SMichael Tokarev debug-tcg TCG debugging (default is disabled) 1432c23f23b9SMichael Tokarev debug-info debugging information 1433cdad781dSDaniele Buono lto Enable Link-Time Optimization. 14341e4f6065SDaniele Buono safe-stack SafeStack Stack Smash Protection. Depends on 14351e4f6065SDaniele Buono clang/llvm >= 3.7 and requires coroutine backend ucontext. 1436a40161cbSPaolo Bonzini membarrier membarrier system call (for Linux 4.14+ or Windows) 143721ab34c9SMarcel Apfelbaum rdma Enable RDMA-based migration 143821ab34c9SMarcel Apfelbaum pvrdma Enable PVRDMA support 1439299e6f19SPaolo Bonzini vhost-net vhost-net kernel acceleration support 1440299e6f19SPaolo Bonzini vhost-vsock virtio sockets device support 1441299e6f19SPaolo Bonzini vhost-scsi vhost-scsi kernel target support 1442299e6f19SPaolo Bonzini vhost-crypto vhost-user-crypto backend support 1443299e6f19SPaolo Bonzini vhost-kernel vhost kernel backend support 1444299e6f19SPaolo Bonzini vhost-user vhost-user backend support 1445108a6481SCindy Lu vhost-vdpa vhost-vdpa kernel backend support 1446ed1701c6SDr. David Alan Gilbert live-block-migration Block migration in the main migration stream 1447c23f23b9SMichael Tokarev coroutine-pool coroutine freelist (better performance) 1448c23f23b9SMichael Tokarev tpm TPM support 1449b10d49d7SPino Toscano libssh ssh block device support 1450c23f23b9SMichael Tokarev numa libnuma support 145186583a07SLiam Merwick avx2 AVX2 optimization support 14526b8cd447SRobert Hoo avx512f AVX512F optimization support 1453a6b1d4c0SChanglong Xie replication replication support 1454c12d66aaSLin Ma opengl opengl support 1455c12d66aaSLin Ma xfsctl xfsctl support 1456c12d66aaSLin Ma qom-cast-debug cast debugging support 14578de73fa8SCleber Rosa tools build qemu-io, qemu-nbd and qemu-img tools 14582f740136SJeff Cody bochs bochs image format support 14592f740136SJeff Cody cloop cloop image format support 14602f740136SJeff Cody dmg dmg image format support 14612f740136SJeff Cody qcow1 qcow v1 image format support 14622f740136SJeff Cody vdi vdi image format support 14632f740136SJeff Cody vvfat vvfat image format support 14642f740136SJeff Cody qed qed image format support 14652f740136SJeff Cody parallels parallels image format support 1466f0d92b56SLongpeng(Mike) crypto-afalg Linux AF_ALG crypto backend driver 1467ba59fb77SPaolo Bonzini debug-mutex mutex debugging support 1468b767d257SMarek Marczykowski-Górecki rng-none dummy RNG, avoid using /dev/(u)random and getrandom() 146920cf7b8eSDenis Plotnikov gio libgio support 1470b8e0c493SJoelle van Dyne slirp-smbd use smbd (at path --smbd=*) in slirp networking 147108fb77edSStefan Weil 147208fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched 1473af5db58eSpbrookEOF 14742d2ad6d0SFam Zhengexit 0 1475af5db58eSpbrookfi 1476af5db58eSpbrook 14779c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated 1478bb768f71SThomas Huthrm -f */config-devices.mak.d 14799c790242SThomas Huth 1480faf44142SDaniel P. Berrangéif test -z "$python" 1481faf44142SDaniel P. Berrangéthen 1482c53eeaf7SStefan Hajnoczi error_exit "Python not found. Use --python=/path/to/python" 1483c53eeaf7SStefan Hajnoczifi 14848e2c76bdSRoman Bolshakovif ! has "$make" 14858e2c76bdSRoman Bolshakovthen 14868e2c76bdSRoman Bolshakov error_exit "GNU make ($make) not found" 14878e2c76bdSRoman Bolshakovfi 1488c53eeaf7SStefan Hajnoczi 1489c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit 1490c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value. 14911b11f28dSThomas Huthif ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then 14921b11f28dSThomas Huth error_exit "Cannot use '$python', Python >= 3.6 is required." \ 1493c53eeaf7SStefan Hajnoczi "Use --python=/path/to/python to specify a supported Python." 1494c53eeaf7SStefan Hajnoczifi 1495c53eeaf7SStefan Hajnoczi 1496755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it 1497406ab2f3SCleber 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) 1498755ee70fSCleber Rosa 1499c53eeaf7SStefan Hajnoczi# Suppress writing compiled files 1500c53eeaf7SStefan Hajnoczipython="$python -B" 1501c53eeaf7SStefan Hajnoczi 15020a01d76fSMarc-André Lureauif test -z "$meson"; then 15036638cae5SPaolo Bonzini if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.3; then 15040a01d76fSMarc-André Lureau meson=meson 15057d7dbf9dSDan Streetman elif test $git_submodules_action != 'ignore' ; then 15060a01d76fSMarc-André Lureau meson=git 15070a01d76fSMarc-André Lureau elif test -e "${source_path}/meson/meson.py" ; then 15080a01d76fSMarc-André Lureau meson=internal 15090a01d76fSMarc-André Lureau else 15100a01d76fSMarc-André Lureau if test "$explicit_python" = yes; then 15110a01d76fSMarc-André Lureau error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found." 15120a01d76fSMarc-André Lureau else 1513a5665051SPaolo Bonzini error_exit "Meson not found. Use --meson=/path/to/meson" 1514a5665051SPaolo Bonzini fi 15150a01d76fSMarc-André Lureau fi 15160a01d76fSMarc-André Lureauelse 15170a01d76fSMarc-André Lureau # Meson uses its own Python interpreter to invoke other Python scripts, 15180a01d76fSMarc-André Lureau # but the user wants to use the one they specified with --python. 15190a01d76fSMarc-André Lureau # 15200a01d76fSMarc-André Lureau # We do not want to override the distro Python interpreter (and sometimes 15210a01d76fSMarc-André Lureau # cannot: for example in Homebrew /usr/bin/meson is a bash script), so 15220a01d76fSMarc-André Lureau # just require --meson=git|internal together with --python. 15230a01d76fSMarc-André Lureau if test "$explicit_python" = yes; then 15240a01d76fSMarc-André Lureau case "$meson" in 15250a01d76fSMarc-André Lureau git | internal) ;; 15260a01d76fSMarc-André Lureau *) error_exit "--python requires using QEMU's embedded Meson distribution." ;; 15270a01d76fSMarc-André Lureau esac 15280a01d76fSMarc-André Lureau fi 15290a01d76fSMarc-André Lureaufi 1530a5665051SPaolo Bonzini 15310a01d76fSMarc-André Lureauif test "$meson" = git; then 15320a01d76fSMarc-André Lureau git_submodules="${git_submodules} meson" 15330a01d76fSMarc-André Lureaufi 15340a01d76fSMarc-André Lureau 15350a01d76fSMarc-André Lureaucase "$meson" in 15360a01d76fSMarc-André Lureau git | internal) 15370a01d76fSMarc-André Lureau meson="$python ${source_path}/meson/meson.py" 15380a01d76fSMarc-André Lureau ;; 153984ec0c24SPaolo Bonzini *) meson=$(command -v "$meson") ;; 15400a01d76fSMarc-André Lureauesac 15410a01d76fSMarc-André Lureau 154209e93326SPaolo Bonzini# Probe for ninja 154348328880SPaolo Bonzini 154448328880SPaolo Bonziniif test -z "$ninja"; then 154548328880SPaolo Bonzini for c in ninja ninja-build samu; do 154648328880SPaolo Bonzini if has $c; then 154748328880SPaolo Bonzini ninja=$(command -v "$c") 154848328880SPaolo Bonzini break 154948328880SPaolo Bonzini fi 155048328880SPaolo Bonzini done 155109e93326SPaolo Bonzini if test -z "$ninja"; then 155209e93326SPaolo Bonzini error_exit "Cannot find Ninja" 155309e93326SPaolo Bonzini fi 155448328880SPaolo Bonzinifi 1555a5665051SPaolo Bonzini 15569aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing 15579aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the 15589aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case). 15599aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC. 15609aae6e54SDaniel Henrique Barbozawrite_c_skeleton; 15619aae6e54SDaniel Henrique Barbozaif compile_object ; then 15629aae6e54SDaniel Henrique Barboza : C compiler works ok 15639aae6e54SDaniel Henrique Barbozaelse 15649aae6e54SDaniel Henrique Barboza error_exit "\"$cc\" either does not exist or does not work" 15659aae6e54SDaniel Henrique Barbozafi 15669aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then 15679aae6e54SDaniel Henrique Barboza error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 15689aae6e54SDaniel Henrique Barbozafi 15699aae6e54SDaniel Henrique Barboza 15709c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror 15719c83ffd8SPeter Maydell# by default. Only enable by default for git builds 15729c83ffd8SPeter Maydellif test -z "$werror" ; then 15737d7dbf9dSDan Streetman if test "$git_submodules_action" != "ignore" && \ 1574e633a5c6SEric Blake { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then 15759c83ffd8SPeter Maydell werror="yes" 15769c83ffd8SPeter Maydell else 15779c83ffd8SPeter Maydell werror="no" 15789c83ffd8SPeter Maydell fi 15799c83ffd8SPeter Maydellfi 15809c83ffd8SPeter Maydell 1581975ff037SPaolo Bonziniif test "$targetos" = "bogus"; then 1582fb59dabdSPeter Maydell # Now that we know that we're not printing the help and that 1583fb59dabdSPeter Maydell # the compiler works (so the results of the check_defines we used 1584fb59dabdSPeter Maydell # to identify the OS are reliable), if we didn't recognize the 1585fb59dabdSPeter Maydell # host OS we should stop now. 1586951fedfcSPeter Maydell error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 1587fb59dabdSPeter Maydellfi 1588fb59dabdSPeter Maydell 1589efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements: 1590efc6c070SThomas Huthcat > $TMPC << EOF 1591efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__) 1592efc6c070SThomas Huth# ifdef __apple_build_version__ 15932a85a08cSDaniel P. Berrangé# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0) 15942a85a08cSDaniel P. Berrangé# error You need at least XCode Clang v10.0 to compile QEMU 1595efc6c070SThomas Huth# endif 1596efc6c070SThomas Huth# else 15972a85a08cSDaniel P. Berrangé# if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0) 15982a85a08cSDaniel P. Berrangé# error You need at least Clang v6.0 to compile QEMU 1599efc6c070SThomas Huth# endif 1600efc6c070SThomas Huth# endif 1601efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__) 16023830df5fSnia# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4) 16033830df5fSnia# error You need at least GCC v7.4.0 to compile QEMU 1604efc6c070SThomas Huth# endif 1605efc6c070SThomas Huth#else 1606efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU 1607efc6c070SThomas Huth#endif 1608efc6c070SThomas Huthint main (void) { return 0; } 1609efc6c070SThomas HuthEOF 1610efc6c070SThomas Huthif ! compile_prog "" "" ; then 16113830df5fSnia error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)" 1612efc6c070SThomas Huthfi 1613efc6c070SThomas Huth 161400849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately. 161500849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second. 161600849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all 161700849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would 161800849b92SRichard Henderson# just silently disable some features, so it's too error prone. 161900849b92SRichard Henderson 162000849b92SRichard Hendersonwarn_flags= 162100849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration 162200849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition 162300849b92SRichard Hendersonadd_to warn_flags -Wtype-limits 162400849b92SRichard Hendersonadd_to warn_flags -Wformat-security 162500849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k 162600849b92SRichard Hendersonadd_to warn_flags -Winit-self 162700849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers 162800849b92SRichard Hendersonadd_to warn_flags -Wempty-body 162900849b92SRichard Hendersonadd_to warn_flags -Wnested-externs 163000849b92SRichard Hendersonadd_to warn_flags -Wendif-labels 163100849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined 16320a2ebce9SThomas Huthadd_to warn_flags -Wimplicit-fallthrough=2 163300849b92SRichard Henderson 163400849b92SRichard Hendersonnowarn_flags= 163500849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides 163600849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs 163700849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value 163800849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int 163900849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition 1640aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare 1641bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi 164200849b92SRichard Henderson 164300849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags" 164493b25869SJohn Snow 164593b25869SJohn Snowcc_has_warning_flag() { 164693b25869SJohn Snow write_c_skeleton; 164793b25869SJohn Snow 1648a1d29d6cSPeter Maydell # Use the positive sense of the flag when testing for -Wno-wombat 1649a1d29d6cSPeter Maydell # support (gcc will happily accept the -Wno- form of unknown 1650a1d29d6cSPeter Maydell # warning options). 165193b25869SJohn Snow optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 165293b25869SJohn Snow compile_prog "-Werror $optflag" "" 165393b25869SJohn Snow} 165493b25869SJohn Snow 165593b25869SJohn Snowfor flag in $gcc_flags; do 165693b25869SJohn Snow if cc_has_warning_flag $flag ; then 16578d05095cSPaolo Bonzini QEMU_CFLAGS="$QEMU_CFLAGS $flag" 16588d05095cSPaolo Bonzini fi 16598d05095cSPaolo Bonzinidone 16608d05095cSPaolo Bonzini 166163678e17SSteven Noonanif test "$stack_protector" != "no"; then 1662fccd35a0SRodrigo Rebello cat > $TMPC << EOF 1663fccd35a0SRodrigo Rebelloint main(int argc, char *argv[]) 1664fccd35a0SRodrigo Rebello{ 1665fccd35a0SRodrigo Rebello char arr[64], *p = arr, *c = argv[0]; 1666fccd35a0SRodrigo Rebello while (*c) { 1667fccd35a0SRodrigo Rebello *p++ = *c++; 1668fccd35a0SRodrigo Rebello } 1669fccd35a0SRodrigo Rebello return 0; 1670fccd35a0SRodrigo Rebello} 1671fccd35a0SRodrigo RebelloEOF 167263678e17SSteven Noonan gcc_flags="-fstack-protector-strong -fstack-protector-all" 16733b463a3fSMiroslav Rezanina sp_on=0 167463678e17SSteven Noonan for flag in $gcc_flags; do 1675590e5dd9SPeter Maydell # We need to check both a compile and a link, since some compiler 1676590e5dd9SPeter Maydell # setups fail only on a .c->.o compile and some only at link time 1677086d5f75SPaolo Bonzini if compile_object "-Werror $flag" && 1678590e5dd9SPeter Maydell compile_prog "-Werror $flag" ""; then 167963678e17SSteven Noonan QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1680db5adeaaSPaolo Bonzini QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 16813b463a3fSMiroslav Rezanina sp_on=1 168263678e17SSteven Noonan break 168363678e17SSteven Noonan fi 168463678e17SSteven Noonan done 16853b463a3fSMiroslav Rezanina if test "$stack_protector" = yes; then 16863b463a3fSMiroslav Rezanina if test $sp_on = 0; then 16873b463a3fSMiroslav Rezanina error_exit "Stack protector not supported" 16883b463a3fSMiroslav Rezanina fi 16893b463a3fSMiroslav Rezanina fi 169037746c5eSMarc-André Lureaufi 169137746c5eSMarc-André Lureau 169220bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for 169320bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}. 169420bc94a2SPaolo Bonzinicat > $TMPC << EOF 169520bc94a2SPaolo Bonzinistruct { 169620bc94a2SPaolo Bonzini int a[2]; 169720bc94a2SPaolo Bonzini} x = {0}; 169820bc94a2SPaolo BonziniEOF 169920bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then 170020bc94a2SPaolo Bonzini : 170120bc94a2SPaolo Bonzinielse 170220bc94a2SPaolo Bonzini QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 170320bc94a2SPaolo Bonzinifi 170420bc94a2SPaolo Bonzini 170521e709aaSMarc-André Lureau# Our module code doesn't support Windows 170621e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then 170721e709aaSMarc-André Lureau error_exit "Modules are not available for Windows" 170821e709aaSMarc-André Lureaufi 170921e709aaSMarc-André Lureau 1710bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled 1711bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then 1712bd83c861SChristian Ehrhardt error_exit "Can't enable module-upgrades as Modules are not enabled" 1713bd83c861SChristian Ehrhardtfi 1714bd83c861SChristian Ehrhardt 17155f2453acSAlex Bennée# Static linking is not possible with plugins, modules or PIE 171640d6444eSAvi Kivityif test "$static" = "yes" ; then 1717aa0d1f44SPaolo Bonzini if test "$modules" = "yes" ; then 1718aa0d1f44SPaolo Bonzini error_exit "static and modules are mutually incompatible" 1719aa0d1f44SPaolo Bonzini fi 17205f2453acSAlex Bennée if test "$plugins" = "yes"; then 17215f2453acSAlex Bennée error_exit "static and plugins are mutually incompatible" 1722ba4dd2aaSAlex Bennée else 1723ba4dd2aaSAlex Bennée plugins="no" 17245f2453acSAlex Bennée fi 172540d6444eSAvi Kivityfi 172640d6444eSAvi Kivity 172740d6444eSAvi Kivitycat > $TMPC << EOF 172821d4a791SAvi Kivity 172921d4a791SAvi Kivity#ifdef __linux__ 173021d4a791SAvi Kivity# define THREAD __thread 173121d4a791SAvi Kivity#else 173221d4a791SAvi Kivity# define THREAD 173321d4a791SAvi Kivity#endif 173421d4a791SAvi Kivitystatic THREAD int tls_var; 173521d4a791SAvi Kivityint main(void) { return tls_var; } 173640d6444eSAvi KivityEOF 1737b2634124SRichard Henderson 1738ffd205efSJessica Clarke# Check we support -fno-pie and -no-pie first; we will need the former for 1739ffd205efSJessica Clarke# building ROMs, and both for everything if --disable-pie is passed. 1740412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then 1741412aeacdSAlex Bennée CFLAGS_NOPIE="-fno-pie" 1742ffd205efSJessica Clarke LDFLAGS_NOPIE="-no-pie" 1743412aeacdSAlex Bennéefi 1744412aeacdSAlex Bennée 174512781462SRichard Hendersonif test "$static" = "yes"; then 1746eca7a8e6SRichard Henderson if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then 17475770e8afSPaolo Bonzini CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 174812781462SRichard Henderson QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS" 174912781462SRichard Henderson pie="yes" 175012781462SRichard Henderson elif test "$pie" = "yes"; then 175112781462SRichard Henderson error_exit "-static-pie not available due to missing toolchain support" 175212781462SRichard Henderson else 175312781462SRichard Henderson QEMU_LDFLAGS="-static $QEMU_LDFLAGS" 175412781462SRichard Henderson pie="no" 175512781462SRichard Henderson fi 175612781462SRichard Hendersonelif test "$pie" = "no"; then 17575770e8afSPaolo Bonzini CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS" 1758ffd205efSJessica Clarke CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS" 1759eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then 17605770e8afSPaolo Bonzini CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 17615770e8afSPaolo Bonzini CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS" 176240d6444eSAvi Kivity pie="yes" 17632c674109SRichard Hendersonelif test "$pie" = "yes"; then 176476ad07a4SPeter Maydell error_exit "PIE not available due to missing toolchain support" 176540d6444eSAvi Kivityelse 176640d6444eSAvi Kivity echo "Disabling PIE due to missing toolchain support" 176740d6444eSAvi Kivity pie="no" 176840d6444eSAvi Kivityfi 176940d6444eSAvi Kivity 1770e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW. 1771e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too. 1772e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 1773e6cbd751SRichard Henderson QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" 1774e6cbd751SRichard Hendersonfi 1775e6cbd751SRichard Henderson 177609dada40SPaolo Bonzini########################################## 177709dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains 177809dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit 177909dada40SPaolo Bonzini# specification is necessary 178009dada40SPaolo Bonzini 178109dada40SPaolo Bonziniif test "$cpu" = "i386"; then 178209dada40SPaolo Bonzini cat > $TMPC << EOF 178309dada40SPaolo Bonzinistatic int sfaa(int *ptr) 178409dada40SPaolo Bonzini{ 178509dada40SPaolo Bonzini return __sync_fetch_and_and(ptr, 0); 178609dada40SPaolo Bonzini} 178709dada40SPaolo Bonzini 178809dada40SPaolo Bonziniint main(void) 178909dada40SPaolo Bonzini{ 179009dada40SPaolo Bonzini int val = 42; 17911405b629SStefan Weil val = __sync_val_compare_and_swap(&val, 0, 1); 179209dada40SPaolo Bonzini sfaa(&val); 179309dada40SPaolo Bonzini return val; 179409dada40SPaolo Bonzini} 179509dada40SPaolo BonziniEOF 179609dada40SPaolo Bonzini if ! compile_prog "" "" ; then 179709dada40SPaolo Bonzini QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 179809dada40SPaolo Bonzini fi 179909dada40SPaolo Bonzinifi 180009dada40SPaolo Bonzini 180156267b62SPhilippe Mathieu-Daudéif test "$tcg" = "enabled"; then 180256267b62SPhilippe Mathieu-Daudé git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" 180356267b62SPhilippe Mathieu-Daudé git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" 180456267b62SPhilippe Mathieu-Daudéfi 180556267b62SPhilippe Mathieu-Daudé 1806afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then 1807fdb75aefSPaolo Bonzini default_targets=yes 1808d880a3baSPaolo Bonzini for target in $default_target_list; do 1809d880a3baSPaolo Bonzini target_list="$target_list $target" 1810d880a3baSPaolo Bonzini done 1811d880a3baSPaolo Bonzini target_list="${target_list# }" 1812121afa9eSAnthony Liguorielse 1813fdb75aefSPaolo Bonzini default_targets=no 181489138857SStefan Weil target_list=$(echo "$target_list" | sed -e 's/,/ /g') 1815d880a3baSPaolo Bonzini for target in $target_list; do 181625b48338SPeter Maydell # Check that we recognised the target name; this allows a more 181725b48338SPeter Maydell # friendly error message than if we let it fall through. 181825b48338SPeter Maydell case " $default_target_list " in 181925b48338SPeter Maydell *" $target "*) 182025b48338SPeter Maydell ;; 182125b48338SPeter Maydell *) 182225b48338SPeter Maydell error_exit "Unknown target name '$target'" 182325b48338SPeter Maydell ;; 182425b48338SPeter Maydell esac 182525b48338SPeter Maydell done 1826d880a3baSPaolo Bonzinifi 182725b48338SPeter Maydell 1828fdb75aefSPaolo Bonzinifor target in $target_list; do 1829fdb75aefSPaolo Bonzini # if a deprecated target is enabled we note it here 1830fdb75aefSPaolo Bonzini if echo "$deprecated_targets_list" | grep -q "$target"; then 1831fdb75aefSPaolo Bonzini add_to deprecated_features $target 1832fdb75aefSPaolo Bonzini fi 1833fdb75aefSPaolo Bonzinidone 1834fdb75aefSPaolo Bonzini 1835f55fe278SPaolo Bonzini# see if system emulation was really requested 1836f55fe278SPaolo Bonzinicase " $target_list " in 1837f55fe278SPaolo Bonzini *"-softmmu "*) softmmu=yes 1838f55fe278SPaolo Bonzini ;; 1839f55fe278SPaolo Bonzini *) softmmu=no 1840f55fe278SPaolo Bonzini ;; 1841f55fe278SPaolo Bonziniesac 18425327cf48Sbellard 1843249247c9SJuan Quintelafeature_not_found() { 1844249247c9SJuan Quintela feature=$1 184521684af0SStewart Smith remedy=$2 1846249247c9SJuan Quintela 184776ad07a4SPeter Maydell error_exit "User requested feature $feature" \ 184821684af0SStewart Smith "configure was not able to find it." \ 184921684af0SStewart Smith "$remedy" 1850249247c9SJuan Quintela} 1851249247c9SJuan Quintela 18527d13299dSbellard# --- 18537d13299dSbellard# big/little endian test 18547d13299dSbellardcat > $TMPC << EOF 1855659eb157SThomas Huth#include <stdio.h> 185661cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 185761cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 1858659eb157SThomas Huthint main(int argc, char *argv[]) 1859659eb157SThomas Huth{ 1860659eb157SThomas Huth return printf("%s %s\n", (char *)big_endian, (char *)little_endian); 18617d13299dSbellard} 18627d13299dSbellardEOF 18637d13299dSbellard 1864659eb157SThomas Huthif compile_prog ; then 1865659eb157SThomas Huth if strings -a $TMPE | grep -q BiGeNdIaN ; then 186661cc919fSMike Frysinger bigendian="yes" 1867659eb157SThomas Huth elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then 186861cc919fSMike Frysinger bigendian="no" 18697d13299dSbellard else 18707d13299dSbellard echo big/little test failed 1871659eb157SThomas Huth exit 1 18727d13299dSbellard fi 18737d13299dSbellardelse 187461cc919fSMike Frysinger echo big/little test failed 1875659eb157SThomas Huth exit 1 18767d13299dSbellardfi 18777d13299dSbellard 1878b0a47e79SJuan Quintela########################################## 1879e10ee3f5SPhilippe Mathieu-Daudé# system tools 1880e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then 1881e10ee3f5SPhilippe Mathieu-Daudé if test "$softmmu" = "no"; then 1882e10ee3f5SPhilippe Mathieu-Daudé want_tools=no 1883e10ee3f5SPhilippe Mathieu-Daudé else 1884e10ee3f5SPhilippe Mathieu-Daudé want_tools=yes 1885e10ee3f5SPhilippe Mathieu-Daudé fi 1886e10ee3f5SPhilippe Mathieu-Daudéfi 1887e10ee3f5SPhilippe Mathieu-Daudé 1888299e6f19SPaolo Bonzini######################################### 1889299e6f19SPaolo Bonzini# vhost interdependencies and host support 1890299e6f19SPaolo Bonzini 1891299e6f19SPaolo Bonzini# vhost backends 1892d88618f7SStefan Hajnocziif test "$vhost_user" = "yes" && test "$linux" != "yes"; then 1893d88618f7SStefan Hajnoczi error_exit "vhost-user is only available on Linux" 1894299e6f19SPaolo Bonzinifi 1895108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux 1896108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then 1897108a6481SCindy Lu error_exit "vhost-vdpa is only available on Linux" 1898108a6481SCindy Lufi 1899299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux 1900299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then 1901299e6f19SPaolo Bonzini error_exit "vhost-kernel is only available on Linux" 1902299e6f19SPaolo Bonzinifi 1903299e6f19SPaolo Bonzini 1904299e6f19SPaolo Bonzini# vhost-kernel devices 1905299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel 1906299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then 1907299e6f19SPaolo Bonzini error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" 1908299e6f19SPaolo Bonzinifi 1909299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel 1910299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then 1911299e6f19SPaolo Bonzini error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" 1912299e6f19SPaolo Bonzinifi 1913299e6f19SPaolo Bonzini 1914299e6f19SPaolo Bonzini# vhost-user backends 1915299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user 1916299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then 1917299e6f19SPaolo Bonzini error_exit "--enable-vhost-net-user requires --enable-vhost-user" 1918299e6f19SPaolo Bonzinifi 1919299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user 1920299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then 1921299e6f19SPaolo Bonzini error_exit "--enable-vhost-crypto requires --enable-vhost-user" 1922299e6f19SPaolo Bonzinifi 192398fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user 192498fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then 192598fc1adaSDr. David Alan Gilbert error_exit "--enable-vhost-user-fs requires --enable-vhost-user" 192698fc1adaSDr. David Alan Gilbertfi 1927108a6481SCindy Lu#vhost-vdpa backends 1928108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa 1929108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then 1930108a6481SCindy Lu error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" 1931108a6481SCindy Lufi 1932299e6f19SPaolo Bonzini 193340bc0ca9SLaurent Vivier# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity 1934299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then 1935299e6f19SPaolo Bonzini test "$vhost_net_user" = "yes" && vhost_net=yes 193640bc0ca9SLaurent Vivier test "$vhost_net_vdpa" = "yes" && vhost_net=yes 1937299e6f19SPaolo Bonzini test "$vhost_kernel" = "yes" && vhost_net=yes 1938299e6f19SPaolo Bonzinifi 1939299e6f19SPaolo Bonzini 1940015a33bdSGonglei########################################## 1941779ab5e3SStefan Weil# pkg-config probe 1942779ab5e3SStefan Weil 1943779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then 194476ad07a4SPeter Maydell error_exit "pkg-config binary '$pkg_config_exe' not found" 1945779ab5e3SStefan Weilfi 1946779ab5e3SStefan Weil 1947779ab5e3SStefan Weil########################################## 1948e37630caSaliguori# xen probe 1949e37630caSaliguori 19501badb709SPaolo Bonziniif test "$xen" != "disabled" ; then 1951c1cdd9d5SJuergen Gross # Check whether Xen library path is specified via --extra-ldflags to avoid 1952c1cdd9d5SJuergen Gross # overriding this setting with pkg-config output. If not, try pkg-config 1953c1cdd9d5SJuergen Gross # to obtain all needed flags. 1954c1cdd9d5SJuergen Gross 1955c1cdd9d5SJuergen Gross if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 1956c1cdd9d5SJuergen Gross $pkg_config --exists xencontrol ; then 1957c1cdd9d5SJuergen Gross xen_ctrl_version="$(printf '%d%02d%02d' \ 1958c1cdd9d5SJuergen Gross $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 19591badb709SPaolo Bonzini xen=enabled 19605b6a8f43SMichael Tokarev xen_pc="xencontrol xenstore xenforeignmemory xengnttab" 1961c1cdd9d5SJuergen Gross xen_pc="$xen_pc xenevtchn xendevicemodel" 196258ea9a7aSAnthony PERARD if $pkg_config --exists xentoolcore; then 196358ea9a7aSAnthony PERARD xen_pc="$xen_pc xentoolcore" 196458ea9a7aSAnthony PERARD fi 1965582ea95fSMarc-André Lureau xen_cflags="$($pkg_config --cflags $xen_pc)" 1966582ea95fSMarc-André Lureau xen_libs="$($pkg_config --libs $xen_pc)" 1967c1cdd9d5SJuergen Gross else 1968c1cdd9d5SJuergen Gross 19695b6a8f43SMichael Tokarev xen_libs="-lxenstore -lxenctrl" 1970d9506cabSAnthony PERARD xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 1971d5b93ddfSAnthony PERARD 197250ced5b3SStefan Weil # First we test whether Xen headers and libraries are available. 197350ced5b3SStefan Weil # If no, we are done and there is no Xen support. 197450ced5b3SStefan Weil # If yes, more tests are run to detect the Xen version. 197550ced5b3SStefan Weil 197650ced5b3SStefan Weil # Xen (any) 197750ced5b3SStefan Weil cat > $TMPC <<EOF 197850ced5b3SStefan Weil#include <xenctrl.h> 197950ced5b3SStefan Weilint main(void) { 198050ced5b3SStefan Weil return 0; 198150ced5b3SStefan Weil} 198250ced5b3SStefan WeilEOF 198350ced5b3SStefan Weil if ! compile_prog "" "$xen_libs" ; then 198450ced5b3SStefan Weil # Xen not found 19851badb709SPaolo Bonzini if test "$xen" = "enabled" ; then 198621684af0SStewart Smith feature_not_found "xen" "Install xen devel" 198750ced5b3SStefan Weil fi 19881badb709SPaolo Bonzini xen=disabled 198950ced5b3SStefan Weil 1990d5b93ddfSAnthony PERARD # Xen unstable 199169deef08SPeter Maydell elif 199269deef08SPeter Maydell cat > $TMPC <<EOF && 19932cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API 19942cbf8903SRoss Lagerwall#define __XEN_TOOLS__ 19952cbf8903SRoss Lagerwall#include <xendevicemodel.h> 1996d3c49ebbSPaul Durrant#include <xenforeignmemory.h> 19972cbf8903SRoss Lagerwallint main(void) { 19982cbf8903SRoss Lagerwall xendevicemodel_handle *xd; 1999d3c49ebbSPaul Durrant xenforeignmemory_handle *xfmem; 20002cbf8903SRoss Lagerwall 20012cbf8903SRoss Lagerwall xd = xendevicemodel_open(0, 0); 20022cbf8903SRoss Lagerwall xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 20032cbf8903SRoss Lagerwall 2004d3c49ebbSPaul Durrant xfmem = xenforeignmemory_open(0, 0); 2005d3c49ebbSPaul Durrant xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2006d3c49ebbSPaul Durrant 20072cbf8903SRoss Lagerwall return 0; 20082cbf8903SRoss Lagerwall} 20092cbf8903SRoss LagerwallEOF 20102cbf8903SRoss Lagerwall compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 20112cbf8903SRoss Lagerwall then 20122cbf8903SRoss Lagerwall xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 20132cbf8903SRoss Lagerwall xen_ctrl_version=41100 20141badb709SPaolo Bonzini xen=enabled 20152cbf8903SRoss Lagerwall elif 20162cbf8903SRoss Lagerwall cat > $TMPC <<EOF && 20175ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API 20185ba3d756SIgor Druzhinin#include <xenforeignmemory.h> 201958ea9a7aSAnthony PERARD#include <xentoolcore.h> 20205ba3d756SIgor Druzhininint main(void) { 20215ba3d756SIgor Druzhinin xenforeignmemory_handle *xfmem; 20225ba3d756SIgor Druzhinin 20235ba3d756SIgor Druzhinin xfmem = xenforeignmemory_open(0, 0); 20245ba3d756SIgor Druzhinin xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 202558ea9a7aSAnthony PERARD xentoolcore_restrict_all(0); 20265ba3d756SIgor Druzhinin 20275ba3d756SIgor Druzhinin return 0; 20285ba3d756SIgor Druzhinin} 20295ba3d756SIgor DruzhininEOF 203058ea9a7aSAnthony PERARD compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 20315ba3d756SIgor Druzhinin then 203258ea9a7aSAnthony PERARD xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 20335ba3d756SIgor Druzhinin xen_ctrl_version=41000 20341badb709SPaolo Bonzini xen=enabled 20355ba3d756SIgor Druzhinin elif 20365ba3d756SIgor Druzhinin cat > $TMPC <<EOF && 2037da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API 2038da8090ccSPaul Durrant#define __XEN_TOOLS__ 2039da8090ccSPaul Durrant#include <xendevicemodel.h> 2040da8090ccSPaul Durrantint main(void) { 2041da8090ccSPaul Durrant xendevicemodel_handle *xd; 2042da8090ccSPaul Durrant 2043da8090ccSPaul Durrant xd = xendevicemodel_open(0, 0); 2044da8090ccSPaul Durrant xendevicemodel_close(xd); 2045da8090ccSPaul Durrant 2046da8090ccSPaul Durrant return 0; 2047da8090ccSPaul Durrant} 2048da8090ccSPaul DurrantEOF 2049da8090ccSPaul Durrant compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2050da8090ccSPaul Durrant then 2051da8090ccSPaul Durrant xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2052f1167ee6SJuergen Gross xen_ctrl_version=40900 20531badb709SPaolo Bonzini xen=enabled 2054da8090ccSPaul Durrant elif 2055da8090ccSPaul Durrant cat > $TMPC <<EOF && 20565eeb39c2SIan Campbell/* 20575eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat 20585eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given. 2059b6eb9b45SPaulina Szubarczyk * 2060b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and 2061b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented. 2062b6eb9b45SPaulina Szubarczyk */ 2063b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API 2064b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API 2065b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2066b6eb9b45SPaulina Szubarczyk#include <xenctrl.h> 2067b6eb9b45SPaulina Szubarczyk#include <xenstore.h> 2068b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h> 2069b6eb9b45SPaulina Szubarczyk#include <xengnttab.h> 2070b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h> 2071b6eb9b45SPaulina Szubarczyk#include <stdint.h> 2072b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h> 2073b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS) 2074b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined 2075b6eb9b45SPaulina Szubarczyk#endif 2076b6eb9b45SPaulina Szubarczykint main(void) { 2077b6eb9b45SPaulina Szubarczyk xc_interface *xc = NULL; 2078b6eb9b45SPaulina Szubarczyk xenforeignmemory_handle *xfmem; 2079b6eb9b45SPaulina Szubarczyk xenevtchn_handle *xe; 2080b6eb9b45SPaulina Szubarczyk xengnttab_handle *xg; 2081b6eb9b45SPaulina Szubarczyk xengnttab_grant_copy_segment_t* seg = NULL; 2082b6eb9b45SPaulina Szubarczyk 2083b6eb9b45SPaulina Szubarczyk xs_daemon_open(); 2084b6eb9b45SPaulina Szubarczyk 2085b6eb9b45SPaulina Szubarczyk xc = xc_interface_open(0, 0, 0); 2086b6eb9b45SPaulina Szubarczyk xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2087b6eb9b45SPaulina Szubarczyk xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2088b6eb9b45SPaulina Szubarczyk xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2089b6eb9b45SPaulina Szubarczyk xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2090b6eb9b45SPaulina Szubarczyk 2091b6eb9b45SPaulina Szubarczyk xfmem = xenforeignmemory_open(0, 0); 2092b6eb9b45SPaulina Szubarczyk xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2093b6eb9b45SPaulina Szubarczyk 2094b6eb9b45SPaulina Szubarczyk xe = xenevtchn_open(0, 0); 2095b6eb9b45SPaulina Szubarczyk xenevtchn_fd(xe); 2096b6eb9b45SPaulina Szubarczyk 2097b6eb9b45SPaulina Szubarczyk xg = xengnttab_open(0, 0); 2098b6eb9b45SPaulina Szubarczyk xengnttab_grant_copy(xg, 0, seg); 2099b6eb9b45SPaulina Szubarczyk 2100b6eb9b45SPaulina Szubarczyk return 0; 2101b6eb9b45SPaulina Szubarczyk} 2102b6eb9b45SPaulina SzubarczykEOF 2103b6eb9b45SPaulina Szubarczyk compile_prog "" "$xen_libs $xen_stable_libs" 2104b6eb9b45SPaulina Szubarczyk then 2105f1167ee6SJuergen Gross xen_ctrl_version=40800 21061badb709SPaolo Bonzini xen=enabled 2107b6eb9b45SPaulina Szubarczyk elif 2108b6eb9b45SPaulina Szubarczyk cat > $TMPC <<EOF && 2109b6eb9b45SPaulina Szubarczyk/* 2110b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat 2111b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given. 21125eeb39c2SIan Campbell */ 21135eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API 21145eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API 21155eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API 21165eeb39c2SIan Campbell#include <xenctrl.h> 21175eeb39c2SIan Campbell#include <xenstore.h> 21185eeb39c2SIan Campbell#include <xenevtchn.h> 21195eeb39c2SIan Campbell#include <xengnttab.h> 21205eeb39c2SIan Campbell#include <xenforeignmemory.h> 21215eeb39c2SIan Campbell#include <stdint.h> 21225eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h> 21235eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS) 21245eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined 21255eeb39c2SIan Campbell#endif 21265eeb39c2SIan Campbellint main(void) { 21275eeb39c2SIan Campbell xc_interface *xc = NULL; 21285eeb39c2SIan Campbell xenforeignmemory_handle *xfmem; 21295eeb39c2SIan Campbell xenevtchn_handle *xe; 21305eeb39c2SIan Campbell xengnttab_handle *xg; 21315eeb39c2SIan Campbell 21325eeb39c2SIan Campbell xs_daemon_open(); 21335eeb39c2SIan Campbell 21345eeb39c2SIan Campbell xc = xc_interface_open(0, 0, 0); 21355eeb39c2SIan Campbell xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 21365eeb39c2SIan Campbell xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 21375eeb39c2SIan Campbell xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 21385eeb39c2SIan Campbell xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 21395eeb39c2SIan Campbell 21405eeb39c2SIan Campbell xfmem = xenforeignmemory_open(0, 0); 21415eeb39c2SIan Campbell xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 21425eeb39c2SIan Campbell 21435eeb39c2SIan Campbell xe = xenevtchn_open(0, 0); 21445eeb39c2SIan Campbell xenevtchn_fd(xe); 21455eeb39c2SIan Campbell 21465eeb39c2SIan Campbell xg = xengnttab_open(0, 0); 21475eeb39c2SIan Campbell xengnttab_map_grant_ref(xg, 0, 0, 0); 21485eeb39c2SIan Campbell 21495eeb39c2SIan Campbell return 0; 21505eeb39c2SIan Campbell} 21515eeb39c2SIan CampbellEOF 21525eeb39c2SIan Campbell compile_prog "" "$xen_libs $xen_stable_libs" 21535eeb39c2SIan Campbell then 2154f1167ee6SJuergen Gross xen_ctrl_version=40701 21551badb709SPaolo Bonzini xen=enabled 2156cdadde39SRoger Pau Monne 2157cdadde39SRoger Pau Monne # Xen 4.6 2158cdadde39SRoger Pau Monne elif 2159cdadde39SRoger Pau Monne cat > $TMPC <<EOF && 2160cdadde39SRoger Pau Monne#include <xenctrl.h> 2161e108a3c1SAnthony PERARD#include <xenstore.h> 2162d5b93ddfSAnthony PERARD#include <stdint.h> 2163d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h> 2164d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS) 2165d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined 2166d5b93ddfSAnthony PERARD#endif 2167d5b93ddfSAnthony PERARDint main(void) { 2168d5b93ddfSAnthony PERARD xc_interface *xc; 2169d5b93ddfSAnthony PERARD xs_daemon_open(); 2170d5b93ddfSAnthony PERARD xc = xc_interface_open(0, 0, 0); 2171d5b93ddfSAnthony PERARD xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2172d5b93ddfSAnthony PERARD xc_gnttab_open(NULL, 0); 2173b87de24eSAnthony PERARD xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 21748688e065SStefano Stabellini xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2175d8b441a3SJan Beulich xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 217620a544c7SKonrad Rzeszutek Wilk xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2177d8b441a3SJan Beulich return 0; 2178d8b441a3SJan Beulich} 2179d8b441a3SJan BeulichEOF 2180d8b441a3SJan Beulich compile_prog "" "$xen_libs" 2181d8b441a3SJan Beulich then 2182f1167ee6SJuergen Gross xen_ctrl_version=40600 21831badb709SPaolo Bonzini xen=enabled 2184d8b441a3SJan Beulich 2185d8b441a3SJan Beulich # Xen 4.5 2186d8b441a3SJan Beulich elif 2187d8b441a3SJan Beulich cat > $TMPC <<EOF && 2188d8b441a3SJan Beulich#include <xenctrl.h> 2189d8b441a3SJan Beulich#include <xenstore.h> 2190d8b441a3SJan Beulich#include <stdint.h> 2191d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h> 2192d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS) 2193d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined 2194d8b441a3SJan Beulich#endif 2195d8b441a3SJan Beulichint main(void) { 2196d8b441a3SJan Beulich xc_interface *xc; 2197d8b441a3SJan Beulich xs_daemon_open(); 2198d8b441a3SJan Beulich xc = xc_interface_open(0, 0, 0); 2199d8b441a3SJan Beulich xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2200d8b441a3SJan Beulich xc_gnttab_open(NULL, 0); 2201d8b441a3SJan Beulich xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2202d8b441a3SJan Beulich xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 22033996e85cSPaul Durrant xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 22043996e85cSPaul Durrant return 0; 22053996e85cSPaul Durrant} 22063996e85cSPaul DurrantEOF 22073996e85cSPaul Durrant compile_prog "" "$xen_libs" 22083996e85cSPaul Durrant then 2209f1167ee6SJuergen Gross xen_ctrl_version=40500 22101badb709SPaolo Bonzini xen=enabled 22113996e85cSPaul Durrant 22123996e85cSPaul Durrant elif 22133996e85cSPaul Durrant cat > $TMPC <<EOF && 22143996e85cSPaul Durrant#include <xenctrl.h> 22153996e85cSPaul Durrant#include <xenstore.h> 22163996e85cSPaul Durrant#include <stdint.h> 22173996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h> 22183996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS) 22193996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined 22203996e85cSPaul Durrant#endif 22213996e85cSPaul Durrantint main(void) { 22223996e85cSPaul Durrant xc_interface *xc; 22233996e85cSPaul Durrant xs_daemon_open(); 22243996e85cSPaul Durrant xc = xc_interface_open(0, 0, 0); 22253996e85cSPaul Durrant xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 22263996e85cSPaul Durrant xc_gnttab_open(NULL, 0); 22273996e85cSPaul Durrant xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 22283996e85cSPaul Durrant xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 22298688e065SStefano Stabellini return 0; 22308688e065SStefano Stabellini} 22318688e065SStefano StabelliniEOF 22328688e065SStefano Stabellini compile_prog "" "$xen_libs" 223369deef08SPeter Maydell then 2234f1167ee6SJuergen Gross xen_ctrl_version=40200 22351badb709SPaolo Bonzini xen=enabled 22368688e065SStefano Stabellini 2237e37630caSaliguori else 22381badb709SPaolo Bonzini if test "$xen" = "enabled" ; then 2239edfb07edSIan Campbell feature_not_found "xen (unsupported version)" \ 2240edfb07edSIan Campbell "Install a supported xen (xen 4.2 or newer)" 2241fc321b4bSJuan Quintela fi 22421badb709SPaolo Bonzini xen=disabled 2243e37630caSaliguori fi 2244d5b93ddfSAnthony PERARD 22451badb709SPaolo Bonzini if test "$xen" = enabled; then 2246f1167ee6SJuergen Gross if test $xen_ctrl_version -ge 40701 ; then 2247582ea95fSMarc-André Lureau xen_libs="$xen_libs $xen_stable_libs " 22485eeb39c2SIan Campbell fi 2249d5b93ddfSAnthony PERARD fi 2250e37630caSaliguori fi 2251c1cdd9d5SJuergen Grossfi 2252e37630caSaliguori 2253d661d9a4SJustin Terry (VM)########################################## 22542da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries 22552da776dbSMichael R. Hinesif test "$rdma" != "no" ; then 22562da776dbSMichael R. Hines cat > $TMPC <<EOF 22572da776dbSMichael R. Hines#include <rdma/rdma_cma.h> 22582da776dbSMichael R. Hinesint main(void) { return 0; } 22592da776dbSMichael R. HinesEOF 2260ef6d4ccdSYuval Shaia rdma_libs="-lrdmacm -libverbs -libumad" 22612da776dbSMichael R. Hines if compile_prog "" "$rdma_libs" ; then 22622da776dbSMichael R. Hines rdma="yes" 22632da776dbSMichael R. Hines else 22642da776dbSMichael R. Hines if test "$rdma" = "yes" ; then 22652da776dbSMichael R. Hines error_exit \ 2266ef6d4ccdSYuval Shaia " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 22672da776dbSMichael R. Hines " Your options:" \ 2268ef6d4ccdSYuval Shaia " (1) Fast: Install infiniband packages (devel) from your distro." \ 22692da776dbSMichael R. Hines " (2) Cleanest: Install libraries from www.openfabrics.org" \ 22702da776dbSMichael R. Hines " (3) Also: Install softiwarp if you don't have RDMA hardware" 22712da776dbSMichael R. Hines fi 22722da776dbSMichael R. Hines rdma="no" 22732da776dbSMichael R. Hines fi 22742da776dbSMichael R. Hinesfi 22752da776dbSMichael R. Hines 227621ab34c9SMarcel Apfelbaum########################################## 227721ab34c9SMarcel Apfelbaum# PVRDMA detection 227821ab34c9SMarcel Apfelbaum 227921ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF && 228021ab34c9SMarcel Apfelbaum#include <sys/mman.h> 228121ab34c9SMarcel Apfelbaum 228221ab34c9SMarcel Apfelbaumint 228321ab34c9SMarcel Apfelbaummain(void) 228421ab34c9SMarcel Apfelbaum{ 228521ab34c9SMarcel Apfelbaum char buf = 0; 228621ab34c9SMarcel Apfelbaum void *addr = &buf; 228721ab34c9SMarcel Apfelbaum addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 228821ab34c9SMarcel Apfelbaum 228921ab34c9SMarcel Apfelbaum return 0; 229021ab34c9SMarcel Apfelbaum} 229121ab34c9SMarcel ApfelbaumEOF 229221ab34c9SMarcel Apfelbaum 229321ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then 229421ab34c9SMarcel Apfelbaum case "$pvrdma" in 229521ab34c9SMarcel Apfelbaum "") 229621ab34c9SMarcel Apfelbaum if compile_prog "" ""; then 229721ab34c9SMarcel Apfelbaum pvrdma="yes" 229821ab34c9SMarcel Apfelbaum else 229921ab34c9SMarcel Apfelbaum pvrdma="no" 230021ab34c9SMarcel Apfelbaum fi 230121ab34c9SMarcel Apfelbaum ;; 230221ab34c9SMarcel Apfelbaum "yes") 230321ab34c9SMarcel Apfelbaum if ! compile_prog "" ""; then 230421ab34c9SMarcel Apfelbaum error_exit "PVRDMA is not supported since mremap is not implemented" 230521ab34c9SMarcel Apfelbaum fi 230621ab34c9SMarcel Apfelbaum pvrdma="yes" 230721ab34c9SMarcel Apfelbaum ;; 230821ab34c9SMarcel Apfelbaum "no") 230921ab34c9SMarcel Apfelbaum pvrdma="no" 231021ab34c9SMarcel Apfelbaum ;; 231121ab34c9SMarcel Apfelbaum esac 231221ab34c9SMarcel Apfelbaumelse 231321ab34c9SMarcel Apfelbaum if test "$pvrdma" = "yes" ; then 231421ab34c9SMarcel Apfelbaum error_exit "PVRDMA requires rdma suppport" 231521ab34c9SMarcel Apfelbaum fi 231621ab34c9SMarcel Apfelbaum pvrdma="no" 231721ab34c9SMarcel Apfelbaumfi 231895c6bff3SBenoît Canet 2319ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported 2320ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then 2321ee108585SYuval Shaia 2322ee108585SYuval Shaiacat > $TMPC <<EOF && 2323ee108585SYuval Shaia#include <infiniband/verbs.h> 2324ee108585SYuval Shaia 2325ee108585SYuval Shaiaint 2326ee108585SYuval Shaiamain(void) 2327ee108585SYuval Shaia{ 2328ee108585SYuval Shaia struct ibv_mr *mr; 2329ee108585SYuval Shaia struct ibv_pd *pd = NULL; 2330ee108585SYuval Shaia size_t length = 10; 2331ee108585SYuval Shaia uint64_t iova = 0; 2332ee108585SYuval Shaia int access = 0; 2333ee108585SYuval Shaia void *addr = NULL; 2334ee108585SYuval Shaia 2335ee108585SYuval Shaia mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 2336ee108585SYuval Shaia 2337ee108585SYuval Shaia ibv_dereg_mr(mr); 2338ee108585SYuval Shaia 2339ee108585SYuval Shaia return 0; 2340ee108585SYuval Shaia} 2341ee108585SYuval ShaiaEOF 2342ee108585SYuval Shaia if ! compile_prog "" "-libverbs"; then 2343ee108585SYuval Shaia QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 2344ee108585SYuval Shaia fi 2345ee108585SYuval Shaiafi 2346ee108585SYuval Shaia 234795c6bff3SBenoît Canet########################################## 2348c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c 2349dce512deSChristoph Hellwigif test "$xfs" != "no" ; then 2350dce512deSChristoph Hellwig cat > $TMPC << EOF 2351ffc41d10SStefan Weil#include <stddef.h> /* NULL */ 2352dce512deSChristoph Hellwig#include <xfs/xfs.h> 2353dce512deSChristoph Hellwigint main(void) 2354dce512deSChristoph Hellwig{ 2355dce512deSChristoph Hellwig xfsctl(NULL, 0, 0, NULL); 2356dce512deSChristoph Hellwig return 0; 2357dce512deSChristoph Hellwig} 2358dce512deSChristoph HellwigEOF 2359dce512deSChristoph Hellwig if compile_prog "" "" ; then 2360dce512deSChristoph Hellwig xfs="yes" 2361dce512deSChristoph Hellwig else 2362dce512deSChristoph Hellwig if test "$xfs" = "yes" ; then 2363e3a6e0daSzhaolichang feature_not_found "xfs" "Install xfsprogs/xfslibs devel" 2364dce512deSChristoph Hellwig fi 2365dce512deSChristoph Hellwig xfs=no 2366dce512deSChristoph Hellwig fi 2367dce512deSChristoph Hellwigfi 2368dce512deSChristoph Hellwig 2369dce512deSChristoph Hellwig########################################## 2370ba4dd2aaSAlex Bennée# plugin linker support probe 2371ba4dd2aaSAlex Bennée 2372ba4dd2aaSAlex Bennéeif test "$plugins" != "no"; then 2373ba4dd2aaSAlex Bennée 2374ba4dd2aaSAlex Bennée ######################################### 2375ba4dd2aaSAlex Bennée # See if --dynamic-list is supported by the linker 2376ba4dd2aaSAlex Bennée 2377ba4dd2aaSAlex Bennée ld_dynamic_list="no" 2378ba4dd2aaSAlex Bennée cat > $TMPTXT <<EOF 2379ba4dd2aaSAlex Bennée{ 2380ba4dd2aaSAlex Bennée foo; 2381ba4dd2aaSAlex Bennée}; 2382ba4dd2aaSAlex BennéeEOF 2383ba4dd2aaSAlex Bennée 2384ba4dd2aaSAlex Bennée cat > $TMPC <<EOF 2385ba4dd2aaSAlex Bennée#include <stdio.h> 2386ba4dd2aaSAlex Bennéevoid foo(void); 2387ba4dd2aaSAlex Bennée 2388ba4dd2aaSAlex Bennéevoid foo(void) 2389ba4dd2aaSAlex Bennée{ 2390ba4dd2aaSAlex Bennée printf("foo\n"); 2391ba4dd2aaSAlex Bennée} 2392ba4dd2aaSAlex Bennée 2393ba4dd2aaSAlex Bennéeint main(void) 2394ba4dd2aaSAlex Bennée{ 2395ba4dd2aaSAlex Bennée foo(); 2396ba4dd2aaSAlex Bennée return 0; 2397ba4dd2aaSAlex Bennée} 2398ba4dd2aaSAlex BennéeEOF 2399ba4dd2aaSAlex Bennée 2400ba4dd2aaSAlex Bennée if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 2401ba4dd2aaSAlex Bennée ld_dynamic_list="yes" 2402ba4dd2aaSAlex Bennée fi 2403ba4dd2aaSAlex Bennée 2404ba4dd2aaSAlex Bennée ######################################### 2405ba4dd2aaSAlex Bennée # See if -exported_symbols_list is supported by the linker 2406ba4dd2aaSAlex Bennée 2407ba4dd2aaSAlex Bennée ld_exported_symbols_list="no" 2408ba4dd2aaSAlex Bennée cat > $TMPTXT <<EOF 2409ba4dd2aaSAlex Bennée _foo 2410ba4dd2aaSAlex BennéeEOF 2411ba4dd2aaSAlex Bennée 2412ba4dd2aaSAlex Bennée if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 2413ba4dd2aaSAlex Bennée ld_exported_symbols_list="yes" 2414ba4dd2aaSAlex Bennée fi 2415ba4dd2aaSAlex Bennée 2416ba4dd2aaSAlex Bennée if test "$ld_dynamic_list" = "no" && 2417ba4dd2aaSAlex Bennée test "$ld_exported_symbols_list" = "no" ; then 2418ba4dd2aaSAlex Bennée if test "$plugins" = "yes"; then 2419ba4dd2aaSAlex Bennée error_exit \ 2420ba4dd2aaSAlex Bennée "Plugin support requires dynamic linking and specifying a set of symbols " \ 2421ba4dd2aaSAlex Bennée "that are exported to plugins. Unfortunately your linker doesn't " \ 2422ba4dd2aaSAlex Bennée "support the flag (--dynamic-list or -exported_symbols_list) used " \ 2423ba4dd2aaSAlex Bennée "for this purpose." 2424ba4dd2aaSAlex Bennée else 2425ba4dd2aaSAlex Bennée plugins="no" 2426ba4dd2aaSAlex Bennée fi 2427ba4dd2aaSAlex Bennée else 2428ba4dd2aaSAlex Bennée plugins="yes" 2429ba4dd2aaSAlex Bennée fi 2430ba4dd2aaSAlex Bennéefi 2431ba4dd2aaSAlex Bennée 2432ba4dd2aaSAlex Bennée########################################## 2433e18df141SAnthony Liguori# glib support probe 2434a52d28afSPaolo Bonzini 2435b4c6036fSDaniel P. Berrangéglib_req_ver=2.56 2436aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0 2437aa0d1f44SPaolo Bonziniif test "$modules" = yes; then 2438a88afc64SGerd Hoffmann glib_modules="$glib_modules gmodule-export-2.0" 2439b906acacSPaolo Bonzinielif test "$plugins" = "yes"; then 2440b906acacSPaolo Bonzini glib_modules="$glib_modules gmodule-no-export-2.0" 244154cb65d8SEmilio G. Cotafi 2442e26110cfSFam Zheng 2443aa0d1f44SPaolo Bonzinifor i in $glib_modules; do 2444e26110cfSFam Zheng if $pkg_config --atleast-version=$glib_req_ver $i; then 244589138857SStefan Weil glib_cflags=$($pkg_config --cflags $i) 244689138857SStefan Weil glib_libs=$($pkg_config --libs $i) 2447e18df141SAnthony Liguori else 2448e26110cfSFam Zheng error_exit "glib-$glib_req_ver $i is required to compile QEMU" 2449e26110cfSFam Zheng fi 2450e26110cfSFam Zhengdone 2451e26110cfSFam Zheng 2452215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it 2453215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 2454215b0c2fSPaolo Bonzini 2455215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then 2456215b0c2fSPaolo Bonzini glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags" 2457215b0c2fSPaolo Bonzinifi 2458215b0c2fSPaolo Bonzini 245920cf7b8eSDenis Plotnikovif ! test "$gio" = "no"; then 246020cf7b8eSDenis Plotnikov pass=no 2461f876b765SMarc-André Lureau if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 2462f876b765SMarc-André Lureau gio_cflags=$($pkg_config --cflags gio-2.0) 2463f876b765SMarc-André Lureau gio_libs=$($pkg_config --libs gio-2.0) 246425a97a56SMarc-André Lureau gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 24655ecfb76cSPaolo Bonzini if ! has "$gdbus_codegen"; then 24660dba4897SMarc-André Lureau gdbus_codegen= 24670dba4897SMarc-André Lureau fi 246876346b62SPeter Maydell # Check that the libraries actually work -- Ubuntu 18.04 ships 246976346b62SPeter Maydell # with pkg-config --static --libs data for gio-2.0 that is missing 247076346b62SPeter Maydell # -lblkid and will give a link error. 247113ceae66SPeter Maydell cat > $TMPC <<EOF 247213ceae66SPeter Maydell#include <gio/gio.h> 247313ceae66SPeter Maydellint main(void) 247413ceae66SPeter Maydell{ 247513ceae66SPeter Maydell g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0); 247613ceae66SPeter Maydell return 0; 247713ceae66SPeter Maydell} 247813ceae66SPeter MaydellEOF 247913ceae66SPeter Maydell if compile_prog "$gio_cflags" "$gio_libs" ; then 248020cf7b8eSDenis Plotnikov pass=yes 248176346b62SPeter Maydell else 248220cf7b8eSDenis Plotnikov pass=no 2483f876b765SMarc-André Lureau fi 2484f876b765SMarc-André Lureau 248520cf7b8eSDenis Plotnikov if test "$pass" = "yes" && 248620cf7b8eSDenis Plotnikov $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 248725a97a56SMarc-André Lureau gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 248825a97a56SMarc-André Lureau gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 248925a97a56SMarc-André Lureau fi 249020cf7b8eSDenis Plotnikov fi 249120cf7b8eSDenis Plotnikov 249220cf7b8eSDenis Plotnikov if test "$pass" = "no"; then 249320cf7b8eSDenis Plotnikov if test "$gio" = "yes"; then 249420cf7b8eSDenis Plotnikov feature_not_found "gio" "Install libgio >= 2.0" 249520cf7b8eSDenis Plotnikov else 249620cf7b8eSDenis Plotnikov gio=no 249720cf7b8eSDenis Plotnikov fi 249820cf7b8eSDenis Plotnikov else 249920cf7b8eSDenis Plotnikov gio=yes 250020cf7b8eSDenis Plotnikov fi 250120cf7b8eSDenis Plotnikovfi 250225a97a56SMarc-André Lureau 2503977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the 2504977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches 2505977a82abSDaniel P. Berrange# problems on multi-arch where people try to build 2506977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers 2507977a82abSDaniel P. Berrangecat > $TMPC <<EOF 2508977a82abSDaniel P. Berrange#include <glib.h> 2509977a82abSDaniel P. Berrange#include <unistd.h> 2510977a82abSDaniel P. Berrange 2511977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \ 2512977a82abSDaniel P. Berrange typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 2513977a82abSDaniel P. Berrange 2514977a82abSDaniel P. Berrangeint main(void) { 2515977a82abSDaniel P. Berrange QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 2516977a82abSDaniel P. Berrange return 0; 2517977a82abSDaniel P. Berrange} 2518977a82abSDaniel P. BerrangeEOF 2519977a82abSDaniel P. Berrange 2520215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then 2521977a82abSDaniel P. Berrange error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 2522977a82abSDaniel P. Berrange "You probably need to set PKG_CONFIG_LIBDIR"\ 2523977a82abSDaniel P. Berrange "to point to the right pkg-config files for your"\ 2524977a82abSDaniel P. Berrange "build target" 2525977a82abSDaniel P. Berrangefi 2526977a82abSDaniel P. Berrange 25279bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2 25289bda600bSEric Blakecat > $TMPC << EOF 25299bda600bSEric Blake#include <glib.h> 25309bda600bSEric Blaketypedef struct Foo { 25319bda600bSEric Blake int i; 25329bda600bSEric Blake} Foo; 25339bda600bSEric Blakestatic void foo_free(Foo *f) 25349bda600bSEric Blake{ 25359bda600bSEric Blake g_free(f); 25369bda600bSEric Blake} 25379bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 25389bda600bSEric Blakeint main(void) { return 0; } 25399bda600bSEric BlakeEOF 25409bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 25419bda600bSEric Blake if cc_has_warning_flag "-Wno-unused-function"; then 25429bda600bSEric Blake glib_cflags="$glib_cflags -Wno-unused-function" 25435770e8afSPaolo Bonzini CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function" 25449bda600bSEric Blake fi 25459bda600bSEric Blakefi 25469bda600bSEric Blake 2547e26110cfSFam Zheng########################################## 2548e26110cfSFam Zheng# SHA command probe for modules 2549e26110cfSFam Zhengif test "$modules" = yes; then 2550e26110cfSFam Zheng shacmd_probe="sha1sum sha1 shasum" 2551e26110cfSFam Zheng for c in $shacmd_probe; do 25528ccefb91SFam Zheng if has $c; then 2553e26110cfSFam Zheng shacmd="$c" 2554e26110cfSFam Zheng break 2555e26110cfSFam Zheng fi 2556e26110cfSFam Zheng done 2557e26110cfSFam Zheng if test "$shacmd" = ""; then 2558e26110cfSFam Zheng error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 2559e26110cfSFam Zheng fi 2560e18df141SAnthony Liguorifi 2561e18df141SAnthony Liguori 2562e18df141SAnthony Liguori########################################## 2563b10d49d7SPino Toscano# libssh probe 2564b10d49d7SPino Toscanoif test "$libssh" != "no" ; then 2565b4c10fc6SThomas Huth if $pkg_config --exists "libssh >= 0.8.7"; then 2566b10d49d7SPino Toscano libssh_cflags=$($pkg_config libssh --cflags) 2567b10d49d7SPino Toscano libssh_libs=$($pkg_config libssh --libs) 2568b10d49d7SPino Toscano libssh=yes 25690a12ec87SRichard W.M. Jones else 2570b10d49d7SPino Toscano if test "$libssh" = "yes" ; then 2571b10d49d7SPino Toscano error_exit "libssh required for --enable-libssh" 25720a12ec87SRichard W.M. Jones fi 2573b10d49d7SPino Toscano libssh=no 25740a12ec87SRichard W.M. Jones fi 25750a12ec87SRichard W.M. Jonesfi 25760a12ec87SRichard W.M. Jones 25770a12ec87SRichard W.M. Jones########################################## 25787aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX 25793b8acc11SPaolo Bonzini 25807aaa6a16SPaolo Bonziniif test "$tpm" = ""; then 25817aaa6a16SPaolo Bonzini if test "$mingw32" = "yes"; then 25827aaa6a16SPaolo Bonzini tpm=no 25833b8acc11SPaolo Bonzini else 25847aaa6a16SPaolo Bonzini tpm=yes 25857aaa6a16SPaolo Bonzini fi 25867aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then 25877aaa6a16SPaolo Bonzini if test "$mingw32" = "yes" ; then 25887aaa6a16SPaolo Bonzini error_exit "TPM emulation only available on POSIX systems" 25897aaa6a16SPaolo Bonzini fi 25903b8acc11SPaolo Bonzinifi 25913b8acc11SPaolo Bonzini 25923b8acc11SPaolo Bonzini########################################## 2593f652e6afSaurel32# fdt probe 2594e169e1e1SPeter Maydell 2595fbb4121dSPaolo Bonzinicase "$fdt" in 2596fbb4121dSPaolo Bonzini auto | enabled | internal) 2597fbb4121dSPaolo Bonzini # Simpler to always update submodule, even if not needed. 2598aef45d51SDaniel P. Berrange git_submodules="${git_submodules} dtc" 2599fbb4121dSPaolo Bonzini ;; 2600fbb4121dSPaolo Bonziniesac 2601f652e6afSaurel32 260220ff075bSMichael Walle########################################## 26039d49bcf6SMarkus Armbruster# opengl probe (for sdl2, gtk) 2604b1546f32SGerd Hoffmann 2605da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then 2606bc6a3565SAkihiko Odaki epoxy=no 2607bc6a3565SAkihiko Odaki if $pkg_config epoxy; then 2608bc6a3565SAkihiko Odaki cat > $TMPC << EOF 2609bc6a3565SAkihiko Odaki#include <epoxy/egl.h> 2610bc6a3565SAkihiko Odakiint main(void) { return 0; } 2611bc6a3565SAkihiko OdakiEOF 2612bc6a3565SAkihiko Odaki if compile_prog "" "" ; then 2613bc6a3565SAkihiko Odaki epoxy=yes 2614bc6a3565SAkihiko Odaki fi 2615bc6a3565SAkihiko Odaki fi 2616bc6a3565SAkihiko Odaki 2617bc6a3565SAkihiko Odaki if test "$epoxy" = "yes" ; then 2618bc6a3565SAkihiko Odaki opengl_cflags="$($pkg_config --cflags epoxy)" 2619bc6a3565SAkihiko Odaki opengl_libs="$($pkg_config --libs epoxy)" 2620da076ffeSGerd Hoffmann opengl=yes 262120ff075bSMichael Walle else 2622da076ffeSGerd Hoffmann if test "$opengl" = "yes" ; then 2623bc6a3565SAkihiko Odaki feature_not_found "opengl" "Please install epoxy with EGL" 262420ff075bSMichael Walle fi 2625f676c67eSJeremy White opengl_cflags="" 2626da076ffeSGerd Hoffmann opengl_libs="" 2627da076ffeSGerd Hoffmann opengl=no 262820ff075bSMichael Walle fi 262920ff075bSMichael Wallefi 263020ff075bSMichael Walle 2631dcc38d1cSMarcelo Tosatti########################################## 2632a99d57bbSWanlong Gao# libnuma probe 2633a99d57bbSWanlong Gao 2634a99d57bbSWanlong Gaoif test "$numa" != "no" ; then 2635a99d57bbSWanlong Gao cat > $TMPC << EOF 2636a99d57bbSWanlong Gao#include <numa.h> 2637a99d57bbSWanlong Gaoint main(void) { return numa_available(); } 2638a99d57bbSWanlong GaoEOF 2639a99d57bbSWanlong Gao 2640a99d57bbSWanlong Gao if compile_prog "" "-lnuma" ; then 2641a99d57bbSWanlong Gao numa=yes 2642ab318051SMarc-André Lureau numa_libs="-lnuma" 2643a99d57bbSWanlong Gao else 2644a99d57bbSWanlong Gao if test "$numa" = "yes" ; then 2645a99d57bbSWanlong Gao feature_not_found "numa" "install numactl devel" 2646a99d57bbSWanlong Gao fi 2647a99d57bbSWanlong Gao numa=no 2648a99d57bbSWanlong Gao fi 2649a99d57bbSWanlong Gaofi 2650a99d57bbSWanlong Gao 2651955727d2SCortland Tölva# check for usbfs 2652955727d2SCortland Tölvahave_usbfs=no 2653955727d2SCortland Tölvaif test "$linux_user" = "yes"; then 265496566d09SThomas Petazzoni cat > $TMPC << EOF 265596566d09SThomas Petazzoni#include <linux/usbdevice_fs.h> 265696566d09SThomas Petazzoni 265796566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES 265896566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined" 265996566d09SThomas Petazzoni#endif 266096566d09SThomas Petazzoni 266196566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM 266296566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined" 266396566d09SThomas Petazzoni#endif 266496566d09SThomas Petazzoni 266596566d09SThomas Petazzoniint main(void) 266696566d09SThomas Petazzoni{ 266796566d09SThomas Petazzoni return 0; 266896566d09SThomas Petazzoni} 266996566d09SThomas PetazzoniEOF 267096566d09SThomas Petazzoni if compile_prog "" ""; then 2671955727d2SCortland Tölva have_usbfs=yes 2672955727d2SCortland Tölva fi 2673955727d2SCortland Tölvafi 2674751bcc39SMarc-André Lureau 2675de5071c5SBlue Swirl########################################## 2676d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win 2677d9840e25STomoki Sekiyama 2678e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 2679e633a5c6SEric Blake test "$vss_win32_sdk" != "no" ; then 2680d9840e25STomoki Sekiyama case "$vss_win32_sdk" in 2681690604f6SMichael Roth "") vss_win32_include="-isystem $source_path" ;; 2682d9840e25STomoki Sekiyama *\ *) # The SDK is installed in "Program Files" by default, but we cannot 2683d9840e25STomoki Sekiyama # handle path with spaces. So we symlink the headers into ".sdk/vss". 2684690604f6SMichael Roth vss_win32_include="-isystem $source_path/.sdk/vss" 2685d9840e25STomoki Sekiyama symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 2686d9840e25STomoki Sekiyama ;; 2687690604f6SMichael Roth *) vss_win32_include="-isystem $vss_win32_sdk" 2688d9840e25STomoki Sekiyama esac 2689d9840e25STomoki Sekiyama cat > $TMPC << EOF 2690d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__ 2691d9840e25STomoki Sekiyama#include <inc/win2003/vss.h> 2692d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; } 2693d9840e25STomoki SekiyamaEOF 2694d9840e25STomoki Sekiyama if compile_prog "$vss_win32_include" "" ; then 2695d9840e25STomoki Sekiyama guest_agent_with_vss="yes" 2696d9840e25STomoki Sekiyama QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 2697315d3184SFam Zheng libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 2698f33ca81fSMichael Roth qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 2699d9840e25STomoki Sekiyama else 2700d9840e25STomoki Sekiyama if test "$vss_win32_sdk" != "" ; then 2701d9840e25STomoki Sekiyama echo "ERROR: Please download and install Microsoft VSS SDK:" 2702d9840e25STomoki Sekiyama echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 2703d9840e25STomoki Sekiyama echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 2704d9840e25STomoki Sekiyama echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 2705d9840e25STomoki Sekiyama echo "ERROR: The headers are extracted in the directory \`inc'." 2706d9840e25STomoki Sekiyama feature_not_found "VSS support" 2707d9840e25STomoki Sekiyama fi 2708d9840e25STomoki Sekiyama guest_agent_with_vss="no" 2709d9840e25STomoki Sekiyama fi 2710d9840e25STomoki Sekiyamafi 2711d9840e25STomoki Sekiyama 2712d9840e25STomoki Sekiyama########################################## 2713d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified) 2714d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent 2715d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the 2716d9840e25STomoki Sekiyama# pre-compiled .tlb file is included. 2717d9840e25STomoki Sekiyama 2718e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 2719e633a5c6SEric Blake test "$guest_agent_with_vss" = "yes" ; then 2720d9840e25STomoki Sekiyama if test -z "$win_sdk"; then 2721d9840e25STomoki Sekiyama programfiles="$PROGRAMFILES" 2722d9840e25STomoki Sekiyama test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 2723d9840e25STomoki Sekiyama if test -n "$programfiles"; then 2724d9840e25STomoki Sekiyama win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 2725d9840e25STomoki Sekiyama else 2726d9840e25STomoki Sekiyama feature_not_found "Windows SDK" 2727d9840e25STomoki Sekiyama fi 2728d9840e25STomoki Sekiyama elif test "$win_sdk" = "no"; then 2729d9840e25STomoki Sekiyama win_sdk="" 2730d9840e25STomoki Sekiyama fi 2731d9840e25STomoki Sekiyamafi 2732d9840e25STomoki Sekiyama 2733d9840e25STomoki Sekiyama########################################## 273450cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h 2735e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 273650cbebb9SMichael Roth cat > $TMPC << EOF 273750cbebb9SMichael Roth#include <windows.h> 273850cbebb9SMichael Roth#include <ntddscsi.h> 273950cbebb9SMichael Rothint main(void) { 274050cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS) 274150cbebb9SMichael Roth#error Missing required ioctl definitions 274250cbebb9SMichael Roth#endif 274350cbebb9SMichael Roth SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 274450cbebb9SMichael Roth return addr.Lun; 274550cbebb9SMichael Roth} 274650cbebb9SMichael RothEOF 274750cbebb9SMichael Roth if compile_prog "" "" ; then 274850cbebb9SMichael Roth guest_agent_ntddscsi=yes 2749996b9cdcSMatt Hines libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 275050cbebb9SMichael Roth fi 275150cbebb9SMichael Rothfi 275250cbebb9SMichael Roth 275350cbebb9SMichael Roth########################################## 27548ca80760SRichard Henderson# capstone 27558ca80760SRichard Henderson 2756e219c499SRichard Hendersoncase "$capstone" in 27578b18cdbfSRichard Henderson auto | enabled | internal) 27588b18cdbfSRichard Henderson # Simpler to always update submodule, even if not needed. 2759e219c499SRichard Henderson git_submodules="${git_submodules} capstone" 2760e219c499SRichard Henderson ;; 2761e219c499SRichard Hendersonesac 27628ca80760SRichard Henderson 27638ca80760SRichard Henderson########################################## 2764519175a2SAlex Barcelo# check and set a backend for coroutine 2765d0e2fce5SAneesh Kumar K.V 27667c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback 276733c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows 276833c53c54SDaniel P. Berrange# specific one. 27697c2acc70SPeter Maydell 27707c2acc70SPeter Maydellucontext_works=no 2771d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then 2772d0e2fce5SAneesh Kumar K.V cat > $TMPC << EOF 2773d0e2fce5SAneesh Kumar K.V#include <ucontext.h> 2774cdf84806SPeter Maydell#ifdef __stub_makecontext 2775cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail 2776cdf84806SPeter Maydell#endif 277775cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; } 2778d0e2fce5SAneesh Kumar K.VEOF 2779d0e2fce5SAneesh Kumar K.V if compile_prog "" "" ; then 27807c2acc70SPeter Maydell ucontext_works=yes 2781d0e2fce5SAneesh Kumar K.V fi 2782519175a2SAlex Barcelofi 27837c2acc70SPeter Maydell 27847c2acc70SPeter Maydellif test "$coroutine" = ""; then 27857c2acc70SPeter Maydell if test "$mingw32" = "yes"; then 27867c2acc70SPeter Maydell coroutine=win32 27877c2acc70SPeter Maydell elif test "$ucontext_works" = "yes"; then 27887c2acc70SPeter Maydell coroutine=ucontext 2789519175a2SAlex Barcelo else 27907c2acc70SPeter Maydell coroutine=sigaltstack 27917c2acc70SPeter Maydell fi 27927c2acc70SPeter Maydellelse 27937c2acc70SPeter Maydell case $coroutine in 27947c2acc70SPeter Maydell windows) 27957c2acc70SPeter Maydell if test "$mingw32" != "yes"; then 27967c2acc70SPeter Maydell error_exit "'windows' coroutine backend only valid for Windows" 27977c2acc70SPeter Maydell fi 27987c2acc70SPeter Maydell # Unfortunately the user visible backend name doesn't match the 27997c2acc70SPeter Maydell # coroutine-*.c filename for this case, so we have to adjust it here. 28007c2acc70SPeter Maydell coroutine=win32 28017c2acc70SPeter Maydell ;; 28027c2acc70SPeter Maydell ucontext) 28037c2acc70SPeter Maydell if test "$ucontext_works" != "yes"; then 28047c2acc70SPeter Maydell feature_not_found "ucontext" 28057c2acc70SPeter Maydell fi 28067c2acc70SPeter Maydell ;; 280733c53c54SDaniel P. Berrange sigaltstack) 28087c2acc70SPeter Maydell if test "$mingw32" = "yes"; then 28097c2acc70SPeter Maydell error_exit "only the 'windows' coroutine backend is valid for Windows" 28107c2acc70SPeter Maydell fi 28117c2acc70SPeter Maydell ;; 28127c2acc70SPeter Maydell *) 281376ad07a4SPeter Maydell error_exit "unknown coroutine backend $coroutine" 28147c2acc70SPeter Maydell ;; 28157c2acc70SPeter Maydell esac 2816d0e2fce5SAneesh Kumar K.Vfi 2817d0e2fce5SAneesh Kumar K.V 281870c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then 281970c60c08SStefan Hajnoczi coroutine_pool=yes 282070c60c08SStefan Hajnoczifi 282170c60c08SStefan Hajnoczi 28227d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then 28237d992e4dSPeter Lieven if test "$coroutine_pool" = "yes"; then 28247d992e4dSPeter Lieven echo "WARN: disabling coroutine pool for stack usage debugging" 28257d992e4dSPeter Lieven coroutine_pool=no 28267d992e4dSPeter Lieven fi 28277d992e4dSPeter Lievenfi 28287d992e4dSPeter Lieven 28291e4f6065SDaniele Buono################################################## 28301e4f6065SDaniele Buono# SafeStack 28311e4f6065SDaniele Buono 28321e4f6065SDaniele Buono 28331e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then 28341e4f6065SDaniele Buonocat > $TMPC << EOF 28351e4f6065SDaniele Buonoint main(int argc, char *argv[]) 28361e4f6065SDaniele Buono{ 28371e4f6065SDaniele Buono#if ! __has_feature(safe_stack) 28381e4f6065SDaniele Buono#error SafeStack Disabled 28391e4f6065SDaniele Buono#endif 28401e4f6065SDaniele Buono return 0; 28411e4f6065SDaniele Buono} 28421e4f6065SDaniele BuonoEOF 28431e4f6065SDaniele Buono flag="-fsanitize=safe-stack" 28441e4f6065SDaniele Buono # Check that safe-stack is supported and enabled. 28451e4f6065SDaniele Buono if compile_prog "-Werror $flag" "$flag"; then 28461e4f6065SDaniele Buono # Flag needed both at compilation and at linking 28471e4f6065SDaniele Buono QEMU_CFLAGS="$QEMU_CFLAGS $flag" 28481e4f6065SDaniele Buono QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 28491e4f6065SDaniele Buono else 28501e4f6065SDaniele Buono error_exit "SafeStack not supported by your compiler" 28511e4f6065SDaniele Buono fi 28521e4f6065SDaniele Buono if test "$coroutine" != "ucontext"; then 28531e4f6065SDaniele Buono error_exit "SafeStack is only supported by the coroutine backend ucontext" 28541e4f6065SDaniele Buono fi 28551e4f6065SDaniele Buonoelse 28561e4f6065SDaniele Buonocat > $TMPC << EOF 28571e4f6065SDaniele Buonoint main(int argc, char *argv[]) 28581e4f6065SDaniele Buono{ 28591e4f6065SDaniele Buono#if defined(__has_feature) 28601e4f6065SDaniele Buono#if __has_feature(safe_stack) 28611e4f6065SDaniele Buono#error SafeStack Enabled 28621e4f6065SDaniele Buono#endif 28631e4f6065SDaniele Buono#endif 28641e4f6065SDaniele Buono return 0; 28651e4f6065SDaniele Buono} 28661e4f6065SDaniele BuonoEOF 28671e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then 28681e4f6065SDaniele Buono # Make sure that safe-stack is disabled 28691e4f6065SDaniele Buono if ! compile_prog "-Werror" ""; then 28701e4f6065SDaniele Buono # SafeStack was already enabled, try to explicitly remove the feature 28711e4f6065SDaniele Buono flag="-fno-sanitize=safe-stack" 28721e4f6065SDaniele Buono if ! compile_prog "-Werror $flag" "$flag"; then 28731e4f6065SDaniele Buono error_exit "Configure cannot disable SafeStack" 28741e4f6065SDaniele Buono fi 28751e4f6065SDaniele Buono QEMU_CFLAGS="$QEMU_CFLAGS $flag" 28761e4f6065SDaniele Buono QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 28771e4f6065SDaniele Buono fi 28781e4f6065SDaniele Buonoelse # "$safe_stack" = "" 28791e4f6065SDaniele Buono # Set safe_stack to yes or no based on pre-existing flags 28801e4f6065SDaniele Buono if compile_prog "-Werror" ""; then 28811e4f6065SDaniele Buono safe_stack="no" 28821e4f6065SDaniele Buono else 28831e4f6065SDaniele Buono safe_stack="yes" 28841e4f6065SDaniele Buono if test "$coroutine" != "ucontext"; then 28851e4f6065SDaniele Buono error_exit "SafeStack is only supported by the coroutine backend ucontext" 28861e4f6065SDaniele Buono fi 28871e4f6065SDaniele Buono fi 28881e4f6065SDaniele Buonofi 28891e4f6065SDaniele Buonofi 28907d992e4dSPeter Lieven 289176a347e1SRichard Henderson######################################## 289276a347e1SRichard Henderson# check if cpuid.h is usable. 289376a347e1SRichard Henderson 289476a347e1SRichard Hendersoncat > $TMPC << EOF 289576a347e1SRichard Henderson#include <cpuid.h> 289676a347e1SRichard Hendersonint main(void) { 2897774d566cSPeter Maydell unsigned a, b, c, d; 2898774d566cSPeter Maydell int max = __get_cpuid_max(0, 0); 2899774d566cSPeter Maydell 2900774d566cSPeter Maydell if (max >= 1) { 2901774d566cSPeter Maydell __cpuid(1, a, b, c, d); 2902774d566cSPeter Maydell } 2903774d566cSPeter Maydell 2904774d566cSPeter Maydell if (max >= 7) { 2905774d566cSPeter Maydell __cpuid_count(7, 0, a, b, c, d); 2906774d566cSPeter Maydell } 2907774d566cSPeter Maydell 290876a347e1SRichard Henderson return 0; 290976a347e1SRichard Henderson} 291076a347e1SRichard HendersonEOF 291176a347e1SRichard Hendersonif compile_prog "" "" ; then 291276a347e1SRichard Henderson cpuid_h=yes 291376a347e1SRichard Hendersonfi 291476a347e1SRichard Henderson 29155dd89908SRichard Henderson########################################## 29165dd89908SRichard Henderson# avx2 optimization requirement check 29175dd89908SRichard Henderson# 29185dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable, 29195dd89908SRichard Henderson# since we won't be able to select the new routines. 29205dd89908SRichard Henderson 2921e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 29225dd89908SRichard Henderson cat > $TMPC << EOF 29235dd89908SRichard Henderson#pragma GCC push_options 29245dd89908SRichard Henderson#pragma GCC target("avx2") 29255dd89908SRichard Henderson#include <cpuid.h> 29265dd89908SRichard Henderson#include <immintrin.h> 29275dd89908SRichard Hendersonstatic int bar(void *a) { 29285dd89908SRichard Henderson __m256i x = *(__m256i *)a; 29295dd89908SRichard Henderson return _mm256_testz_si256(x, x); 29305dd89908SRichard Henderson} 29315dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); } 29325dd89908SRichard HendersonEOF 29335b945f23SRichard Henderson if compile_object "-Werror" ; then 29345dd89908SRichard Henderson avx2_opt="yes" 293586583a07SLiam Merwick else 293686583a07SLiam Merwick avx2_opt="no" 29375dd89908SRichard Henderson fi 29385dd89908SRichard Hendersonfi 29395dd89908SRichard Henderson 29406b8cd447SRobert Hoo########################################## 29416b8cd447SRobert Hoo# avx512f optimization requirement check 29426b8cd447SRobert Hoo# 29436b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable, 29446b8cd447SRobert Hoo# since we won't be able to select the new routines. 29456b8cd447SRobert Hoo# by default, it is turned off. 29466b8cd447SRobert Hoo# if user explicitly want to enable it, check environment 29476b8cd447SRobert Hoo 29486b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 29496b8cd447SRobert Hoo cat > $TMPC << EOF 29506b8cd447SRobert Hoo#pragma GCC push_options 29516b8cd447SRobert Hoo#pragma GCC target("avx512f") 29526b8cd447SRobert Hoo#include <cpuid.h> 29536b8cd447SRobert Hoo#include <immintrin.h> 29546b8cd447SRobert Hoostatic int bar(void *a) { 29556b8cd447SRobert Hoo __m512i x = *(__m512i *)a; 29566b8cd447SRobert Hoo return _mm512_test_epi64_mask(x, x); 29576b8cd447SRobert Hoo} 29586b8cd447SRobert Hooint main(int argc, char *argv[]) 29596b8cd447SRobert Hoo{ 29606b8cd447SRobert Hoo return bar(argv[0]); 29616b8cd447SRobert Hoo} 29626b8cd447SRobert HooEOF 29635b945f23SRichard Henderson if ! compile_object "-Werror" ; then 29646b8cd447SRobert Hoo avx512f_opt="no" 29656b8cd447SRobert Hoo fi 29666b8cd447SRobert Hooelse 29676b8cd447SRobert Hoo avx512f_opt="no" 29686b8cd447SRobert Hoofi 29696b8cd447SRobert Hoo 2970f540166bSRichard Henderson######################################## 2971f540166bSRichard Henderson# check if __[u]int128_t is usable. 2972f540166bSRichard Henderson 2973f540166bSRichard Hendersonint128=no 2974f540166bSRichard Hendersoncat > $TMPC << EOF 2975f540166bSRichard Henderson__int128_t a; 2976f540166bSRichard Henderson__uint128_t b; 2977f540166bSRichard Hendersonint main (void) { 2978f540166bSRichard Henderson a = a + b; 2979f540166bSRichard Henderson b = a * b; 2980464e3671SPeter Maydell a = a * a; 2981f540166bSRichard Henderson return 0; 2982f540166bSRichard Henderson} 2983f540166bSRichard HendersonEOF 2984f540166bSRichard Hendersonif compile_prog "" "" ; then 2985f540166bSRichard Henderson int128=yes 2986f540166bSRichard Hendersonfi 298776a347e1SRichard Henderson 29887ebee43eSRichard Henderson######################################### 29897ebee43eSRichard Henderson# See if 128-bit atomic operations are supported. 29907ebee43eSRichard Henderson 29917ebee43eSRichard Hendersonatomic128=no 29927ebee43eSRichard Hendersonif test "$int128" = "yes"; then 29937ebee43eSRichard Henderson cat > $TMPC << EOF 29947ebee43eSRichard Hendersonint main(void) 29957ebee43eSRichard Henderson{ 29967ebee43eSRichard Henderson unsigned __int128 x = 0, y = 0; 2997bceac547SThomas Huth y = __atomic_load(&x, 0); 2998bceac547SThomas Huth __atomic_store(&x, y, 0); 2999bceac547SThomas Huth __atomic_compare_exchange(&x, &y, x, 0, 0, 0); 30007ebee43eSRichard Henderson return 0; 30017ebee43eSRichard Henderson} 30027ebee43eSRichard HendersonEOF 30037ebee43eSRichard Henderson if compile_prog "" "" ; then 30047ebee43eSRichard Henderson atomic128=yes 30057ebee43eSRichard Henderson fi 30067ebee43eSRichard Hendersonfi 30077ebee43eSRichard Henderson 3008e6cd4bb5SRichard Hendersoncmpxchg128=no 3009e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then 3010e6cd4bb5SRichard Henderson cat > $TMPC << EOF 3011e6cd4bb5SRichard Hendersonint main(void) 3012e6cd4bb5SRichard Henderson{ 3013e6cd4bb5SRichard Henderson unsigned __int128 x = 0, y = 0; 3014e6cd4bb5SRichard Henderson __sync_val_compare_and_swap_16(&x, y, x); 3015e6cd4bb5SRichard Henderson return 0; 3016e6cd4bb5SRichard Henderson} 3017e6cd4bb5SRichard HendersonEOF 3018e6cd4bb5SRichard Henderson if compile_prog "" "" ; then 3019e6cd4bb5SRichard Henderson cmpxchg128=yes 3020e6cd4bb5SRichard Henderson fi 3021e6cd4bb5SRichard Hendersonfi 3022e6cd4bb5SRichard Henderson 3023fd0e6053SJohn Snow######################################## 3024fd0e6053SJohn Snow# check if ccache is interfering with 3025fd0e6053SJohn Snow# semantic analysis of macros 3026fd0e6053SJohn Snow 30275e4dfd3dSJohn Snowunset CCACHE_CPP2 3028fd0e6053SJohn Snowccache_cpp2=no 3029fd0e6053SJohn Snowcat > $TMPC << EOF 3030fd0e6053SJohn Snowstatic const int Z = 1; 3031fd0e6053SJohn Snow#define fn() ({ Z; }) 3032fd0e6053SJohn Snow#define TAUT(X) ((X) == Z) 3033fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y) 3034fd0e6053SJohn Snow#define ID(X) (X) 3035fd0e6053SJohn Snowint main(int argc, char *argv[]) 3036fd0e6053SJohn Snow{ 3037fd0e6053SJohn Snow int x = 0, y = 0; 3038fd0e6053SJohn Snow x = ID(x); 3039fd0e6053SJohn Snow x = fn(); 3040fd0e6053SJohn Snow fn(); 3041fd0e6053SJohn Snow if (PAREN(x, y)) return 0; 3042fd0e6053SJohn Snow if (TAUT(Z)) return 0; 3043fd0e6053SJohn Snow return 0; 3044fd0e6053SJohn Snow} 3045fd0e6053SJohn SnowEOF 3046fd0e6053SJohn Snow 3047fd0e6053SJohn Snowif ! compile_object "-Werror"; then 3048fd0e6053SJohn Snow ccache_cpp2=yes 3049fd0e6053SJohn Snowfi 3050fd0e6053SJohn Snow 3051b553a042SJohn Snow################################################# 3052b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE. 3053b553a042SJohn Snow 3054b553a042SJohn Snowif test "$fortify_source" != "no"; then 3055b553a042SJohn Snow if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 3056b553a042SJohn Snow fortify_source="no"; 3057e189091fSPeter Maydell elif test -n "$cxx" && has $cxx && 3058cfcc7c14SJohn Snow echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 3059b553a042SJohn Snow fortify_source="no"; 3060b553a042SJohn Snow else 3061b553a042SJohn Snow fortify_source="yes" 3062b553a042SJohn Snow fi 3063b553a042SJohn Snowfi 3064b553a042SJohn Snow 3065d2042378SAneesh Kumar K.V########################################## 3066a40161cbSPaolo Bonzini# check for usable membarrier system call 3067a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then 3068a40161cbSPaolo Bonzini have_membarrier=no 3069a40161cbSPaolo Bonzini if test "$mingw32" = "yes" ; then 3070a40161cbSPaolo Bonzini have_membarrier=yes 3071a40161cbSPaolo Bonzini elif test "$linux" = "yes" ; then 3072a40161cbSPaolo Bonzini cat > $TMPC << EOF 3073a40161cbSPaolo Bonzini #include <linux/membarrier.h> 3074a40161cbSPaolo Bonzini #include <sys/syscall.h> 3075a40161cbSPaolo Bonzini #include <unistd.h> 3076a40161cbSPaolo Bonzini #include <stdlib.h> 3077a40161cbSPaolo Bonzini int main(void) { 3078a40161cbSPaolo Bonzini syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 3079a40161cbSPaolo Bonzini syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 3080a40161cbSPaolo Bonzini exit(0); 3081a40161cbSPaolo Bonzini } 3082a40161cbSPaolo BonziniEOF 3083a40161cbSPaolo Bonzini if compile_prog "" "" ; then 3084a40161cbSPaolo Bonzini have_membarrier=yes 3085a40161cbSPaolo Bonzini fi 3086a40161cbSPaolo Bonzini fi 3087a40161cbSPaolo Bonzini if test "$have_membarrier" = "no"; then 3088a40161cbSPaolo Bonzini feature_not_found "membarrier" "membarrier system call not available" 3089a40161cbSPaolo Bonzini fi 3090a40161cbSPaolo Bonzinielse 3091a40161cbSPaolo Bonzini # Do not enable it by default even for Mingw32, because it doesn't 3092a40161cbSPaolo Bonzini # work on Wine. 3093a40161cbSPaolo Bonzini membarrier=no 3094a40161cbSPaolo Bonzinifi 3095a40161cbSPaolo Bonzini 3096a40161cbSPaolo Bonzini########################################## 3097f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment 30984f67366eSThomas Huthhave_afalg=no 3099f0d92b56SLongpeng(Mike)cat > $TMPC << EOF 3100f0d92b56SLongpeng(Mike)#include <errno.h> 3101f0d92b56SLongpeng(Mike)#include <sys/types.h> 3102f0d92b56SLongpeng(Mike)#include <sys/socket.h> 3103f0d92b56SLongpeng(Mike)#include <linux/if_alg.h> 3104f0d92b56SLongpeng(Mike)int main(void) { 3105f0d92b56SLongpeng(Mike) int sock; 3106f0d92b56SLongpeng(Mike) sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 3107f0d92b56SLongpeng(Mike) return sock; 3108f0d92b56SLongpeng(Mike)} 3109f0d92b56SLongpeng(Mike)EOF 3110f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then 3111f0d92b56SLongpeng(Mike) have_afalg=yes 3112f0d92b56SLongpeng(Mike)fi 3113f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" 3114f0d92b56SLongpeng(Mike)then 3115f0d92b56SLongpeng(Mike) if test "$have_afalg" != "yes" 3116f0d92b56SLongpeng(Mike) then 3117f0d92b56SLongpeng(Mike) error_exit "AF_ALG requested but could not be detected" 3118f0d92b56SLongpeng(Mike) fi 3119f0d92b56SLongpeng(Mike)fi 3120f0d92b56SLongpeng(Mike) 3121f0d92b56SLongpeng(Mike) 3122db1ed1abSRichard Henderson########################################## 3123247724cbSMarc-André Lureau# checks for sanitizers 3124247724cbSMarc-André Lureau 3125247724cbSMarc-André Lureauhave_asan=no 3126247724cbSMarc-André Lureauhave_ubsan=no 3127d83414e1SMarc-André Lureauhave_asan_iface_h=no 3128d83414e1SMarc-André Lureauhave_asan_iface_fiber=no 3129247724cbSMarc-André Lureau 3130247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then 3131b9f44da2SMarc-André Lureau write_c_skeleton 3132247724cbSMarc-André Lureau if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 3133247724cbSMarc-André Lureau have_asan=yes 3134247724cbSMarc-André Lureau fi 3135b9f44da2SMarc-André Lureau 3136b9f44da2SMarc-André Lureau # we could use a simple skeleton for flags checks, but this also 3137b9f44da2SMarc-André Lureau # detect the static linking issue of ubsan, see also: 3138b9f44da2SMarc-André Lureau # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 3139b9f44da2SMarc-André Lureau cat > $TMPC << EOF 3140b9f44da2SMarc-André Lureau#include <stdlib.h> 3141b9f44da2SMarc-André Lureauint main(void) { 3142b9f44da2SMarc-André Lureau void *tmp = malloc(10); 3143f2dfe54cSLeonid Bloch if (tmp != NULL) { 3144b9f44da2SMarc-André Lureau return *(int *)(tmp + 2); 3145b9f44da2SMarc-André Lureau } 3146d1abf3fcSOlaf Hering return 1; 3147f2dfe54cSLeonid Bloch} 3148b9f44da2SMarc-André LureauEOF 3149247724cbSMarc-André Lureau if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 3150247724cbSMarc-André Lureau have_ubsan=yes 3151247724cbSMarc-André Lureau fi 3152d83414e1SMarc-André Lureau 3153d83414e1SMarc-André Lureau if check_include "sanitizer/asan_interface.h" ; then 3154d83414e1SMarc-André Lureau have_asan_iface_h=yes 3155d83414e1SMarc-André Lureau fi 3156d83414e1SMarc-André Lureau 3157d83414e1SMarc-André Lureau cat > $TMPC << EOF 3158d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h> 3159d83414e1SMarc-André Lureauint main(void) { 3160d83414e1SMarc-André Lureau __sanitizer_start_switch_fiber(0, 0, 0); 3161d83414e1SMarc-André Lureau return 0; 3162d83414e1SMarc-André Lureau} 3163d83414e1SMarc-André LureauEOF 3164d83414e1SMarc-André Lureau if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 3165d83414e1SMarc-André Lureau have_asan_iface_fiber=yes 3166d83414e1SMarc-André Lureau fi 3167247724cbSMarc-André Lureaufi 3168247724cbSMarc-André Lureau 31690aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers; 31700aebab04SLingfeng Yang# keep it separate until that is not the case. 31710aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 31720aebab04SLingfeng Yang error_exit "TSAN is not supported with other sanitiziers." 31730aebab04SLingfeng Yangfi 31740aebab04SLingfeng Yanghave_tsan=no 31750aebab04SLingfeng Yanghave_tsan_iface_fiber=no 31760aebab04SLingfeng Yangif test "$tsan" = "yes" ; then 31770aebab04SLingfeng Yang write_c_skeleton 31780aebab04SLingfeng Yang if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 31790aebab04SLingfeng Yang have_tsan=yes 31800aebab04SLingfeng Yang fi 31810aebab04SLingfeng Yang cat > $TMPC << EOF 31820aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h> 31830aebab04SLingfeng Yangint main(void) { 31840aebab04SLingfeng Yang __tsan_create_fiber(0); 31850aebab04SLingfeng Yang return 0; 31860aebab04SLingfeng Yang} 31870aebab04SLingfeng YangEOF 31880aebab04SLingfeng Yang if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 31890aebab04SLingfeng Yang have_tsan_iface_fiber=yes 31900aebab04SLingfeng Yang fi 31910aebab04SLingfeng Yangfi 31920aebab04SLingfeng Yang 3193adc28027SAlexander Bulekov########################################## 3194675b9b53SMarc-André Lureau# check for slirp 3195675b9b53SMarc-André Lureau 3196675b9b53SMarc-André Lureaucase "$slirp" in 31974d34a86bSPaolo Bonzini auto | enabled | internal) 31984d34a86bSPaolo Bonzini # Simpler to always update submodule, even if not needed. 31997c57bdd8SMarc-André Lureau git_submodules="${git_submodules} slirp" 3200675b9b53SMarc-André Lureau ;; 3201675b9b53SMarc-André Lureauesac 3202675b9b53SMarc-André Lureau 3203b8e0c493SJoelle van Dyne# Check for slirp smbd dupport 3204b8e0c493SJoelle van Dyne: ${smbd=${SMBD-/usr/sbin/smbd}} 3205b8e0c493SJoelle van Dyneif test "$slirp_smbd" != "no" ; then 3206b8e0c493SJoelle van Dyne if test "$mingw32" = "yes" ; then 3207b8e0c493SJoelle van Dyne if test "$slirp_smbd" = "yes" ; then 3208b8e0c493SJoelle van Dyne error_exit "Host smbd not supported on this platform." 3209b8e0c493SJoelle van Dyne fi 3210b8e0c493SJoelle van Dyne slirp_smbd=no 3211b8e0c493SJoelle van Dyne else 3212b8e0c493SJoelle van Dyne slirp_smbd=yes 3213b8e0c493SJoelle van Dyne fi 3214b8e0c493SJoelle van Dynefi 3215b8e0c493SJoelle van Dyne 321654e7aac0SAlexey Krasikov########################################## 321754e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall 321854e7aac0SAlexey Krasikov 321954e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then 322054e7aac0SAlexey Krasikov 322154e7aac0SAlexey Krasikov have_keyring=no 322254e7aac0SAlexey Krasikov cat > $TMPC << EOF 322354e7aac0SAlexey Krasikov#include <errno.h> 322454e7aac0SAlexey Krasikov#include <asm/unistd.h> 322554e7aac0SAlexey Krasikov#include <linux/keyctl.h> 322654e7aac0SAlexey Krasikov#include <unistd.h> 322754e7aac0SAlexey Krasikovint main(void) { 322854e7aac0SAlexey Krasikov return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 322954e7aac0SAlexey Krasikov} 323054e7aac0SAlexey KrasikovEOF 323154e7aac0SAlexey Krasikov if compile_prog "" "" ; then 323254e7aac0SAlexey Krasikov have_keyring=yes 323354e7aac0SAlexey Krasikov fi 323454e7aac0SAlexey Krasikovfi 323554e7aac0SAlexey Krasikovif test "$secret_keyring" != "no" 323654e7aac0SAlexey Krasikovthen 3237b418d265SDavid Edmondson if test "$have_keyring" = "yes" 323854e7aac0SAlexey Krasikov then 323954e7aac0SAlexey Krasikov secret_keyring=yes 324054e7aac0SAlexey Krasikov else 324154e7aac0SAlexey Krasikov if test "$secret_keyring" = "yes" 324254e7aac0SAlexey Krasikov then 324354e7aac0SAlexey Krasikov error_exit "syscall __NR_keyctl requested, \ 324454e7aac0SAlexey Krasikovbut not implemented on your system" 324554e7aac0SAlexey Krasikov else 324654e7aac0SAlexey Krasikov secret_keyring=no 324754e7aac0SAlexey Krasikov fi 324854e7aac0SAlexey Krasikov fi 324954e7aac0SAlexey Krasikovfi 325054e7aac0SAlexey Krasikov 325192500362SAlexey Krasikov########################################## 3252e86ecd4bSJuan Quintela# End of CC checks 3253e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs 3254e86ecd4bSJuan Quintela 3255d83414e1SMarc-André Lureauwrite_c_skeleton 3256d83414e1SMarc-André Lureau 32571d728c39SBlue Swirlif test "$gcov" = "yes" ; then 3258bf0e56a3SMarc-André Lureau : 3259b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then 3260086d5f75SPaolo Bonzini QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 3261086d5f75SPaolo Bonzini debug=no 3262086d5f75SPaolo Bonzinifi 3263086d5f75SPaolo Bonzini 3264086d5f75SPaolo Bonzinicase "$ARCH" in 3265086d5f75SPaolo Bonzinialpha) 3266086d5f75SPaolo Bonzini # Ensure there's only a single GP 3267086d5f75SPaolo Bonzini QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 3268086d5f75SPaolo Bonzini;; 3269086d5f75SPaolo Bonziniesac 3270086d5f75SPaolo Bonzini 3271086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then 3272086d5f75SPaolo Bonzini QEMU_CFLAGS="-p $QEMU_CFLAGS" 3273086d5f75SPaolo Bonzini QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 3274086d5f75SPaolo Bonzinifi 3275a316e378SJuan Quintela 3276247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then 3277db5adeaaSPaolo Bonzini QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 3278db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 3279d83414e1SMarc-André Lureau if test "$have_asan_iface_h" = "no" ; then 3280d83414e1SMarc-André Lureau echo "ASAN build enabled, but ASAN header missing." \ 3281d83414e1SMarc-André Lureau "Without code annotation, the report may be inferior." 3282d83414e1SMarc-André Lureau elif test "$have_asan_iface_fiber" = "no" ; then 3283d83414e1SMarc-André Lureau echo "ASAN build enabled, but ASAN header is too old." \ 3284d83414e1SMarc-André Lureau "Without code annotation, the report may be inferior." 3285d83414e1SMarc-André Lureau fi 3286247724cbSMarc-André Lureaufi 32870aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then 32880aebab04SLingfeng Yang if test "$have_tsan_iface_fiber" = "yes" ; then 32890aebab04SLingfeng Yang QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 32900aebab04SLingfeng Yang QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 32910aebab04SLingfeng Yang else 32920aebab04SLingfeng Yang error_exit "Cannot enable TSAN due to missing fiber annotation interface." 32930aebab04SLingfeng Yang fi 32940aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then 32950aebab04SLingfeng Yang error_exit "Cannot enable TSAN due to missing sanitize thread interface." 32960aebab04SLingfeng Yangfi 3297247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then 3298db5adeaaSPaolo Bonzini QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 3299db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 3300247724cbSMarc-André Lureaufi 3301247724cbSMarc-André Lureau 33026542aa9cSPeter Lieven########################################## 33033efac6ebSTomáš Golembiovský 33040aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 33050aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then 3306e86ecd4bSJuan Quintela if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 3307db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 3308e86ecd4bSJuan Quintela fi 3309e86ecd4bSJuan Quintelafi 3310e86ecd4bSJuan Quintela 3311952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available 3312952afb71SBlue Swirlif test "$mingw32" = "yes" ; then 3313cb8baa77SMark Cave-Ayland flags="--no-seh --nxcompat" 3314cb8baa77SMark Cave-Ayland 3315cb8baa77SMark Cave-Ayland # Disable ASLR for debug builds to allow debugging with gdb 3316cb8baa77SMark Cave-Ayland if test "$debug" = "no" ; then 3317cb8baa77SMark Cave-Ayland flags="--dynamicbase $flags" 3318cb8baa77SMark Cave-Ayland fi 3319cb8baa77SMark Cave-Ayland 3320cb8baa77SMark Cave-Ayland for flag in $flags; do 3321e9a3591fSChristian Borntraeger if ld_has $flag ; then 3322db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 3323952afb71SBlue Swirl fi 3324952afb71SBlue Swirl done 3325952afb71SBlue Swirlfi 3326952afb71SBlue Swirl 33279d6bc27bSMichael Roth# Probe for guest agent support/options 33289d6bc27bSMichael Roth 3329e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then 3330a5125905SLaurent Vivier if [ "$softmmu" = no -a "$want_tools" = no ] ; then 3331a5125905SLaurent Vivier guest_agent=no 3332a5125905SLaurent Vivier elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 3333e8ef31a3SMichael Tokarev guest_agent=yes 3334e8ef31a3SMichael Tokarev elif [ "$guest_agent" != yes ]; then 3335e8ef31a3SMichael Tokarev guest_agent=no 3336e8ef31a3SMichael Tokarev else 3337e8ef31a3SMichael Tokarev error_exit "Guest agent is not supported on this platform" 3338ca35f780SPaolo Bonzini fi 33394b1c11fdSDaniel P. Berrangefi 3340ca35f780SPaolo Bonzini 3341b846ab7cSPaolo Bonzini# Guest agent Windows MSI package 33429d6bc27bSMichael Roth 33439d6bc27bSMichael Rothif test "$QEMU_GA_MANUFACTURER" = ""; then 33449d6bc27bSMichael Roth QEMU_GA_MANUFACTURER=QEMU 33459d6bc27bSMichael Rothfi 33469d6bc27bSMichael Rothif test "$QEMU_GA_DISTRO" = ""; then 33479d6bc27bSMichael Roth QEMU_GA_DISTRO=Linux 33489d6bc27bSMichael Rothfi 33499d6bc27bSMichael Rothif test "$QEMU_GA_VERSION" = ""; then 335089138857SStefan Weil QEMU_GA_VERSION=$(cat $source_path/VERSION) 33519d6bc27bSMichael Rothfi 33529d6bc27bSMichael Roth 3353b846ab7cSPaolo BonziniQEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin" 33549d6bc27bSMichael Roth 3355ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler 3356ca35f780SPaolo Bonziniroms= 3357e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 3358e633a5c6SEric Blake test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 33597000a12eSThomas Huth test "$targetos" != "Haiku" && test "$softmmu" = yes ; then 3360e57218b6SPeter Maydell # Different host OS linkers have different ideas about the name of the ELF 3361c65d5e4eSBrad Smith # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 3362c65d5e4eSBrad Smith # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 3363c65d5e4eSBrad Smith for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 3364e57218b6SPeter Maydell if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 3365e57218b6SPeter Maydell ld_i386_emulation="$emu" 3366ca35f780SPaolo Bonzini roms="optionrom" 3367e57218b6SPeter Maydell break 3368e57218b6SPeter Maydell fi 3369e57218b6SPeter Maydell done 3370ca35f780SPaolo Bonzinifi 3371ca35f780SPaolo Bonzini 33722e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 3373a5b2afd5SThomas Huth# or -march=z10 (which is the lowest architecture level that Clang supports) 33749933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then 33752e33c3f8SThomas Huth write_c_skeleton 3376a5b2afd5SThomas Huth compile_prog "-march=z900" "" 3377a5b2afd5SThomas Huth has_z900=$? 33783af448b3SThomas Huth if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then 3379a5b2afd5SThomas Huth if [ $has_z900 != 0 ]; then 3380a5b2afd5SThomas Huth echo "WARNING: Your compiler does not support the z900!" 3381a5b2afd5SThomas Huth echo " The s390-ccw bios will only work with guest CPUs >= z10." 3382a5b2afd5SThomas Huth fi 33839933c305SChristian Borntraeger roms="$roms s390-ccw" 33841ef6bfc2SPhilippe Mathieu-Daudé # SLOF is required for building the s390-ccw firmware on s390x, 33851ef6bfc2SPhilippe Mathieu-Daudé # since it is using the libnet code from SLOF for network booting. 33861ef6bfc2SPhilippe Mathieu-Daudé git_submodules="${git_submodules} roms/SLOF" 33871ef6bfc2SPhilippe Mathieu-Daudé fi 33889933c305SChristian Borntraegerfi 33899933c305SChristian Borntraeger 339011cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler. 339111cde1c8SBruno 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. 339211cde1c8SBruno Dominguezif has $cxx; then 339311cde1c8SBruno Dominguez cat > $TMPC <<EOF 339411cde1c8SBruno Dominguezint c_function(void); 339511cde1c8SBruno Dominguezint main(void) { return c_function(); } 339611cde1c8SBruno DominguezEOF 339711cde1c8SBruno Dominguez 339811cde1c8SBruno Dominguez compile_object 339911cde1c8SBruno Dominguez 340011cde1c8SBruno Dominguez cat > $TMPCXX <<EOF 340111cde1c8SBruno Dominguezextern "C" { 340211cde1c8SBruno Dominguez int c_function(void); 340311cde1c8SBruno Dominguez} 340411cde1c8SBruno Dominguezint c_function(void) { return 42; } 340511cde1c8SBruno DominguezEOF 340611cde1c8SBruno Dominguez 340711cde1c8SBruno Dominguez update_cxxflags 340811cde1c8SBruno Dominguez 3409*a2866660SPaolo Bonzini if do_cxx $CXXFLAGS $EXTRA_CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 341011cde1c8SBruno Dominguez # C++ compiler $cxx works ok with C compiler $cc 341111cde1c8SBruno Dominguez : 341211cde1c8SBruno Dominguez else 341311cde1c8SBruno Dominguez echo "C++ compiler $cxx does not work with C compiler $cc" 341411cde1c8SBruno Dominguez echo "Disabling C++ specific optional code" 341511cde1c8SBruno Dominguez cxx= 341611cde1c8SBruno Dominguez fi 341711cde1c8SBruno Dominguezelse 341811cde1c8SBruno Dominguez echo "No C++ compiler available; disabling C++ specific optional code" 341911cde1c8SBruno Dominguez cxx= 342011cde1c8SBruno Dominguezfi 342111cde1c8SBruno Dominguez 34227d7dbf9dSDan Streetmanif !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then 34237d7dbf9dSDan Streetman exit 1 34245d91a2edSYonggang Luofi 34255d91a2edSYonggang Luo 342698ec69acSJuan Quintelaconfig_host_mak="config-host.mak" 342797a847bcSbellard 342898ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak 342998ec69acSJuan Quintelaecho >> $config_host_mak 343098ec69acSJuan Quintela 3431e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak 3432cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak 3433aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 34347d7dbf9dSDan Streetmanecho "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak 3435804edf29SJuan Quintela 343698ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak 3437727e5283SPaolo Bonzini 3438f8393946Saurel32if test "$debug_tcg" = "yes" ; then 34392358a494SJuan Quintela echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 3440f8393946Saurel32fi 34411625af87Saliguoriif test "$strip_opt" = "yes" ; then 344252ba784dSHollis Blanchard echo "STRIP=${strip}" >> $config_host_mak 34431625af87Saliguorifi 344467b915a5Sbellardif test "$mingw32" = "yes" ; then 344598ec69acSJuan Quintela echo "CONFIG_WIN32=y" >> $config_host_mak 3446d9840e25STomoki Sekiyama if test "$guest_agent_with_vss" = "yes" ; then 3447d9840e25STomoki Sekiyama echo "CONFIG_QGA_VSS=y" >> $config_host_mak 3448f33ca81fSMichael Roth echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 3449d9840e25STomoki Sekiyama echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 3450d9840e25STomoki Sekiyama fi 345150cbebb9SMichael Roth if test "$guest_agent_ntddscsi" = "yes" ; then 345276dc75caSTomáš Golembiovský echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 345350cbebb9SMichael Roth fi 34549dacf32dSYossi Hindin echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 34559dacf32dSYossi Hindin echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 34569dacf32dSYossi Hindin echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 34579dacf32dSYossi Hindin echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 3458210fa556Spbrookelse 345935f4df27SJuan Quintela echo "CONFIG_POSIX=y" >> $config_host_mak 3460210fa556Spbrookfi 3461128ab2ffSblueswir1 3462dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then 3463dffcb71cSMark McLoughlin echo "CONFIG_LINUX=y" >> $config_host_mak 3464dffcb71cSMark McLoughlinfi 3465dffcb71cSMark McLoughlin 346683fb7adfSbellardif test "$darwin" = "yes" ; then 346798ec69acSJuan Quintela echo "CONFIG_DARWIN=y" >> $config_host_mak 346883fb7adfSbellardfi 3469b29fe3edSmalc 3470ec530c81Sbellardif test "$solaris" = "yes" ; then 347198ec69acSJuan Quintela echo "CONFIG_SOLARIS=y" >> $config_host_mak 3472ec530c81Sbellardfi 3473179cf400SAndreas Färberif test "$haiku" = "yes" ; then 3474179cf400SAndreas Färber echo "CONFIG_HAIKU=y" >> $config_host_mak 3475179cf400SAndreas Färberfi 347697a847bcSbellardif test "$static" = "yes" ; then 347798ec69acSJuan Quintela echo "CONFIG_STATIC=y" >> $config_host_mak 347897a847bcSbellardfi 34791ba16968SStefan Weilif test "$profiler" = "yes" ; then 34802358a494SJuan Quintela echo "CONFIG_PROFILER=y" >> $config_host_mak 348105c2a3e7Sbellardfi 3482c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then 3483c932ce31SPaolo Bonzini echo "CONFIG_TOOLS=y" >> $config_host_mak 3484c932ce31SPaolo Bonzinifi 3485f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then 3486f15bff25SPaolo Bonzini echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 3487f15bff25SPaolo Bonzinifi 3488b8e0c493SJoelle van Dyneif test "$slirp_smbd" = "yes" ; then 3489b8e0c493SJoelle van Dyne echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak 3490e2d8830eSBrad echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 3491b8e0c493SJoelle van Dynefi 34924cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then 34934cc600d2SPaolo Bonzini echo "CONFIG_GPROF=y" >> $config_host_mak 34944cc600d2SPaolo Bonzinifi 3495b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 3496b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 3497e5f05f8cSKevin Wolfif test "$block_drv_whitelist_tools" = "yes" ; then 3498e5f05f8cSKevin Wolf echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak 3499e5f05f8cSKevin Wolffi 3500dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then 3501dce512deSChristoph Hellwig echo "CONFIG_XFS=y" >> $config_host_mak 3502dce512deSChristoph Hellwigfi 350389138857SStefan Weilqemu_version=$(head $source_path/VERSION) 35042358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak 350598ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak 35062b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak 350717969268SFam Zhengif test "$modules" = "yes"; then 3508e26110cfSFam Zheng # $shacmd can generate a hash started with digit, which the compiler doesn't 3509e26110cfSFam Zheng # like as an symbol. So prefix it with an underscore 351089138857SStefan Weil echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 351117969268SFam Zheng echo "CONFIG_MODULES=y" >> $config_host_mak 351217969268SFam Zhengfi 3513bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then 3514bd83c861SChristian Ehrhardt echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 3515bd83c861SChristian Ehrhardtfi 3516955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then 3517955727d2SCortland Tölva echo "CONFIG_USBFS=y" >> $config_host_mak 3518955727d2SCortland Tölvafi 3519f876b765SMarc-André Lureauif test "$gio" = "yes" ; then 3520f876b765SMarc-André Lureau echo "CONFIG_GIO=y" >> $config_host_mak 3521f876b765SMarc-André Lureau echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 3522f876b765SMarc-André Lureau echo "GIO_LIBS=$gio_libs" >> $config_host_mak 35235ecfb76cSPaolo Bonzinifi 35245ecfb76cSPaolo Bonziniif test "$gdbus_codegen" != "" ; then 352525a97a56SMarc-André Lureau echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 3526f876b765SMarc-André Lureaufi 3527a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 3528277abf15SJan Vesely 35291badb709SPaolo Bonziniif test "$xen" = "enabled" ; then 35306dbd588aSJan Kiszka echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 3531d5b93ddfSAnthony PERARD echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 3532582ea95fSMarc-André Lureau echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 3533582ea95fSMarc-André Lureau echo "XEN_LIBS=$xen_libs" >> $config_host_mak 3534e37630caSaliguorifi 35355e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then 35365e9be92dSNicholas Bellinger echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 35375e9be92dSNicholas Bellingerfi 3538af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then 3539af3bba76SPaolo Bonzini echo "CONFIG_VHOST_NET=y" >> $config_host_mak 3540af3bba76SPaolo Bonzinifi 3541af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then 354256f41de7SPaolo Bonzini echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 354303ce5744SNikolay Nikolaevfi 3544108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then 3545108a6481SCindy Lu echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 3546108a6481SCindy Lufi 3547042cea27SGongleiif test "$vhost_crypto" = "yes" ; then 3548042cea27SGonglei echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 3549042cea27SGongleifi 3550fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then 3551fc0b9b0eSStefan Hajnoczi echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 35525fe97d88SStefano Garzarella if test "$vhost_user" = "yes" ; then 35535fe97d88SStefano Garzarella echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 35545fe97d88SStefano Garzarella fi 3555fc0b9b0eSStefan Hajnoczifi 3556299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then 3557299e6f19SPaolo Bonzini echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 3558299e6f19SPaolo Bonzinifi 3559e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then 3560e6a74868SMarc-André Lureau echo "CONFIG_VHOST_USER=y" >> $config_host_mak 3561e6a74868SMarc-André Lureaufi 3562108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then 3563108a6481SCindy Lu echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 3564108a6481SCindy Lufi 356598fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then 356698fc1adaSDr. David Alan Gilbert echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 356798fc1adaSDr. David Alan Gilbertfi 3568a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then 3569a40161cbSPaolo Bonzini echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 3570a40161cbSPaolo Bonzinifi 3571e5b46549SRichard Hendersonif test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then 3572e5b46549SRichard Henderson echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 3573e5b46549SRichard Hendersonfi 357458d3f3ffSGerd Hoffmann 3575da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then 3576da076ffeSGerd Hoffmann echo "CONFIG_OPENGL=y" >> $config_host_mak 3577de2d3005SPaolo Bonzini echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 3578da076ffeSGerd Hoffmann echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 357920ff075bSMichael Wallefi 358020ff075bSMichael Walle 358199f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then 358299f2dbd3SLiang Li echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 358399f2dbd3SLiang Lifi 358499f2dbd3SLiang Li 35856b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then 35866b8cd447SRobert Hoo echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 35876b8cd447SRobert Hoofi 35886b8cd447SRobert Hoo 358983fb7adfSbellard# XXX: suppress that 35907d3505c5Sbellardif [ "$bsd" = "yes" ] ; then 35912358a494SJuan Quintela echo "CONFIG_BSD=y" >> $config_host_mak 35927d3505c5Sbellardfi 35937d3505c5Sbellard 35943556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then 35953556c233SPaolo Bonzini echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 35963556c233SPaolo Bonzinifi 359720ff6c80SAnthony Liguori 35987c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 359970c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then 360070c60c08SStefan Hajnoczi echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 360170c60c08SStefan Hajnoczielse 360270c60c08SStefan Hajnoczi echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 360370c60c08SStefan Hajnoczifi 3604d0e2fce5SAneesh Kumar K.V 36057d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then 36067d992e4dSPeter Lieven echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 36077d992e4dSPeter Lievenfi 36087d992e4dSPeter Lieven 3609f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then 3610f0d92b56SLongpeng(Mike) echo "CONFIG_AF_ALG=y" >> $config_host_mak 3611f0d92b56SLongpeng(Mike)fi 3612f0d92b56SLongpeng(Mike) 3613d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then 3614d83414e1SMarc-André Lureau echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 3615d83414e1SMarc-André Lureaufi 3616d83414e1SMarc-André Lureau 36170aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 36180aebab04SLingfeng Yang echo "CONFIG_TSAN=y" >> $config_host_mak 36190aebab04SLingfeng Yangfi 36200aebab04SLingfeng Yang 362176a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then 362276a347e1SRichard Henderson echo "CONFIG_CPUID_H=y" >> $config_host_mak 362376a347e1SRichard Hendersonfi 362476a347e1SRichard Henderson 3625f540166bSRichard Hendersonif test "$int128" = "yes" ; then 3626f540166bSRichard Henderson echo "CONFIG_INT128=y" >> $config_host_mak 3627f540166bSRichard Hendersonfi 3628f540166bSRichard Henderson 36297ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then 36307ebee43eSRichard Henderson echo "CONFIG_ATOMIC128=y" >> $config_host_mak 36317ebee43eSRichard Hendersonfi 36327ebee43eSRichard Henderson 3633e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then 3634e6cd4bb5SRichard Henderson echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 3635e6cd4bb5SRichard Hendersonfi 3636e6cd4bb5SRichard Henderson 3637b10d49d7SPino Toscanoif test "$libssh" = "yes" ; then 3638484e2cc7SPaolo Bonzini echo "CONFIG_LIBSSH=y" >> $config_host_mak 3639b10d49d7SPino Toscano echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 3640b10d49d7SPino Toscano echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 36410a12ec87SRichard W.M. Jonesfi 36420a12ec87SRichard W.M. Jones 3643ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then 3644ed1701c6SDr. David Alan Gilbert echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 3645ed1701c6SDr. David Alan Gilbertfi 3646ed1701c6SDr. David Alan Gilbert 36473b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then 36483cae16dbSPaolo Bonzini echo 'CONFIG_TPM=y' >> $config_host_mak 36493b8acc11SPaolo Bonzinifi 36503b8acc11SPaolo Bonzini 36512da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then 36522da776dbSMichael R. Hines echo "CONFIG_RDMA=y" >> $config_host_mak 3653392fb643SFam Zheng echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 36542da776dbSMichael R. Hinesfi 36552da776dbSMichael R. Hines 365621ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then 365721ab34c9SMarcel Apfelbaum echo "CONFIG_PVRDMA=y" >> $config_host_mak 365821ab34c9SMarcel Apfelbaumfi 365921ab34c9SMarcel Apfelbaum 3660a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then 3661a6b1d4c0SChanglong Xie echo "CONFIG_REPLICATION=y" >> $config_host_mak 3662a6b1d4c0SChanglong Xiefi 3663a6b1d4c0SChanglong Xie 3664ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then 3665ba59fb77SPaolo Bonzini echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 3666ba59fb77SPaolo Bonzinifi 3667e0580342SKamil Rytarowski 36682f740136SJeff Codyif test "$bochs" = "yes" ; then 36692f740136SJeff Cody echo "CONFIG_BOCHS=y" >> $config_host_mak 36702f740136SJeff Codyfi 36712f740136SJeff Codyif test "$cloop" = "yes" ; then 36722f740136SJeff Cody echo "CONFIG_CLOOP=y" >> $config_host_mak 36732f740136SJeff Codyfi 36742f740136SJeff Codyif test "$dmg" = "yes" ; then 36752f740136SJeff Cody echo "CONFIG_DMG=y" >> $config_host_mak 36762f740136SJeff Codyfi 36772f740136SJeff Codyif test "$qcow1" = "yes" ; then 36782f740136SJeff Cody echo "CONFIG_QCOW1=y" >> $config_host_mak 36792f740136SJeff Codyfi 36802f740136SJeff Codyif test "$vdi" = "yes" ; then 36812f740136SJeff Cody echo "CONFIG_VDI=y" >> $config_host_mak 36822f740136SJeff Codyfi 36832f740136SJeff Codyif test "$vvfat" = "yes" ; then 36842f740136SJeff Cody echo "CONFIG_VVFAT=y" >> $config_host_mak 36852f740136SJeff Codyfi 36862f740136SJeff Codyif test "$qed" = "yes" ; then 36872f740136SJeff Cody echo "CONFIG_QED=y" >> $config_host_mak 36882f740136SJeff Codyfi 36892f740136SJeff Codyif test "$parallels" = "yes" ; then 36902f740136SJeff Cody echo "CONFIG_PARALLELS=y" >> $config_host_mak 36912f740136SJeff Codyfi 36922f740136SJeff Cody 369340e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then 369440e8c6f4SAlex Bennée echo "CONFIG_PLUGIN=y" >> $config_host_mak 369526fffe29SEmilio G. Cota # Copy the export object list to the build dir 369626fffe29SEmilio G. Cota if test "$ld_dynamic_list" = "yes" ; then 369726fffe29SEmilio G. Cota echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 369826fffe29SEmilio G. Cota ld_symbols=qemu-plugins-ld.symbols 369926fffe29SEmilio G. Cota cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 370026fffe29SEmilio G. Cota elif test "$ld_exported_symbols_list" = "yes" ; then 370126fffe29SEmilio G. Cota echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 370226fffe29SEmilio G. Cota ld64_symbols=qemu-plugins-ld64.symbols 370326fffe29SEmilio G. Cota echo "# Automatically generated by configure - do not modify" > $ld64_symbols 370426fffe29SEmilio G. Cota grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 370526fffe29SEmilio G. Cota sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 370626fffe29SEmilio G. Cota else 370726fffe29SEmilio G. Cota error_exit \ 370826fffe29SEmilio G. Cota "If \$plugins=yes, either \$ld_dynamic_list or " \ 370926fffe29SEmilio G. Cota "\$ld_exported_symbols_list should have been set to 'yes'." 371026fffe29SEmilio G. Cota fi 371140e8c6f4SAlex Bennéefi 371240e8c6f4SAlex Bennée 3713f48e590aSAlex Bennéeif test -n "$gdb_bin"; then 3714b1863cccSAlex Bennée gdb_version=$($gdb_bin --version | head -n 1) 3715d6a66c81SAlex Bennée if version_ge ${gdb_version##* } 9.1; then 3716f48e590aSAlex Bennée echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 3717f48e590aSAlex Bennée fi 3718b1863cccSAlex Bennéefi 3719f48e590aSAlex Bennée 372054e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then 372154e7aac0SAlexey Krasikov echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 372254e7aac0SAlexey Krasikovfi 372354e7aac0SAlexey Krasikov 372498ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak 3725804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak 3726c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak 372739d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak 3728a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak 372909e93326SPaolo Bonziniecho "NINJA=$ninja" >> $config_host_mak 3730804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak 3731433de74cSBastian Koppelmannecho "HOST_CC=$host_cc" >> $config_host_mak 3732a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then 3733859aef02SPaolo Bonzini echo "CONFIG_IASL=$iasl" >> $config_host_mak 3734a31a8642SMichael S. Tsirkinfi 3735804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak 3736cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak 37375f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak 37383dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak 3739804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak 3740804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak 374146eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 3742a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 374311cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 3744a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 3745a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak 37468a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 3747e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 3748804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak 3749f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak 3750804edf29SJuan Quintela 3751b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then 3752b767d257SMarek Marczykowski-Górecki echo "CONFIG_RNG_NONE=y" >> $config_host_mak 3753b767d257SMarek Marczykowski-Góreckifi 3754b767d257SMarek Marczykowski-Górecki 37556efd7517SPeter Maydell# use included Linux headers 37566efd7517SPeter Maydellif test "$linux" = "yes" ; then 3757a307beb6SAndreas Färber mkdir -p linux-headers 37586efd7517SPeter Maydell case "$cpu" in 3759c72b26ecSRichard Henderson i386|x86_64|x32) 376008312a63SPeter Maydell linux_arch=x86 37616efd7517SPeter Maydell ;; 3762f8378accSRichard Henderson ppc|ppc64|ppc64le) 376308312a63SPeter Maydell linux_arch=powerpc 37646efd7517SPeter Maydell ;; 37656efd7517SPeter Maydell s390x) 376608312a63SPeter Maydell linux_arch=s390 376708312a63SPeter Maydell ;; 37681f080313SClaudio Fontana aarch64) 37691f080313SClaudio Fontana linux_arch=arm64 37701f080313SClaudio Fontana ;; 3771222e7d11SSanjay Lal mips64) 3772222e7d11SSanjay Lal linux_arch=mips 3773222e7d11SSanjay Lal ;; 377408312a63SPeter Maydell *) 377508312a63SPeter Maydell # For most CPUs the kernel architecture name and QEMU CPU name match. 377608312a63SPeter Maydell linux_arch="$cpu" 37776efd7517SPeter Maydell ;; 37786efd7517SPeter Maydell esac 377908312a63SPeter Maydell # For non-KVM architectures we will not have asm headers 378008312a63SPeter Maydell if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 378108312a63SPeter Maydell symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 378208312a63SPeter Maydell fi 37836efd7517SPeter Maydellfi 37846efd7517SPeter Maydell 378597a847bcSbellardfor target in $target_list; do 378697a847bcSbellard target_dir="$target" 378789138857SStefan Weil target_name=$(echo $target | cut -d '-' -f 1) 378897a847bcSbellard mkdir -p $target_dir 3789fdb75aefSPaolo Bonzini case $target in 3790fdb75aefSPaolo Bonzini *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; 3791fdb75aefSPaolo Bonzini *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; 37922408a527Saurel32 esac 379356aebc89Spbrookdone 37947d13299dSbellard 3795765686d6SPaolo Bonziniecho "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak 3796fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then 3797fdb75aefSPaolo Bonzini echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak 3798fdb75aefSPaolo Bonzinifi 3799a540f158SPeter Crosthwaite 3800a99d57bbSWanlong Gaoif test "$numa" = "yes"; then 3801a99d57bbSWanlong Gao echo "CONFIG_NUMA=y" >> $config_host_mak 3802ab318051SMarc-André Lureau echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 3803a99d57bbSWanlong Gaofi 3804a99d57bbSWanlong Gao 3805fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then 3806fd0e6053SJohn Snow echo "export CCACHE_CPP2=y" >> $config_host_mak 3807fd0e6053SJohn Snowfi 3808fd0e6053SJohn Snow 38091e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then 38101e4f6065SDaniele Buono echo "CONFIG_SAFESTACK=y" >> $config_host_mak 38111e4f6065SDaniele Buonofi 38121e4f6065SDaniele Buono 3813e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now. 3814e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree; 3815e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree 3816e29e5c6eSPeter Maydell# (these can be both files and directories). 3817e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This 3818e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is 3819e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun 3820e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and 3821e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own 3822e29e5c6eSPeter Maydell# directory and symlink the directory instead. 382309db9b9dSGerd Hoffmann# UNLINK is used to remove symlinks from older development versions 382409db9b9dSGerd Hoffmann# that might get into the way when doing "git update" without doing 382509db9b9dSGerd Hoffmann# a "make distclean" in between. 38269d49bcf6SMarkus ArmbrusterDIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos" 38271cf4323eSThomas HuthDIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 3828b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi" 3829744a928cSAlexey KardashevskiyDIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 38308db2a4fdSGerd HoffmannDIRS="$DIRS roms/seabios" 3831c17a386bSAlex BennéeDIRS="$DIRS contrib/plugins/" 38322038f8c8SPaolo BonziniLINKS="Makefile" 38333941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target" 3834ddcf607fSGerd HoffmannLINKS="$LINKS pc-bios/optionrom/Makefile" 3835e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile" 38368db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile" 3837e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp" 3838e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 383939950353SPeter MaydellLINKS="$LINKS tests/acceptance tests/data" 384039950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check" 38418f8fd9edSCleber RosaLINKS="$LINKS python" 3842c17a386bSAlex BennéeLINKS="$LINKS contrib/plugins/Makefile " 384309db9b9dSGerd HoffmannUNLINK="pc-bios/keymaps" 3844753d11f2SRichard Hendersonfor bios_file in \ 3845753d11f2SRichard Henderson $source_path/pc-bios/*.bin \ 38463a631b8eSBin Meng $source_path/pc-bios/*.elf \ 3847225a9ab8SAlexey Kardashevskiy $source_path/pc-bios/*.lid \ 3848753d11f2SRichard Henderson $source_path/pc-bios/*.rom \ 3849753d11f2SRichard Henderson $source_path/pc-bios/*.dtb \ 3850e89e33e1SDominik Dingel $source_path/pc-bios/*.img \ 3851753d11f2SRichard Henderson $source_path/pc-bios/openbios-* \ 38524e73c781SAlexander Graf $source_path/pc-bios/u-boot.* \ 385326ce90fdSLaszlo Ersek $source_path/pc-bios/edk2-*.fd.bz2 \ 3854cd946e5cSJohn Arbuckle $source_path/pc-bios/palcode-* \ 3855cd946e5cSJohn Arbuckle $source_path/pc-bios/qemu_vga.ndrv 3856cd946e5cSJohn Arbuckle 3857753d11f2SRichard Hendersondo 3858e29e5c6eSPeter Maydell LINKS="$LINKS pc-bios/$(basename $bios_file)" 38597ea78b74SJan Kiszkadone 3860d1807a4fSPaolo Bonzinimkdir -p $DIRS 3861e29e5c6eSPeter Maydellfor f in $LINKS ; do 38620f4d8894SPaolo Bonzini if [ -e "$source_path/$f" ]; then 3863f9245e10SPeter Maydell symlink "$source_path/$f" "$f" 3864f9245e10SPeter Maydell fi 38657d13299dSbellarddone 386609db9b9dSGerd Hoffmannfor f in $UNLINK ; do 386709db9b9dSGerd Hoffmann if [ -L "$f" ]; then 386809db9b9dSGerd Hoffmann rm -f "$f" 386909db9b9dSGerd Hoffmann fi 387009db9b9dSGerd Hoffmanndone 38711ad2134fSPaul Brook 38722038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do 38732038f8c8SPaolo Bonzini export $i 38742038f8c8SPaolo Bonzinidone 3875de6d7e6bSAlex Bennéeexport target_list source_path use_containers ARCH 38762038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh) 38772038f8c8SPaolo Bonzini 3878c34ebfdcSAnthony Liguori# temporary config to build submodules 38798db2a4fdSGerd Hoffmannfor rom in seabios; do 3880c34ebfdcSAnthony Liguori config_mak=roms/$rom/config.mak 388137116c89SStefan Weil echo "# Automatically generated by configure - do not modify" > $config_mak 3882c34ebfdcSAnthony Liguori echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 3883cdbd727cSRichard Henderson echo "AS=$as" >> $config_mak 38845f6f0e27SRichard Henderson echo "CCAS=$ccas" >> $config_mak 3885c34ebfdcSAnthony Liguori echo "CC=$cc" >> $config_mak 3886c34ebfdcSAnthony Liguori echo "BCC=bcc" >> $config_mak 38873dd46c78SBlue Swirl echo "CPP=$cpp" >> $config_mak 3888c34ebfdcSAnthony Liguori echo "OBJCOPY=objcopy" >> $config_mak 3889a31a8642SMichael S. Tsirkin echo "IASL=$iasl" >> $config_mak 3890c34ebfdcSAnthony Liguori echo "LD=$ld" >> $config_mak 38919f81aeb5SAlistair Francis echo "RANLIB=$ranlib" >> $config_mak 3892c34ebfdcSAnthony Liguoridone 3893c34ebfdcSAnthony Liguori 389498409991SHelge Konetzkaconfig_mak=pc-bios/optionrom/config.mak 389598409991SHelge Konetzkaecho "# Automatically generated by configure - do not modify" > $config_mak 389698409991SHelge Konetzkaecho "TOPSRC_DIR=$source_path" >> $config_mak 389798409991SHelge Konetzka 3898a5665051SPaolo Bonziniif test "$skip_meson" = no; then 3899fc929892SMarc-André Lureau cross="config-meson.cross.new" 3900fc929892SMarc-André Lureau meson_quote() { 3901ac7ebcc5SPaolo Bonzini test $# = 0 && return 390247b30835SPaolo Bonzini echo "'$(echo $* | sed "s/ /','/g")'" 3903fc929892SMarc-André Lureau } 3904fc929892SMarc-André Lureau 3905fc929892SMarc-André Lureau echo "# Automatically generated by configure - do not modify" > $cross 3906fc929892SMarc-André Lureau echo "[properties]" >> $cross 3907d1d5e9eeSAlex Bennée 3908d1d5e9eeSAlex Bennée # unroll any custom device configs 3909d1d5e9eeSAlex Bennée for a in $device_archs; do 3910d1d5e9eeSAlex Bennée eval "c=\$devices_${a}" 3911d1d5e9eeSAlex Bennée echo "${a}-softmmu = '$c'" >> $cross 3912d1d5e9eeSAlex Bennée done 3913d1d5e9eeSAlex Bennée 3914fc929892SMarc-André Lureau test -z "$cxx" && echo "link_language = 'c'" >> $cross 391547b30835SPaolo Bonzini echo "[built-in options]" >> $cross 3916*a2866660SPaolo Bonzini echo "c_args = [$(meson_quote $CFLAGS $EXTRA_CFLAGS)]" >> $cross 3917*a2866660SPaolo Bonzini echo "cpp_args = [$(meson_quote $CXXFLAGS $EXTRA_CXXFLAGS)]" >> $cross 3918*a2866660SPaolo Bonzini echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross 3919*a2866660SPaolo Bonzini echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross 3920fc929892SMarc-André Lureau echo "[binaries]" >> $cross 39214dba2789SPaolo Bonzini echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross 39224dba2789SPaolo Bonzini test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross 39234dba2789SPaolo Bonzini test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross 392447b30835SPaolo Bonzini echo "ar = [$(meson_quote $ar)]" >> $cross 392547b30835SPaolo Bonzini echo "nm = [$(meson_quote $nm)]" >> $cross 392647b30835SPaolo Bonzini echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross 392747b30835SPaolo Bonzini echo "ranlib = [$(meson_quote $ranlib)]" >> $cross 3928e8178514SPaolo Bonzini if has $sdl2_config; then 392947b30835SPaolo Bonzini echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross 3930e8178514SPaolo Bonzini fi 393147b30835SPaolo Bonzini echo "strip = [$(meson_quote $strip)]" >> $cross 393247b30835SPaolo Bonzini echo "windres = [$(meson_quote $windres)]" >> $cross 39333812c0c4SJoelle van Dyne if test "$cross_compile" = "yes"; then 3934fc929892SMarc-André Lureau cross_arg="--cross-file config-meson.cross" 3935fc929892SMarc-André Lureau echo "[host_machine]" >> $cross 3936fc929892SMarc-André Lureau if test "$mingw32" = "yes" ; then 3937fc929892SMarc-André Lureau echo "system = 'windows'" >> $cross 3938fc929892SMarc-André Lureau fi 3939853b4bafSThomas Huth if test "$linux" = "yes" ; then 3940853b4bafSThomas Huth echo "system = 'linux'" >> $cross 3941853b4bafSThomas Huth fi 39420ca321eaSJoelle van Dyne if test "$darwin" = "yes" ; then 39430ca321eaSJoelle van Dyne echo "system = 'darwin'" >> $cross 39440ca321eaSJoelle van Dyne fi 3945fc929892SMarc-André Lureau case "$ARCH" in 3946f6bca9dfSJoelle van Dyne i386) 3947fc929892SMarc-André Lureau echo "cpu_family = 'x86'" >> $cross 3948fc929892SMarc-André Lureau ;; 3949f8bb7e1cSDavid Michael x86_64|x32) 3950f6bca9dfSJoelle van Dyne echo "cpu_family = 'x86_64'" >> $cross 3951f6bca9dfSJoelle van Dyne ;; 3952fc929892SMarc-André Lureau ppc64le) 3953fc929892SMarc-André Lureau echo "cpu_family = 'ppc64'" >> $cross 3954fc929892SMarc-André Lureau ;; 3955fc929892SMarc-André Lureau *) 3956fc929892SMarc-André Lureau echo "cpu_family = '$ARCH'" >> $cross 3957fc929892SMarc-André Lureau ;; 3958fc929892SMarc-André Lureau esac 3959fc929892SMarc-André Lureau echo "cpu = '$cpu'" >> $cross 3960fc929892SMarc-André Lureau if test "$bigendian" = "yes" ; then 3961fc929892SMarc-André Lureau echo "endian = 'big'" >> $cross 3962fc929892SMarc-André Lureau else 3963fc929892SMarc-André Lureau echo "endian = 'little'" >> $cross 3964fc929892SMarc-André Lureau fi 3965fc929892SMarc-André Lureau else 3966fc929892SMarc-André Lureau cross_arg="--native-file config-meson.cross" 3967fc929892SMarc-André Lureau fi 3968fc929892SMarc-André Lureau mv $cross config-meson.cross 3969fc929892SMarc-André Lureau 3970a5665051SPaolo Bonzini rm -rf meson-private meson-info meson-logs 397161d63097SPaolo Bonzini run_meson() { 397209e93326SPaolo Bonzini NINJA=$ninja $meson setup \ 3973d17f305aSPaolo Bonzini --prefix "$prefix" \ 3974d17f305aSPaolo Bonzini --libdir "$libdir" \ 3975d17f305aSPaolo Bonzini --libexecdir "$libexecdir" \ 3976d17f305aSPaolo Bonzini --bindir "$bindir" \ 3977d17f305aSPaolo Bonzini --includedir "$includedir" \ 3978d17f305aSPaolo Bonzini --datadir "$datadir" \ 3979d17f305aSPaolo Bonzini --mandir "$mandir" \ 3980d17f305aSPaolo Bonzini --sysconfdir "$sysconfdir" \ 398116bf7a33SPaolo Bonzini --localedir "$localedir" \ 3982d17f305aSPaolo Bonzini --localstatedir "$local_statedir" \ 39833b4da132SPaolo Bonzini -Daudio_drv_list=$audio_drv_list \ 39843b4da132SPaolo Bonzini -Ddefault_devices=$default_devices \ 3985d17f305aSPaolo Bonzini -Ddocdir="$docdir" \ 398616bf7a33SPaolo Bonzini -Dqemu_firmwarepath="$firmwarepath" \ 398773f3aa37SMarc-André Lureau -Dqemu_suffix="$qemu_suffix" \ 39883b4da132SPaolo Bonzini -Dsphinx_build="$sphinx_build" \ 39893b4da132SPaolo Bonzini -Dtrace_file="$trace_file" \ 3990a5665051SPaolo Bonzini -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 3991a5665051SPaolo Bonzini -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 3992a5665051SPaolo Bonzini -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 3993a5665051SPaolo Bonzini -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 3994da6d48b9SMarc-André Lureau -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 3995bf0e56a3SMarc-André Lureau -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 39963b4da132SPaolo Bonzini -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \ 39973b4da132SPaolo Bonzini -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \ 3998537b7248SPaolo Bonzini $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \ 3999332008e0SThomas Huth $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \ 400061d63097SPaolo Bonzini "$@" $cross_arg "$PWD" "$source_path" 400161d63097SPaolo Bonzini } 400261d63097SPaolo Bonzini eval run_meson $meson_options 4003a5665051SPaolo Bonzini if test "$?" -ne 0 ; then 4004a5665051SPaolo Bonzini error_exit "meson setup failed" 4005a5665051SPaolo Bonzini fi 4006699d3884SPaolo Bonzinielse 4007699d3884SPaolo Bonzini if test -f meson-private/cmd_line.txt; then 4008699d3884SPaolo Bonzini # Adjust old command line options whose type was changed 4009699d3884SPaolo Bonzini # Avoids having to use "setup --wipe" when Meson is upgraded 4010699d3884SPaolo Bonzini perl -i -ne ' 4011699d3884SPaolo Bonzini s/^gettext = true$/gettext = auto/; 4012699d3884SPaolo Bonzini s/^gettext = false$/gettext = disabled/; 4013654d6b04SPaolo Bonzini /^b_staticpic/ && next; 4014699d3884SPaolo Bonzini print;' meson-private/cmd_line.txt 4015699d3884SPaolo Bonzini fi 4016a5665051SPaolo Bonzinifi 4017a5665051SPaolo Bonzini 40182d838d9bSAlex Bennéeif test -n "${deprecated_features}"; then 40192d838d9bSAlex Bennée echo "Warning, deprecated features enabled." 4020a476b216SMao Zhongyi echo "Please see docs/about/deprecated.rst" 40212d838d9bSAlex Bennée echo " features: ${deprecated_features}" 40222d838d9bSAlex Bennéefi 40232d838d9bSAlex Bennée 4024e0447a83SThomas Huth# Create list of config switches that should be poisoned in common code... 4025e0447a83SThomas Huth# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special. 402654b0306eSThomas Huthtarget_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null) 402754b0306eSThomas Huthif test -n "$target_configs_h" ; then 4028e0447a83SThomas Huth sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \ 4029e0447a83SThomas Huth -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \ 403054b0306eSThomas Huth $target_configs_h | sort -u > config-poison.h 403154b0306eSThomas Huthelse 403254b0306eSThomas Huth :> config-poison.h 403354b0306eSThomas Huthfi 4034e0447a83SThomas Huth 4035dc655404SMichael S. Tsirkin# Save the configure command line for later reuse. 4036dc655404SMichael S. Tsirkincat <<EOD >config.status 4037dc655404SMichael S. Tsirkin#!/bin/sh 4038dc655404SMichael S. Tsirkin# Generated by configure. 4039dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration. 4040dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging 4041dc655404SMichael S. Tsirkin# configure, is in config.log if it exists. 4042dc655404SMichael S. TsirkinEOD 4043e811da7fSDaniel P. Berrangé 4044e811da7fSDaniel P. Berrangépreserve_env() { 4045e811da7fSDaniel P. Berrangé envname=$1 4046e811da7fSDaniel P. Berrangé 4047e811da7fSDaniel P. Berrangé eval envval=\$$envname 4048e811da7fSDaniel P. Berrangé 4049e811da7fSDaniel P. Berrangé if test -n "$envval" 4050e811da7fSDaniel P. Berrangé then 4051e811da7fSDaniel P. Berrangé echo "$envname='$envval'" >> config.status 4052e811da7fSDaniel P. Berrangé echo "export $envname" >> config.status 4053e811da7fSDaniel P. Berrangé else 4054e811da7fSDaniel P. Berrangé echo "unset $envname" >> config.status 4055e811da7fSDaniel P. Berrangé fi 4056e811da7fSDaniel P. Berrangé} 4057e811da7fSDaniel P. Berrangé 4058e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what 4059e811da7fSDaniel P. Berrangé# features/build target configure will detect 4060e811da7fSDaniel P. Berrangépreserve_env AR 4061e811da7fSDaniel P. Berrangépreserve_env AS 4062e811da7fSDaniel P. Berrangépreserve_env CC 4063e811da7fSDaniel P. Berrangépreserve_env CPP 40648009da03SPaolo Bonzinipreserve_env CFLAGS 4065e811da7fSDaniel P. Berrangépreserve_env CXX 40668009da03SPaolo Bonzinipreserve_env CXXFLAGS 4067e811da7fSDaniel P. Berrangépreserve_env INSTALL 4068e811da7fSDaniel P. Berrangépreserve_env LD 40698009da03SPaolo Bonzinipreserve_env LDFLAGS 4070e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH 4071e811da7fSDaniel P. Berrangépreserve_env LIBTOOL 4072e811da7fSDaniel P. Berrangépreserve_env MAKE 4073e811da7fSDaniel P. Berrangépreserve_env NM 4074e811da7fSDaniel P. Berrangépreserve_env OBJCOPY 4075e811da7fSDaniel P. Berrangépreserve_env PATH 4076e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG 4077e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR 4078e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH 4079e811da7fSDaniel P. Berrangépreserve_env PYTHON 4080e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG 4081e811da7fSDaniel P. Berrangépreserve_env SMBD 4082e811da7fSDaniel P. Berrangépreserve_env STRIP 4083e811da7fSDaniel P. Berrangépreserve_env WINDRES 4084e811da7fSDaniel P. Berrangé 4085dc655404SMichael S. Tsirkinprintf "exec" >>config.status 4086a5665051SPaolo Bonzinifor i in "$0" "$@"; do 4087835af899SPaolo Bonzini test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status 4088a5665051SPaolo Bonzinidone 4089cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status 4090dc655404SMichael S. Tsirkinchmod +x config.status 4091dc655404SMichael S. Tsirkin 40928cd05ab6SPeter Maydellrm -r "$TMPDIR1" 4093