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 92d880a3baSPaolo Bonziniprint_error() { 93d880a3baSPaolo Bonzini (echo 9476ad07a4SPeter Maydell echo "ERROR: $1" 9576ad07a4SPeter Maydell while test -n "$2"; do 9676ad07a4SPeter Maydell echo " $2" 9776ad07a4SPeter Maydell shift 9876ad07a4SPeter Maydell done 99d880a3baSPaolo Bonzini echo) >&2 100d880a3baSPaolo Bonzini} 101d880a3baSPaolo Bonzini 102d880a3baSPaolo Bonzinierror_exit() { 103d880a3baSPaolo Bonzini print_error "$@" 10476ad07a4SPeter Maydell exit 1 10576ad07a4SPeter Maydell} 10676ad07a4SPeter Maydell 1079c83ffd8SPeter Maydelldo_compiler() { 1089c83ffd8SPeter Maydell # Run the compiler, capturing its output to the log. First argument 1099c83ffd8SPeter Maydell # is compiler binary to execute. 1109c83ffd8SPeter Maydell local compiler="$1" 1119c83ffd8SPeter Maydell shift 1128bbe05d7SIan Jackson if test -n "$BASH_VERSION"; then eval ' 1138bbe05d7SIan Jackson echo >>config.log " 1148bbe05d7SIan Jacksonfuncs: ${FUNCNAME[*]} 1158bbe05d7SIan Jacksonlines: ${BASH_LINENO[*]}" 1168bbe05d7SIan Jackson '; fi 1179c83ffd8SPeter Maydell echo $compiler "$@" >> config.log 1189c83ffd8SPeter Maydell $compiler "$@" >> config.log 2>&1 || return $? 1198dc38a78SPeter Maydell # Test passed. If this is an --enable-werror build, rerun 1208dc38a78SPeter Maydell # the test with -Werror and bail out if it fails. This 1218dc38a78SPeter Maydell # makes warning-generating-errors in configure test code 1228dc38a78SPeter Maydell # obvious to developers. 1238dc38a78SPeter Maydell if test "$werror" != "yes"; then 1248dc38a78SPeter Maydell return 0 1258dc38a78SPeter Maydell fi 1268dc38a78SPeter Maydell # Don't bother rerunning the compile if we were already using -Werror 1278dc38a78SPeter Maydell case "$*" in 1288dc38a78SPeter Maydell *-Werror*) 1298dc38a78SPeter Maydell return 0 1308dc38a78SPeter Maydell ;; 1318dc38a78SPeter Maydell esac 1329c83ffd8SPeter Maydell echo $compiler -Werror "$@" >> config.log 1339c83ffd8SPeter Maydell $compiler -Werror "$@" >> config.log 2>&1 && return $? 13476ad07a4SPeter Maydell error_exit "configure test passed without -Werror but failed with -Werror." \ 13576ad07a4SPeter Maydell "This is probably a bug in the configure script. The failing command" \ 13676ad07a4SPeter Maydell "will be at the bottom of config.log." \ 13776ad07a4SPeter Maydell "You can run configure with --disable-werror to bypass this check." 1388dc38a78SPeter Maydell} 1398dc38a78SPeter Maydell 1409c83ffd8SPeter Maydelldo_cc() { 1419c83ffd8SPeter Maydell do_compiler "$cc" "$@" 1429c83ffd8SPeter Maydell} 1439c83ffd8SPeter Maydell 1449c83ffd8SPeter Maydelldo_cxx() { 1459c83ffd8SPeter Maydell do_compiler "$cxx" "$@" 1469c83ffd8SPeter Maydell} 1479c83ffd8SPeter Maydell 14800849b92SRichard Henderson# Append $2 to the variable named $1, with space separation 14900849b92SRichard Hendersonadd_to() { 15000849b92SRichard Henderson eval $1=\${$1:+\"\$$1 \"}\$2 15100849b92SRichard Henderson} 15200849b92SRichard Henderson 1539c83ffd8SPeter Maydellupdate_cxxflags() { 1549c83ffd8SPeter Maydell # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those 1559c83ffd8SPeter Maydell # options which some versions of GCC's C++ compiler complain about 1569c83ffd8SPeter Maydell # because they only make sense for C programs. 15753422040SPaolo Bonzini QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" 158086d5f75SPaolo Bonzini CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/) 1599c83ffd8SPeter Maydell for arg in $QEMU_CFLAGS; do 1609c83ffd8SPeter Maydell case $arg in 1619c83ffd8SPeter Maydell -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ 1629c83ffd8SPeter Maydell -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) 1639c83ffd8SPeter Maydell ;; 1649c83ffd8SPeter Maydell *) 1659c83ffd8SPeter Maydell QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg 1669c83ffd8SPeter Maydell ;; 1679c83ffd8SPeter Maydell esac 1689c83ffd8SPeter Maydell done 1699c83ffd8SPeter Maydell} 1709c83ffd8SPeter Maydell 17152166aa0SJuan Quintelacompile_object() { 172fd0e6053SJohn Snow local_cflags="$1" 173086d5f75SPaolo Bonzini do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC 17452166aa0SJuan Quintela} 17552166aa0SJuan Quintela 17652166aa0SJuan Quintelacompile_prog() { 17752166aa0SJuan Quintela local_cflags="$1" 17852166aa0SJuan Quintela local_ldflags="$2" 179086d5f75SPaolo Bonzini do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags 18052166aa0SJuan Quintela} 18152166aa0SJuan Quintela 18211568d6dSPaolo Bonzini# symbolically link $1 to $2. Portable version of "ln -sf". 18311568d6dSPaolo Bonzinisymlink() { 18472b8b5a1SStefan Weil rm -rf "$2" 185ec5b06d7SAnthony Liguori mkdir -p "$(dirname "$2")" 18672b8b5a1SStefan Weil ln -s "$1" "$2" 18711568d6dSPaolo Bonzini} 18811568d6dSPaolo Bonzini 1890dba6195SLoïc Minier# check whether a command is available to this shell (may be either an 1900dba6195SLoïc Minier# executable or a builtin) 1910dba6195SLoïc Minierhas() { 1920dba6195SLoïc Minier type "$1" >/dev/null 2>&1 1930dba6195SLoïc Minier} 1940dba6195SLoïc Minier 1950a01d76fSMarc-André Lureauversion_ge () { 1960a01d76fSMarc-André Lureau local_ver1=`echo $1 | tr . ' '` 1970a01d76fSMarc-André Lureau local_ver2=`echo $2 | tr . ' '` 1980a01d76fSMarc-André Lureau while true; do 1990a01d76fSMarc-André Lureau set x $local_ver1 2000a01d76fSMarc-André Lureau local_first=${2-0} 201c44a33e2SStefano Garzarella # 'shift 2' if $2 is set, or 'shift' if $2 is not set 202c44a33e2SStefano Garzarella shift ${2:+2} 2030a01d76fSMarc-André Lureau local_ver1=$* 2040a01d76fSMarc-André Lureau set x $local_ver2 2050a01d76fSMarc-André Lureau # the second argument finished, the first must be greater or equal 2060a01d76fSMarc-André Lureau test $# = 1 && return 0 2070a01d76fSMarc-André Lureau test $local_first -lt $2 && return 1 2080a01d76fSMarc-André Lureau test $local_first -gt $2 && return 0 209c44a33e2SStefano Garzarella shift ${2:+2} 2100a01d76fSMarc-André Lureau local_ver2=$* 2110a01d76fSMarc-André Lureau done 2120a01d76fSMarc-André Lureau} 2130a01d76fSMarc-André Lureau 2145b808275SLluís Vilanovahave_backend () { 2155b808275SLluís Vilanova echo "$trace_backends" | grep "$1" >/dev/null 2165b808275SLluís Vilanova} 2175b808275SLluís Vilanova 2183b6b7550SPaolo Bonziniglob() { 2193b6b7550SPaolo Bonzini eval test -z '"${1#'"$2"'}"' 2203b6b7550SPaolo Bonzini} 2213b6b7550SPaolo Bonzini 222e9a3591fSChristian Borntraegerld_has() { 223e9a3591fSChristian Borntraeger $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 224e9a3591fSChristian Borntraeger} 225e9a3591fSChristian Borntraeger 2264ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]"; 2274ace32e2SAntonio Ospitethen 2284ace32e2SAntonio Ospite error_exit "main directory cannot contain spaces nor colons" 2294ace32e2SAntonio Ospitefi 2304ace32e2SAntonio Ospite 23114211825SAntonio Ospite# default parameters 2322ff6b91eSJuan Quintelacpu="" 233a31a8642SMichael S. Tsirkiniasl="iasl" 2341e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M" 23543ce4dfeSbellardstatic="no" 2367d13299dSbellardcross_prefix="" 2370c58ac1cSmalcaudio_drv_list="" 238b64ec4e4SFam Zhengblock_drv_rw_whitelist="" 239b64ec4e4SFam Zhengblock_drv_ro_whitelist="" 240e49d021eSPeter Maydellhost_cc="cc" 241d5631638Smalcaudio_win_int="" 242957f1f99SMichael Rothlibs_qga="" 2435bc62e01SGerd Hoffmanndebug_info="yes" 24463678e17SSteven Noonanstack_protector="" 2451e4f6065SDaniele Buonosafe_stack="" 246afc3a8f9SAlex Bennéeuse_containers="yes" 247f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb") 248ac0df51dSaliguori 24992712822SDaniel P. Berrangeif test -e "$source_path/.git" 25092712822SDaniel P. Berrangethen 251f62bbee5SDaniel P. Berrange git_update=yes 25292712822SDaniel P. Berrange git_submodules="ui/keycodemapdb" 2533ac1f813SEmilio G. Cota git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" 2543ac1f813SEmilio G. Cota git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" 25592712822SDaniel P. Berrangeelse 256f62bbee5SDaniel P. Berrange git_update=no 257aef45d51SDaniel P. Berrange git_submodules="" 2585c0ef67aSDaniel P. Berrangé 2595c0ef67aSDaniel P. Berrangé if ! test -f "$source_path/ui/keycodemapdb/README" 2605c0ef67aSDaniel P. Berrangé then 2615c0ef67aSDaniel P. Berrangé echo 2625c0ef67aSDaniel P. Berrangé echo "ERROR: missing file $source_path/ui/keycodemapdb/README" 2635c0ef67aSDaniel P. Berrangé echo 2645c0ef67aSDaniel P. Berrangé echo "This is not a GIT checkout but module content appears to" 2655c0ef67aSDaniel P. Berrangé echo "be missing. Do not use 'git archive' or GitHub download links" 2665c0ef67aSDaniel P. Berrangé echo "to acquire QEMU source archives. Non-GIT builds are only" 2675c0ef67aSDaniel P. Berrangé echo "supported with source archives linked from:" 2685c0ef67aSDaniel P. Berrangé echo 269a3e3b521SPeter Maydell echo " https://www.qemu.org/download/#source" 2705c0ef67aSDaniel P. Berrangé echo 2715c0ef67aSDaniel P. Berrangé echo "Developers working with GIT can use scripts/archive-source.sh" 2725c0ef67aSDaniel P. Berrangé echo "if they need to create valid source archives." 2735c0ef67aSDaniel P. Berrangé echo 2745c0ef67aSDaniel P. Berrangé exit 1 2755c0ef67aSDaniel P. Berrangé fi 27692712822SDaniel P. Berrangefi 277cc84d63aSDaniel P. Berrangegit="git" 278ac0df51dSaliguori 279afb63ebdSStefan Weil# Don't accept a target_list environment variable. 280afb63ebdSStefan Weilunset target_list 281447e133fSAlex Bennéeunset target_list_exclude 282377529c0SPaolo Bonzini 283377529c0SPaolo Bonzini# Default value for a variable defining feature "foo". 284377529c0SPaolo Bonzini# * foo="no" feature will only be used if --enable-foo arg is given 285377529c0SPaolo Bonzini# * foo="" feature will be searched for, and if found, will be used 286377529c0SPaolo Bonzini# unless --disable-foo is given 287377529c0SPaolo Bonzini# * foo="yes" this value will only be set by --enable-foo flag. 288377529c0SPaolo Bonzini# feature will searched for, 289377529c0SPaolo Bonzini# if not found, configure exits with error 290377529c0SPaolo Bonzini# 291377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args. 292377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it 293377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found. 294377529c0SPaolo Bonzini 295377529c0SPaolo Bonzinibrlapi="" 296377529c0SPaolo Bonzinicurl="" 297377529c0SPaolo Bonzinicurses="" 298377529c0SPaolo Bonzinidocs="" 299377529c0SPaolo Bonzinifdt="" 30058952137SVincenzo Maffionenetmap="no" 30135be72baSPaolo Bonzinisdl="auto" 30235be72baSPaolo Bonzinisdl_image="auto" 303983eef5aSMeador Ingevirtfs="" 3046ec0e15dSPaolo Bonzinimpath="auto" 305a0b93237SPaolo Bonzinivnc="enabled" 306*deb62371SPaolo Bonzinisparse="auto" 307377529c0SPaolo Bonzinivde="" 308a0b93237SPaolo Bonzinivnc_sasl="auto" 309a0b93237SPaolo Bonzinivnc_jpeg="auto" 310a0b93237SPaolo Bonzinivnc_png="auto" 3114113f4cfSLaurent Vivierxkbcommon="auto" 312377529c0SPaolo Bonzinixen="" 313d5b93ddfSAnthony PERARDxen_ctrl_version="" 3141badb709SPaolo Bonzinixen_pci_passthrough="auto" 315377529c0SPaolo Bonzinilinux_aio="" 316c10dd856SAarushi Mehtalinux_io_uring="" 31747e98658SCorey Bryantcap_ng="" 318377529c0SPaolo Bonziniattr="" 3194f26f2b6SAvi Kivitylibattr="" 320377529c0SPaolo Bonzinixfs="" 3211badb709SPaolo Bonzinitcg="enabled" 322a40161cbSPaolo Bonzinimembarrier="" 323299e6f19SPaolo Bonzinivhost_net="" 324299e6f19SPaolo Bonzinivhost_crypto="" 325299e6f19SPaolo Bonzinivhost_scsi="" 326299e6f19SPaolo Bonzinivhost_vsock="" 327e6a74868SMarc-André Lureauvhost_user="" 32898fc1adaSDr. David Alan Gilbertvhost_user_fs="" 3293bd40ec7SPaolo Bonzinikvm="auto" 3303bd40ec7SPaolo Bonzinihax="auto" 3313bd40ec7SPaolo Bonzinihvf="auto" 3323bd40ec7SPaolo Bonziniwhpx="auto" 3332da776dbSMichael R. Hinesrdma="" 33421ab34c9SMarcel Apfelbaumpvrdma="" 335377529c0SPaolo Bonzinigprof="no" 336377529c0SPaolo Bonzinidebug_tcg="no" 337377529c0SPaolo Bonzinidebug="no" 338247724cbSMarc-André Lureausanitizers="no" 3390aebab04SLingfeng Yangtsan="no" 340b553a042SJohn Snowfortify_source="" 341377529c0SPaolo Bonzinistrip_opt="yes" 3429195b2c2SStefan Weiltcg_interpreter="no" 343377529c0SPaolo Bonzinibigendian="no" 344377529c0SPaolo Bonzinimingw32="no" 3451d728c39SBlue Swirlgcov="no" 346377529c0SPaolo BonziniEXESUF="" 347484e2cc7SPaolo BonziniHOST_DSOSUF=".so" 34817969268SFam Zhengmodules="no" 349bd83c861SChristian Ehrhardtmodule_upgrades="no" 350377529c0SPaolo Bonziniprefix="/usr/local" 35110ff82d1SMarc-André Lureauqemu_suffix="qemu" 352675b9b53SMarc-André Lureauslirp="" 353377529c0SPaolo Bonzinioss_lib="" 354377529c0SPaolo Bonzinibsd="no" 355377529c0SPaolo Bonzinilinux="no" 356377529c0SPaolo Bonzinisolaris="no" 357377529c0SPaolo Bonziniprofiler="no" 358b4e312e9SPaolo Bonzinicocoa="auto" 359377529c0SPaolo Bonzinisoftmmu="yes" 360377529c0SPaolo Bonzinilinux_user="no" 361377529c0SPaolo Bonzinibsd_user="no" 362377529c0SPaolo Bonziniblobs="yes" 36305dfa22bSPhilippe Mathieu-Daudéedk2_blobs="no" 364377529c0SPaolo Bonzinipkgversion="" 36540d6444eSAvi Kivitypie="" 3663556c233SPaolo Bonziniqom_cast_debug="yes" 367baf86d6bSPaolo Bonzinitrace_backends="log" 368377529c0SPaolo Bonzinitrace_file="trace" 369377529c0SPaolo Bonzinispice="" 370377529c0SPaolo Bonzinirbd="" 3717b02f544SMarc-André Lureausmartcard="" 3720a40bcb7SCésar Belleyu2f="auto" 3732b2325ffSGerd Hoffmannlibusb="" 37469354a83SHans de Goedeusb_redir="" 375da076ffeSGerd Hoffmannopengl="" 376014cb152SGerd Hoffmannopengl_dmabuf="no" 3775dd89908SRichard Hendersoncpuid_h="no" 37886583a07SLiam Merwickavx2_opt="" 3798ca80760SRichard Hendersoncapstone="" 380b25c9dffSStefan Weillzo="" 381b25c9dffSStefan Weilsnappy="" 3826b383c08SPeter Wubzip2="" 38383bc1f97SJulio Faraccolzfse="" 3843a678481SJuan Quintelazstd="" 385e8ef31a3SMichael Tokarevguest_agent="" 386d9840e25STomoki Sekiyamaguest_agent_with_vss="no" 38750cbebb9SMichael Rothguest_agent_ntddscsi="no" 3889dacf32dSYossi Hindinguest_agent_msi="" 389d9840e25STomoki Sekiyamavss_win32_sdk="" 390d9840e25STomoki Sekiyamawin_sdk="no" 391e10ee3f5SPhilippe Mathieu-Daudéwant_tools="" 392c589b249SRonnie Sahlberglibiscsi="" 3936542aa9cSPeter Lievenlibnfs="" 394519175a2SAlex Barcelocoroutine="" 39570c60c08SStefan Hajnoczicoroutine_pool="" 3967d992e4dSPeter Lievendebug_stack_usage="no" 397f0d92b56SLongpeng(Mike)crypto_afalg="no" 398f794573eSEduardo Otuboseccomp="" 399eb100396SBharata B Raoglusterfs="" 400d85fa9ebSJeff Codyglusterfs_xlator_opt="no" 4010c14fb47SBharata B Raoglusterfs_discard="no" 402df3a429aSNiels de Vosglusterfs_fallocate="no" 4037c815372SBharata B Raoglusterfs_zerofill="no" 404e014dbe7SPrasanna Kumar Kaleverglusterfs_ftruncate_has_stat="no" 4050e3b891fSNiels de Vosglusterfs_iocb_has_stat="no" 406a4ccabcfSAnthony Liguorigtk="" 407925a0400SGerd Hoffmanngtk_gl="no" 408a1c5e949SDaniel P. Berrangetls_priority="NORMAL" 409ddbb0d09SDaniel P. Berrangegnutls="" 41091bfcdb0SDaniel P. Berrangenettle="" 411dc2207afSDaniel P. Berrangénettle_xts="no" 41291bfcdb0SDaniel P. Berrangegcrypt="" 4131f923c70SLongpeng(Mike)gcrypt_hmac="no" 414e0576942SDaniel P. Berrangégcrypt_xts="no" 415e0576942SDaniel P. Berrangéqemu_private_xts="yes" 4168953caf3SDaniel P. Berrangeauth_pam="" 417bbbf9bfbSStefan Weilvte="" 4189d9e1521SGerd Hoffmannvirglrenderer="" 4197aaa6a16SPaolo Bonzinitpm="" 420b10d49d7SPino Toscanolibssh="" 421ed1701c6SDr. David Alan Gilbertlive_block_migration="yes" 422a99d57bbSWanlong Gaonuma="" 4232847b469SFam Zhengtcmalloc="no" 4247b01cb97SAlexandre Derumierjemalloc="no" 425a6b1d4c0SChanglong Xiereplication="yes" 4262f740136SJeff Codybochs="yes" 4272f740136SJeff Codycloop="yes" 4282f740136SJeff Codydmg="yes" 4292f740136SJeff Codyqcow1="yes" 4302f740136SJeff Codyvdi="yes" 4312f740136SJeff Codyvvfat="yes" 4322f740136SJeff Codyqed="yes" 4332f740136SJeff Codyparallels="yes" 4342f740136SJeff Codysheepdog="yes" 435ed279a06SKlim Kireevlibxml2="" 436ba59fb77SPaolo Bonzinidebug_mutex="no" 43717824406SJunyan Helibpmem="" 438f3494749SPaolo Bonzinidefault_devices="yes" 43940e8c6f4SAlex Bennéeplugins="no" 440adc28027SAlexander Bulekovfuzzing="no" 441b767d257SMarek Marczykowski-Góreckirng_none="no" 44254e7aac0SAlexey Krasikovsecret_keyring="" 44321b2eca6SJingqi Liulibdaxctl="" 444a5665051SPaolo Bonzinimeson="" 44548328880SPaolo Bonzinininja="" 446a5665051SPaolo Bonziniskip_meson=no 447e8f3bd71SMarc-André Lureaugettext="" 448377529c0SPaolo Bonzini 449fb59dabdSPeter Maydellbogus_os="no" 450aa087962SPaolo Bonzinimalloc_trim="auto" 451898be3e0SPeter Maydell 452ac0df51dSaliguori# parse CC options first 453ac0df51dSaliguorifor opt do 45489138857SStefan Weil optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 455ac0df51dSaliguori case "$opt" in 456ac0df51dSaliguori --cross-prefix=*) cross_prefix="$optarg" 457ac0df51dSaliguori ;; 4583d8df640SPaolo Bonzini --cc=*) CC="$optarg" 459ac0df51dSaliguori ;; 46083f73fceSTomoki Sekiyama --cxx=*) CXX="$optarg" 46183f73fceSTomoki Sekiyama ;; 4622ff6b91eSJuan Quintela --cpu=*) cpu="$optarg" 4632ff6b91eSJuan Quintela ;; 464de385287SAlex Bennée --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" 465db5adeaaSPaolo Bonzini QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 466e2a2ed06SJuan Quintela ;; 46711cde1c8SBruno Dominguez --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" 46811cde1c8SBruno Dominguez ;; 469db5adeaaSPaolo Bonzini --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 470f9943cd5SGerd Hoffmann EXTRA_LDFLAGS="$optarg" 471e2a2ed06SJuan Quintela ;; 4725bc62e01SGerd Hoffmann --enable-debug-info) debug_info="yes" 4735bc62e01SGerd Hoffmann ;; 4745bc62e01SGerd Hoffmann --disable-debug-info) debug_info="no" 4755bc62e01SGerd Hoffmann ;; 476d75402b5SAlex Bennée --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" 477d75402b5SAlex Bennée ;; 478d422b2bcSAlex Bennée --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} 479d422b2bcSAlex Bennée eval "cross_cc_cflags_${cc_arch}=\$optarg" 4802038f8c8SPaolo Bonzini cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" 481d422b2bcSAlex Bennée ;; 482d75402b5SAlex Bennée --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} 4832038f8c8SPaolo Bonzini cc_archs="$cc_archs $cc_arch" 484d75402b5SAlex Bennée eval "cross_cc_${cc_arch}=\$optarg" 4852038f8c8SPaolo Bonzini cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" 486d75402b5SAlex Bennée ;; 487ac0df51dSaliguori esac 488ac0df51dSaliguoridone 489ac0df51dSaliguori# OS specific 490ac0df51dSaliguori# Using uname is really, really broken. Once we have the right set of checks 49193148aa5SStefan Weil# we can eliminate its usage altogether. 492ac0df51dSaliguori 493e49d021eSPeter Maydell# Preferred compiler: 494e49d021eSPeter Maydell# ${CC} (if set) 495e49d021eSPeter Maydell# ${cross_prefix}gcc (if cross-prefix specified) 496e49d021eSPeter Maydell# system compiler 497e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then 498e49d021eSPeter Maydell cc="$host_cc" 499e49d021eSPeter Maydellelse 500b3198cc2SStuart Yoder cc="${CC-${cross_prefix}gcc}" 501e49d021eSPeter Maydellfi 502e49d021eSPeter Maydell 50383f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then 50483f73fceSTomoki Sekiyama cxx="c++" 50583f73fceSTomoki Sekiyamaelse 50683f73fceSTomoki Sekiyama cxx="${CXX-${cross_prefix}g++}" 50783f73fceSTomoki Sekiyamafi 50883f73fceSTomoki Sekiyama 509b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}" 510cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}" 5115f6f0e27SRichard Hendersonccas="${CCAS-$cc}" 5123dd46c78SBlue Swirlcpp="${CPP-$cc -E}" 513b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}" 514b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}" 5159f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}" 5164852ee95SStefan Weilnm="${NM-${cross_prefix}nm}" 517b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}" 518b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}" 51917884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 52017884d7bSSergei Trofimovichquery_pkg_config() { 52117884d7bSSergei Trofimovich "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 52217884d7bSSergei Trofimovich} 52317884d7bSSergei Trofimovichpkg_config=query_pkg_config 52447c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 525ac0df51dSaliguori 52645d285abSPeter Maydell# If the user hasn't specified ARFLAGS, default to 'rv', just as make does. 52745d285abSPeter MaydellARFLAGS="${ARFLAGS-rv}" 52845d285abSPeter Maydell 529be17dc90SMichael S. Tsirkin# default flags for all hosts 5302d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where 5312d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected 5322d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it 5332d31515bSPeter Maydell# provides these semantics.) 534086d5f75SPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" 535086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" 536c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" 537be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" 53825211446SPaolo BonziniQEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include" 53925211446SPaolo BonziniQEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl" 540086d5f75SPaolo BonziniCFLAGS="-std=gnu99 -Wall" 541086d5f75SPaolo Bonzini 542be17dc90SMichael S. Tsirkin 543ac0df51dSaliguoricheck_define() { 544ac0df51dSaliguoricat > $TMPC <<EOF 545ac0df51dSaliguori#if !defined($1) 546fd786e1aSPeter Maydell#error $1 not defined 547ac0df51dSaliguori#endif 548ac0df51dSaliguoriint main(void) { return 0; } 549ac0df51dSaliguoriEOF 55052166aa0SJuan Quintela compile_object 551ac0df51dSaliguori} 552ac0df51dSaliguori 553307119e7SGerd Hoffmanncheck_include() { 554307119e7SGerd Hoffmanncat > $TMPC <<EOF 555307119e7SGerd Hoffmann#include <$1> 556307119e7SGerd Hoffmannint main(void) { return 0; } 557307119e7SGerd HoffmannEOF 558307119e7SGerd Hoffmann compile_object 559307119e7SGerd Hoffmann} 560307119e7SGerd Hoffmann 56193b25869SJohn Snowwrite_c_skeleton() { 56293b25869SJohn Snow cat > $TMPC <<EOF 56393b25869SJohn Snowint main(void) { return 0; } 56493b25869SJohn SnowEOF 56593b25869SJohn Snow} 56693b25869SJohn Snow 567adc28027SAlexander Bulekovwrite_c_fuzzer_skeleton() { 568adc28027SAlexander Bulekov cat > $TMPC <<EOF 569adc28027SAlexander Bulekov#include <stdint.h> 570adc28027SAlexander Bulekov#include <sys/types.h> 571adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size); 572adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } 573adc28027SAlexander BulekovEOF 574adc28027SAlexander Bulekov} 575adc28027SAlexander Bulekov 576bbea4050SPeter Maydellif check_define __linux__ ; then 577bbea4050SPeter Maydell targetos="Linux" 578bbea4050SPeter Maydellelif check_define _WIN32 ; then 579bbea4050SPeter Maydell targetos='MINGW32' 580bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then 581bbea4050SPeter Maydell targetos='OpenBSD' 582bbea4050SPeter Maydellelif check_define __sun__ ; then 583bbea4050SPeter Maydell targetos='SunOS' 584bbea4050SPeter Maydellelif check_define __HAIKU__ ; then 585bbea4050SPeter Maydell targetos='Haiku' 586951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then 587951fedfcSPeter Maydell targetos='FreeBSD' 588951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then 589951fedfcSPeter Maydell targetos='GNU/kFreeBSD' 590951fedfcSPeter Maydellelif check_define __DragonFly__ ; then 591951fedfcSPeter Maydell targetos='DragonFly' 592951fedfcSPeter Maydellelif check_define __NetBSD__; then 593951fedfcSPeter Maydell targetos='NetBSD' 594951fedfcSPeter Maydellelif check_define __APPLE__; then 595951fedfcSPeter Maydell targetos='Darwin' 596bbea4050SPeter Maydellelse 597951fedfcSPeter Maydell # This is a fatal error, but don't report it yet, because we 598951fedfcSPeter Maydell # might be going to just print the --help text, or it might 599951fedfcSPeter Maydell # be the result of a missing compiler. 600951fedfcSPeter Maydell targetos='bogus' 601951fedfcSPeter Maydell bogus_os='yes' 602bbea4050SPeter Maydellfi 603bbea4050SPeter Maydell 604bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use. 605bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're 606bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify 607bbea4050SPeter Maydell# the correct CPU with the --cpu option. 608bbea4050SPeter Maydellcase $targetos in 609bbea4050SPeter MaydellDarwin) 610bbea4050SPeter Maydell # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can 611bbea4050SPeter Maydell # run 64-bit userspace code. 612bbea4050SPeter Maydell # If the user didn't specify a CPU explicitly and the kernel says this is 613bbea4050SPeter Maydell # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code. 614bbea4050SPeter Maydell if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then 615bbea4050SPeter Maydell cpu="x86_64" 616bbea4050SPeter Maydell fi 617bbea4050SPeter Maydell ;; 618bbea4050SPeter MaydellSunOS) 61989138857SStefan Weil # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo 620bbea4050SPeter Maydell if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 621bbea4050SPeter Maydell cpu="x86_64" 622bbea4050SPeter Maydell fi 623bbea4050SPeter Maydellesac 624bbea4050SPeter Maydell 6252ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then 6262ff6b91eSJuan Quintela # command line argument 6272ff6b91eSJuan Quintela : 6282ff6b91eSJuan Quintelaelif check_define __i386__ ; then 629ac0df51dSaliguori cpu="i386" 630ac0df51dSaliguorielif check_define __x86_64__ ; then 631c72b26ecSRichard Henderson if check_define __ILP32__ ; then 632c72b26ecSRichard Henderson cpu="x32" 633c72b26ecSRichard Henderson else 634ac0df51dSaliguori cpu="x86_64" 635c72b26ecSRichard Henderson fi 6363aa9bd6cSblueswir1elif check_define __sparc__ ; then 6373aa9bd6cSblueswir1 if check_define __arch64__ ; then 6383aa9bd6cSblueswir1 cpu="sparc64" 6393aa9bd6cSblueswir1 else 6403aa9bd6cSblueswir1 cpu="sparc" 6413aa9bd6cSblueswir1 fi 642fdf7ed96Smalcelif check_define _ARCH_PPC ; then 643fdf7ed96Smalc if check_define _ARCH_PPC64 ; then 644f8378accSRichard Henderson if check_define _LITTLE_ENDIAN ; then 645f8378accSRichard Henderson cpu="ppc64le" 646f8378accSRichard Henderson else 647fdf7ed96Smalc cpu="ppc64" 648f8378accSRichard Henderson fi 649ac0df51dSaliguori else 650fdf7ed96Smalc cpu="ppc" 651fdf7ed96Smalc fi 652afa05235SAurelien Jarnoelif check_define __mips__ ; then 653afa05235SAurelien Jarno cpu="mips" 654d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then 655d66ed0eaSAurelien Jarno if check_define __s390x__ ; then 656d66ed0eaSAurelien Jarno cpu="s390x" 657d66ed0eaSAurelien Jarno else 658d66ed0eaSAurelien Jarno cpu="s390" 659d66ed0eaSAurelien Jarno fi 660c4f80543SAlistair Franciselif check_define __riscv ; then 661c4f80543SAlistair Francis if check_define _LP64 ; then 662c4f80543SAlistair Francis cpu="riscv64" 663c4f80543SAlistair Francis else 664c4f80543SAlistair Francis cpu="riscv32" 665c4f80543SAlistair Francis fi 66621d89f84SPeter Maydellelif check_define __arm__ ; then 66721d89f84SPeter Maydell cpu="arm" 6681f080313SClaudio Fontanaelif check_define __aarch64__ ; then 6691f080313SClaudio Fontana cpu="aarch64" 670fdf7ed96Smalcelse 67189138857SStefan Weil cpu=$(uname -m) 672ac0df51dSaliguorifi 673ac0df51dSaliguori 674359bc95dSPeter MaydellARCH= 675359bc95dSPeter Maydell# Normalise host CPU name and set ARCH. 676359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests. 6777d13299dSbellardcase "$cpu" in 678ee35e968SThomas Huth ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64) 679898be3e0SPeter Maydell ;; 680f8378accSRichard Henderson ppc64le) 681f8378accSRichard Henderson ARCH="ppc64" 682f8378accSRichard Henderson ;; 6837d13299dSbellard i386|i486|i586|i686|i86pc|BePC) 68497a847bcSbellard cpu="i386" 6857d13299dSbellard ;; 686aaa5fa14Saurel32 x86_64|amd64) 687aaa5fa14Saurel32 cpu="x86_64" 688aaa5fa14Saurel32 ;; 68921d89f84SPeter Maydell armv*b|armv*l|arm) 69021d89f84SPeter Maydell cpu="arm" 6917d13299dSbellard ;; 6921f080313SClaudio Fontana aarch64) 6931f080313SClaudio Fontana cpu="aarch64" 6941f080313SClaudio Fontana ;; 695afa05235SAurelien Jarno mips*) 696afa05235SAurelien Jarno cpu="mips" 697afa05235SAurelien Jarno ;; 6983142255cSblueswir1 sparc|sun4[cdmuv]) 699ae228531Sbellard cpu="sparc" 700ae228531Sbellard ;; 7017d13299dSbellard *) 702359bc95dSPeter Maydell # This will result in either an error or falling back to TCI later 703359bc95dSPeter Maydell ARCH=unknown 7047d13299dSbellard ;; 7057d13299dSbellardesac 706359bc95dSPeter Maydellif test -z "$ARCH"; then 707359bc95dSPeter Maydell ARCH="$cpu" 708359bc95dSPeter Maydellfi 709e2d52ad3SJuan Quintela 7107d13299dSbellard# OS specific 7110dbfc675SJuan Quintela 7127d13299dSbellardcase $targetos in 71367b915a5SbellardMINGW32*) 71467b915a5Sbellard mingw32="yes" 715299e6f19SPaolo Bonzini vhost_user="no" 7163cec7cc2SKővágó, Zoltán audio_possible_drivers="dsound sdl" 717307119e7SGerd Hoffmann if check_include dsound.h; then 7183cec7cc2SKővágó, Zoltán audio_drv_list="dsound" 719307119e7SGerd Hoffmann else 720307119e7SGerd Hoffmann audio_drv_list="" 721307119e7SGerd Hoffmann fi 722898be3e0SPeter Maydell supported_os="yes" 723fb648e9cSDaniel P. Berrangé pie="no" 72467b915a5Sbellard;; 7255c40d2bdSthsGNU/kFreeBSD) 726a167ba50SAurelien Jarno bsd="yes" 7276a485418SGerd Hoffmann audio_drv_list="oss try-sdl" 7280bac1111SKővágó, Zoltán audio_possible_drivers="oss sdl pa" 7295c40d2bdSths;; 7307d3505c5SbellardFreeBSD) 7317d3505c5Sbellard bsd="yes" 7320db4a067SPaolo Bonzini make="${MAKE-gmake}" 7336a485418SGerd Hoffmann audio_drv_list="oss try-sdl" 7340bac1111SKővágó, Zoltán audio_possible_drivers="oss sdl pa" 735f01576f1SJuergen Lock # needed for kinfo_getvmmap(3) in libutil.h 73658952137SVincenzo Maffione netmap="" # enable netmap autodetect 7377d3505c5Sbellard;; 738c5e97233Sblueswir1DragonFly) 739c5e97233Sblueswir1 bsd="yes" 7400db4a067SPaolo Bonzini make="${MAKE-gmake}" 7416a485418SGerd Hoffmann audio_drv_list="oss try-sdl" 7420bac1111SKővágó, Zoltán audio_possible_drivers="oss sdl pa" 743c5e97233Sblueswir1;; 7447d3505c5SbellardNetBSD) 7457d3505c5Sbellard bsd="yes" 7460db4a067SPaolo Bonzini make="${MAKE-gmake}" 7476a485418SGerd Hoffmann audio_drv_list="oss try-sdl" 7480bac1111SKővágó, Zoltán audio_possible_drivers="oss sdl" 7498ef92a88Sblueswir1 oss_lib="-lossaudio" 7507d3505c5Sbellard;; 7517d3505c5SbellardOpenBSD) 7527d3505c5Sbellard bsd="yes" 7530db4a067SPaolo Bonzini make="${MAKE-gmake}" 754f92c7168SGerd Hoffmann audio_drv_list="try-sdl" 7550bac1111SKővágó, Zoltán audio_possible_drivers="sdl" 7567d3505c5Sbellard;; 75783fb7adfSbellardDarwin) 75883fb7adfSbellard bsd="yes" 75983fb7adfSbellard darwin="yes" 7601b0f9cc2Saliguori if [ "$cpu" = "x86_64" ] ; then 761a558ee17SJuan Quintela QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS" 762db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS" 7631b0f9cc2Saliguori fi 764b4e312e9SPaolo Bonzini cocoa="enabled" 7656a485418SGerd Hoffmann audio_drv_list="coreaudio try-sdl" 76614382605SKővágó, Zoltán audio_possible_drivers="coreaudio sdl" 767db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS" 768a0b7cf6bSPeter Maydell # Disable attempts to use ObjectiveC features in os/object.h since they 769a0b7cf6bSPeter Maydell # won't work when we're compiling with gcc as a C compiler. 770a0b7cf6bSPeter Maydell QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" 77183fb7adfSbellard;; 772ec530c81SbellardSunOS) 773ec530c81Sbellard solaris="yes" 7740db4a067SPaolo Bonzini make="${MAKE-gmake}" 775e2d8830eSBrad smbd="${SMBD-/usr/sfw/sbin/smbd}" 7766b4d2ba1Sths if test -f /usr/include/sys/soundcard.h ; then 7776a485418SGerd Hoffmann audio_drv_list="oss try-sdl" 7786b4d2ba1Sths fi 779c2de5c91Smalc audio_possible_drivers="oss sdl" 780d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h 781d741429aSBlue Swirl QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" 782d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h 783d741429aSBlue Swirl QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" 784ec530c81Sbellard;; 785179cf400SAndreas FärberHaiku) 786179cf400SAndreas Färber haiku="yes" 787fc433430SDavid CARLIER QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS" 788179cf400SAndreas Färber;; 789898be3e0SPeter MaydellLinux) 7907183834aSGerd Hoffmann audio_drv_list="try-pa oss" 7910bac1111SKővágó, Zoltán audio_possible_drivers="oss alsa sdl pa" 7925327cf48Sbellard linux="yes" 793831b7825Sths linux_user="yes" 79458683d07SPaolo Bonzini QEMU_INCLUDES="-isystem ${source_path}/linux-headers -Ilinux-headers $QEMU_INCLUDES" 795898be3e0SPeter Maydell;; 7967d13299dSbellardesac 7977d13299dSbellard 7987d3505c5Sbellardif [ "$bsd" = "yes" ] ; then 799b1a550a0Spbrook if [ "$darwin" != "yes" ] ; then 80084778508Sblueswir1 bsd_user="yes" 8017d3505c5Sbellard fi 80208de3949SAndreas Färberfi 8037d3505c5Sbellard 8040db4a067SPaolo Bonzini: ${make=${MAKE-make}} 805b6daf4d3SPaolo Bonzini 806faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally 807faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so 808ddf90699SEduardo Habkost# we check that too 809faf44142SDaniel P. Berrangépython= 8100a01d76fSMarc-André Lureauexplicit_python=no 811ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python 812faf44142SDaniel P. Berrangédo 813faf44142SDaniel P. Berrangé if has "$binary" 814faf44142SDaniel P. Berrangé then 81595c5f2deSPaolo Bonzini python=$(command -v "$binary") 816faf44142SDaniel P. Berrangé break 817faf44142SDaniel P. Berrangé fi 818faf44142SDaniel P. Berrangédone 819903458c8SMarkus Armbruster 820903458c8SMarkus Armbrustersphinx_build= 821903458c8SMarkus Armbrusterfor binary in sphinx-build-3 sphinx-build 822903458c8SMarkus Armbrusterdo 823903458c8SMarkus Armbruster if has "$binary" 824903458c8SMarkus Armbruster then 825903458c8SMarkus Armbruster sphinx_build=$(command -v "$binary") 826903458c8SMarkus Armbruster break 827903458c8SMarkus Armbruster fi 828903458c8SMarkus Armbrusterdone 829903458c8SMarkus Armbruster 83039d87c8cSAlex Bennée# Check for ancillary tools used in testing 83139d87c8cSAlex Bennéegenisoimage= 8323df437c7SAlex Bennéefor binary in genisoimage mkisofs 83339d87c8cSAlex Bennéedo 83439d87c8cSAlex Bennée if has $binary 83539d87c8cSAlex Bennée then 83639d87c8cSAlex Bennée genisoimage=$(command -v "$binary") 83739d87c8cSAlex Bennée break 83839d87c8cSAlex Bennée fi 83939d87c8cSAlex Bennéedone 84039d87c8cSAlex Bennée 841e2d8830eSBrad: ${smbd=${SMBD-/usr/sbin/smbd}} 8420db4a067SPaolo Bonzini 8433c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC 8443c4a4d0dSPeter Maydellif has clang; then 8453c4a4d0dSPeter Maydell objcc=clang 8463c4a4d0dSPeter Maydellelse 8473c4a4d0dSPeter Maydell objcc="$cc" 8483c4a4d0dSPeter Maydellfi 8493c4a4d0dSPeter Maydell 8503457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then 8513457a3f8SJuan Quintela EXESUF=".exe" 852484e2cc7SPaolo Bonzini HOST_DSOSUF=".dll" 85378e9d4adSStefan Weil # MinGW needs -mthreads for TLS and macro _MT. 854086d5f75SPaolo Bonzini CFLAGS="-mthreads $CFLAGS" 85593b25869SJohn Snow write_c_skeleton; 856d17f305aSPaolo Bonzini prefix="/qemu" 85777433a5fSMarc-André Lureau qemu_suffix="" 858105fad6bSBishara AbuHattoum libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga" 8593457a3f8SJuan Quintelafi 8603457a3f8SJuan Quintela 861487fefdbSAnthony Liguoriwerror="" 86285aa5189Sbellard 8637d13299dSbellardfor opt do 86489138857SStefan Weil optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 8657d13299dSbellard case "$opt" in 8662efc3265Sbellard --help|-h) show_help=yes 8672efc3265Sbellard ;; 86899123e13SMike Frysinger --version|-V) exec cat $source_path/VERSION 86999123e13SMike Frysinger ;; 870b1a550a0Spbrook --prefix=*) prefix="$optarg" 8717d13299dSbellard ;; 872b1a550a0Spbrook --interp-prefix=*) interp_prefix="$optarg" 87332ce6337Sbellard ;; 874ac0df51dSaliguori --cross-prefix=*) 8757d13299dSbellard ;; 876ac0df51dSaliguori --cc=*) 8777d13299dSbellard ;; 878b1a550a0Spbrook --host-cc=*) host_cc="$optarg" 87983469015Sbellard ;; 88083f73fceSTomoki Sekiyama --cxx=*) 88183f73fceSTomoki Sekiyama ;; 882e007dbecSMichael S. Tsirkin --iasl=*) iasl="$optarg" 883e007dbecSMichael S. Tsirkin ;; 8843c4a4d0dSPeter Maydell --objcc=*) objcc="$optarg" 8853c4a4d0dSPeter Maydell ;; 886b1a550a0Spbrook --make=*) make="$optarg" 8877d13299dSbellard ;; 888b6daf4d3SPaolo Bonzini --install=*) 8896a882643Spbrook ;; 8900a01d76fSMarc-André Lureau --python=*) python="$optarg" ; explicit_python=yes 891c886edfbSBlue Swirl ;; 8922eb054c2SPeter Maydell --sphinx-build=*) sphinx_build="$optarg" 8932eb054c2SPeter Maydell ;; 894a5665051SPaolo Bonzini --skip-meson) skip_meson=yes 895a5665051SPaolo Bonzini ;; 896a5665051SPaolo Bonzini --meson=*) meson="$optarg" 897a5665051SPaolo Bonzini ;; 89848328880SPaolo Bonzini --ninja=*) ninja="$optarg" 89948328880SPaolo Bonzini ;; 900e2d8830eSBrad --smbd=*) smbd="$optarg" 901e2d8830eSBrad ;; 902e2a2ed06SJuan Quintela --extra-cflags=*) 9037d13299dSbellard ;; 90411cde1c8SBruno Dominguez --extra-cxxflags=*) 90511cde1c8SBruno Dominguez ;; 906e2a2ed06SJuan Quintela --extra-ldflags=*) 9077d13299dSbellard ;; 9085bc62e01SGerd Hoffmann --enable-debug-info) 9095bc62e01SGerd Hoffmann ;; 9105bc62e01SGerd Hoffmann --disable-debug-info) 9115bc62e01SGerd Hoffmann ;; 912d75402b5SAlex Bennée --cross-cc-*) 913d75402b5SAlex Bennée ;; 91417969268SFam Zheng --enable-modules) 91517969268SFam Zheng modules="yes" 91617969268SFam Zheng ;; 9173aa88b31SStefan Hajnoczi --disable-modules) 9183aa88b31SStefan Hajnoczi modules="no" 9193aa88b31SStefan Hajnoczi ;; 920bd83c861SChristian Ehrhardt --disable-module-upgrades) module_upgrades="no" 921bd83c861SChristian Ehrhardt ;; 922bd83c861SChristian Ehrhardt --enable-module-upgrades) module_upgrades="yes" 923bd83c861SChristian Ehrhardt ;; 9242ff6b91eSJuan Quintela --cpu=*) 9257d13299dSbellard ;; 926b1a550a0Spbrook --target-list=*) target_list="$optarg" 927447e133fSAlex Bennée if test "$target_list_exclude"; then 928447e133fSAlex Bennée error_exit "Can't mix --target-list with --target-list-exclude" 929447e133fSAlex Bennée fi 930447e133fSAlex Bennée ;; 931447e133fSAlex Bennée --target-list-exclude=*) target_list_exclude="$optarg" 932447e133fSAlex Bennée if test "$target_list"; then 933447e133fSAlex Bennée error_exit "Can't mix --target-list-exclude with --target-list" 934447e133fSAlex Bennée fi 935de83cd02Sbellard ;; 9365b808275SLluís Vilanova --enable-trace-backends=*) trace_backends="$optarg" 9375b808275SLluís Vilanova ;; 9385b808275SLluís Vilanova # XXX: backwards compatibility 9395b808275SLluís Vilanova --enable-trace-backend=*) trace_backends="$optarg" 94094a420b1SStefan Hajnoczi ;; 94174242e0fSPaolo Bonzini --with-trace-file=*) trace_file="$optarg" 9429410b56cSPrerna Saxena ;; 943f3494749SPaolo Bonzini --with-default-devices) default_devices="yes" 944f3494749SPaolo Bonzini ;; 945f3494749SPaolo Bonzini --without-default-devices) default_devices="no" 946f3494749SPaolo Bonzini ;; 9477d13299dSbellard --enable-gprof) gprof="yes" 9487d13299dSbellard ;; 9491d728c39SBlue Swirl --enable-gcov) gcov="yes" 9501d728c39SBlue Swirl ;; 95179427693SLoïc Minier --static) 95279427693SLoïc Minier static="yes" 95317884d7bSSergei Trofimovich QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" 95443ce4dfeSbellard ;; 9550b24e75fSPaolo Bonzini --mandir=*) mandir="$optarg" 9560b24e75fSPaolo Bonzini ;; 9570b24e75fSPaolo Bonzini --bindir=*) bindir="$optarg" 9580b24e75fSPaolo Bonzini ;; 9593aa5d2beSAlon Levy --libdir=*) libdir="$optarg" 9603aa5d2beSAlon Levy ;; 9618bf188aaSMichael Tokarev --libexecdir=*) libexecdir="$optarg" 9628bf188aaSMichael Tokarev ;; 9630f94d6daSAlon Levy --includedir=*) includedir="$optarg" 9640f94d6daSAlon Levy ;; 965528ae5b8SEduardo Habkost --datadir=*) datadir="$optarg" 9660b24e75fSPaolo Bonzini ;; 96777433a5fSMarc-André Lureau --with-suffix=*) qemu_suffix="$optarg" 968023d3d67SEduardo Habkost ;; 969850da188SEduardo Habkost --docdir=*) qemu_docdir="$optarg" 9700b24e75fSPaolo Bonzini ;; 971ca2fb938SAndre Przywara --sysconfdir=*) sysconfdir="$optarg" 97207381cc1SAnthony Liguori ;; 973785c23aeSLuiz Capitulino --localstatedir=*) local_statedir="$optarg" 974785c23aeSLuiz Capitulino ;; 9753d5eecabSGerd Hoffmann --firmwarepath=*) firmwarepath="$optarg" 9763d5eecabSGerd Hoffmann ;; 977181ce1d0SOlaf Hering --host=*|--build=*|\ 978181ce1d0SOlaf Hering --disable-dependency-tracking|\ 979785c23aeSLuiz Capitulino --sbindir=*|--sharedstatedir=*|\ 980023ddd74SMax Filippov --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\ 981023ddd74SMax Filippov --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) 982023ddd74SMax Filippov # These switches are silently ignored, for compatibility with 983023ddd74SMax Filippov # autoconf-generated configure scripts. This allows QEMU's 984023ddd74SMax Filippov # configure to be used by RPM and similar macros that set 985023ddd74SMax Filippov # lots of directory switches by default. 986023ddd74SMax Filippov ;; 98735be72baSPaolo Bonzini --disable-sdl) sdl="disabled" 98897a847bcSbellard ;; 98935be72baSPaolo Bonzini --enable-sdl) sdl="enabled" 990c4198157SJuan Quintela ;; 99135be72baSPaolo Bonzini --disable-sdl-image) sdl_image="disabled" 992a442fe2fSDaniel P. Berrangé ;; 99335be72baSPaolo Bonzini --enable-sdl-image) sdl_image="enabled" 994a442fe2fSDaniel P. Berrangé ;; 9953556c233SPaolo Bonzini --disable-qom-cast-debug) qom_cast_debug="no" 9963556c233SPaolo Bonzini ;; 9973556c233SPaolo Bonzini --enable-qom-cast-debug) qom_cast_debug="yes" 9983556c233SPaolo Bonzini ;; 999983eef5aSMeador Inge --disable-virtfs) virtfs="no" 1000983eef5aSMeador Inge ;; 1001983eef5aSMeador Inge --enable-virtfs) virtfs="yes" 1002983eef5aSMeador Inge ;; 10036ec0e15dSPaolo Bonzini --disable-mpath) mpath="disabled" 1004fe8fc5aeSPaolo Bonzini ;; 10056ec0e15dSPaolo Bonzini --enable-mpath) mpath="enabled" 1006fe8fc5aeSPaolo Bonzini ;; 1007a0b93237SPaolo Bonzini --disable-vnc) vnc="disabled" 1008821601eaSJes Sorensen ;; 1009a0b93237SPaolo Bonzini --enable-vnc) vnc="enabled" 1010821601eaSJes Sorensen ;; 1011e8f3bd71SMarc-André Lureau --disable-gettext) gettext="false" 1012e8f3bd71SMarc-André Lureau ;; 1013e8f3bd71SMarc-André Lureau --enable-gettext) gettext="true" 1014e8f3bd71SMarc-André Lureau ;; 10152f6a1ab0Sblueswir1 --oss-lib=*) oss_lib="$optarg" 10162f6a1ab0Sblueswir1 ;; 10170c58ac1cSmalc --audio-drv-list=*) audio_drv_list="$optarg" 10180c58ac1cSmalc ;; 101989138857SStefan Weil --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1020b64ec4e4SFam Zheng ;; 102189138857SStefan Weil --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1022eb852011SMarkus Armbruster ;; 1023f8393946Saurel32 --enable-debug-tcg) debug_tcg="yes" 1024f8393946Saurel32 ;; 1025f8393946Saurel32 --disable-debug-tcg) debug_tcg="no" 1026f8393946Saurel32 ;; 1027f3d08ee6SPaul Brook --enable-debug) 1028f3d08ee6SPaul Brook # Enable debugging options that aren't excessively noisy 1029f3d08ee6SPaul Brook debug_tcg="yes" 10301fcc6d42SPeter Xu debug_mutex="yes" 1031f3d08ee6SPaul Brook debug="yes" 1032f3d08ee6SPaul Brook strip_opt="no" 1033b553a042SJohn Snow fortify_source="no" 1034f3d08ee6SPaul Brook ;; 1035247724cbSMarc-André Lureau --enable-sanitizers) sanitizers="yes" 1036247724cbSMarc-André Lureau ;; 1037247724cbSMarc-André Lureau --disable-sanitizers) sanitizers="no" 1038247724cbSMarc-André Lureau ;; 10390aebab04SLingfeng Yang --enable-tsan) tsan="yes" 10400aebab04SLingfeng Yang ;; 10410aebab04SLingfeng Yang --disable-tsan) tsan="no" 10420aebab04SLingfeng Yang ;; 1043*deb62371SPaolo Bonzini --enable-sparse) sparse="enabled" 104403b4fe7dSaliguori ;; 1045*deb62371SPaolo Bonzini --disable-sparse) sparse="disabled" 104603b4fe7dSaliguori ;; 10471625af87Saliguori --disable-strip) strip_opt="no" 10481625af87Saliguori ;; 1049a0b93237SPaolo Bonzini --disable-vnc-sasl) vnc_sasl="disabled" 10502f9606b3Saliguori ;; 1051a0b93237SPaolo Bonzini --enable-vnc-sasl) vnc_sasl="enabled" 1052ea784e3bSJuan Quintela ;; 1053a0b93237SPaolo Bonzini --disable-vnc-jpeg) vnc_jpeg="disabled" 10542f6f5c7aSCorentin Chary ;; 1055a0b93237SPaolo Bonzini --enable-vnc-jpeg) vnc_jpeg="enabled" 10562f6f5c7aSCorentin Chary ;; 1057a0b93237SPaolo Bonzini --disable-vnc-png) vnc_png="disabled" 1058efe556adSCorentin Chary ;; 1059a0b93237SPaolo Bonzini --enable-vnc-png) vnc_png="enabled" 1060efe556adSCorentin Chary ;; 1061443f1376Sbellard --disable-slirp) slirp="no" 1062c20709aaSbellard ;; 10637c57bdd8SMarc-André Lureau --enable-slirp=git) slirp="git" 10647c57bdd8SMarc-André Lureau ;; 1065675b9b53SMarc-André Lureau --enable-slirp=system) slirp="system" 1066675b9b53SMarc-André Lureau ;; 1067e0e6c8c0Saliguori --disable-vde) vde="no" 10688a16d273Sths ;; 1069dfb278bdSJuan Quintela --enable-vde) vde="yes" 1070dfb278bdSJuan Quintela ;; 107158952137SVincenzo Maffione --disable-netmap) netmap="no" 107258952137SVincenzo Maffione ;; 107358952137SVincenzo Maffione --enable-netmap) netmap="yes" 107458952137SVincenzo Maffione ;; 10751badb709SPaolo Bonzini --disable-xen) xen="disabled" 1076e37630caSaliguori ;; 10771badb709SPaolo Bonzini --enable-xen) xen="enabled" 1078fc321b4bSJuan Quintela ;; 10791badb709SPaolo Bonzini --disable-xen-pci-passthrough) xen_pci_passthrough="disabled" 1080eb6fda0fSAnthony PERARD ;; 10811badb709SPaolo Bonzini --enable-xen-pci-passthrough) xen_pci_passthrough="enabled" 1082eb6fda0fSAnthony PERARD ;; 10832e4d9fb1Saurel32 --disable-brlapi) brlapi="no" 10842e4d9fb1Saurel32 ;; 10854ffcedb6SJuan Quintela --enable-brlapi) brlapi="yes" 10864ffcedb6SJuan Quintela ;; 10871badb709SPaolo Bonzini --disable-kvm) kvm="disabled" 10887ba1e619Saliguori ;; 10891badb709SPaolo Bonzini --enable-kvm) kvm="enabled" 1090b31a0277SJuan Quintela ;; 10911badb709SPaolo Bonzini --disable-hax) hax="disabled" 1092180fb750Szhanghailiang ;; 10931badb709SPaolo Bonzini --enable-hax) hax="enabled" 1094180fb750Szhanghailiang ;; 10951badb709SPaolo Bonzini --disable-hvf) hvf="disabled" 1096c97d6d2cSSergio Andres Gomez Del Real ;; 10971badb709SPaolo Bonzini --enable-hvf) hvf="enabled" 1098c97d6d2cSSergio Andres Gomez Del Real ;; 10991badb709SPaolo Bonzini --disable-whpx) whpx="disabled" 1100d661d9a4SJustin Terry (VM) ;; 11011badb709SPaolo Bonzini --enable-whpx) whpx="enabled" 1102d661d9a4SJustin Terry (VM) ;; 11039195b2c2SStefan Weil --disable-tcg-interpreter) tcg_interpreter="no" 11049195b2c2SStefan Weil ;; 11059195b2c2SStefan Weil --enable-tcg-interpreter) tcg_interpreter="yes" 11069195b2c2SStefan Weil ;; 110747e98658SCorey Bryant --disable-cap-ng) cap_ng="no" 110847e98658SCorey Bryant ;; 110947e98658SCorey Bryant --enable-cap-ng) cap_ng="yes" 111047e98658SCorey Bryant ;; 11111badb709SPaolo Bonzini --disable-tcg) tcg="disabled" 1112b3f6ea7eSPaolo Bonzini ;; 11131badb709SPaolo Bonzini --enable-tcg) tcg="enabled" 1114b3f6ea7eSPaolo Bonzini ;; 1115aa087962SPaolo Bonzini --disable-malloc-trim) malloc_trim="disabled" 11165a22ab71SYang Zhong ;; 1117aa087962SPaolo Bonzini --enable-malloc-trim) malloc_trim="enabled" 11185a22ab71SYang Zhong ;; 1119cd4ec0b4SGerd Hoffmann --disable-spice) spice="no" 1120cd4ec0b4SGerd Hoffmann ;; 1121cd4ec0b4SGerd Hoffmann --enable-spice) spice="yes" 1122cd4ec0b4SGerd Hoffmann ;; 1123c589b249SRonnie Sahlberg --disable-libiscsi) libiscsi="no" 1124c589b249SRonnie Sahlberg ;; 1125c589b249SRonnie Sahlberg --enable-libiscsi) libiscsi="yes" 1126c589b249SRonnie Sahlberg ;; 11276542aa9cSPeter Lieven --disable-libnfs) libnfs="no" 11286542aa9cSPeter Lieven ;; 11296542aa9cSPeter Lieven --enable-libnfs) libnfs="yes" 11306542aa9cSPeter Lieven ;; 113105c2a3e7Sbellard --enable-profiler) profiler="yes" 113205c2a3e7Sbellard ;; 1133b4e312e9SPaolo Bonzini --disable-cocoa) cocoa="disabled" 113414821030SPavel Borzenkov ;; 1135c2de5c91Smalc --enable-cocoa) 1136b4e312e9SPaolo Bonzini cocoa="enabled" ; 113789138857SStefan Weil audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" 11385b0753e0Sbellard ;; 1139cad25d69Spbrook --disable-system) softmmu="no" 11400a8e90f4Spbrook ;; 1141cad25d69Spbrook --enable-system) softmmu="yes" 11420a8e90f4Spbrook ;; 11430953a80fSZachary Amsden --disable-user) 11440953a80fSZachary Amsden linux_user="no" ; 11450953a80fSZachary Amsden bsd_user="no" ; 11460953a80fSZachary Amsden ;; 11470953a80fSZachary Amsden --enable-user) ;; 1148831b7825Sths --disable-linux-user) linux_user="no" 11490a8e90f4Spbrook ;; 1150831b7825Sths --enable-linux-user) linux_user="yes" 1151831b7825Sths ;; 115284778508Sblueswir1 --disable-bsd-user) bsd_user="no" 115384778508Sblueswir1 ;; 115484778508Sblueswir1 --enable-bsd-user) bsd_user="yes" 115584778508Sblueswir1 ;; 115640d6444eSAvi Kivity --enable-pie) pie="yes" 115734005a00SKirill A. Shutemov ;; 115840d6444eSAvi Kivity --disable-pie) pie="no" 115934005a00SKirill A. Shutemov ;; 116085aa5189Sbellard --enable-werror) werror="yes" 116185aa5189Sbellard ;; 116285aa5189Sbellard --disable-werror) werror="no" 116385aa5189Sbellard ;; 116463678e17SSteven Noonan --enable-stack-protector) stack_protector="yes" 116563678e17SSteven Noonan ;; 116663678e17SSteven Noonan --disable-stack-protector) stack_protector="no" 116763678e17SSteven Noonan ;; 11681e4f6065SDaniele Buono --enable-safe-stack) safe_stack="yes" 11691e4f6065SDaniele Buono ;; 11701e4f6065SDaniele Buono --disable-safe-stack) safe_stack="no" 11711e4f6065SDaniele Buono ;; 11724d3b6f6eSbalrog --disable-curses) curses="no" 11734d3b6f6eSbalrog ;; 1174c584a6d0SJuan Quintela --enable-curses) curses="yes" 1175c584a6d0SJuan Quintela ;; 1176e08bb301SSamuel Thibault --disable-iconv) iconv="no" 1177e08bb301SSamuel Thibault ;; 1178e08bb301SSamuel Thibault --enable-iconv) iconv="yes" 1179e08bb301SSamuel Thibault ;; 1180769ce76dSAlexander Graf --disable-curl) curl="no" 1181769ce76dSAlexander Graf ;; 1182788c8196SJuan Quintela --enable-curl) curl="yes" 1183788c8196SJuan Quintela ;; 11842df87df7SJuan Quintela --disable-fdt) fdt="no" 11852df87df7SJuan Quintela ;; 11862df87df7SJuan Quintela --enable-fdt) fdt="yes" 11872df87df7SJuan Quintela ;; 11885c6c3a6cSChristoph Hellwig --disable-linux-aio) linux_aio="no" 11895c6c3a6cSChristoph Hellwig ;; 11905c6c3a6cSChristoph Hellwig --enable-linux-aio) linux_aio="yes" 11915c6c3a6cSChristoph Hellwig ;; 1192c10dd856SAarushi Mehta --disable-linux-io-uring) linux_io_uring="no" 1193c10dd856SAarushi Mehta ;; 1194c10dd856SAarushi Mehta --enable-linux-io-uring) linux_io_uring="yes" 1195c10dd856SAarushi Mehta ;; 1196758e8e38SVenkateswararao Jujjuri (JV) --disable-attr) attr="no" 1197758e8e38SVenkateswararao Jujjuri (JV) ;; 1198758e8e38SVenkateswararao Jujjuri (JV) --enable-attr) attr="yes" 1199758e8e38SVenkateswararao Jujjuri (JV) ;; 1200a40161cbSPaolo Bonzini --disable-membarrier) membarrier="no" 1201a40161cbSPaolo Bonzini ;; 1202a40161cbSPaolo Bonzini --enable-membarrier) membarrier="yes" 1203a40161cbSPaolo Bonzini ;; 120477755340Sths --disable-blobs) blobs="no" 120577755340Sths ;; 12067e563bfbSThomas Huth --with-pkgversion=*) pkgversion="$optarg" 12074a19f1ecSpbrook ;; 1208519175a2SAlex Barcelo --with-coroutine=*) coroutine="$optarg" 1209519175a2SAlex Barcelo ;; 121070c60c08SStefan Hajnoczi --disable-coroutine-pool) coroutine_pool="no" 121170c60c08SStefan Hajnoczi ;; 121270c60c08SStefan Hajnoczi --enable-coroutine-pool) coroutine_pool="yes" 121370c60c08SStefan Hajnoczi ;; 12147d992e4dSPeter Lieven --enable-debug-stack-usage) debug_stack_usage="yes" 12157d992e4dSPeter Lieven ;; 1216f0d92b56SLongpeng(Mike) --enable-crypto-afalg) crypto_afalg="yes" 1217f0d92b56SLongpeng(Mike) ;; 1218f0d92b56SLongpeng(Mike) --disable-crypto-afalg) crypto_afalg="no" 1219f0d92b56SLongpeng(Mike) ;; 1220a25dba17SJuan Quintela --disable-docs) docs="no" 122170ec5dc0SAnthony Liguori ;; 1222a25dba17SJuan Quintela --enable-docs) docs="yes" 122383a3ab8bSJuan Quintela ;; 1224d5970055SMichael S. Tsirkin --disable-vhost-net) vhost_net="no" 1225d5970055SMichael S. Tsirkin ;; 1226d5970055SMichael S. Tsirkin --enable-vhost-net) vhost_net="yes" 1227d5970055SMichael S. Tsirkin ;; 1228042cea27SGonglei --disable-vhost-crypto) vhost_crypto="no" 1229042cea27SGonglei ;; 1230299e6f19SPaolo Bonzini --enable-vhost-crypto) vhost_crypto="yes" 1231042cea27SGonglei ;; 12325e9be92dSNicholas Bellinger --disable-vhost-scsi) vhost_scsi="no" 12335e9be92dSNicholas Bellinger ;; 12345e9be92dSNicholas Bellinger --enable-vhost-scsi) vhost_scsi="yes" 12355e9be92dSNicholas Bellinger ;; 1236fc0b9b0eSStefan Hajnoczi --disable-vhost-vsock) vhost_vsock="no" 1237fc0b9b0eSStefan Hajnoczi ;; 1238fc0b9b0eSStefan Hajnoczi --enable-vhost-vsock) vhost_vsock="yes" 1239fc0b9b0eSStefan Hajnoczi ;; 124098fc1adaSDr. David Alan Gilbert --disable-vhost-user-fs) vhost_user_fs="no" 124198fc1adaSDr. David Alan Gilbert ;; 124298fc1adaSDr. David Alan Gilbert --enable-vhost-user-fs) vhost_user_fs="yes" 124398fc1adaSDr. David Alan Gilbert ;; 1244da076ffeSGerd Hoffmann --disable-opengl) opengl="no" 124520ff075bSMichael Walle ;; 1246da076ffeSGerd Hoffmann --enable-opengl) opengl="yes" 124720ff075bSMichael Walle ;; 1248f27aaf4bSChristian Brunner --disable-rbd) rbd="no" 1249f27aaf4bSChristian Brunner ;; 1250f27aaf4bSChristian Brunner --enable-rbd) rbd="yes" 1251f27aaf4bSChristian Brunner ;; 12528c84cf11SSergei Trofimovich --disable-xfsctl) xfs="no" 12538c84cf11SSergei Trofimovich ;; 12548c84cf11SSergei Trofimovich --enable-xfsctl) xfs="yes" 12558c84cf11SSergei Trofimovich ;; 12567b02f544SMarc-André Lureau --disable-smartcard) smartcard="no" 1257111a38b0SRobert Relyea ;; 12587b02f544SMarc-André Lureau --enable-smartcard) smartcard="yes" 1259111a38b0SRobert Relyea ;; 12600a40bcb7SCésar Belley --disable-u2f) u2f="disabled" 12610a40bcb7SCésar Belley ;; 12620a40bcb7SCésar Belley --enable-u2f) u2f="enabled" 12630a40bcb7SCésar Belley ;; 12642b2325ffSGerd Hoffmann --disable-libusb) libusb="no" 12652b2325ffSGerd Hoffmann ;; 12662b2325ffSGerd Hoffmann --enable-libusb) libusb="yes" 12672b2325ffSGerd Hoffmann ;; 126869354a83SHans de Goede --disable-usb-redir) usb_redir="no" 126969354a83SHans de Goede ;; 127069354a83SHans de Goede --enable-usb-redir) usb_redir="yes" 127169354a83SHans de Goede ;; 12721ffb3bbbSPaolo Bonzini --disable-zlib-test) 12731ece9905SAlon Levy ;; 1274b25c9dffSStefan Weil --disable-lzo) lzo="no" 1275b25c9dffSStefan Weil ;; 1276607dacd0Sqiaonuohan --enable-lzo) lzo="yes" 1277607dacd0Sqiaonuohan ;; 1278b25c9dffSStefan Weil --disable-snappy) snappy="no" 1279b25c9dffSStefan Weil ;; 1280607dacd0Sqiaonuohan --enable-snappy) snappy="yes" 1281607dacd0Sqiaonuohan ;; 12826b383c08SPeter Wu --disable-bzip2) bzip2="no" 12836b383c08SPeter Wu ;; 12846b383c08SPeter Wu --enable-bzip2) bzip2="yes" 12856b383c08SPeter Wu ;; 128683bc1f97SJulio Faracco --enable-lzfse) lzfse="yes" 128783bc1f97SJulio Faracco ;; 128883bc1f97SJulio Faracco --disable-lzfse) lzfse="no" 128983bc1f97SJulio Faracco ;; 12903a678481SJuan Quintela --disable-zstd) zstd="no" 12913a678481SJuan Quintela ;; 12923a678481SJuan Quintela --enable-zstd) zstd="yes" 12933a678481SJuan Quintela ;; 1294d138cee9SMichael Roth --enable-guest-agent) guest_agent="yes" 1295d138cee9SMichael Roth ;; 1296d138cee9SMichael Roth --disable-guest-agent) guest_agent="no" 1297d138cee9SMichael Roth ;; 12989dacf32dSYossi Hindin --enable-guest-agent-msi) guest_agent_msi="yes" 12999dacf32dSYossi Hindin ;; 13009dacf32dSYossi Hindin --disable-guest-agent-msi) guest_agent_msi="no" 13019dacf32dSYossi Hindin ;; 1302d9840e25STomoki Sekiyama --with-vss-sdk) vss_win32_sdk="" 1303d9840e25STomoki Sekiyama ;; 1304d9840e25STomoki Sekiyama --with-vss-sdk=*) vss_win32_sdk="$optarg" 1305d9840e25STomoki Sekiyama ;; 1306d9840e25STomoki Sekiyama --without-vss-sdk) vss_win32_sdk="no" 1307d9840e25STomoki Sekiyama ;; 1308d9840e25STomoki Sekiyama --with-win-sdk) win_sdk="" 1309d9840e25STomoki Sekiyama ;; 1310d9840e25STomoki Sekiyama --with-win-sdk=*) win_sdk="$optarg" 1311d9840e25STomoki Sekiyama ;; 1312d9840e25STomoki Sekiyama --without-win-sdk) win_sdk="no" 1313d9840e25STomoki Sekiyama ;; 13144b1c11fdSDaniel P. Berrange --enable-tools) want_tools="yes" 13154b1c11fdSDaniel P. Berrange ;; 13164b1c11fdSDaniel P. Berrange --disable-tools) want_tools="no" 13174b1c11fdSDaniel P. Berrange ;; 1318f794573eSEduardo Otubo --enable-seccomp) seccomp="yes" 1319f794573eSEduardo Otubo ;; 1320f794573eSEduardo Otubo --disable-seccomp) seccomp="no" 1321f794573eSEduardo Otubo ;; 1322eb100396SBharata B Rao --disable-glusterfs) glusterfs="no" 1323eb100396SBharata B Rao ;; 132486583a07SLiam Merwick --disable-avx2) avx2_opt="no" 132586583a07SLiam Merwick ;; 132686583a07SLiam Merwick --enable-avx2) avx2_opt="yes" 132786583a07SLiam Merwick ;; 13286b8cd447SRobert Hoo --disable-avx512f) avx512f_opt="no" 13296b8cd447SRobert Hoo ;; 13306b8cd447SRobert Hoo --enable-avx512f) avx512f_opt="yes" 13316b8cd447SRobert Hoo ;; 13326b8cd447SRobert Hoo 1333eb100396SBharata B Rao --enable-glusterfs) glusterfs="yes" 1334eb100396SBharata B Rao ;; 133552b53c04SFam Zheng --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) 133652b53c04SFam Zheng echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 1337583f6e7bSStefan Hajnoczi ;; 1338cb6414dfSFam Zheng --enable-vhdx|--disable-vhdx) 1339cb6414dfSFam Zheng echo "$0: $opt is obsolete, VHDX driver is always built" >&2 1340cb6414dfSFam Zheng ;; 1341315d3184SFam Zheng --enable-uuid|--disable-uuid) 1342315d3184SFam Zheng echo "$0: $opt is obsolete, UUID support is always built" >&2 1343315d3184SFam Zheng ;; 1344a4ccabcfSAnthony Liguori --disable-gtk) gtk="no" 1345a4ccabcfSAnthony Liguori ;; 1346a4ccabcfSAnthony Liguori --enable-gtk) gtk="yes" 1347a4ccabcfSAnthony Liguori ;; 1348a1c5e949SDaniel P. Berrange --tls-priority=*) tls_priority="$optarg" 1349a1c5e949SDaniel P. Berrange ;; 1350ddbb0d09SDaniel P. Berrange --disable-gnutls) gnutls="no" 1351ddbb0d09SDaniel P. Berrange ;; 1352ddbb0d09SDaniel P. Berrange --enable-gnutls) gnutls="yes" 1353ddbb0d09SDaniel P. Berrange ;; 135491bfcdb0SDaniel P. Berrange --disable-nettle) nettle="no" 135591bfcdb0SDaniel P. Berrange ;; 135691bfcdb0SDaniel P. Berrange --enable-nettle) nettle="yes" 135791bfcdb0SDaniel P. Berrange ;; 135891bfcdb0SDaniel P. Berrange --disable-gcrypt) gcrypt="no" 135991bfcdb0SDaniel P. Berrange ;; 136091bfcdb0SDaniel P. Berrange --enable-gcrypt) gcrypt="yes" 136191bfcdb0SDaniel P. Berrange ;; 13628953caf3SDaniel P. Berrange --disable-auth-pam) auth_pam="no" 13638953caf3SDaniel P. Berrange ;; 13648953caf3SDaniel P. Berrange --enable-auth-pam) auth_pam="yes" 13658953caf3SDaniel P. Berrange ;; 13662da776dbSMichael R. Hines --enable-rdma) rdma="yes" 13672da776dbSMichael R. Hines ;; 13682da776dbSMichael R. Hines --disable-rdma) rdma="no" 13692da776dbSMichael R. Hines ;; 137021ab34c9SMarcel Apfelbaum --enable-pvrdma) pvrdma="yes" 137121ab34c9SMarcel Apfelbaum ;; 137221ab34c9SMarcel Apfelbaum --disable-pvrdma) pvrdma="no" 137321ab34c9SMarcel Apfelbaum ;; 1374bbbf9bfbSStefan Weil --disable-vte) vte="no" 1375bbbf9bfbSStefan Weil ;; 1376bbbf9bfbSStefan Weil --enable-vte) vte="yes" 1377bbbf9bfbSStefan Weil ;; 13789d9e1521SGerd Hoffmann --disable-virglrenderer) virglrenderer="no" 13799d9e1521SGerd Hoffmann ;; 13809d9e1521SGerd Hoffmann --enable-virglrenderer) virglrenderer="yes" 13819d9e1521SGerd Hoffmann ;; 1382e91c793cSCole Robinson --disable-tpm) tpm="no" 1383e91c793cSCole Robinson ;; 1384ab214c29SStefan Berger --enable-tpm) tpm="yes" 1385ab214c29SStefan Berger ;; 1386b10d49d7SPino Toscano --disable-libssh) libssh="no" 13870a12ec87SRichard W.M. Jones ;; 1388b10d49d7SPino Toscano --enable-libssh) libssh="yes" 13890a12ec87SRichard W.M. Jones ;; 1390ed1701c6SDr. David Alan Gilbert --disable-live-block-migration) live_block_migration="no" 1391ed1701c6SDr. David Alan Gilbert ;; 1392ed1701c6SDr. David Alan Gilbert --enable-live-block-migration) live_block_migration="yes" 1393ed1701c6SDr. David Alan Gilbert ;; 1394a99d57bbSWanlong Gao --disable-numa) numa="no" 1395a99d57bbSWanlong Gao ;; 1396a99d57bbSWanlong Gao --enable-numa) numa="yes" 1397a99d57bbSWanlong Gao ;; 1398ed279a06SKlim Kireev --disable-libxml2) libxml2="no" 1399ed279a06SKlim Kireev ;; 1400ed279a06SKlim Kireev --enable-libxml2) libxml2="yes" 1401ed279a06SKlim Kireev ;; 14022847b469SFam Zheng --disable-tcmalloc) tcmalloc="no" 14032847b469SFam Zheng ;; 14042847b469SFam Zheng --enable-tcmalloc) tcmalloc="yes" 14052847b469SFam Zheng ;; 14067b01cb97SAlexandre Derumier --disable-jemalloc) jemalloc="no" 14077b01cb97SAlexandre Derumier ;; 14087b01cb97SAlexandre Derumier --enable-jemalloc) jemalloc="yes" 14097b01cb97SAlexandre Derumier ;; 1410a6b1d4c0SChanglong Xie --disable-replication) replication="no" 1411a6b1d4c0SChanglong Xie ;; 1412a6b1d4c0SChanglong Xie --enable-replication) replication="yes" 1413a6b1d4c0SChanglong Xie ;; 14142f740136SJeff Cody --disable-bochs) bochs="no" 14152f740136SJeff Cody ;; 14162f740136SJeff Cody --enable-bochs) bochs="yes" 14172f740136SJeff Cody ;; 14182f740136SJeff Cody --disable-cloop) cloop="no" 14192f740136SJeff Cody ;; 14202f740136SJeff Cody --enable-cloop) cloop="yes" 14212f740136SJeff Cody ;; 14222f740136SJeff Cody --disable-dmg) dmg="no" 14232f740136SJeff Cody ;; 14242f740136SJeff Cody --enable-dmg) dmg="yes" 14252f740136SJeff Cody ;; 14262f740136SJeff Cody --disable-qcow1) qcow1="no" 14272f740136SJeff Cody ;; 14282f740136SJeff Cody --enable-qcow1) qcow1="yes" 14292f740136SJeff Cody ;; 14302f740136SJeff Cody --disable-vdi) vdi="no" 14312f740136SJeff Cody ;; 14322f740136SJeff Cody --enable-vdi) vdi="yes" 14332f740136SJeff Cody ;; 14342f740136SJeff Cody --disable-vvfat) vvfat="no" 14352f740136SJeff Cody ;; 14362f740136SJeff Cody --enable-vvfat) vvfat="yes" 14372f740136SJeff Cody ;; 14382f740136SJeff Cody --disable-qed) qed="no" 14392f740136SJeff Cody ;; 14402f740136SJeff Cody --enable-qed) qed="yes" 14412f740136SJeff Cody ;; 14422f740136SJeff Cody --disable-parallels) parallels="no" 14432f740136SJeff Cody ;; 14442f740136SJeff Cody --enable-parallels) parallels="yes" 14452f740136SJeff Cody ;; 14462f740136SJeff Cody --disable-sheepdog) sheepdog="no" 14472f740136SJeff Cody ;; 14482f740136SJeff Cody --enable-sheepdog) sheepdog="yes" 14492f740136SJeff Cody ;; 1450e6a74868SMarc-André Lureau --disable-vhost-user) vhost_user="no" 1451e6a74868SMarc-André Lureau ;; 1452299e6f19SPaolo Bonzini --enable-vhost-user) vhost_user="yes" 1453299e6f19SPaolo Bonzini ;; 1454108a6481SCindy Lu --disable-vhost-vdpa) vhost_vdpa="no" 1455108a6481SCindy Lu ;; 1456108a6481SCindy Lu --enable-vhost-vdpa) vhost_vdpa="yes" 1457108a6481SCindy Lu ;; 1458299e6f19SPaolo Bonzini --disable-vhost-kernel) vhost_kernel="no" 1459299e6f19SPaolo Bonzini ;; 1460299e6f19SPaolo Bonzini --enable-vhost-kernel) vhost_kernel="yes" 1461e6a74868SMarc-André Lureau ;; 14628ca80760SRichard Henderson --disable-capstone) capstone="no" 14638ca80760SRichard Henderson ;; 14648ca80760SRichard Henderson --enable-capstone) capstone="yes" 14658ca80760SRichard Henderson ;; 1466e219c499SRichard Henderson --enable-capstone=git) capstone="git" 1467e219c499SRichard Henderson ;; 1468e219c499SRichard Henderson --enable-capstone=system) capstone="system" 1469e219c499SRichard Henderson ;; 1470cc84d63aSDaniel P. Berrange --with-git=*) git="$optarg" 1471cc84d63aSDaniel P. Berrange ;; 1472f62bbee5SDaniel P. Berrange --enable-git-update) git_update=yes 1473f62bbee5SDaniel P. Berrange ;; 1474f62bbee5SDaniel P. Berrange --disable-git-update) git_update=no 1475f62bbee5SDaniel P. Berrange ;; 1476ba59fb77SPaolo Bonzini --enable-debug-mutex) debug_mutex=yes 1477ba59fb77SPaolo Bonzini ;; 1478ba59fb77SPaolo Bonzini --disable-debug-mutex) debug_mutex=no 1479ba59fb77SPaolo Bonzini ;; 148017824406SJunyan He --enable-libpmem) libpmem=yes 148117824406SJunyan He ;; 148217824406SJunyan He --disable-libpmem) libpmem=no 148317824406SJunyan He ;; 14844113f4cfSLaurent Vivier --enable-xkbcommon) xkbcommon="enabled" 148575411919SJames Le Cuirot ;; 14864113f4cfSLaurent Vivier --disable-xkbcommon) xkbcommon="disabled" 148775411919SJames Le Cuirot ;; 148840e8c6f4SAlex Bennée --enable-plugins) plugins="yes" 148940e8c6f4SAlex Bennée ;; 149040e8c6f4SAlex Bennée --disable-plugins) plugins="no" 149140e8c6f4SAlex Bennée ;; 1492afc3a8f9SAlex Bennée --enable-containers) use_containers="yes" 1493afc3a8f9SAlex Bennée ;; 1494afc3a8f9SAlex Bennée --disable-containers) use_containers="no" 1495afc3a8f9SAlex Bennée ;; 1496adc28027SAlexander Bulekov --enable-fuzzing) fuzzing=yes 1497adc28027SAlexander Bulekov ;; 1498adc28027SAlexander Bulekov --disable-fuzzing) fuzzing=no 1499adc28027SAlexander Bulekov ;; 1500f48e590aSAlex Bennée --gdb=*) gdb_bin="$optarg" 1501f48e590aSAlex Bennée ;; 1502b767d257SMarek Marczykowski-Górecki --enable-rng-none) rng_none=yes 1503b767d257SMarek Marczykowski-Górecki ;; 1504b767d257SMarek Marczykowski-Górecki --disable-rng-none) rng_none=no 1505b767d257SMarek Marczykowski-Górecki ;; 150654e7aac0SAlexey Krasikov --enable-keyring) secret_keyring="yes" 150754e7aac0SAlexey Krasikov ;; 150854e7aac0SAlexey Krasikov --disable-keyring) secret_keyring="no" 150954e7aac0SAlexey Krasikov ;; 151021b2eca6SJingqi Liu --enable-libdaxctl) libdaxctl=yes 151121b2eca6SJingqi Liu ;; 151221b2eca6SJingqi Liu --disable-libdaxctl) libdaxctl=no 151321b2eca6SJingqi Liu ;; 15142d2ad6d0SFam Zheng *) 15152d2ad6d0SFam Zheng echo "ERROR: unknown option $opt" 15162d2ad6d0SFam Zheng echo "Try '$0 --help' for more information" 15172d2ad6d0SFam Zheng exit 1 15187f1559c6Sbalrog ;; 15197d13299dSbellard esac 15207d13299dSbellarddone 15217d13299dSbellard 152287727cb1SPaolo Bonzinifirmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}" 152322a87800SMarc-André Lureaulibdir="${libdir:-$prefix/lib}" 152422a87800SMarc-André Lureaulibexecdir="${libexecdir:-$prefix/libexec}" 152522a87800SMarc-André Lureauincludedir="${includedir:-$prefix/include}" 152622a87800SMarc-André Lureau 152722a87800SMarc-André Lureauif test "$mingw32" = "yes" ; then 152822a87800SMarc-André Lureau mandir="$prefix" 152922a87800SMarc-André Lureau datadir="$prefix" 1530ca8c0909SMarc-André Lureau docdir="$prefix" 153122a87800SMarc-André Lureau bindir="$prefix" 153222a87800SMarc-André Lureau sysconfdir="$prefix" 153322a87800SMarc-André Lureau local_statedir= 153422a87800SMarc-André Lureauelse 153522a87800SMarc-André Lureau mandir="${mandir:-$prefix/share/man}" 153622a87800SMarc-André Lureau datadir="${datadir:-$prefix/share}" 1537ca8c0909SMarc-André Lureau docdir="${docdir:-$prefix/share/doc}" 153822a87800SMarc-André Lureau bindir="${bindir:-$prefix/bin}" 153922a87800SMarc-André Lureau sysconfdir="${sysconfdir:-$prefix/etc}" 154022a87800SMarc-André Lureau local_statedir="${local_statedir:-$prefix/var}" 154122a87800SMarc-André Lureaufi 154222a87800SMarc-André Lureau 154340293e58Sbellardcase "$cpu" in 1544e3608d66SRichard Henderson ppc) 1545e3608d66SRichard Henderson CPU_CFLAGS="-m32" 1546db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 1547e3608d66SRichard Henderson ;; 1548e3608d66SRichard Henderson ppc64) 1549e3608d66SRichard Henderson CPU_CFLAGS="-m64" 1550db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1551e3608d66SRichard Henderson ;; 15529b9c37c3SRichard Henderson sparc) 1553f1079bb8SRichard Henderson CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" 1554db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS" 15553142255cSblueswir1 ;; 1556ed968ff1SJuan Quintela sparc64) 155779f3b12fSPeter Crosthwaite CPU_CFLAGS="-m64 -mcpu=ultrasparc" 1558db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 15593142255cSblueswir1 ;; 156076d83bdeSths s390) 1561061cdd81SRichard Henderson CPU_CFLAGS="-m31" 1562db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS" 156328d7cc49SRichard Henderson ;; 156428d7cc49SRichard Henderson s390x) 1565061cdd81SRichard Henderson CPU_CFLAGS="-m64" 1566db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 156776d83bdeSths ;; 156840293e58Sbellard i386) 156979f3b12fSPeter Crosthwaite CPU_CFLAGS="-m32" 1570db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 157140293e58Sbellard ;; 157240293e58Sbellard x86_64) 15737ebee43eSRichard Henderson # ??? Only extremely old AMD cpus do not have cmpxchg16b. 15747ebee43eSRichard Henderson # If we truly care, we should simply detect this case at 15757ebee43eSRichard Henderson # runtime and generate the fallback to serial emulation. 15767ebee43eSRichard Henderson CPU_CFLAGS="-m64 -mcx16" 1577db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1578379f6698SPaul Brook ;; 1579c72b26ecSRichard Henderson x32) 1580c72b26ecSRichard Henderson CPU_CFLAGS="-mx32" 1581db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS" 1582c72b26ecSRichard Henderson ;; 158330163d89SPeter Maydell # No special flags required for other host CPUs 15843142255cSblueswir1esac 15853142255cSblueswir1 15862038f8c8SPaolo Bonzinieval "cross_cc_${cpu}=\$host_cc" 15872038f8c8SPaolo Bonzinicross_cc_vars="$cross_cc_vars cross_cc_${cpu}" 158879f3b12fSPeter CrosthwaiteQEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS" 158979f3b12fSPeter Crosthwaite 1590affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly 1591affc88ccSPeter Maydell# support, even if we're using TCI. 1592affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then 1593affc88ccSPeter Maydell bsd_user="no" 1594affc88ccSPeter Maydell linux_user="no" 1595affc88ccSPeter Maydellfi 1596affc88ccSPeter Maydell 159760e0df25SPeter Maydelldefault_target_list="" 1598fdb75aefSPaolo Bonzinideprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu 1599fdb75aefSPaolo Bonzinideprecated_features="" 16006e92f823SPeter Maydellmak_wilds="" 16016e92f823SPeter Maydell 160260e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then 160373362fc0SPaolo Bonzini mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak" 160460e0df25SPeter Maydellfi 160560e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then 160673362fc0SPaolo Bonzini mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak" 160760e0df25SPeter Maydellfi 160860e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then 160973362fc0SPaolo Bonzini mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak" 161060e0df25SPeter Maydellfi 161160e0df25SPeter Maydell 16123a5ae4a9SAlex Bennée# If the user doesn't explicitly specify a deprecated target we will 16133a5ae4a9SAlex Bennée# skip it. 16143a5ae4a9SAlex Bennéeif test -z "$target_list"; then 16153a5ae4a9SAlex Bennée if test -z "$target_list_exclude"; then 16163a5ae4a9SAlex Bennée target_list_exclude="$deprecated_targets_list" 16173a5ae4a9SAlex Bennée else 16183a5ae4a9SAlex Bennée target_list_exclude="$target_list_exclude,$deprecated_targets_list" 16193a5ae4a9SAlex Bennée fi 16202d838d9bSAlex Bennéefi 16212d838d9bSAlex Bennée 1622447e133fSAlex Bennéefor config in $mak_wilds; do 1623447e133fSAlex Bennée target="$(basename "$config" .mak)" 162498db9a06SAlex Bennée if echo "$target_list_exclude" | grep -vq "$target"; then 1625447e133fSAlex Bennée default_target_list="${default_target_list} $target" 1626447e133fSAlex Bennée fi 1627447e133fSAlex Bennéedone 16286e92f823SPeter Maydell 1629c53eeaf7SStefan Hajnoczi# Enumerate public trace backends for --help output 163064a6047dSGreg Kurztrace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/')) 1631c53eeaf7SStefan Hajnoczi 1632af5db58eSpbrookif test x"$show_help" = x"yes" ; then 1633af5db58eSpbrookcat << EOF 1634af5db58eSpbrook 1635af5db58eSpbrookUsage: configure [options] 1636af5db58eSpbrookOptions: [defaults in brackets after descriptions] 1637af5db58eSpbrook 163808fb77edSStefan WeilStandard options: 163908fb77edSStefan Weil --help print this message 164008fb77edSStefan Weil --prefix=PREFIX install in PREFIX [$prefix] 164108fb77edSStefan Weil --interp-prefix=PREFIX where to find shared libraries, etc. 164208fb77edSStefan Weil use %M for cpu name [$interp_prefix] 164308fb77edSStefan Weil --target-list=LIST set target list (default: build everything) 164408fb77edSStefan Weil$(echo Available targets: $default_target_list | \ 164508fb77edSStefan Weil fold -s -w 53 | sed -e 's/^/ /') 1646447e133fSAlex Bennée --target-list-exclude=LIST exclude a set of targets from the default target-list 164708fb77edSStefan Weil 164808fb77edSStefan WeilAdvanced options (experts only): 164908fb77edSStefan Weil --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix] 165008fb77edSStefan Weil --cc=CC use C compiler CC [$cc] 165108fb77edSStefan Weil --iasl=IASL use ACPI compiler IASL [$iasl] 165208fb77edSStefan Weil --host-cc=CC use C compiler CC [$host_cc] for code run at 165308fb77edSStefan Weil build time 165408fb77edSStefan Weil --cxx=CXX use C++ compiler CXX [$cxx] 165508fb77edSStefan Weil --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 165608fb77edSStefan Weil --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS 165711cde1c8SBruno Dominguez --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS 165808fb77edSStefan Weil --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1659d75402b5SAlex Bennée --cross-cc-ARCH=CC use compiler when building ARCH guest test cases 1660d422b2bcSAlex Bennée --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests 166108fb77edSStefan Weil --make=MAKE use specified make [$make] 166208fb77edSStefan Weil --python=PYTHON use specified python [$python] 16632eb054c2SPeter Maydell --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] 1664a5665051SPaolo Bonzini --meson=MESON use specified meson [$meson] 166548328880SPaolo Bonzini --ninja=NINJA use specified ninja [$ninja] 166608fb77edSStefan Weil --smbd=SMBD use specified smbd [$smbd] 1667db1b5f13SThomas Huth --with-git=GIT use specified git [$git] 166808fb77edSStefan Weil --static enable static build [$static] 166908fb77edSStefan Weil --mandir=PATH install man pages in PATH 167010ff82d1SMarc-André Lureau --datadir=PATH install firmware in PATH/$qemu_suffix 167110ff82d1SMarc-André Lureau --docdir=PATH install documentation in PATH/$qemu_suffix 167208fb77edSStefan Weil --bindir=PATH install binaries in PATH 167308fb77edSStefan Weil --libdir=PATH install libraries in PATH 1674db1b5f13SThomas Huth --libexecdir=PATH install helper binaries in PATH 167510ff82d1SMarc-André Lureau --sysconfdir=PATH install config in PATH/$qemu_suffix 167608fb77edSStefan Weil --localstatedir=PATH install local state in PATH (set at runtime on win32) 16773d5eecabSGerd Hoffmann --firmwarepath=PATH search PATH for firmware files 167813336606SRobert Foley --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs. 1679ca8c0909SMarc-André Lureau --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] 1680db1b5f13SThomas Huth --with-pkgversion=VERS use specified string as sub-version of the package 168108fb77edSStefan Weil --enable-debug enable common debug build options 1682247724cbSMarc-André Lureau --enable-sanitizers enable default sanitizers 16830aebab04SLingfeng Yang --enable-tsan enable thread sanitizer 168408fb77edSStefan Weil --disable-strip disable stripping binaries 168508fb77edSStefan Weil --disable-werror disable compilation abort on warning 168663678e17SSteven Noonan --disable-stack-protector disable compiler-provided stack protection 168708fb77edSStefan Weil --audio-drv-list=LIST set audio drivers list: 168808fb77edSStefan Weil Available drivers: $audio_possible_drivers 168908fb77edSStefan Weil --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 169008fb77edSStefan Weil --block-drv-rw-whitelist=L 169108fb77edSStefan Weil set block driver read-write whitelist 169208fb77edSStefan Weil (affects only QEMU, not qemu-img) 169308fb77edSStefan Weil --block-drv-ro-whitelist=L 169408fb77edSStefan Weil set block driver read-only whitelist 169508fb77edSStefan Weil (affects only QEMU, not qemu-img) 16965b808275SLluís Vilanova --enable-trace-backends=B Set trace backend 1697c53eeaf7SStefan Hajnoczi Available backends: $trace_backend_list 169808fb77edSStefan Weil --with-trace-file=NAME Full PATH,NAME of file to store traces 169908fb77edSStefan Weil Default:trace-<pid> 1700c23f23b9SMichael Tokarev --disable-slirp disable SLIRP userspace network connectivity 1701c23f23b9SMichael Tokarev --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) 17025a22ab71SYang Zhong --enable-malloc-trim enable libc malloc_trim() for memory optimization 1703c23f23b9SMichael Tokarev --oss-lib path to OSS library 1704c23f23b9SMichael Tokarev --cpu=CPU Build for host CPU [$cpu] 170508fb77edSStefan Weil --with-coroutine=BACKEND coroutine backend. Supported options: 170633c53c54SDaniel P. Berrange ucontext, sigaltstack, windows 170708fb77edSStefan Weil --enable-gcov enable test coverage analysis with gcov 1708c23f23b9SMichael Tokarev --disable-blobs disable installing provided firmware blobs 1709c23f23b9SMichael Tokarev --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1710c23f23b9SMichael Tokarev --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1711a1c5e949SDaniel P. Berrange --tls-priority default TLS protocol/cipher priority string 1712c12d66aaSLin Ma --enable-gprof QEMU profiling with gprof 1713c12d66aaSLin Ma --enable-profiler profiler support 1714c12d66aaSLin Ma --enable-debug-stack-usage 1715c12d66aaSLin Ma track the maximum stack usage of stacks created by qemu_alloc_stack 171640e8c6f4SAlex Bennée --enable-plugins 171740e8c6f4SAlex Bennée enable plugins via shared library loading 1718afc3a8f9SAlex Bennée --disable-containers don't use containers for cross-building 1719f48e590aSAlex Bennée --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin] 1720c23f23b9SMichael Tokarev 1721c23f23b9SMichael TokarevOptional features, enabled with --enable-FEATURE and 1722c23f23b9SMichael Tokarevdisabled with --disable-FEATURE, default is enabled if available: 1723c23f23b9SMichael Tokarev 1724c23f23b9SMichael Tokarev system all system emulation targets 1725c23f23b9SMichael Tokarev user supported user emulation targets 1726c23f23b9SMichael Tokarev linux-user all linux usermode emulation targets 1727c23f23b9SMichael Tokarev bsd-user all BSD usermode emulation targets 1728c23f23b9SMichael Tokarev docs build documentation 1729c23f23b9SMichael Tokarev guest-agent build the QEMU Guest Agent 1730c23f23b9SMichael Tokarev guest-agent-msi build guest agent Windows MSI installation package 1731c23f23b9SMichael Tokarev pie Position Independent Executables 173221e709aaSMarc-André Lureau modules modules support (non-Windows) 1733bd83c861SChristian Ehrhardt module-upgrades try to load modules from alternate paths for upgrades 1734c23f23b9SMichael Tokarev debug-tcg TCG debugging (default is disabled) 1735c23f23b9SMichael Tokarev debug-info debugging information 1736c23f23b9SMichael Tokarev sparse sparse checker 17371e4f6065SDaniele Buono safe-stack SafeStack Stack Smash Protection. Depends on 17381e4f6065SDaniele Buono clang/llvm >= 3.7 and requires coroutine backend ucontext. 1739c23f23b9SMichael Tokarev 1740ddbb0d09SDaniel P. Berrange gnutls GNUTLS cryptography support 174191bfcdb0SDaniel P. Berrange nettle nettle cryptography support 174291bfcdb0SDaniel P. Berrange gcrypt libgcrypt cryptography support 17438953caf3SDaniel P. Berrange auth-pam PAM access control 1744c23f23b9SMichael Tokarev sdl SDL UI 174504c6e16fSMarkus Armbruster sdl-image SDL Image support for icons 1746c23f23b9SMichael Tokarev gtk gtk UI 1747c23f23b9SMichael Tokarev vte vte support for the gtk UI 1748c23f23b9SMichael Tokarev curses curses UI 1749e08bb301SSamuel Thibault iconv font glyph conversion support 1750c23f23b9SMichael Tokarev vnc VNC UI support 1751c23f23b9SMichael Tokarev vnc-sasl SASL encryption for VNC server 1752c23f23b9SMichael Tokarev vnc-jpeg JPEG lossy compression for VNC server 1753c23f23b9SMichael Tokarev vnc-png PNG compression for VNC server 1754c23f23b9SMichael Tokarev cocoa Cocoa UI (Mac OS X only) 1755c23f23b9SMichael Tokarev virtfs VirtFS 1756fe8fc5aeSPaolo Bonzini mpath Multipath persistent reservation passthrough 1757c23f23b9SMichael Tokarev xen xen backend driver support 175870c292afSAnthony PERARD xen-pci-passthrough PCI passthrough support for Xen 1759c23f23b9SMichael Tokarev brlapi BrlAPI (Braile) 1760c23f23b9SMichael Tokarev curl curl connectivity 1761a40161cbSPaolo Bonzini membarrier membarrier system call (for Linux 4.14+ or Windows) 1762c23f23b9SMichael Tokarev fdt fdt device tree 1763c23f23b9SMichael Tokarev kvm KVM acceleration support 1764b0cb0a66SVincent Palatin hax HAX acceleration support 1765c97d6d2cSSergio Andres Gomez Del Real hvf Hypervisor.framework acceleration support 1766d661d9a4SJustin Terry (VM) whpx Windows Hypervisor Platform acceleration support 176721ab34c9SMarcel Apfelbaum rdma Enable RDMA-based migration 176821ab34c9SMarcel Apfelbaum pvrdma Enable PVRDMA support 1769c23f23b9SMichael Tokarev vde support for vde network 1770c23f23b9SMichael Tokarev netmap support for netmap network 1771c23f23b9SMichael Tokarev linux-aio Linux AIO support 1772c10dd856SAarushi Mehta linux-io-uring Linux io_uring support 1773c23f23b9SMichael Tokarev cap-ng libcap-ng support 1774c23f23b9SMichael Tokarev attr attr and xattr support 1775299e6f19SPaolo Bonzini vhost-net vhost-net kernel acceleration support 1776299e6f19SPaolo Bonzini vhost-vsock virtio sockets device support 1777299e6f19SPaolo Bonzini vhost-scsi vhost-scsi kernel target support 1778299e6f19SPaolo Bonzini vhost-crypto vhost-user-crypto backend support 1779299e6f19SPaolo Bonzini vhost-kernel vhost kernel backend support 1780299e6f19SPaolo Bonzini vhost-user vhost-user backend support 1781108a6481SCindy Lu vhost-vdpa vhost-vdpa kernel backend support 1782c23f23b9SMichael Tokarev spice spice 1783c23f23b9SMichael Tokarev rbd rados block device (rbd) 1784c23f23b9SMichael Tokarev libiscsi iscsi support 1785c23f23b9SMichael Tokarev libnfs nfs support 17867b02f544SMarc-André Lureau smartcard smartcard support (libcacard) 17870a40bcb7SCésar Belley u2f U2F support (u2f-emu) 1788c23f23b9SMichael Tokarev libusb libusb (for usb passthrough) 1789ed1701c6SDr. David Alan Gilbert live-block-migration Block migration in the main migration stream 1790c23f23b9SMichael Tokarev usb-redir usb network redirection support 1791c23f23b9SMichael Tokarev lzo support of lzo compression library 1792c23f23b9SMichael Tokarev snappy support of snappy compression library 1793c23f23b9SMichael Tokarev bzip2 support of bzip2 compression library 1794c23f23b9SMichael Tokarev (for reading bzip2-compressed dmg images) 179583bc1f97SJulio Faracco lzfse support of lzfse compression library 179683bc1f97SJulio Faracco (for reading lzfse-compressed dmg images) 17973a678481SJuan Quintela zstd support for zstd compression library 1798d298ac10SDenis Plotnikov (for migration compression and qcow2 cluster compression) 1799c23f23b9SMichael Tokarev seccomp seccomp support 1800c23f23b9SMichael Tokarev coroutine-pool coroutine freelist (better performance) 1801c23f23b9SMichael Tokarev glusterfs GlusterFS backend 1802c23f23b9SMichael Tokarev tpm TPM support 1803b10d49d7SPino Toscano libssh ssh block device support 1804c23f23b9SMichael Tokarev numa libnuma support 1805ed279a06SKlim Kireev libxml2 for Parallels image format 1806c23f23b9SMichael Tokarev tcmalloc tcmalloc support 18077b01cb97SAlexandre Derumier jemalloc jemalloc support 180886583a07SLiam Merwick avx2 AVX2 optimization support 18096b8cd447SRobert Hoo avx512f AVX512F optimization support 1810a6b1d4c0SChanglong Xie replication replication support 1811c12d66aaSLin Ma opengl opengl support 1812c12d66aaSLin Ma virglrenderer virgl rendering support 1813c12d66aaSLin Ma xfsctl xfsctl support 1814c12d66aaSLin Ma qom-cast-debug cast debugging support 18158de73fa8SCleber Rosa tools build qemu-io, qemu-nbd and qemu-img tools 18162f740136SJeff Cody bochs bochs image format support 18172f740136SJeff Cody cloop cloop image format support 18182f740136SJeff Cody dmg dmg image format support 18192f740136SJeff Cody qcow1 qcow v1 image format support 18202f740136SJeff Cody vdi vdi image format support 18212f740136SJeff Cody vvfat vvfat image format support 18222f740136SJeff Cody qed qed image format support 18232f740136SJeff Cody parallels parallels image format support 18242f740136SJeff Cody sheepdog sheepdog block driver support 1825f0d92b56SLongpeng(Mike) crypto-afalg Linux AF_ALG crypto backend driver 18268ca80760SRichard Henderson capstone capstone disassembler support 1827ba59fb77SPaolo Bonzini debug-mutex mutex debugging support 182817824406SJunyan He libpmem libpmem support 182975411919SJames Le Cuirot xkbcommon xkbcommon support 1830b767d257SMarek Marczykowski-Górecki rng-none dummy RNG, avoid using /dev/(u)random and getrandom() 183121b2eca6SJingqi Liu libdaxctl libdaxctl support 183208fb77edSStefan Weil 183308fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched 1834af5db58eSpbrookEOF 18352d2ad6d0SFam Zhengexit 0 1836af5db58eSpbrookfi 1837af5db58eSpbrook 18389c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated 1839bb768f71SThomas Huthrm -f */config-devices.mak.d 18409c790242SThomas Huth 1841faf44142SDaniel P. Berrangéif test -z "$python" 1842faf44142SDaniel P. Berrangéthen 1843c53eeaf7SStefan Hajnoczi error_exit "Python not found. Use --python=/path/to/python" 1844c53eeaf7SStefan Hajnoczifi 1845c53eeaf7SStefan Hajnoczi 1846c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit 1847c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value. 18481b11f28dSThomas Huthif ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then 18491b11f28dSThomas Huth error_exit "Cannot use '$python', Python >= 3.6 is required." \ 1850c53eeaf7SStefan Hajnoczi "Use --python=/path/to/python to specify a supported Python." 1851c53eeaf7SStefan Hajnoczifi 1852c53eeaf7SStefan Hajnoczi 1853755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it 1854406ab2f3SCleber 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) 1855755ee70fSCleber Rosa 1856c53eeaf7SStefan Hajnoczi# Suppress writing compiled files 1857c53eeaf7SStefan Hajnoczipython="$python -B" 1858c53eeaf7SStefan Hajnoczi 18590a01d76fSMarc-André Lureauif test -z "$meson"; then 186046504430SPaolo Bonzini if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; then 18610a01d76fSMarc-André Lureau meson=meson 18620a01d76fSMarc-André Lureau elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 18630a01d76fSMarc-André Lureau meson=git 18640a01d76fSMarc-André Lureau elif test -e "${source_path}/meson/meson.py" ; then 18650a01d76fSMarc-André Lureau meson=internal 18660a01d76fSMarc-André Lureau else 18670a01d76fSMarc-André Lureau if test "$explicit_python" = yes; then 18680a01d76fSMarc-André Lureau error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found." 18690a01d76fSMarc-André Lureau else 1870a5665051SPaolo Bonzini error_exit "Meson not found. Use --meson=/path/to/meson" 1871a5665051SPaolo Bonzini fi 18720a01d76fSMarc-André Lureau fi 18730a01d76fSMarc-André Lureauelse 18740a01d76fSMarc-André Lureau # Meson uses its own Python interpreter to invoke other Python scripts, 18750a01d76fSMarc-André Lureau # but the user wants to use the one they specified with --python. 18760a01d76fSMarc-André Lureau # 18770a01d76fSMarc-André Lureau # We do not want to override the distro Python interpreter (and sometimes 18780a01d76fSMarc-André Lureau # cannot: for example in Homebrew /usr/bin/meson is a bash script), so 18790a01d76fSMarc-André Lureau # just require --meson=git|internal together with --python. 18800a01d76fSMarc-André Lureau if test "$explicit_python" = yes; then 18810a01d76fSMarc-André Lureau case "$meson" in 18820a01d76fSMarc-André Lureau git | internal) ;; 18830a01d76fSMarc-André Lureau *) error_exit "--python requires using QEMU's embedded Meson distribution." ;; 18840a01d76fSMarc-André Lureau esac 18850a01d76fSMarc-André Lureau fi 18860a01d76fSMarc-André Lureaufi 1887a5665051SPaolo Bonzini 18880a01d76fSMarc-André Lureauif test "$meson" = git; then 18890a01d76fSMarc-André Lureau git_submodules="${git_submodules} meson" 18900a01d76fSMarc-André Lureaufi 18910a01d76fSMarc-André Lureau 18920a01d76fSMarc-André Lureaucase "$meson" in 18930a01d76fSMarc-André Lureau git | internal) 1894a5665051SPaolo Bonzini if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then 1895a5665051SPaolo Bonzini error_exit "Python setuptools not found" 1896a5665051SPaolo Bonzini fi 18970a01d76fSMarc-André Lureau meson="$python ${source_path}/meson/meson.py" 18980a01d76fSMarc-André Lureau ;; 189984ec0c24SPaolo Bonzini *) meson=$(command -v "$meson") ;; 19000a01d76fSMarc-André Lureauesac 19010a01d76fSMarc-André Lureau 190248328880SPaolo Bonzini# Probe for ninja (used for compdb) 190348328880SPaolo Bonzini 190448328880SPaolo Bonziniif test -z "$ninja"; then 190548328880SPaolo Bonzini for c in ninja ninja-build samu; do 190648328880SPaolo Bonzini if has $c; then 190748328880SPaolo Bonzini ninja=$(command -v "$c") 190848328880SPaolo Bonzini break 190948328880SPaolo Bonzini fi 191048328880SPaolo Bonzini done 191148328880SPaolo Bonzinifi 1912a5665051SPaolo Bonzini 19139aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing 19149aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the 19159aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case). 19169aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC. 19179aae6e54SDaniel Henrique Barbozawrite_c_skeleton; 19189aae6e54SDaniel Henrique Barbozaif compile_object ; then 19199aae6e54SDaniel Henrique Barboza : C compiler works ok 19209aae6e54SDaniel Henrique Barbozaelse 19219aae6e54SDaniel Henrique Barboza error_exit "\"$cc\" either does not exist or does not work" 19229aae6e54SDaniel Henrique Barbozafi 19239aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then 19249aae6e54SDaniel Henrique Barboza error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 19259aae6e54SDaniel Henrique Barbozafi 19269aae6e54SDaniel Henrique Barboza 19279c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror 19289c83ffd8SPeter Maydell# by default. Only enable by default for git builds 19299c83ffd8SPeter Maydellif test -z "$werror" ; then 1930fd73745dSAlexey Kardashevskiy if test -e "$source_path/.git" && \ 1931e633a5c6SEric Blake { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then 19329c83ffd8SPeter Maydell werror="yes" 19339c83ffd8SPeter Maydell else 19349c83ffd8SPeter Maydell werror="no" 19359c83ffd8SPeter Maydell fi 19369c83ffd8SPeter Maydellfi 19379c83ffd8SPeter Maydell 1938fb59dabdSPeter Maydellif test "$bogus_os" = "yes"; then 1939fb59dabdSPeter Maydell # Now that we know that we're not printing the help and that 1940fb59dabdSPeter Maydell # the compiler works (so the results of the check_defines we used 1941fb59dabdSPeter Maydell # to identify the OS are reliable), if we didn't recognize the 1942fb59dabdSPeter Maydell # host OS we should stop now. 1943951fedfcSPeter Maydell error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 1944fb59dabdSPeter Maydellfi 1945fb59dabdSPeter Maydell 1946efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements: 1947efc6c070SThomas Huthcat > $TMPC << EOF 1948efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__) 1949efc6c070SThomas Huth# ifdef __apple_build_version__ 1950efc6c070SThomas Huth# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1) 1951efc6c070SThomas Huth# error You need at least XCode Clang v5.1 to compile QEMU 1952efc6c070SThomas Huth# endif 1953efc6c070SThomas Huth# else 1954efc6c070SThomas Huth# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4) 1955efc6c070SThomas Huth# error You need at least Clang v3.4 to compile QEMU 1956efc6c070SThomas Huth# endif 1957efc6c070SThomas Huth# endif 1958efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__) 1959efc6c070SThomas Huth# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) 1960efc6c070SThomas Huth# error You need at least GCC v4.8 to compile QEMU 1961efc6c070SThomas Huth# endif 1962efc6c070SThomas Huth#else 1963efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU 1964efc6c070SThomas Huth#endif 1965efc6c070SThomas Huthint main (void) { return 0; } 1966efc6c070SThomas HuthEOF 1967efc6c070SThomas Huthif ! compile_prog "" "" ; then 1968efc6c070SThomas Huth error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)" 1969efc6c070SThomas Huthfi 1970efc6c070SThomas Huth 197100849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately. 197200849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second. 197300849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all 197400849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would 197500849b92SRichard Henderson# just silently disable some features, so it's too error prone. 197600849b92SRichard Henderson 197700849b92SRichard Hendersonwarn_flags= 197800849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration 197900849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition 198000849b92SRichard Hendersonadd_to warn_flags -Wtype-limits 198100849b92SRichard Hendersonadd_to warn_flags -Wformat-security 198200849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k 198300849b92SRichard Hendersonadd_to warn_flags -Winit-self 198400849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers 198500849b92SRichard Hendersonadd_to warn_flags -Wempty-body 198600849b92SRichard Hendersonadd_to warn_flags -Wnested-externs 198700849b92SRichard Hendersonadd_to warn_flags -Wendif-labels 198800849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined 198900849b92SRichard Henderson 199000849b92SRichard Hendersonnowarn_flags= 199100849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides 199200849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs 199300849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value 199400849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int 199500849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition 1996aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare 1997bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi 199800849b92SRichard Henderson 199900849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags" 200093b25869SJohn Snow 200193b25869SJohn Snowcc_has_warning_flag() { 200293b25869SJohn Snow write_c_skeleton; 200393b25869SJohn Snow 2004a1d29d6cSPeter Maydell # Use the positive sense of the flag when testing for -Wno-wombat 2005a1d29d6cSPeter Maydell # support (gcc will happily accept the -Wno- form of unknown 2006a1d29d6cSPeter Maydell # warning options). 200793b25869SJohn Snow optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 200893b25869SJohn Snow compile_prog "-Werror $optflag" "" 200993b25869SJohn Snow} 201093b25869SJohn Snow 201193b25869SJohn Snowfor flag in $gcc_flags; do 201293b25869SJohn Snow if cc_has_warning_flag $flag ; then 20138d05095cSPaolo Bonzini QEMU_CFLAGS="$QEMU_CFLAGS $flag" 20148d05095cSPaolo Bonzini fi 20158d05095cSPaolo Bonzinidone 20168d05095cSPaolo Bonzini 201763678e17SSteven Noonanif test "$stack_protector" != "no"; then 2018fccd35a0SRodrigo Rebello cat > $TMPC << EOF 2019fccd35a0SRodrigo Rebelloint main(int argc, char *argv[]) 2020fccd35a0SRodrigo Rebello{ 2021fccd35a0SRodrigo Rebello char arr[64], *p = arr, *c = argv[0]; 2022fccd35a0SRodrigo Rebello while (*c) { 2023fccd35a0SRodrigo Rebello *p++ = *c++; 2024fccd35a0SRodrigo Rebello } 2025fccd35a0SRodrigo Rebello return 0; 2026fccd35a0SRodrigo Rebello} 2027fccd35a0SRodrigo RebelloEOF 202863678e17SSteven Noonan gcc_flags="-fstack-protector-strong -fstack-protector-all" 20293b463a3fSMiroslav Rezanina sp_on=0 203063678e17SSteven Noonan for flag in $gcc_flags; do 2031590e5dd9SPeter Maydell # We need to check both a compile and a link, since some compiler 2032590e5dd9SPeter Maydell # setups fail only on a .c->.o compile and some only at link time 2033086d5f75SPaolo Bonzini if compile_object "-Werror $flag" && 2034590e5dd9SPeter Maydell compile_prog "-Werror $flag" ""; then 203563678e17SSteven Noonan QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2036db5adeaaSPaolo Bonzini QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 20373b463a3fSMiroslav Rezanina sp_on=1 203863678e17SSteven Noonan break 203963678e17SSteven Noonan fi 204063678e17SSteven Noonan done 20413b463a3fSMiroslav Rezanina if test "$stack_protector" = yes; then 20423b463a3fSMiroslav Rezanina if test $sp_on = 0; then 20433b463a3fSMiroslav Rezanina error_exit "Stack protector not supported" 20443b463a3fSMiroslav Rezanina fi 20453b463a3fSMiroslav Rezanina fi 204637746c5eSMarc-André Lureaufi 204737746c5eSMarc-André Lureau 204820bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for 204920bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}. 205020bc94a2SPaolo Bonzinicat > $TMPC << EOF 205120bc94a2SPaolo Bonzinistruct { 205220bc94a2SPaolo Bonzini int a[2]; 205320bc94a2SPaolo Bonzini} x = {0}; 205420bc94a2SPaolo BonziniEOF 205520bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then 205620bc94a2SPaolo Bonzini : 205720bc94a2SPaolo Bonzinielse 205820bc94a2SPaolo Bonzini QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 205920bc94a2SPaolo Bonzinifi 206020bc94a2SPaolo Bonzini 206121e709aaSMarc-André Lureau# Our module code doesn't support Windows 206221e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then 206321e709aaSMarc-André Lureau error_exit "Modules are not available for Windows" 206421e709aaSMarc-André Lureaufi 206521e709aaSMarc-André Lureau 2066bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled 2067bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then 2068bd83c861SChristian Ehrhardt error_exit "Can't enable module-upgrades as Modules are not enabled" 2069bd83c861SChristian Ehrhardtfi 2070bd83c861SChristian Ehrhardt 2071d376e9deSThomas Huth# Static linking is not possible with modules or PIE 207240d6444eSAvi Kivityif test "$static" = "yes" ; then 2073aa0d1f44SPaolo Bonzini if test "$modules" = "yes" ; then 2074aa0d1f44SPaolo Bonzini error_exit "static and modules are mutually incompatible" 2075aa0d1f44SPaolo Bonzini fi 207640d6444eSAvi Kivityfi 207740d6444eSAvi Kivity 2078768b7855SEmilio G. Cota# Unconditional check for compiler __thread support 2079768b7855SEmilio G. Cota cat > $TMPC << EOF 2080768b7855SEmilio G. Cotastatic __thread int tls_var; 2081768b7855SEmilio G. Cotaint main(void) { return tls_var; } 2082768b7855SEmilio G. CotaEOF 2083768b7855SEmilio G. Cota 2084768b7855SEmilio G. Cotaif ! compile_prog "-Werror" "" ; then 2085768b7855SEmilio G. Cota error_exit "Your compiler does not support the __thread specifier for " \ 2086768b7855SEmilio G. Cota "Thread-Local Storage (TLS). Please upgrade to a version that does." 2087768b7855SEmilio G. Cotafi 2088768b7855SEmilio G. Cota 208940d6444eSAvi Kivitycat > $TMPC << EOF 209021d4a791SAvi Kivity 209121d4a791SAvi Kivity#ifdef __linux__ 209221d4a791SAvi Kivity# define THREAD __thread 209321d4a791SAvi Kivity#else 209421d4a791SAvi Kivity# define THREAD 209521d4a791SAvi Kivity#endif 209621d4a791SAvi Kivitystatic THREAD int tls_var; 209721d4a791SAvi Kivityint main(void) { return tls_var; } 209840d6444eSAvi KivityEOF 2099b2634124SRichard Henderson 2100b2634124SRichard Henderson# Check we support --no-pie first; we will need this for building ROMs. 2101412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then 2102412aeacdSAlex Bennée CFLAGS_NOPIE="-fno-pie" 2103b2634124SRichard Henderson LDFLAGS_NOPIE="-no-pie" 2104412aeacdSAlex Bennéefi 2105412aeacdSAlex Bennée 210612781462SRichard Hendersonif test "$static" = "yes"; then 2107eca7a8e6SRichard Henderson if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then 2108086d5f75SPaolo Bonzini CFLAGS="-fPIE -DPIE $CFLAGS" 210912781462SRichard Henderson QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS" 211012781462SRichard Henderson pie="yes" 211112781462SRichard Henderson elif test "$pie" = "yes"; then 211212781462SRichard Henderson error_exit "-static-pie not available due to missing toolchain support" 211312781462SRichard Henderson else 211412781462SRichard Henderson QEMU_LDFLAGS="-static $QEMU_LDFLAGS" 211512781462SRichard Henderson pie="no" 211612781462SRichard Henderson fi 211712781462SRichard Hendersonelif test "$pie" = "no"; then 2118086d5f75SPaolo Bonzini CFLAGS="$CFLAGS_NOPIE $CFLAGS" 2119086d5f75SPaolo Bonzini LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS" 2120eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then 2121086d5f75SPaolo Bonzini CFLAGS="-fPIE -DPIE $CFLAGS" 2122086d5f75SPaolo Bonzini LDFLAGS="-pie $LDFLAGS" 212340d6444eSAvi Kivity pie="yes" 21242c674109SRichard Hendersonelif test "$pie" = "yes"; then 212576ad07a4SPeter Maydell error_exit "PIE not available due to missing toolchain support" 212640d6444eSAvi Kivityelse 212740d6444eSAvi Kivity echo "Disabling PIE due to missing toolchain support" 212840d6444eSAvi Kivity pie="no" 212940d6444eSAvi Kivityfi 213040d6444eSAvi Kivity 2131e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW. 2132e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too. 2133e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 2134e6cbd751SRichard Henderson QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" 2135e6cbd751SRichard Hendersonfi 2136e6cbd751SRichard Henderson 213709dada40SPaolo Bonzini########################################## 213809dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains 213909dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit 214009dada40SPaolo Bonzini# specification is necessary 214109dada40SPaolo Bonzini 214209dada40SPaolo Bonziniif test "$cpu" = "i386"; then 214309dada40SPaolo Bonzini cat > $TMPC << EOF 214409dada40SPaolo Bonzinistatic int sfaa(int *ptr) 214509dada40SPaolo Bonzini{ 214609dada40SPaolo Bonzini return __sync_fetch_and_and(ptr, 0); 214709dada40SPaolo Bonzini} 214809dada40SPaolo Bonzini 214909dada40SPaolo Bonziniint main(void) 215009dada40SPaolo Bonzini{ 215109dada40SPaolo Bonzini int val = 42; 21521405b629SStefan Weil val = __sync_val_compare_and_swap(&val, 0, 1); 215309dada40SPaolo Bonzini sfaa(&val); 215409dada40SPaolo Bonzini return val; 215509dada40SPaolo Bonzini} 215609dada40SPaolo BonziniEOF 215709dada40SPaolo Bonzini if ! compile_prog "" "" ; then 215809dada40SPaolo Bonzini QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 215909dada40SPaolo Bonzini fi 216009dada40SPaolo Bonzinifi 216109dada40SPaolo Bonzini 216209dada40SPaolo Bonzini######################################### 2163ec530c81Sbellard# Solaris specific configure tool chain decisions 216409dada40SPaolo Bonzini 2165ec530c81Sbellardif test "$solaris" = "yes" ; then 21666792aa11SLoïc Minier if has ar; then 21676792aa11SLoïc Minier : 21686792aa11SLoïc Minier else 2169ec530c81Sbellard if test -f /usr/ccs/bin/ar ; then 217076ad07a4SPeter Maydell error_exit "No path includes ar" \ 217176ad07a4SPeter Maydell "Add /usr/ccs/bin to your path and rerun configure" 2172ec530c81Sbellard fi 217376ad07a4SPeter Maydell error_exit "No path includes ar" 2174ec530c81Sbellard fi 2175ec530c81Sbellardfi 2176ec530c81Sbellard 2177afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then 2178fdb75aefSPaolo Bonzini default_targets=yes 2179d880a3baSPaolo Bonzini for target in $default_target_list; do 2180d880a3baSPaolo Bonzini target_list="$target_list $target" 2181d880a3baSPaolo Bonzini done 2182d880a3baSPaolo Bonzini target_list="${target_list# }" 2183121afa9eSAnthony Liguorielse 2184fdb75aefSPaolo Bonzini default_targets=no 218589138857SStefan Weil target_list=$(echo "$target_list" | sed -e 's/,/ /g') 2186d880a3baSPaolo Bonzini for target in $target_list; do 218725b48338SPeter Maydell # Check that we recognised the target name; this allows a more 218825b48338SPeter Maydell # friendly error message than if we let it fall through. 218925b48338SPeter Maydell case " $default_target_list " in 219025b48338SPeter Maydell *" $target "*) 219125b48338SPeter Maydell ;; 219225b48338SPeter Maydell *) 219325b48338SPeter Maydell error_exit "Unknown target name '$target'" 219425b48338SPeter Maydell ;; 219525b48338SPeter Maydell esac 219625b48338SPeter Maydell done 2197d880a3baSPaolo Bonzinifi 219825b48338SPeter Maydell 2199fdb75aefSPaolo Bonzinifor target in $target_list; do 2200fdb75aefSPaolo Bonzini # if a deprecated target is enabled we note it here 2201fdb75aefSPaolo Bonzini if echo "$deprecated_targets_list" | grep -q "$target"; then 2202fdb75aefSPaolo Bonzini add_to deprecated_features $target 2203fdb75aefSPaolo Bonzini fi 2204fdb75aefSPaolo Bonzinidone 2205fdb75aefSPaolo Bonzini 2206f55fe278SPaolo Bonzini# see if system emulation was really requested 2207f55fe278SPaolo Bonzinicase " $target_list " in 2208f55fe278SPaolo Bonzini *"-softmmu "*) softmmu=yes 2209f55fe278SPaolo Bonzini ;; 2210f55fe278SPaolo Bonzini *) softmmu=no 2211f55fe278SPaolo Bonzini ;; 2212f55fe278SPaolo Bonziniesac 22135327cf48Sbellard 221405dfa22bSPhilippe Mathieu-Daudéfor target in $target_list; do 221505dfa22bSPhilippe Mathieu-Daudé case "$target" in 221605dfa22bSPhilippe Mathieu-Daudé arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu) 221705dfa22bSPhilippe Mathieu-Daudé edk2_blobs="yes" 221805dfa22bSPhilippe Mathieu-Daudé ;; 221905dfa22bSPhilippe Mathieu-Daudé esac 222005dfa22bSPhilippe Mathieu-Daudédone 2221623ef637SPhilippe Mathieu-Daudé# The EDK2 binaries are compressed with bzip2 2222623ef637SPhilippe Mathieu-Daudéif test "$edk2_blobs" = "yes" && ! has bzip2; then 2223623ef637SPhilippe Mathieu-Daudé error_exit "The bzip2 program is required for building QEMU" 2224623ef637SPhilippe Mathieu-Daudéfi 222505dfa22bSPhilippe Mathieu-Daudé 2226249247c9SJuan Quintelafeature_not_found() { 2227249247c9SJuan Quintela feature=$1 222821684af0SStewart Smith remedy=$2 2229249247c9SJuan Quintela 223076ad07a4SPeter Maydell error_exit "User requested feature $feature" \ 223121684af0SStewart Smith "configure was not able to find it." \ 223221684af0SStewart Smith "$remedy" 2233249247c9SJuan Quintela} 2234249247c9SJuan Quintela 22357d13299dSbellard# --- 22367d13299dSbellard# big/little endian test 22377d13299dSbellardcat > $TMPC << EOF 223861cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 223961cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 224061cc919fSMike Frysingerextern int foo(short *, short *); 224161cc919fSMike Frysingerint main(int argc, char *argv[]) { 224261cc919fSMike Frysinger return foo(big_endian, little_endian); 22437d13299dSbellard} 22447d13299dSbellardEOF 22457d13299dSbellard 224661cc919fSMike Frysingerif compile_object ; then 224712f15c91SAlice Frosi if strings -a $TMPO | grep -q BiGeNdIaN ; then 224861cc919fSMike Frysinger bigendian="yes" 224912f15c91SAlice Frosi elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then 225061cc919fSMike Frysinger bigendian="no" 22517d13299dSbellard else 22527d13299dSbellard echo big/little test failed 22537d13299dSbellard fi 22547d13299dSbellardelse 225561cc919fSMike Frysinger echo big/little test failed 22567d13299dSbellardfi 22577d13299dSbellard 2258b0a47e79SJuan Quintela########################################## 2259e10ee3f5SPhilippe Mathieu-Daudé# system tools 2260e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then 2261e10ee3f5SPhilippe Mathieu-Daudé if test "$softmmu" = "no"; then 2262e10ee3f5SPhilippe Mathieu-Daudé want_tools=no 2263e10ee3f5SPhilippe Mathieu-Daudé else 2264e10ee3f5SPhilippe Mathieu-Daudé want_tools=yes 2265e10ee3f5SPhilippe Mathieu-Daudé fi 2266e10ee3f5SPhilippe Mathieu-Daudéfi 2267e10ee3f5SPhilippe Mathieu-Daudé 2268e10ee3f5SPhilippe Mathieu-Daudé########################################## 2269a30878e7SPeter Maydell# cocoa implies not SDL or GTK 2270a30878e7SPeter Maydell# (the cocoa UI code currently assumes it is always the active UI 2271a30878e7SPeter Maydell# and doesn't interact well with other UI frontend code) 2272b4e312e9SPaolo Bonziniif test "$cocoa" = "enabled"; then 2273b4e312e9SPaolo Bonzini if test "$sdl" = "enabled"; then 2274a30878e7SPeter Maydell error_exit "Cocoa and SDL UIs cannot both be enabled at once" 2275a30878e7SPeter Maydell fi 2276a30878e7SPeter Maydell if test "$gtk" = "yes"; then 2277a30878e7SPeter Maydell error_exit "Cocoa and GTK UIs cannot both be enabled at once" 2278a30878e7SPeter Maydell fi 2279a30878e7SPeter Maydell gtk=no 228035be72baSPaolo Bonzini sdl=disabled 2281a30878e7SPeter Maydellfi 2282a30878e7SPeter Maydell 22836b39b063SEric Blake# Some versions of Mac OS X incorrectly define SIZE_MAX 22846b39b063SEric Blakecat > $TMPC << EOF 22856b39b063SEric Blake#include <stdint.h> 22866b39b063SEric Blake#include <stdio.h> 22876b39b063SEric Blakeint main(int argc, char *argv[]) { 22886b39b063SEric Blake return printf("%zu", SIZE_MAX); 22896b39b063SEric Blake} 22906b39b063SEric BlakeEOF 22916b39b063SEric Blakehave_broken_size_max=no 22926b39b063SEric Blakeif ! compile_object -Werror ; then 22936b39b063SEric Blake have_broken_size_max=yes 22946b39b063SEric Blakefi 22956b39b063SEric Blake 2296a30878e7SPeter Maydell########################################## 2297015a33bdSGonglei# L2TPV3 probe 2298015a33bdSGonglei 2299015a33bdSGongleicat > $TMPC <<EOF 2300015a33bdSGonglei#include <sys/socket.h> 2301bff6cb72SMichael Tokarev#include <linux/ip.h> 2302015a33bdSGongleiint main(void) { return sizeof(struct mmsghdr); } 2303015a33bdSGongleiEOF 2304015a33bdSGongleiif compile_prog "" "" ; then 2305015a33bdSGonglei l2tpv3=yes 2306015a33bdSGongleielse 2307015a33bdSGonglei l2tpv3=no 2308015a33bdSGongleifi 2309015a33bdSGonglei 2310c9c8b88fSDavid CARLIERif check_include "pty.h" ; then 2311c9c8b88fSDavid CARLIER pty_h=yes 2312c9c8b88fSDavid CARLIERelse 2313c9c8b88fSDavid CARLIER pty_h=no 2314c9c8b88fSDavid CARLIERfi 2315c9c8b88fSDavid CARLIER 2316195588ccSDavid CARLIERcat > $TMPC <<EOF 2317195588ccSDavid CARLIER#include <sys/mman.h> 2318195588ccSDavid CARLIERint main(int argc, char *argv[]) { 2319195588ccSDavid CARLIER return mlockall(MCL_FUTURE); 2320195588ccSDavid CARLIER} 2321195588ccSDavid CARLIEREOF 2322195588ccSDavid CARLIERif compile_prog "" "" ; then 2323195588ccSDavid CARLIER have_mlockall=yes 2324195588ccSDavid CARLIERelse 2325195588ccSDavid CARLIER have_mlockall=no 2326195588ccSDavid CARLIERfi 2327195588ccSDavid CARLIER 2328299e6f19SPaolo Bonzini######################################### 2329299e6f19SPaolo Bonzini# vhost interdependencies and host support 2330299e6f19SPaolo Bonzini 2331299e6f19SPaolo Bonzini# vhost backends 2332299e6f19SPaolo Bonzinitest "$vhost_user" = "" && vhost_user=yes 2333299e6f19SPaolo Bonziniif test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then 2334299e6f19SPaolo Bonzini error_exit "vhost-user isn't available on win32" 2335299e6f19SPaolo Bonzinifi 2336108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux 2337108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then 2338108a6481SCindy Lu error_exit "vhost-vdpa is only available on Linux" 2339108a6481SCindy Lufi 2340299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux 2341299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then 2342299e6f19SPaolo Bonzini error_exit "vhost-kernel is only available on Linux" 2343299e6f19SPaolo Bonzinifi 2344299e6f19SPaolo Bonzini 2345299e6f19SPaolo Bonzini# vhost-kernel devices 2346299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel 2347299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then 2348299e6f19SPaolo Bonzini error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" 2349299e6f19SPaolo Bonzinifi 2350299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel 2351299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then 2352299e6f19SPaolo Bonzini error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" 2353299e6f19SPaolo Bonzinifi 2354299e6f19SPaolo Bonzini 2355299e6f19SPaolo Bonzini# vhost-user backends 2356299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user 2357299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then 2358299e6f19SPaolo Bonzini error_exit "--enable-vhost-net-user requires --enable-vhost-user" 2359299e6f19SPaolo Bonzinifi 2360299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user 2361299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then 2362299e6f19SPaolo Bonzini error_exit "--enable-vhost-crypto requires --enable-vhost-user" 2363299e6f19SPaolo Bonzinifi 236498fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user 236598fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then 236698fc1adaSDr. David Alan Gilbert error_exit "--enable-vhost-user-fs requires --enable-vhost-user" 236798fc1adaSDr. David Alan Gilbertfi 2368108a6481SCindy Lu#vhost-vdpa backends 2369108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa 2370108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then 2371108a6481SCindy Lu error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" 2372108a6481SCindy Lufi 2373299e6f19SPaolo Bonzini 237440bc0ca9SLaurent Vivier# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity 2375299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then 2376299e6f19SPaolo Bonzini test "$vhost_net_user" = "yes" && vhost_net=yes 237740bc0ca9SLaurent Vivier test "$vhost_net_vdpa" = "yes" && vhost_net=yes 2378299e6f19SPaolo Bonzini test "$vhost_kernel" = "yes" && vhost_net=yes 2379299e6f19SPaolo Bonzinifi 2380299e6f19SPaolo Bonzini 2381015a33bdSGonglei########################################## 23824d9310f4SDaniel P. Berrange# MinGW / Mingw-w64 localtime_r/gmtime_r check 23834d9310f4SDaniel P. Berrange 23844d9310f4SDaniel P. Berrangeif test "$mingw32" = "yes"; then 23854d9310f4SDaniel P. Berrange # Some versions of MinGW / Mingw-w64 lack localtime_r 23864d9310f4SDaniel P. Berrange # and gmtime_r entirely. 23874d9310f4SDaniel P. Berrange # 23884d9310f4SDaniel P. Berrange # Some versions of Mingw-w64 define a macro for 23894d9310f4SDaniel P. Berrange # localtime_r/gmtime_r. 23904d9310f4SDaniel P. Berrange # 23914d9310f4SDaniel P. Berrange # Some versions of Mingw-w64 will define functions 23924d9310f4SDaniel P. Berrange # for localtime_r/gmtime_r, but only if you have 23934d9310f4SDaniel P. Berrange # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun 23944d9310f4SDaniel P. Berrange # though, unistd.h and pthread.h both define 23954d9310f4SDaniel P. Berrange # that for you. 23964d9310f4SDaniel P. Berrange # 23974d9310f4SDaniel P. Berrange # So this #undef localtime_r and #include <unistd.h> 23984d9310f4SDaniel P. Berrange # are not in fact redundant. 23994d9310f4SDaniel P. Berrangecat > $TMPC << EOF 24004d9310f4SDaniel P. Berrange#include <unistd.h> 24014d9310f4SDaniel P. Berrange#include <time.h> 24024d9310f4SDaniel P. Berrange#undef localtime_r 24034d9310f4SDaniel P. Berrangeint main(void) { localtime_r(NULL, NULL); return 0; } 24044d9310f4SDaniel P. BerrangeEOF 24054d9310f4SDaniel P. Berrange if compile_prog "" "" ; then 24064d9310f4SDaniel P. Berrange localtime_r="yes" 24074d9310f4SDaniel P. Berrange else 24084d9310f4SDaniel P. Berrange localtime_r="no" 24094d9310f4SDaniel P. Berrange fi 24104d9310f4SDaniel P. Berrangefi 24114d9310f4SDaniel P. Berrange 24124d9310f4SDaniel P. Berrange########################################## 2413779ab5e3SStefan Weil# pkg-config probe 2414779ab5e3SStefan Weil 2415779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then 241676ad07a4SPeter Maydell error_exit "pkg-config binary '$pkg_config_exe' not found" 2417779ab5e3SStefan Weilfi 2418779ab5e3SStefan Weil 2419779ab5e3SStefan Weil########################################## 2420b0a47e79SJuan Quintela# NPTL probe 2421b0a47e79SJuan Quintela 242224cb36a6SPeter Maydellif test "$linux_user" = "yes"; then 2423bd0c5661Spbrook cat > $TMPC <<EOF 2424bd0c5661Spbrook#include <sched.h> 242530813ceaSpbrook#include <linux/futex.h> 2426182eacc0SStefan Weilint main(void) { 2427bd0c5661Spbrook#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2428bd0c5661Spbrook#error bork 2429bd0c5661Spbrook#endif 2430182eacc0SStefan Weil return 0; 2431bd0c5661Spbrook} 2432bd0c5661SpbrookEOF 243324cb36a6SPeter Maydell if ! compile_object ; then 243421684af0SStewart Smith feature_not_found "nptl" "Install glibc and linux kernel headers." 2435b0a47e79SJuan Quintela fi 2436bd0c5661Spbrookfi 2437bd0c5661Spbrook 2438ac62922eSbalrog########################################## 2439607dacd0Sqiaonuohan# lzo check 2440607dacd0Sqiaonuohan 2441607dacd0Sqiaonuohanif test "$lzo" != "no" ; then 2442607dacd0Sqiaonuohan cat > $TMPC << EOF 2443607dacd0Sqiaonuohan#include <lzo/lzo1x.h> 2444607dacd0Sqiaonuohanint main(void) { lzo_version(); return 0; } 2445607dacd0SqiaonuohanEOF 2446607dacd0Sqiaonuohan if compile_prog "" "-llzo2" ; then 2447708eab42SMarc-André Lureau lzo_libs="-llzo2" 2448b25c9dffSStefan Weil lzo="yes" 2449b25c9dffSStefan Weil else 2450b25c9dffSStefan Weil if test "$lzo" = "yes"; then 2451b25c9dffSStefan Weil feature_not_found "liblzo2" "Install liblzo2 devel" 2452b25c9dffSStefan Weil fi 2453b25c9dffSStefan Weil lzo="no" 2454b25c9dffSStefan Weil fi 2455607dacd0Sqiaonuohanfi 2456607dacd0Sqiaonuohan 2457607dacd0Sqiaonuohan########################################## 2458607dacd0Sqiaonuohan# snappy check 2459607dacd0Sqiaonuohan 2460607dacd0Sqiaonuohanif test "$snappy" != "no" ; then 2461607dacd0Sqiaonuohan cat > $TMPC << EOF 2462607dacd0Sqiaonuohan#include <snappy-c.h> 2463607dacd0Sqiaonuohanint main(void) { snappy_max_compressed_length(4096); return 0; } 2464607dacd0SqiaonuohanEOF 2465607dacd0Sqiaonuohan if compile_prog "" "-lsnappy" ; then 2466708eab42SMarc-André Lureau snappy_libs='-lsnappy' 2467b25c9dffSStefan Weil snappy="yes" 2468b25c9dffSStefan Weil else 2469b25c9dffSStefan Weil if test "$snappy" = "yes"; then 2470b25c9dffSStefan Weil feature_not_found "libsnappy" "Install libsnappy devel" 2471b25c9dffSStefan Weil fi 2472b25c9dffSStefan Weil snappy="no" 2473b25c9dffSStefan Weil fi 2474607dacd0Sqiaonuohanfi 2475607dacd0Sqiaonuohan 2476607dacd0Sqiaonuohan########################################## 24776b383c08SPeter Wu# bzip2 check 24786b383c08SPeter Wu 24796b383c08SPeter Wuif test "$bzip2" != "no" ; then 24806b383c08SPeter Wu cat > $TMPC << EOF 24816b383c08SPeter Wu#include <bzlib.h> 24826b383c08SPeter Wuint main(void) { BZ2_bzlibVersion(); return 0; } 24836b383c08SPeter WuEOF 24846b383c08SPeter Wu if compile_prog "" "-lbz2" ; then 24856b383c08SPeter Wu bzip2="yes" 24866b383c08SPeter Wu else 24876b383c08SPeter Wu if test "$bzip2" = "yes"; then 24886b383c08SPeter Wu feature_not_found "libbzip2" "Install libbzip2 devel" 24896b383c08SPeter Wu fi 24906b383c08SPeter Wu bzip2="no" 24916b383c08SPeter Wu fi 24926b383c08SPeter Wufi 24936b383c08SPeter Wu 24946b383c08SPeter Wu########################################## 249583bc1f97SJulio Faracco# lzfse check 249683bc1f97SJulio Faracco 249783bc1f97SJulio Faraccoif test "$lzfse" != "no" ; then 249883bc1f97SJulio Faracco cat > $TMPC << EOF 249983bc1f97SJulio Faracco#include <lzfse.h> 250083bc1f97SJulio Faraccoint main(void) { lzfse_decode_scratch_size(); return 0; } 250183bc1f97SJulio FaraccoEOF 250283bc1f97SJulio Faracco if compile_prog "" "-llzfse" ; then 250383bc1f97SJulio Faracco lzfse="yes" 250483bc1f97SJulio Faracco else 250583bc1f97SJulio Faracco if test "$lzfse" = "yes"; then 250683bc1f97SJulio Faracco feature_not_found "lzfse" "Install lzfse devel" 250783bc1f97SJulio Faracco fi 250883bc1f97SJulio Faracco lzfse="no" 250983bc1f97SJulio Faracco fi 251083bc1f97SJulio Faraccofi 251183bc1f97SJulio Faracco 251283bc1f97SJulio Faracco########################################## 25133a678481SJuan Quintela# zstd check 25143a678481SJuan Quintela 25153a678481SJuan Quintelaif test "$zstd" != "no" ; then 2516297254c7SJuan Quintela libzstd_minver="1.4.0" 2517297254c7SJuan Quintela if $pkg_config --atleast-version=$libzstd_minver libzstd ; then 25183a678481SJuan Quintela zstd_cflags="$($pkg_config --cflags libzstd)" 25193a678481SJuan Quintela zstd_libs="$($pkg_config --libs libzstd)" 25203a678481SJuan Quintela zstd="yes" 25213a678481SJuan Quintela else 25223a678481SJuan Quintela if test "$zstd" = "yes" ; then 25233a678481SJuan Quintela feature_not_found "libzstd" "Install libzstd devel" 25243a678481SJuan Quintela fi 25253a678481SJuan Quintela zstd="no" 25263a678481SJuan Quintela fi 25273a678481SJuan Quintelafi 25283a678481SJuan Quintela 25293a678481SJuan Quintela########################################## 2530f794573eSEduardo Otubo# libseccomp check 2531f794573eSEduardo Otubo 2532f794573eSEduardo Otuboif test "$seccomp" != "no" ; then 25333e684455SMichael Strosaker libseccomp_minver="2.3.0" 253425ed0eccSHelge Deller if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2535c3883e1fSFam Zheng seccomp_cflags="$($pkg_config --cflags libseccomp)" 2536c3883e1fSFam Zheng seccomp_libs="$($pkg_config --libs libseccomp)" 2537f794573eSEduardo Otubo seccomp="yes" 2538f794573eSEduardo Otubo else 2539f794573eSEduardo Otubo if test "$seccomp" = "yes" ; then 2540693e5910SAndrew Jones feature_not_found "libseccomp" \ 2541693e5910SAndrew Jones "Install libseccomp devel >= $libseccomp_minver" 2542896848f0SEduardo Otubo fi 2543e84d5956SYann E. MORIN seccomp="no" 2544f794573eSEduardo Otubo fi 2545f794573eSEduardo Otubofi 25463bd40ec7SPaolo Bonzini 25473bd40ec7SPaolo Bonzini########################################## 2548e37630caSaliguori# xen probe 2549e37630caSaliguori 25501badb709SPaolo Bonziniif test "$xen" != "disabled" ; then 2551c1cdd9d5SJuergen Gross # Check whether Xen library path is specified via --extra-ldflags to avoid 2552c1cdd9d5SJuergen Gross # overriding this setting with pkg-config output. If not, try pkg-config 2553c1cdd9d5SJuergen Gross # to obtain all needed flags. 2554c1cdd9d5SJuergen Gross 2555c1cdd9d5SJuergen Gross if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2556c1cdd9d5SJuergen Gross $pkg_config --exists xencontrol ; then 2557c1cdd9d5SJuergen Gross xen_ctrl_version="$(printf '%d%02d%02d' \ 2558c1cdd9d5SJuergen Gross $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 25591badb709SPaolo Bonzini xen=enabled 2560c1cdd9d5SJuergen Gross xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" 2561c1cdd9d5SJuergen Gross xen_pc="$xen_pc xenevtchn xendevicemodel" 256258ea9a7aSAnthony PERARD if $pkg_config --exists xentoolcore; then 256358ea9a7aSAnthony PERARD xen_pc="$xen_pc xentoolcore" 256458ea9a7aSAnthony PERARD fi 2565582ea95fSMarc-André Lureau xen_cflags="$($pkg_config --cflags $xen_pc)" 2566582ea95fSMarc-André Lureau xen_libs="$($pkg_config --libs $xen_pc)" 2567c1cdd9d5SJuergen Gross else 2568c1cdd9d5SJuergen Gross 2569b2266beeSJuan Quintela xen_libs="-lxenstore -lxenctrl -lxenguest" 2570d9506cabSAnthony PERARD xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2571d5b93ddfSAnthony PERARD 257250ced5b3SStefan Weil # First we test whether Xen headers and libraries are available. 257350ced5b3SStefan Weil # If no, we are done and there is no Xen support. 257450ced5b3SStefan Weil # If yes, more tests are run to detect the Xen version. 257550ced5b3SStefan Weil 257650ced5b3SStefan Weil # Xen (any) 257750ced5b3SStefan Weil cat > $TMPC <<EOF 257850ced5b3SStefan Weil#include <xenctrl.h> 257950ced5b3SStefan Weilint main(void) { 258050ced5b3SStefan Weil return 0; 258150ced5b3SStefan Weil} 258250ced5b3SStefan WeilEOF 258350ced5b3SStefan Weil if ! compile_prog "" "$xen_libs" ; then 258450ced5b3SStefan Weil # Xen not found 25851badb709SPaolo Bonzini if test "$xen" = "enabled" ; then 258621684af0SStewart Smith feature_not_found "xen" "Install xen devel" 258750ced5b3SStefan Weil fi 25881badb709SPaolo Bonzini xen=disabled 258950ced5b3SStefan Weil 2590d5b93ddfSAnthony PERARD # Xen unstable 259169deef08SPeter Maydell elif 259269deef08SPeter Maydell cat > $TMPC <<EOF && 25932cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API 25942cbf8903SRoss Lagerwall#define __XEN_TOOLS__ 25952cbf8903SRoss Lagerwall#include <xendevicemodel.h> 2596d3c49ebbSPaul Durrant#include <xenforeignmemory.h> 25972cbf8903SRoss Lagerwallint main(void) { 25982cbf8903SRoss Lagerwall xendevicemodel_handle *xd; 2599d3c49ebbSPaul Durrant xenforeignmemory_handle *xfmem; 26002cbf8903SRoss Lagerwall 26012cbf8903SRoss Lagerwall xd = xendevicemodel_open(0, 0); 26022cbf8903SRoss Lagerwall xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 26032cbf8903SRoss Lagerwall 2604d3c49ebbSPaul Durrant xfmem = xenforeignmemory_open(0, 0); 2605d3c49ebbSPaul Durrant xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2606d3c49ebbSPaul Durrant 26072cbf8903SRoss Lagerwall return 0; 26082cbf8903SRoss Lagerwall} 26092cbf8903SRoss LagerwallEOF 26102cbf8903SRoss Lagerwall compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 26112cbf8903SRoss Lagerwall then 26122cbf8903SRoss Lagerwall xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 26132cbf8903SRoss Lagerwall xen_ctrl_version=41100 26141badb709SPaolo Bonzini xen=enabled 26152cbf8903SRoss Lagerwall elif 26162cbf8903SRoss Lagerwall cat > $TMPC <<EOF && 26175ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API 26185ba3d756SIgor Druzhinin#include <xenforeignmemory.h> 261958ea9a7aSAnthony PERARD#include <xentoolcore.h> 26205ba3d756SIgor Druzhininint main(void) { 26215ba3d756SIgor Druzhinin xenforeignmemory_handle *xfmem; 26225ba3d756SIgor Druzhinin 26235ba3d756SIgor Druzhinin xfmem = xenforeignmemory_open(0, 0); 26245ba3d756SIgor Druzhinin xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 262558ea9a7aSAnthony PERARD xentoolcore_restrict_all(0); 26265ba3d756SIgor Druzhinin 26275ba3d756SIgor Druzhinin return 0; 26285ba3d756SIgor Druzhinin} 26295ba3d756SIgor DruzhininEOF 263058ea9a7aSAnthony PERARD compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 26315ba3d756SIgor Druzhinin then 263258ea9a7aSAnthony PERARD xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 26335ba3d756SIgor Druzhinin xen_ctrl_version=41000 26341badb709SPaolo Bonzini xen=enabled 26355ba3d756SIgor Druzhinin elif 26365ba3d756SIgor Druzhinin cat > $TMPC <<EOF && 2637da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API 2638da8090ccSPaul Durrant#define __XEN_TOOLS__ 2639da8090ccSPaul Durrant#include <xendevicemodel.h> 2640da8090ccSPaul Durrantint main(void) { 2641da8090ccSPaul Durrant xendevicemodel_handle *xd; 2642da8090ccSPaul Durrant 2643da8090ccSPaul Durrant xd = xendevicemodel_open(0, 0); 2644da8090ccSPaul Durrant xendevicemodel_close(xd); 2645da8090ccSPaul Durrant 2646da8090ccSPaul Durrant return 0; 2647da8090ccSPaul Durrant} 2648da8090ccSPaul DurrantEOF 2649da8090ccSPaul Durrant compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2650da8090ccSPaul Durrant then 2651da8090ccSPaul Durrant xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2652f1167ee6SJuergen Gross xen_ctrl_version=40900 26531badb709SPaolo Bonzini xen=enabled 2654da8090ccSPaul Durrant elif 2655da8090ccSPaul Durrant cat > $TMPC <<EOF && 26565eeb39c2SIan Campbell/* 26575eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat 26585eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given. 2659b6eb9b45SPaulina Szubarczyk * 2660b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and 2661b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented. 2662b6eb9b45SPaulina Szubarczyk */ 2663b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API 2664b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API 2665b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2666b6eb9b45SPaulina Szubarczyk#include <xenctrl.h> 2667b6eb9b45SPaulina Szubarczyk#include <xenstore.h> 2668b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h> 2669b6eb9b45SPaulina Szubarczyk#include <xengnttab.h> 2670b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h> 2671b6eb9b45SPaulina Szubarczyk#include <stdint.h> 2672b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h> 2673b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS) 2674b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined 2675b6eb9b45SPaulina Szubarczyk#endif 2676b6eb9b45SPaulina Szubarczykint main(void) { 2677b6eb9b45SPaulina Szubarczyk xc_interface *xc = NULL; 2678b6eb9b45SPaulina Szubarczyk xenforeignmemory_handle *xfmem; 2679b6eb9b45SPaulina Szubarczyk xenevtchn_handle *xe; 2680b6eb9b45SPaulina Szubarczyk xengnttab_handle *xg; 2681b6eb9b45SPaulina Szubarczyk xengnttab_grant_copy_segment_t* seg = NULL; 2682b6eb9b45SPaulina Szubarczyk 2683b6eb9b45SPaulina Szubarczyk xs_daemon_open(); 2684b6eb9b45SPaulina Szubarczyk 2685b6eb9b45SPaulina Szubarczyk xc = xc_interface_open(0, 0, 0); 2686b6eb9b45SPaulina Szubarczyk xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2687b6eb9b45SPaulina Szubarczyk xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2688b6eb9b45SPaulina Szubarczyk xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2689b6eb9b45SPaulina Szubarczyk xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2690b6eb9b45SPaulina Szubarczyk 2691b6eb9b45SPaulina Szubarczyk xfmem = xenforeignmemory_open(0, 0); 2692b6eb9b45SPaulina Szubarczyk xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2693b6eb9b45SPaulina Szubarczyk 2694b6eb9b45SPaulina Szubarczyk xe = xenevtchn_open(0, 0); 2695b6eb9b45SPaulina Szubarczyk xenevtchn_fd(xe); 2696b6eb9b45SPaulina Szubarczyk 2697b6eb9b45SPaulina Szubarczyk xg = xengnttab_open(0, 0); 2698b6eb9b45SPaulina Szubarczyk xengnttab_grant_copy(xg, 0, seg); 2699b6eb9b45SPaulina Szubarczyk 2700b6eb9b45SPaulina Szubarczyk return 0; 2701b6eb9b45SPaulina Szubarczyk} 2702b6eb9b45SPaulina SzubarczykEOF 2703b6eb9b45SPaulina Szubarczyk compile_prog "" "$xen_libs $xen_stable_libs" 2704b6eb9b45SPaulina Szubarczyk then 2705f1167ee6SJuergen Gross xen_ctrl_version=40800 27061badb709SPaolo Bonzini xen=enabled 2707b6eb9b45SPaulina Szubarczyk elif 2708b6eb9b45SPaulina Szubarczyk cat > $TMPC <<EOF && 2709b6eb9b45SPaulina Szubarczyk/* 2710b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat 2711b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given. 27125eeb39c2SIan Campbell */ 27135eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API 27145eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API 27155eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API 27165eeb39c2SIan Campbell#include <xenctrl.h> 27175eeb39c2SIan Campbell#include <xenstore.h> 27185eeb39c2SIan Campbell#include <xenevtchn.h> 27195eeb39c2SIan Campbell#include <xengnttab.h> 27205eeb39c2SIan Campbell#include <xenforeignmemory.h> 27215eeb39c2SIan Campbell#include <stdint.h> 27225eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h> 27235eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS) 27245eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined 27255eeb39c2SIan Campbell#endif 27265eeb39c2SIan Campbellint main(void) { 27275eeb39c2SIan Campbell xc_interface *xc = NULL; 27285eeb39c2SIan Campbell xenforeignmemory_handle *xfmem; 27295eeb39c2SIan Campbell xenevtchn_handle *xe; 27305eeb39c2SIan Campbell xengnttab_handle *xg; 27315eeb39c2SIan Campbell 27325eeb39c2SIan Campbell xs_daemon_open(); 27335eeb39c2SIan Campbell 27345eeb39c2SIan Campbell xc = xc_interface_open(0, 0, 0); 27355eeb39c2SIan Campbell xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 27365eeb39c2SIan Campbell xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 27375eeb39c2SIan Campbell xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 27385eeb39c2SIan Campbell xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 27395eeb39c2SIan Campbell 27405eeb39c2SIan Campbell xfmem = xenforeignmemory_open(0, 0); 27415eeb39c2SIan Campbell xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 27425eeb39c2SIan Campbell 27435eeb39c2SIan Campbell xe = xenevtchn_open(0, 0); 27445eeb39c2SIan Campbell xenevtchn_fd(xe); 27455eeb39c2SIan Campbell 27465eeb39c2SIan Campbell xg = xengnttab_open(0, 0); 27475eeb39c2SIan Campbell xengnttab_map_grant_ref(xg, 0, 0, 0); 27485eeb39c2SIan Campbell 27495eeb39c2SIan Campbell return 0; 27505eeb39c2SIan Campbell} 27515eeb39c2SIan CampbellEOF 27525eeb39c2SIan Campbell compile_prog "" "$xen_libs $xen_stable_libs" 27535eeb39c2SIan Campbell then 2754f1167ee6SJuergen Gross xen_ctrl_version=40701 27551badb709SPaolo Bonzini xen=enabled 2756cdadde39SRoger Pau Monne 2757cdadde39SRoger Pau Monne # Xen 4.6 2758cdadde39SRoger Pau Monne elif 2759cdadde39SRoger Pau Monne cat > $TMPC <<EOF && 2760cdadde39SRoger Pau Monne#include <xenctrl.h> 2761e108a3c1SAnthony PERARD#include <xenstore.h> 2762d5b93ddfSAnthony PERARD#include <stdint.h> 2763d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h> 2764d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS) 2765d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined 2766d5b93ddfSAnthony PERARD#endif 2767d5b93ddfSAnthony PERARDint main(void) { 2768d5b93ddfSAnthony PERARD xc_interface *xc; 2769d5b93ddfSAnthony PERARD xs_daemon_open(); 2770d5b93ddfSAnthony PERARD xc = xc_interface_open(0, 0, 0); 2771d5b93ddfSAnthony PERARD xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2772d5b93ddfSAnthony PERARD xc_gnttab_open(NULL, 0); 2773b87de24eSAnthony PERARD xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 27748688e065SStefano Stabellini xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2775d8b441a3SJan Beulich xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 277620a544c7SKonrad Rzeszutek Wilk xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2777d8b441a3SJan Beulich return 0; 2778d8b441a3SJan Beulich} 2779d8b441a3SJan BeulichEOF 2780d8b441a3SJan Beulich compile_prog "" "$xen_libs" 2781d8b441a3SJan Beulich then 2782f1167ee6SJuergen Gross xen_ctrl_version=40600 27831badb709SPaolo Bonzini xen=enabled 2784d8b441a3SJan Beulich 2785d8b441a3SJan Beulich # Xen 4.5 2786d8b441a3SJan Beulich elif 2787d8b441a3SJan Beulich cat > $TMPC <<EOF && 2788d8b441a3SJan Beulich#include <xenctrl.h> 2789d8b441a3SJan Beulich#include <xenstore.h> 2790d8b441a3SJan Beulich#include <stdint.h> 2791d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h> 2792d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS) 2793d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined 2794d8b441a3SJan Beulich#endif 2795d8b441a3SJan Beulichint main(void) { 2796d8b441a3SJan Beulich xc_interface *xc; 2797d8b441a3SJan Beulich xs_daemon_open(); 2798d8b441a3SJan Beulich xc = xc_interface_open(0, 0, 0); 2799d8b441a3SJan Beulich xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2800d8b441a3SJan Beulich xc_gnttab_open(NULL, 0); 2801d8b441a3SJan Beulich xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2802d8b441a3SJan Beulich xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 28033996e85cSPaul Durrant xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 28043996e85cSPaul Durrant return 0; 28053996e85cSPaul Durrant} 28063996e85cSPaul DurrantEOF 28073996e85cSPaul Durrant compile_prog "" "$xen_libs" 28083996e85cSPaul Durrant then 2809f1167ee6SJuergen Gross xen_ctrl_version=40500 28101badb709SPaolo Bonzini xen=enabled 28113996e85cSPaul Durrant 28123996e85cSPaul Durrant elif 28133996e85cSPaul Durrant cat > $TMPC <<EOF && 28143996e85cSPaul Durrant#include <xenctrl.h> 28153996e85cSPaul Durrant#include <xenstore.h> 28163996e85cSPaul Durrant#include <stdint.h> 28173996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h> 28183996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS) 28193996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined 28203996e85cSPaul Durrant#endif 28213996e85cSPaul Durrantint main(void) { 28223996e85cSPaul Durrant xc_interface *xc; 28233996e85cSPaul Durrant xs_daemon_open(); 28243996e85cSPaul Durrant xc = xc_interface_open(0, 0, 0); 28253996e85cSPaul Durrant xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 28263996e85cSPaul Durrant xc_gnttab_open(NULL, 0); 28273996e85cSPaul Durrant xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 28283996e85cSPaul Durrant xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 28298688e065SStefano Stabellini return 0; 28308688e065SStefano Stabellini} 28318688e065SStefano StabelliniEOF 28328688e065SStefano Stabellini compile_prog "" "$xen_libs" 283369deef08SPeter Maydell then 2834f1167ee6SJuergen Gross xen_ctrl_version=40200 28351badb709SPaolo Bonzini xen=enabled 28368688e065SStefano Stabellini 2837e37630caSaliguori else 28381badb709SPaolo Bonzini if test "$xen" = "enabled" ; then 2839edfb07edSIan Campbell feature_not_found "xen (unsupported version)" \ 2840edfb07edSIan Campbell "Install a supported xen (xen 4.2 or newer)" 2841fc321b4bSJuan Quintela fi 28421badb709SPaolo Bonzini xen=disabled 2843e37630caSaliguori fi 2844d5b93ddfSAnthony PERARD 28451badb709SPaolo Bonzini if test "$xen" = enabled; then 2846f1167ee6SJuergen Gross if test $xen_ctrl_version -ge 40701 ; then 2847582ea95fSMarc-André Lureau xen_libs="$xen_libs $xen_stable_libs " 28485eeb39c2SIan Campbell fi 2849d5b93ddfSAnthony PERARD fi 2850e37630caSaliguori fi 2851c1cdd9d5SJuergen Grossfi 2852e37630caSaliguori 28531badb709SPaolo Bonziniif test "$xen_pci_passthrough" != "disabled"; then 28541badb709SPaolo Bonzini if test "$xen" = "enabled" && test "$linux" = "yes"; then 28551badb709SPaolo Bonzini xen_pci_passthrough=enabled 2856eb6fda0fSAnthony PERARD else 28571badb709SPaolo Bonzini if test "$xen_pci_passthrough" = "enabled"; then 285876ad07a4SPeter Maydell error_exit "User requested feature Xen PCI Passthrough" \ 285976ad07a4SPeter Maydell " but this feature requires /sys from Linux" 2860eb6fda0fSAnthony PERARD fi 28611badb709SPaolo Bonzini xen_pci_passthrough=disabled 2862eb6fda0fSAnthony PERARD fi 2863eb6fda0fSAnthony PERARDfi 2864eb6fda0fSAnthony PERARD 2865e37630caSaliguori########################################## 2866e8f3bd71SMarc-André Lureau# gettext probe 2867e8f3bd71SMarc-André Lureauif test "$gettext" != "false" ; then 2868e8f3bd71SMarc-André Lureau if has xgettext; then 2869e8f3bd71SMarc-André Lureau gettext=true 2870e8f3bd71SMarc-André Lureau else 2871e8f3bd71SMarc-André Lureau if test "$gettext" = "true" ; then 2872e8f3bd71SMarc-André Lureau feature_not_found "gettext" "Install xgettext binary" 2873e8f3bd71SMarc-André Lureau fi 2874e8f3bd71SMarc-André Lureau gettext=false 2875e8f3bd71SMarc-André Lureau fi 2876e8f3bd71SMarc-André Lureaufi 2877e8f3bd71SMarc-André Lureau 2878e8f3bd71SMarc-André Lureau########################################## 2879f676c67eSJeremy White# X11 probe 2880f676c67eSJeremy Whiteif $pkg_config --exists "x11"; then 28818781595bSGerd Hoffmann have_x11=yes 288289138857SStefan Weil x11_cflags=$($pkg_config --cflags x11) 288389138857SStefan Weil x11_libs=$($pkg_config --libs x11) 2884f676c67eSJeremy Whitefi 2885f676c67eSJeremy White 2886f676c67eSJeremy White########################################## 2887a4ccabcfSAnthony Liguori# GTK probe 2888a4ccabcfSAnthony Liguori 28895a464e6cSPeter Xuif test "$gtk" != "no"; then 289089d85cdeSDaniel P. Berrangé gtkpackage="gtk+-3.0" 289189d85cdeSDaniel P. Berrangé gtkx11package="gtk+-x11-3.0" 28927b23d121SVolker Rümelin gtkversion="3.22.0" 2893bbbf9bfbSStefan Weil if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 289489138857SStefan Weil gtk_cflags=$($pkg_config --cflags $gtkpackage) 289589138857SStefan Weil gtk_libs=$($pkg_config --libs $gtkpackage) 289689138857SStefan Weil gtk_version=$($pkg_config --modversion $gtkpackage) 28970a337ed0SGerd Hoffmann if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 28988781595bSGerd Hoffmann need_x11=yes 2899f676c67eSJeremy White gtk_cflags="$gtk_cflags $x11_cflags" 2900f676c67eSJeremy White gtk_libs="$gtk_libs $x11_libs" 29010a337ed0SGerd Hoffmann fi 2902bbbf9bfbSStefan Weil gtk="yes" 2903bbbf9bfbSStefan Weil elif test "$gtk" = "yes"; then 29045fe309ffSGerd Hoffmann feature_not_found "gtk" "Install gtk3-devel" 2905bbbf9bfbSStefan Weil else 2906bbbf9bfbSStefan Weil gtk="no" 2907bbbf9bfbSStefan Weil fi 2908bbbf9bfbSStefan Weilfi 2909bbbf9bfbSStefan Weil 2910ddbb0d09SDaniel P. Berrange 2911ddbb0d09SDaniel P. Berrange########################################## 2912ddbb0d09SDaniel P. Berrange# GNUTLS probe 2913ddbb0d09SDaniel P. Berrange 2914ddbb0d09SDaniel P. Berrangeif test "$gnutls" != "no"; then 2915a73e82efSRichard Henderson pass="no" 2916a0722409SDaniel P. Berrangé if $pkg_config --exists "gnutls >= 3.1.18"; then 291789138857SStefan Weil gnutls_cflags=$($pkg_config --cflags gnutls) 291889138857SStefan Weil gnutls_libs=$($pkg_config --libs gnutls) 2919a73e82efSRichard Henderson # Packaging for the static libraries is not always correct. 2920a73e82efSRichard Henderson # At least ubuntu 18.04 ships only shared libraries. 2921a73e82efSRichard Henderson write_c_skeleton 2922a73e82efSRichard Henderson if compile_prog "" "$gnutls_libs" ; then 2923a73e82efSRichard Henderson pass="yes" 2924a73e82efSRichard Henderson fi 2925a73e82efSRichard Henderson fi 2926a73e82efSRichard Henderson if test "$pass" = "no" && test "$gnutls" = "yes"; then 2927a0722409SDaniel P. Berrangé feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" 2928ddbb0d09SDaniel P. Berrange else 2929a73e82efSRichard Henderson gnutls="$pass" 2930ddbb0d09SDaniel P. Berrange fi 2931ddbb0d09SDaniel P. Berrangefi 2932ddbb0d09SDaniel P. Berrange 293391bfcdb0SDaniel P. Berrange 293491bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-gcrypt flag, 293591bfcdb0SDaniel P. Berrange# then mark as disabled if user requested nettle 2936a0722409SDaniel P. Berrangé# explicitly 293791bfcdb0SDaniel P. Berrangeif test -z "$gcrypt" 293891bfcdb0SDaniel P. Berrangethen 2939a0722409SDaniel P. Berrangé if test "$nettle" = "yes" 294091bfcdb0SDaniel P. Berrange then 294191bfcdb0SDaniel P. Berrange gcrypt="no" 294291bfcdb0SDaniel P. Berrange fi 294391bfcdb0SDaniel P. Berrangefi 294491bfcdb0SDaniel P. Berrange 294591bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-nettle flag, 294691bfcdb0SDaniel P. Berrange# then mark as disabled if user requested gcrypt 2947a0722409SDaniel P. Berrangé# explicitly 294891bfcdb0SDaniel P. Berrangeif test -z "$nettle" 294991bfcdb0SDaniel P. Berrangethen 2950a0722409SDaniel P. Berrangé if test "$gcrypt" = "yes" 295191bfcdb0SDaniel P. Berrange then 295291bfcdb0SDaniel P. Berrange nettle="no" 295391bfcdb0SDaniel P. Berrange fi 295491bfcdb0SDaniel P. Berrangefi 295591bfcdb0SDaniel P. Berrange 2956dea7a64eSDaniel P. Berrangéhas_libgcrypt() { 295791bfcdb0SDaniel P. Berrange if ! has "libgcrypt-config" 295891bfcdb0SDaniel P. Berrange then 295991bfcdb0SDaniel P. Berrange return 1 296091bfcdb0SDaniel P. Berrange fi 296191bfcdb0SDaniel P. Berrange 296291bfcdb0SDaniel P. Berrange if test -n "$cross_prefix" 296391bfcdb0SDaniel P. Berrange then 296489138857SStefan Weil host=$(libgcrypt-config --host) 296591bfcdb0SDaniel P. Berrange if test "$host-" != $cross_prefix 296691bfcdb0SDaniel P. Berrange then 296791bfcdb0SDaniel P. Berrange return 1 296891bfcdb0SDaniel P. Berrange fi 296991bfcdb0SDaniel P. Berrange fi 297091bfcdb0SDaniel P. Berrange 2971dea7a64eSDaniel P. Berrangé maj=`libgcrypt-config --version | awk -F . '{print $1}'` 2972dea7a64eSDaniel P. Berrangé min=`libgcrypt-config --version | awk -F . '{print $2}'` 2973dea7a64eSDaniel P. Berrangé 2974dea7a64eSDaniel P. Berrangé if test $maj != 1 || test $min -lt 5 2975dea7a64eSDaniel P. Berrangé then 2976dea7a64eSDaniel P. Berrangé return 1 2977dea7a64eSDaniel P. Berrangé fi 2978dea7a64eSDaniel P. Berrangé 297991bfcdb0SDaniel P. Berrange return 0 298091bfcdb0SDaniel P. Berrange} 298191bfcdb0SDaniel P. Berrange 2982a0722409SDaniel P. Berrangé 2983a0722409SDaniel P. Berrangéif test "$nettle" != "no"; then 2984a73e82efSRichard Henderson pass="no" 298564dd2f3bSDaniel P. Berrangé if $pkg_config --exists "nettle >= 2.7.1"; then 2986a0722409SDaniel P. Berrangé nettle_cflags=$($pkg_config --cflags nettle) 2987a0722409SDaniel P. Berrangé nettle_libs=$($pkg_config --libs nettle) 2988a0722409SDaniel P. Berrangé nettle_version=$($pkg_config --modversion nettle) 2989a73e82efSRichard Henderson # Link test to make sure the given libraries work (e.g for static). 2990a73e82efSRichard Henderson write_c_skeleton 2991a73e82efSRichard Henderson if compile_prog "" "$nettle_libs" ; then 2992a0722409SDaniel P. Berrangé if test -z "$gcrypt"; then 2993a0722409SDaniel P. Berrangé gcrypt="no" 2994a0722409SDaniel P. Berrangé fi 2995a73e82efSRichard Henderson pass="yes" 2996a73e82efSRichard Henderson fi 2997a73e82efSRichard Henderson fi 2998dc2207afSDaniel P. Berrangé if test "$pass" = "yes" 2999dc2207afSDaniel P. Berrangé then 3000dc2207afSDaniel P. Berrangé cat > $TMPC << EOF 3001dc2207afSDaniel P. Berrangé#include <nettle/xts.h> 3002dc2207afSDaniel P. Berrangéint main(void) { 3003dc2207afSDaniel P. Berrangé return 0; 3004dc2207afSDaniel P. Berrangé} 3005dc2207afSDaniel P. BerrangéEOF 3006dc2207afSDaniel P. Berrangé if compile_prog "$nettle_cflags" "$nettle_libs" ; then 3007dc2207afSDaniel P. Berrangé nettle_xts=yes 3008dc2207afSDaniel P. Berrangé qemu_private_xts=no 3009dc2207afSDaniel P. Berrangé fi 3010dc2207afSDaniel P. Berrangé fi 3011a73e82efSRichard Henderson if test "$pass" = "no" && test "$nettle" = "yes"; then 301264dd2f3bSDaniel P. Berrangé feature_not_found "nettle" "Install nettle devel >= 2.7.1" 3013a0722409SDaniel P. Berrangé else 3014a73e82efSRichard Henderson nettle="$pass" 3015a0722409SDaniel P. Berrangé fi 3016a0722409SDaniel P. Berrangéfi 3017a0722409SDaniel P. Berrangé 301891bfcdb0SDaniel P. Berrangeif test "$gcrypt" != "no"; then 3019a73e82efSRichard Henderson pass="no" 3020dea7a64eSDaniel P. Berrangé if has_libgcrypt; then 302189138857SStefan Weil gcrypt_cflags=$(libgcrypt-config --cflags) 302289138857SStefan Weil gcrypt_libs=$(libgcrypt-config --libs) 3023a73e82efSRichard Henderson # Debian has removed -lgpg-error from libgcrypt-config 302491bfcdb0SDaniel P. Berrange # as it "spreads unnecessary dependencies" which in 302591bfcdb0SDaniel P. Berrange # turn breaks static builds... 302691bfcdb0SDaniel P. Berrange if test "$static" = "yes" 302791bfcdb0SDaniel P. Berrange then 302891bfcdb0SDaniel P. Berrange gcrypt_libs="$gcrypt_libs -lgpg-error" 302991bfcdb0SDaniel P. Berrange fi 30301f923c70SLongpeng(Mike) 3031a73e82efSRichard Henderson # Link test to make sure the given libraries work (e.g for static). 3032a73e82efSRichard Henderson write_c_skeleton 3033a73e82efSRichard Henderson if compile_prog "" "$gcrypt_libs" ; then 3034a73e82efSRichard Henderson pass="yes" 3035a73e82efSRichard Henderson fi 3036a73e82efSRichard Henderson fi 3037a73e82efSRichard Henderson if test "$pass" = "yes"; then 303837788f25SDaniel P. Berrange gcrypt="yes" 30391f923c70SLongpeng(Mike) cat > $TMPC << EOF 30401f923c70SLongpeng(Mike)#include <gcrypt.h> 30411f923c70SLongpeng(Mike)int main(void) { 30421f923c70SLongpeng(Mike) gcry_mac_hd_t handle; 30431f923c70SLongpeng(Mike) gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 30441f923c70SLongpeng(Mike) GCRY_MAC_FLAG_SECURE, NULL); 30451f923c70SLongpeng(Mike) return 0; 30461f923c70SLongpeng(Mike)} 30471f923c70SLongpeng(Mike)EOF 30481f923c70SLongpeng(Mike) if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 30491f923c70SLongpeng(Mike) gcrypt_hmac=yes 30501f923c70SLongpeng(Mike) fi 3051e0576942SDaniel P. Berrangé cat > $TMPC << EOF 3052e0576942SDaniel P. Berrangé#include <gcrypt.h> 3053e0576942SDaniel P. Berrangéint main(void) { 3054e0576942SDaniel P. Berrangé gcry_cipher_hd_t handle; 3055e0576942SDaniel P. Berrangé gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0); 3056e0576942SDaniel P. Berrangé return 0; 3057e0576942SDaniel P. Berrangé} 3058e0576942SDaniel P. BerrangéEOF 3059e0576942SDaniel P. Berrangé if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3060e0576942SDaniel P. Berrangé gcrypt_xts=yes 3061e0576942SDaniel P. Berrangé qemu_private_xts=no 3062e0576942SDaniel P. Berrangé fi 3063a73e82efSRichard Henderson elif test "$gcrypt" = "yes"; then 3064dea7a64eSDaniel P. Berrangé feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" 306591bfcdb0SDaniel P. Berrange else 306691bfcdb0SDaniel P. Berrange gcrypt="no" 306791bfcdb0SDaniel P. Berrange fi 306862893b67SDaniel P. Berrangefi 306962893b67SDaniel P. Berrange 3070ddbb0d09SDaniel P. Berrange 307191bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" && test "$nettle" = "yes" 307291bfcdb0SDaniel P. Berrangethen 307391bfcdb0SDaniel P. Berrange error_exit "Only one of gcrypt & nettle can be enabled" 307491bfcdb0SDaniel P. Berrangefi 3075ed754746SDaniel P. Berrange 30769a2fd434SDaniel P. Berrange########################################## 30779a2fd434SDaniel P. Berrange# libtasn1 - only for the TLS creds/session test suite 30789a2fd434SDaniel P. Berrange 30799a2fd434SDaniel P. Berrangetasn1=yes 308090246037SDaniel P. Berrangetasn1_cflags="" 308190246037SDaniel P. Berrangetasn1_libs="" 30829a2fd434SDaniel P. Berrangeif $pkg_config --exists "libtasn1"; then 308389138857SStefan Weil tasn1_cflags=$($pkg_config --cflags libtasn1) 308489138857SStefan Weil tasn1_libs=$($pkg_config --libs libtasn1) 30859a2fd434SDaniel P. Berrangeelse 30869a2fd434SDaniel P. Berrange tasn1=no 30879a2fd434SDaniel P. Berrangefi 30889a2fd434SDaniel P. Berrange 3089ed754746SDaniel P. Berrange 3090bbbf9bfbSStefan Weil########################################## 30918953caf3SDaniel P. Berrange# PAM probe 30928953caf3SDaniel P. Berrange 30938953caf3SDaniel P. Berrangeif test "$auth_pam" != "no"; then 30948953caf3SDaniel P. Berrange cat > $TMPC <<EOF 30958953caf3SDaniel P. Berrange#include <security/pam_appl.h> 30968953caf3SDaniel P. Berrange#include <stdio.h> 30978953caf3SDaniel P. Berrangeint main(void) { 30988953caf3SDaniel P. Berrange const char *service_name = "qemu"; 30998953caf3SDaniel P. Berrange const char *user = "frank"; 31009c9642d0SDr. David Alan Gilbert const struct pam_conv pam_conv = { 0 }; 31018953caf3SDaniel P. Berrange pam_handle_t *pamh = NULL; 31029c9642d0SDr. David Alan Gilbert pam_start(service_name, user, &pam_conv, &pamh); 31038953caf3SDaniel P. Berrange return 0; 31048953caf3SDaniel P. Berrange} 31058953caf3SDaniel P. BerrangeEOF 31068953caf3SDaniel P. Berrange if compile_prog "" "-lpam" ; then 31078953caf3SDaniel P. Berrange auth_pam=yes 31088953caf3SDaniel P. Berrange else 31098953caf3SDaniel P. Berrange if test "$auth_pam" = "yes"; then 31108953caf3SDaniel P. Berrange feature_not_found "PAM" "Install PAM development package" 31118953caf3SDaniel P. Berrange else 31128953caf3SDaniel P. Berrange auth_pam=no 31138953caf3SDaniel P. Berrange fi 31148953caf3SDaniel P. Berrange fi 31158953caf3SDaniel P. Berrangefi 31168953caf3SDaniel P. Berrange 31178953caf3SDaniel P. Berrange########################################## 3118559607eaSDaniel P. Berrange# getifaddrs (for tests/test-io-channel-socket ) 3119559607eaSDaniel P. Berrange 3120559607eaSDaniel P. Berrangehave_ifaddrs_h=yes 3121559607eaSDaniel P. Berrangeif ! check_include "ifaddrs.h" ; then 3122559607eaSDaniel P. Berrange have_ifaddrs_h=no 3123559607eaSDaniel P. Berrangefi 3124559607eaSDaniel P. Berrange 3125e865b97fSChen Gang######################################### 3126e865b97fSChen Gang# libdrm check 3127e865b97fSChen Ganghave_drm_h=no 3128e865b97fSChen Gangif check_include "libdrm/drm.h" ; then 3129e865b97fSChen Gang have_drm_h=yes 3130e865b97fSChen Gangfi 3131e865b97fSChen Gang 31322a4b472cSDavid CARLIER######################################### 31332a4b472cSDavid CARLIER# sys/signal.h check 31342a4b472cSDavid CARLIERhave_sys_signal_h=no 31352a4b472cSDavid CARLIERif check_include "sys/signal.h" ; then 31362a4b472cSDavid CARLIER have_sys_signal_h=yes 31372a4b472cSDavid CARLIERfi 31382a4b472cSDavid CARLIER 3139559607eaSDaniel P. Berrange########################################## 3140bbbf9bfbSStefan Weil# VTE probe 3141bbbf9bfbSStefan Weil 3142bbbf9bfbSStefan Weilif test "$vte" != "no"; then 3143c6feff9eSCole Robinson vteminversion="0.32.0" 3144c6feff9eSCole Robinson if $pkg_config --exists "vte-2.91"; then 3145c6feff9eSCole Robinson vtepackage="vte-2.91" 3146c6feff9eSCole Robinson else 3147528de90aSDaniel P. Berrange vtepackage="vte-2.90" 3148c6feff9eSCole Robinson fi 3149c6feff9eSCole Robinson if $pkg_config --exists "$vtepackage >= $vteminversion"; then 315089138857SStefan Weil vte_cflags=$($pkg_config --cflags $vtepackage) 315189138857SStefan Weil vte_libs=$($pkg_config --libs $vtepackage) 315289138857SStefan Weil vteversion=$($pkg_config --modversion $vtepackage) 3153bbbf9bfbSStefan Weil vte="yes" 3154bbbf9bfbSStefan Weil elif test "$vte" = "yes"; then 3155c6feff9eSCole Robinson feature_not_found "vte" "Install libvte-2.90/2.91 devel" 31569e04c683SStefan Weil else 3157bbbf9bfbSStefan Weil vte="no" 3158a4ccabcfSAnthony Liguori fi 3159a4ccabcfSAnthony Liguorifi 3160a4ccabcfSAnthony Liguori 3161a4ccabcfSAnthony Liguori########################################## 31622da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries 31632da776dbSMichael R. Hinesif test "$rdma" != "no" ; then 31642da776dbSMichael R. Hines cat > $TMPC <<EOF 31652da776dbSMichael R. Hines#include <rdma/rdma_cma.h> 31662da776dbSMichael R. Hinesint main(void) { return 0; } 31672da776dbSMichael R. HinesEOF 3168ef6d4ccdSYuval Shaia rdma_libs="-lrdmacm -libverbs -libumad" 31692da776dbSMichael R. Hines if compile_prog "" "$rdma_libs" ; then 31702da776dbSMichael R. Hines rdma="yes" 31712da776dbSMichael R. Hines else 31722da776dbSMichael R. Hines if test "$rdma" = "yes" ; then 31732da776dbSMichael R. Hines error_exit \ 3174ef6d4ccdSYuval Shaia " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 31752da776dbSMichael R. Hines " Your options:" \ 3176ef6d4ccdSYuval Shaia " (1) Fast: Install infiniband packages (devel) from your distro." \ 31772da776dbSMichael R. Hines " (2) Cleanest: Install libraries from www.openfabrics.org" \ 31782da776dbSMichael R. Hines " (3) Also: Install softiwarp if you don't have RDMA hardware" 31792da776dbSMichael R. Hines fi 31802da776dbSMichael R. Hines rdma="no" 31812da776dbSMichael R. Hines fi 31822da776dbSMichael R. Hinesfi 31832da776dbSMichael R. Hines 318421ab34c9SMarcel Apfelbaum########################################## 318521ab34c9SMarcel Apfelbaum# PVRDMA detection 318621ab34c9SMarcel Apfelbaum 318721ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF && 318821ab34c9SMarcel Apfelbaum#include <sys/mman.h> 318921ab34c9SMarcel Apfelbaum 319021ab34c9SMarcel Apfelbaumint 319121ab34c9SMarcel Apfelbaummain(void) 319221ab34c9SMarcel Apfelbaum{ 319321ab34c9SMarcel Apfelbaum char buf = 0; 319421ab34c9SMarcel Apfelbaum void *addr = &buf; 319521ab34c9SMarcel Apfelbaum addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 319621ab34c9SMarcel Apfelbaum 319721ab34c9SMarcel Apfelbaum return 0; 319821ab34c9SMarcel Apfelbaum} 319921ab34c9SMarcel ApfelbaumEOF 320021ab34c9SMarcel Apfelbaum 320121ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then 320221ab34c9SMarcel Apfelbaum case "$pvrdma" in 320321ab34c9SMarcel Apfelbaum "") 320421ab34c9SMarcel Apfelbaum if compile_prog "" ""; then 320521ab34c9SMarcel Apfelbaum pvrdma="yes" 320621ab34c9SMarcel Apfelbaum else 320721ab34c9SMarcel Apfelbaum pvrdma="no" 320821ab34c9SMarcel Apfelbaum fi 320921ab34c9SMarcel Apfelbaum ;; 321021ab34c9SMarcel Apfelbaum "yes") 321121ab34c9SMarcel Apfelbaum if ! compile_prog "" ""; then 321221ab34c9SMarcel Apfelbaum error_exit "PVRDMA is not supported since mremap is not implemented" 321321ab34c9SMarcel Apfelbaum fi 321421ab34c9SMarcel Apfelbaum pvrdma="yes" 321521ab34c9SMarcel Apfelbaum ;; 321621ab34c9SMarcel Apfelbaum "no") 321721ab34c9SMarcel Apfelbaum pvrdma="no" 321821ab34c9SMarcel Apfelbaum ;; 321921ab34c9SMarcel Apfelbaum esac 322021ab34c9SMarcel Apfelbaumelse 322121ab34c9SMarcel Apfelbaum if test "$pvrdma" = "yes" ; then 322221ab34c9SMarcel Apfelbaum error_exit "PVRDMA requires rdma suppport" 322321ab34c9SMarcel Apfelbaum fi 322421ab34c9SMarcel Apfelbaum pvrdma="no" 322521ab34c9SMarcel Apfelbaumfi 322695c6bff3SBenoît Canet 3227ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported 3228ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then 3229ee108585SYuval Shaia 3230ee108585SYuval Shaiacat > $TMPC <<EOF && 3231ee108585SYuval Shaia#include <infiniband/verbs.h> 3232ee108585SYuval Shaia 3233ee108585SYuval Shaiaint 3234ee108585SYuval Shaiamain(void) 3235ee108585SYuval Shaia{ 3236ee108585SYuval Shaia struct ibv_mr *mr; 3237ee108585SYuval Shaia struct ibv_pd *pd = NULL; 3238ee108585SYuval Shaia size_t length = 10; 3239ee108585SYuval Shaia uint64_t iova = 0; 3240ee108585SYuval Shaia int access = 0; 3241ee108585SYuval Shaia void *addr = NULL; 3242ee108585SYuval Shaia 3243ee108585SYuval Shaia mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 3244ee108585SYuval Shaia 3245ee108585SYuval Shaia ibv_dereg_mr(mr); 3246ee108585SYuval Shaia 3247ee108585SYuval Shaia return 0; 3248ee108585SYuval Shaia} 3249ee108585SYuval ShaiaEOF 3250ee108585SYuval Shaia if ! compile_prog "" "-libverbs"; then 3251ee108585SYuval Shaia QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 3252ee108585SYuval Shaia fi 3253ee108585SYuval Shaiafi 3254ee108585SYuval Shaia 325595c6bff3SBenoît Canet########################################## 3256c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c 3257dce512deSChristoph Hellwigif test "$xfs" != "no" ; then 3258dce512deSChristoph Hellwig cat > $TMPC << EOF 3259ffc41d10SStefan Weil#include <stddef.h> /* NULL */ 3260dce512deSChristoph Hellwig#include <xfs/xfs.h> 3261dce512deSChristoph Hellwigint main(void) 3262dce512deSChristoph Hellwig{ 3263dce512deSChristoph Hellwig xfsctl(NULL, 0, 0, NULL); 3264dce512deSChristoph Hellwig return 0; 3265dce512deSChristoph Hellwig} 3266dce512deSChristoph HellwigEOF 3267dce512deSChristoph Hellwig if compile_prog "" "" ; then 3268dce512deSChristoph Hellwig xfs="yes" 3269dce512deSChristoph Hellwig else 3270dce512deSChristoph Hellwig if test "$xfs" = "yes" ; then 3271e3a6e0daSzhaolichang feature_not_found "xfs" "Install xfsprogs/xfslibs devel" 3272dce512deSChristoph Hellwig fi 3273dce512deSChristoph Hellwig xfs=no 3274dce512deSChristoph Hellwig fi 3275dce512deSChristoph Hellwigfi 3276dce512deSChristoph Hellwig 3277dce512deSChristoph Hellwig########################################## 32788a16d273Sths# vde libraries probe 3279dfb278bdSJuan Quintelaif test "$vde" != "no" ; then 32804baae0acSJuan Quintela vde_libs="-lvdeplug" 32818a16d273Sths cat > $TMPC << EOF 32828a16d273Sths#include <libvdeplug.h> 32834a7f0e06Spbrookint main(void) 32844a7f0e06Spbrook{ 32854a7f0e06Spbrook struct vde_open_args a = {0, 0, 0}; 3286fea08e08SPeter Maydell char s[] = ""; 3287fea08e08SPeter Maydell vde_open(s, s, &a); 32884a7f0e06Spbrook return 0; 32894a7f0e06Spbrook} 32908a16d273SthsEOF 329152166aa0SJuan Quintela if compile_prog "" "$vde_libs" ; then 32924baae0acSJuan Quintela vde=yes 3293dfb278bdSJuan Quintela else 3294dfb278bdSJuan Quintela if test "$vde" = "yes" ; then 329521684af0SStewart Smith feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3296dfb278bdSJuan Quintela fi 3297dfb278bdSJuan Quintela vde=no 32988a16d273Sths fi 32998a16d273Sthsfi 33008a16d273Sths 33018a16d273Sths########################################## 33020a985b37SVincenzo Maffione# netmap support probe 33030a985b37SVincenzo Maffione# Apart from looking for netmap headers, we make sure that the host API version 33040a985b37SVincenzo Maffione# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 33050a985b37SVincenzo Maffione# a minor/major version number. Minor new features will be marked with values up 33060a985b37SVincenzo Maffione# to 15, and if something happens that requires a change to the backend we will 33070a985b37SVincenzo Maffione# move above 15, submit the backend fixes and modify this two bounds. 330858952137SVincenzo Maffioneif test "$netmap" != "no" ; then 330958952137SVincenzo Maffione cat > $TMPC << EOF 331058952137SVincenzo Maffione#include <inttypes.h> 331158952137SVincenzo Maffione#include <net/if.h> 331258952137SVincenzo Maffione#include <net/netmap.h> 331358952137SVincenzo Maffione#include <net/netmap_user.h> 33140a985b37SVincenzo Maffione#if (NETMAP_API < 11) || (NETMAP_API > 15) 33150a985b37SVincenzo Maffione#error 33160a985b37SVincenzo Maffione#endif 331758952137SVincenzo Maffioneint main(void) { return 0; } 331858952137SVincenzo MaffioneEOF 331958952137SVincenzo Maffione if compile_prog "" "" ; then 332058952137SVincenzo Maffione netmap=yes 332158952137SVincenzo Maffione else 332258952137SVincenzo Maffione if test "$netmap" = "yes" ; then 332358952137SVincenzo Maffione feature_not_found "netmap" 332458952137SVincenzo Maffione fi 332558952137SVincenzo Maffione netmap=no 332658952137SVincenzo Maffione fi 332758952137SVincenzo Maffionefi 332858952137SVincenzo Maffione 332958952137SVincenzo Maffione########################################## 333047e98658SCorey Bryant# libcap-ng library probe 333147e98658SCorey Bryantif test "$cap_ng" != "no" ; then 333247e98658SCorey Bryant cap_libs="-lcap-ng" 333347e98658SCorey Bryant cat > $TMPC << EOF 333447e98658SCorey Bryant#include <cap-ng.h> 333547e98658SCorey Bryantint main(void) 333647e98658SCorey Bryant{ 333747e98658SCorey Bryant capng_capability_to_name(CAPNG_EFFECTIVE); 333847e98658SCorey Bryant return 0; 333947e98658SCorey Bryant} 334047e98658SCorey BryantEOF 334147e98658SCorey Bryant if compile_prog "" "$cap_libs" ; then 334247e98658SCorey Bryant cap_ng=yes 334347e98658SCorey Bryant else 334447e98658SCorey Bryant if test "$cap_ng" = "yes" ; then 334521684af0SStewart Smith feature_not_found "cap_ng" "Install libcap-ng devel" 334647e98658SCorey Bryant fi 334747e98658SCorey Bryant cap_ng=no 334847e98658SCorey Bryant fi 334947e98658SCorey Bryantfi 335047e98658SCorey Bryant 335147e98658SCorey Bryant########################################## 3352c2de5c91Smalc# Sound support libraries probe 33538f28f3fbSths 335489138857SStefan Weilaudio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3355c2de5c91Smalcfor drv in $audio_drv_list; do 3356c2de5c91Smalc case $drv in 3357e42975a1SGerd Hoffmann alsa | try-alsa) 3358c80a867fSGerd Hoffmann if $pkg_config alsa --exists; then 3359c80a867fSGerd Hoffmann alsa_libs=$($pkg_config alsa --libs) 3360478e943fSPaolo Bonzini alsa_cflags=$($pkg_config alsa --cflags) 3361478e943fSPaolo Bonzini alsa=yes 3362e42975a1SGerd Hoffmann if test "$drv" = "try-alsa"; then 3363e42975a1SGerd Hoffmann audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/') 3364e42975a1SGerd Hoffmann fi 3365e42975a1SGerd Hoffmann else 3366e42975a1SGerd Hoffmann if test "$drv" = "try-alsa"; then 3367e42975a1SGerd Hoffmann audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//') 3368c80a867fSGerd Hoffmann else 3369c80a867fSGerd Hoffmann error_exit "$drv check failed" \ 3370c80a867fSGerd Hoffmann "Make sure to have the $drv libs and headers installed." 3371c80a867fSGerd Hoffmann fi 3372e42975a1SGerd Hoffmann fi 3373c2de5c91Smalc ;; 3374c2de5c91Smalc 3375e42975a1SGerd Hoffmann pa | try-pa) 3376c80a867fSGerd Hoffmann if $pkg_config libpulse --exists; then 3377478e943fSPaolo Bonzini libpulse=yes 3378c80a867fSGerd Hoffmann pulse_libs=$($pkg_config libpulse --libs) 3379478e943fSPaolo Bonzini pulse_cflags=$($pkg_config libpulse --cflags) 3380e42975a1SGerd Hoffmann if test "$drv" = "try-pa"; then 3381e42975a1SGerd Hoffmann audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/') 3382e42975a1SGerd Hoffmann fi 3383e42975a1SGerd Hoffmann else 3384e42975a1SGerd Hoffmann if test "$drv" = "try-pa"; then 3385e42975a1SGerd Hoffmann audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//') 3386c80a867fSGerd Hoffmann else 3387c80a867fSGerd Hoffmann error_exit "$drv check failed" \ 3388c80a867fSGerd Hoffmann "Make sure to have the $drv libs and headers installed." 3389c80a867fSGerd Hoffmann fi 3390e42975a1SGerd Hoffmann fi 3391b8e59f18Smalc ;; 3392b8e59f18Smalc 3393373967b2SGerd Hoffmann sdl) 3394373967b2SGerd Hoffmann if test "$sdl" = "no"; then 3395373967b2SGerd Hoffmann error_exit "sdl not found or disabled, can not use sdl audio driver" 3396373967b2SGerd Hoffmann fi 3397373967b2SGerd Hoffmann ;; 3398373967b2SGerd Hoffmann 3399e42975a1SGerd Hoffmann try-sdl) 3400e42975a1SGerd Hoffmann if test "$sdl" = "no"; then 3401e42975a1SGerd Hoffmann audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//') 3402e42975a1SGerd Hoffmann else 3403e42975a1SGerd Hoffmann audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/') 3404e42975a1SGerd Hoffmann fi 3405e42975a1SGerd Hoffmann ;; 3406e42975a1SGerd Hoffmann 3407997e690aSJuan Quintela coreaudio) 3408b1149911SFam Zheng coreaudio_libs="-framework CoreAudio" 3409997e690aSJuan Quintela ;; 3410997e690aSJuan Quintela 3411a4bf6780SJuan Quintela dsound) 3412b1149911SFam Zheng dsound_libs="-lole32 -ldxguid" 3413d5631638Smalc audio_win_int="yes" 3414a4bf6780SJuan Quintela ;; 3415a4bf6780SJuan Quintela 3416a4bf6780SJuan Quintela oss) 3417b1149911SFam Zheng oss_libs="$oss_lib" 3418a4bf6780SJuan Quintela ;; 3419a4bf6780SJuan Quintela 34202e445703SGeoffrey McRae jack | try-jack) 34212e445703SGeoffrey McRae if $pkg_config jack --exists; then 3422478e943fSPaolo Bonzini libjack=yes 34232e445703SGeoffrey McRae jack_libs=$($pkg_config jack --libs) 34242e445703SGeoffrey McRae if test "$drv" = "try-jack"; then 34252e445703SGeoffrey McRae audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/') 34262e445703SGeoffrey McRae fi 34272e445703SGeoffrey McRae else 34282e445703SGeoffrey McRae if test "$drv" = "try-jack"; then 34292e445703SGeoffrey McRae audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//') 34302e445703SGeoffrey McRae else 34312e445703SGeoffrey McRae error_exit "$drv check failed" \ 34322e445703SGeoffrey McRae "Make sure to have the $drv libs and headers installed." 34332e445703SGeoffrey McRae fi 34342e445703SGeoffrey McRae fi 34352e445703SGeoffrey McRae ;; 34362e445703SGeoffrey McRae 3437e4c63a6aSmalc *) 34381c9b2a52Smalc echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 343976ad07a4SPeter Maydell error_exit "Unknown driver '$drv' selected" \ 344076ad07a4SPeter Maydell "Possible drivers are: $audio_possible_drivers" 3441e4c63a6aSmalc } 3442e4c63a6aSmalc ;; 3443c2de5c91Smalc esac 3444c2de5c91Smalcdone 34458f28f3fbSths 34464d3b6f6eSbalrog########################################## 34472e4d9fb1Saurel32# BrlAPI probe 34482e4d9fb1Saurel32 34494ffcedb6SJuan Quintelaif test "$brlapi" != "no" ; then 3450eb82284fSJuan Quintela brlapi_libs="-lbrlapi" 34512e4d9fb1Saurel32 cat > $TMPC << EOF 34522e4d9fb1Saurel32#include <brlapi.h> 3453832ce9c2SScott Wood#include <stddef.h> 34542e4d9fb1Saurel32int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 34552e4d9fb1Saurel32EOF 345652166aa0SJuan Quintela if compile_prog "" "$brlapi_libs" ; then 34572e4d9fb1Saurel32 brlapi=yes 34584ffcedb6SJuan Quintela else 34594ffcedb6SJuan Quintela if test "$brlapi" = "yes" ; then 346021684af0SStewart Smith feature_not_found "brlapi" "Install brlapi devel" 34614ffcedb6SJuan Quintela fi 34624ffcedb6SJuan Quintela brlapi=no 3463eb82284fSJuan Quintela fi 3464eb82284fSJuan Quintelafi 34652e4d9fb1Saurel32 34662e4d9fb1Saurel32########################################## 3467e08bb301SSamuel Thibault# iconv probe 3468e08bb301SSamuel Thibaultif test "$iconv" != "no" ; then 3469e08bb301SSamuel Thibault cat > $TMPC << EOF 3470e08bb301SSamuel Thibault#include <iconv.h> 3471e08bb301SSamuel Thibaultint main(void) { 3472e08bb301SSamuel Thibault iconv_t conv = iconv_open("WCHAR_T", "UCS-2"); 3473e08bb301SSamuel Thibault return conv != (iconv_t) -1; 3474e08bb301SSamuel Thibault} 3475e08bb301SSamuel ThibaultEOF 3476e08bb301SSamuel Thibault iconv_prefix_list="/usr/local:/usr" 3477e08bb301SSamuel Thibault iconv_lib_list=":-liconv" 3478e08bb301SSamuel Thibault IFS=: 3479e08bb301SSamuel Thibault for iconv_prefix in $iconv_prefix_list; do 3480e08bb301SSamuel Thibault IFS=: 3481e08bb301SSamuel Thibault iconv_cflags="-I$iconv_prefix/include" 3482e08bb301SSamuel Thibault iconv_ldflags="-L$iconv_prefix/lib" 3483e08bb301SSamuel Thibault for iconv_link in $iconv_lib_list; do 3484e08bb301SSamuel Thibault unset IFS 3485e08bb301SSamuel Thibault iconv_lib="$iconv_ldflags $iconv_link" 3486e08bb301SSamuel Thibault echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log 3487e08bb301SSamuel Thibault if compile_prog "$iconv_cflags" "$iconv_lib" ; then 3488e08bb301SSamuel Thibault iconv_found=yes 3489e08bb301SSamuel Thibault break 3490e08bb301SSamuel Thibault fi 3491e08bb301SSamuel Thibault done 3492e08bb301SSamuel Thibault if test "$iconv_found" = yes ; then 3493e08bb301SSamuel Thibault break 3494e08bb301SSamuel Thibault fi 3495e08bb301SSamuel Thibault done 3496e08bb301SSamuel Thibault if test "$iconv_found" = "yes" ; then 3497e08bb301SSamuel Thibault iconv=yes 3498e08bb301SSamuel Thibault else 3499e08bb301SSamuel Thibault if test "$iconv" = "yes" ; then 3500e08bb301SSamuel Thibault feature_not_found "iconv" "Install iconv devel" 3501e08bb301SSamuel Thibault fi 3502e08bb301SSamuel Thibault iconv=no 3503e08bb301SSamuel Thibault fi 3504e08bb301SSamuel Thibaultfi 3505e08bb301SSamuel Thibault 3506e08bb301SSamuel Thibault########################################## 35074d3b6f6eSbalrog# curses probe 3508e08bb301SSamuel Thibaultif test "$iconv" = "no" ; then 3509e08bb301SSamuel Thibault # curses will need iconv 3510e08bb301SSamuel Thibault curses=no 3511e08bb301SSamuel Thibaultfi 3512a3605bf6SMichael Tokarevif test "$curses" != "no" ; then 3513e095e2f3SStefan Weil if test "$mingw32" = "yes" ; then 35148ddc5bf9SSamuel Thibault curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" 35158ddc5bf9SSamuel Thibault curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" 3516e095e2f3SStefan Weil else 35177c703002SSamuel Thibault curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" 35188ddc5bf9SSamuel Thibault curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" 3519e095e2f3SStefan Weil fi 3520c584a6d0SJuan Quintela curses_found=no 35214d3b6f6eSbalrog cat > $TMPC << EOF 35228ddc5bf9SSamuel Thibault#include <locale.h> 35234d3b6f6eSbalrog#include <curses.h> 35248ddc5bf9SSamuel Thibault#include <wchar.h> 35252f8b7cd5SSamuel Thibault#include <langinfo.h> 3526ef9a2524SStefan Weilint main(void) { 35272f8b7cd5SSamuel Thibault const char *codeset; 35288ddc5bf9SSamuel Thibault wchar_t wch = L'w'; 35298ddc5bf9SSamuel Thibault setlocale(LC_ALL, ""); 3530ef9a2524SStefan Weil resize_term(0, 0); 35318ddc5bf9SSamuel Thibault addwstr(L"wide chars\n"); 35328ddc5bf9SSamuel Thibault addnwstr(&wch, 1); 35337c703002SSamuel Thibault add_wch(WACS_DEGREE); 35342f8b7cd5SSamuel Thibault codeset = nl_langinfo(CODESET); 35352f8b7cd5SSamuel Thibault return codeset != 0; 3536ef9a2524SStefan Weil} 35374d3b6f6eSbalrogEOF 3538ecbe251fSVadim Evard IFS=: 35398ddc5bf9SSamuel Thibault for curses_inc in $curses_inc_list; do 3540b01a4fd3SPeter Maydell # Make sure we get the wide character prototypes 3541b01a4fd3SPeter Maydell curses_inc="-DNCURSES_WIDECHAR $curses_inc" 35427c703002SSamuel Thibault IFS=: 35438ddc5bf9SSamuel Thibault for curses_lib in $curses_lib_list; do 3544ecbe251fSVadim Evard unset IFS 35458ddc5bf9SSamuel Thibault if compile_prog "$curses_inc" "$curses_lib" ; then 3546c584a6d0SJuan Quintela curses_found=yes 35474f78ef9aSJuan Quintela break 35484d3b6f6eSbalrog fi 35494f78ef9aSJuan Quintela done 35507c703002SSamuel Thibault if test "$curses_found" = yes ; then 35517c703002SSamuel Thibault break 35527c703002SSamuel Thibault fi 35538ddc5bf9SSamuel Thibault done 3554ecbe251fSVadim Evard unset IFS 3555c584a6d0SJuan Quintela if test "$curses_found" = "yes" ; then 3556c584a6d0SJuan Quintela curses=yes 3557c584a6d0SJuan Quintela else 3558c584a6d0SJuan Quintela if test "$curses" = "yes" ; then 355921684af0SStewart Smith feature_not_found "curses" "Install ncurses devel" 3560c584a6d0SJuan Quintela fi 3561c584a6d0SJuan Quintela curses=no 3562c584a6d0SJuan Quintela fi 35634f78ef9aSJuan Quintelafi 35644d3b6f6eSbalrog 3565414f0dabSblueswir1########################################## 3566769ce76dSAlexander Graf# curl probe 3567a3605bf6SMichael Tokarevif test "$curl" != "no" ; then 356865d5d3f9SStefan Weil if $pkg_config libcurl --exists; then 3569a8bd70adSPaolo Bonzini curlconfig="$pkg_config libcurl" 35704e2b0658SPaolo Bonzini else 35714e2b0658SPaolo Bonzini curlconfig=curl-config 35724e2b0658SPaolo Bonzini fi 3573769ce76dSAlexander Graf cat > $TMPC << EOF 3574769ce76dSAlexander Graf#include <curl/curl.h> 35750b862cedSPeter Maydellint main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3576769ce76dSAlexander GrafEOF 357789138857SStefan Weil curl_cflags=$($curlconfig --cflags 2>/dev/null) 357889138857SStefan Weil curl_libs=$($curlconfig --libs 2>/dev/null) 3579b1d5a277SJuan Quintela if compile_prog "$curl_cflags" "$curl_libs" ; then 3580769ce76dSAlexander Graf curl=yes 3581788c8196SJuan Quintela else 3582788c8196SJuan Quintela if test "$curl" = "yes" ; then 358321684af0SStewart Smith feature_not_found "curl" "Install libcurl devel" 3584788c8196SJuan Quintela fi 3585788c8196SJuan Quintela curl=no 3586769ce76dSAlexander Graf fi 3587769ce76dSAlexander Graffi # test "$curl" 3588769ce76dSAlexander Graf 3589769ce76dSAlexander Graf########################################## 3590e18df141SAnthony Liguori# glib support probe 3591a52d28afSPaolo Bonzini 359200f2cfbbSDaniel P. Berrangéglib_req_ver=2.48 3593aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0 3594aa0d1f44SPaolo Bonziniif test "$modules" = yes; then 3595a88afc64SGerd Hoffmann glib_modules="$glib_modules gmodule-export-2.0" 3596aa0d1f44SPaolo Bonzinifi 359754cb65d8SEmilio G. Cotaif test "$plugins" = yes; then 359854cb65d8SEmilio G. Cota glib_modules="$glib_modules gmodule-2.0" 359954cb65d8SEmilio G. Cotafi 3600e26110cfSFam Zheng 3601aa0d1f44SPaolo Bonzinifor i in $glib_modules; do 3602e26110cfSFam Zheng if $pkg_config --atleast-version=$glib_req_ver $i; then 360389138857SStefan Weil glib_cflags=$($pkg_config --cflags $i) 360489138857SStefan Weil glib_libs=$($pkg_config --libs $i) 3605e18df141SAnthony Liguori else 3606e26110cfSFam Zheng error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3607e26110cfSFam Zheng fi 3608e26110cfSFam Zhengdone 3609e26110cfSFam Zheng 3610215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it 3611215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3612215b0c2fSPaolo Bonzini 3613215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then 3614215b0c2fSPaolo Bonzini glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags" 3615215b0c2fSPaolo Bonzinifi 3616215b0c2fSPaolo Bonzini 3617f876b765SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 3618f876b765SMarc-André Lureau gio=yes 3619f876b765SMarc-André Lureau gio_cflags=$($pkg_config --cflags gio-2.0) 3620f876b765SMarc-André Lureau gio_libs=$($pkg_config --libs gio-2.0) 362125a97a56SMarc-André Lureau gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 36220dba4897SMarc-André Lureau if [ ! -x "$gdbus_codegen" ]; then 36230dba4897SMarc-André Lureau gdbus_codegen= 36240dba4897SMarc-André Lureau fi 3625f876b765SMarc-André Lureauelse 3626f876b765SMarc-André Lureau gio=no 3627f876b765SMarc-André Lureaufi 3628f876b765SMarc-André Lureau 362925a97a56SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 363025a97a56SMarc-André Lureau gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 363125a97a56SMarc-André Lureau gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 363225a97a56SMarc-André Lureaufi 363325a97a56SMarc-André Lureau 3634977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the 3635977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches 3636977a82abSDaniel P. Berrange# problems on multi-arch where people try to build 3637977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers 3638977a82abSDaniel P. Berrangecat > $TMPC <<EOF 3639977a82abSDaniel P. Berrange#include <glib.h> 3640977a82abSDaniel P. Berrange#include <unistd.h> 3641977a82abSDaniel P. Berrange 3642977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \ 3643977a82abSDaniel P. Berrange typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3644977a82abSDaniel P. Berrange 3645977a82abSDaniel P. Berrangeint main(void) { 3646977a82abSDaniel P. Berrange QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3647977a82abSDaniel P. Berrange return 0; 3648977a82abSDaniel P. Berrange} 3649977a82abSDaniel P. BerrangeEOF 3650977a82abSDaniel P. Berrange 3651215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then 3652977a82abSDaniel P. Berrange error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3653977a82abSDaniel P. Berrange "You probably need to set PKG_CONFIG_LIBDIR"\ 3654977a82abSDaniel P. Berrange "to point to the right pkg-config files for your"\ 3655977a82abSDaniel P. Berrange "build target" 3656977a82abSDaniel P. Berrangefi 3657977a82abSDaniel P. Berrange 3658bbbf2e04SJohn Snow# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3659bbbf2e04SJohn Snowcat > $TMPC << EOF 3660bbbf2e04SJohn Snow#include <glib.h> 3661bbbf2e04SJohn Snowint main(void) { return 0; } 3662bbbf2e04SJohn SnowEOF 3663bbbf2e04SJohn Snowif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3664bbbf2e04SJohn Snow if cc_has_warning_flag "-Wno-unknown-attributes"; then 3665bbbf2e04SJohn Snow glib_cflags="-Wno-unknown-attributes $glib_cflags" 3666215b0c2fSPaolo Bonzini CFLAGS="-Wno-unknown-attributes $CFLAGS" 3667bbbf2e04SJohn Snow fi 3668bbbf2e04SJohn Snowfi 3669bbbf2e04SJohn Snow 36709bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2 36719bda600bSEric Blakecat > $TMPC << EOF 36729bda600bSEric Blake#include <glib.h> 36739bda600bSEric Blaketypedef struct Foo { 36749bda600bSEric Blake int i; 36759bda600bSEric Blake} Foo; 36769bda600bSEric Blakestatic void foo_free(Foo *f) 36779bda600bSEric Blake{ 36789bda600bSEric Blake g_free(f); 36799bda600bSEric Blake} 36809bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 36819bda600bSEric Blakeint main(void) { return 0; } 36829bda600bSEric BlakeEOF 36839bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 36849bda600bSEric Blake if cc_has_warning_flag "-Wno-unused-function"; then 36859bda600bSEric Blake glib_cflags="$glib_cflags -Wno-unused-function" 36869bda600bSEric Blake CFLAGS="$CFLAGS -Wno-unused-function" 36879bda600bSEric Blake fi 36889bda600bSEric Blakefi 36899bda600bSEric Blake 3690e26110cfSFam Zheng########################################## 3691e26110cfSFam Zheng# SHA command probe for modules 3692e26110cfSFam Zhengif test "$modules" = yes; then 3693e26110cfSFam Zheng shacmd_probe="sha1sum sha1 shasum" 3694e26110cfSFam Zheng for c in $shacmd_probe; do 36958ccefb91SFam Zheng if has $c; then 3696e26110cfSFam Zheng shacmd="$c" 3697e26110cfSFam Zheng break 3698e26110cfSFam Zheng fi 3699e26110cfSFam Zheng done 3700e26110cfSFam Zheng if test "$shacmd" = ""; then 3701e26110cfSFam Zheng error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3702e26110cfSFam Zheng fi 3703e18df141SAnthony Liguorifi 3704e18df141SAnthony Liguori 3705e18df141SAnthony Liguori########################################## 3706e5d355d1Saliguori# pthread probe 37074b29ec41SBradPTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 37083c529d93Saliguori 3709e5d355d1Saliguoripthread=no 3710414f0dabSblueswir1cat > $TMPC << EOF 37113c529d93Saliguori#include <pthread.h> 37127a42bbe4SStefan Weilstatic void *f(void *p) { return NULL; } 37137a42bbe4SStefan Weilint main(void) { 37147a42bbe4SStefan Weil pthread_t thread; 37157a42bbe4SStefan Weil pthread_create(&thread, 0, f, 0); 37167a42bbe4SStefan Weil return 0; 37177a42bbe4SStefan Weil} 3718414f0dabSblueswir1EOF 3719bd00d539SAndreas Färberif compile_prog "" "" ; then 3720bd00d539SAndreas Färber pthread=yes 3721bd00d539SAndreas Färberelse 3722de65fe0fSSebastian Herbszt for pthread_lib in $PTHREADLIBS_LIST; do 372352166aa0SJuan Quintela if compile_prog "" "$pthread_lib" ; then 3724e5d355d1Saliguori pthread=yes 3725e3c56761SPeter Portante found=no 3726e3c56761SPeter Portante for lib_entry in $LIBS; do 3727e3c56761SPeter Portante if test "$lib_entry" = "$pthread_lib"; then 3728e3c56761SPeter Portante found=yes 3729e3c56761SPeter Portante break 3730e3c56761SPeter Portante fi 3731e3c56761SPeter Portante done 3732e3c56761SPeter Portante if test "$found" = "no"; then 37335572b539SJuan Quintela LIBS="$pthread_lib $LIBS" 3734e3c56761SPeter Portante fi 3735409437e1SDaniel P. Berrange PTHREAD_LIB="$pthread_lib" 3736de65fe0fSSebastian Herbszt break 3737414f0dabSblueswir1 fi 3738de65fe0fSSebastian Herbszt done 3739bd00d539SAndreas Färberfi 3740414f0dabSblueswir1 3741e633a5c6SEric Blakeif test "$mingw32" != yes && test "$pthread" = no; then 374276ad07a4SPeter Maydell error_exit "pthread check failed" \ 374376ad07a4SPeter Maydell "Make sure to have the pthread libs and headers installed." 3744e5d355d1Saliguorifi 3745e5d355d1Saliguori 3746479a5747SRoman Bolshakov# check for pthread_setname_np with thread id 3747479a5747SRoman Bolshakovpthread_setname_np_w_tid=no 37485c312079SDr. David Alan Gilbertcat > $TMPC << EOF 37495c312079SDr. David Alan Gilbert#include <pthread.h> 37505c312079SDr. David Alan Gilbert 37515c312079SDr. David Alan Gilbertstatic void *f(void *p) { return NULL; } 37525c312079SDr. David Alan Gilbertint main(void) 37535c312079SDr. David Alan Gilbert{ 37545c312079SDr. David Alan Gilbert pthread_t thread; 37555c312079SDr. David Alan Gilbert pthread_create(&thread, 0, f, 0); 37565c312079SDr. David Alan Gilbert pthread_setname_np(thread, "QEMU"); 37575c312079SDr. David Alan Gilbert return 0; 37585c312079SDr. David Alan Gilbert} 37595c312079SDr. David Alan GilbertEOF 37605c312079SDr. David Alan Gilbertif compile_prog "" "$pthread_lib" ; then 3761479a5747SRoman Bolshakov pthread_setname_np_w_tid=yes 3762479a5747SRoman Bolshakovfi 3763479a5747SRoman Bolshakov 3764479a5747SRoman Bolshakov# check for pthread_setname_np without thread id 3765479a5747SRoman Bolshakovpthread_setname_np_wo_tid=no 3766479a5747SRoman Bolshakovcat > $TMPC << EOF 3767479a5747SRoman Bolshakov#include <pthread.h> 3768479a5747SRoman Bolshakov 376912a9b8d8SThomas Huthstatic void *f(void *p) { pthread_setname_np("QEMU"); return NULL; } 3770479a5747SRoman Bolshakovint main(void) 3771479a5747SRoman Bolshakov{ 3772479a5747SRoman Bolshakov pthread_t thread; 3773479a5747SRoman Bolshakov pthread_create(&thread, 0, f, 0); 3774479a5747SRoman Bolshakov return 0; 3775479a5747SRoman Bolshakov} 3776479a5747SRoman BolshakovEOF 3777479a5747SRoman Bolshakovif compile_prog "" "$pthread_lib" ; then 3778479a5747SRoman Bolshakov pthread_setname_np_wo_tid=yes 37795c312079SDr. David Alan Gilbertfi 37805c312079SDr. David Alan Gilbert 3781bf9298b9Saliguori########################################## 3782f27aaf4bSChristian Brunner# rbd probe 3783f27aaf4bSChristian Brunnerif test "$rbd" != "no" ; then 3784f27aaf4bSChristian Brunner cat > $TMPC <<EOF 3785f27aaf4bSChristian Brunner#include <stdio.h> 3786ad32e9c0SJosh Durgin#include <rbd/librbd.h> 3787f27aaf4bSChristian Brunnerint main(void) { 3788ad32e9c0SJosh Durgin rados_t cluster; 3789ad32e9c0SJosh Durgin rados_create(&cluster, NULL); 3790f27aaf4bSChristian Brunner return 0; 3791f27aaf4bSChristian Brunner} 3792f27aaf4bSChristian BrunnerEOF 3793ad32e9c0SJosh Durgin rbd_libs="-lrbd -lrados" 3794f27aaf4bSChristian Brunner if compile_prog "" "$rbd_libs" ; then 3795f27aaf4bSChristian Brunner rbd=yes 3796f27aaf4bSChristian Brunner else 3797f27aaf4bSChristian Brunner if test "$rbd" = "yes" ; then 379821684af0SStewart Smith feature_not_found "rados block device" "Install librbd/ceph devel" 3799f27aaf4bSChristian Brunner fi 3800f27aaf4bSChristian Brunner rbd=no 3801f27aaf4bSChristian Brunner fi 3802f27aaf4bSChristian Brunnerfi 3803f27aaf4bSChristian Brunner 3804f27aaf4bSChristian Brunner########################################## 3805b10d49d7SPino Toscano# libssh probe 3806b10d49d7SPino Toscanoif test "$libssh" != "no" ; then 3807b10d49d7SPino Toscano if $pkg_config --exists libssh; then 3808b10d49d7SPino Toscano libssh_cflags=$($pkg_config libssh --cflags) 3809b10d49d7SPino Toscano libssh_libs=$($pkg_config libssh --libs) 3810b10d49d7SPino Toscano libssh=yes 38110a12ec87SRichard W.M. Jones else 3812b10d49d7SPino Toscano if test "$libssh" = "yes" ; then 3813b10d49d7SPino Toscano error_exit "libssh required for --enable-libssh" 38140a12ec87SRichard W.M. Jones fi 3815b10d49d7SPino Toscano libssh=no 38160a12ec87SRichard W.M. Jones fi 38170a12ec87SRichard W.M. Jonesfi 38180a12ec87SRichard W.M. Jones 38190a12ec87SRichard W.M. Jones########################################## 3820b10d49d7SPino Toscano# Check for libssh 0.8 3821b10d49d7SPino Toscano# This is done like this instead of using the LIBSSH_VERSION_* and 3822b10d49d7SPino Toscano# SSH_VERSION_* macros because some distributions in the past shipped 3823b10d49d7SPino Toscano# snapshots of the future 0.8 from Git, and those snapshots did not 3824b10d49d7SPino Toscano# have updated version numbers (still referring to 0.7.0). 38259a2d462eSRichard W.M. Jones 3826b10d49d7SPino Toscanoif test "$libssh" = "yes"; then 38279a2d462eSRichard W.M. Jones cat > $TMPC <<EOF 3828b10d49d7SPino Toscano#include <libssh/libssh.h> 3829b10d49d7SPino Toscanoint main(void) { return ssh_get_server_publickey(NULL, NULL); } 38309a2d462eSRichard W.M. JonesEOF 3831b10d49d7SPino Toscano if compile_prog "$libssh_cflags" "$libssh_libs"; then 3832b10d49d7SPino Toscano libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 38339a2d462eSRichard W.M. Jones fi 38349a2d462eSRichard W.M. Jonesfi 38359a2d462eSRichard W.M. Jones 38369a2d462eSRichard W.M. Jones########################################## 38375c6c3a6cSChristoph Hellwig# linux-aio probe 38385c6c3a6cSChristoph Hellwig 38395c6c3a6cSChristoph Hellwigif test "$linux_aio" != "no" ; then 38405c6c3a6cSChristoph Hellwig cat > $TMPC <<EOF 38415c6c3a6cSChristoph Hellwig#include <libaio.h> 38425c6c3a6cSChristoph Hellwig#include <sys/eventfd.h> 3843832ce9c2SScott Wood#include <stddef.h> 38445c6c3a6cSChristoph Hellwigint main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 38455c6c3a6cSChristoph HellwigEOF 38465c6c3a6cSChristoph Hellwig if compile_prog "" "-laio" ; then 38475c6c3a6cSChristoph Hellwig linux_aio=yes 38485c6c3a6cSChristoph Hellwig else 38495c6c3a6cSChristoph Hellwig if test "$linux_aio" = "yes" ; then 385021684af0SStewart Smith feature_not_found "linux AIO" "Install libaio devel" 38515c6c3a6cSChristoph Hellwig fi 38523cfcae3cSLuiz Capitulino linux_aio=no 38535c6c3a6cSChristoph Hellwig fi 38545c6c3a6cSChristoph Hellwigfi 3855c10dd856SAarushi Mehta########################################## 3856c10dd856SAarushi Mehta# linux-io-uring probe 3857c10dd856SAarushi Mehta 3858c10dd856SAarushi Mehtaif test "$linux_io_uring" != "no" ; then 3859c10dd856SAarushi Mehta if $pkg_config liburing; then 3860c10dd856SAarushi Mehta linux_io_uring_cflags=$($pkg_config --cflags liburing) 3861c10dd856SAarushi Mehta linux_io_uring_libs=$($pkg_config --libs liburing) 3862c10dd856SAarushi Mehta linux_io_uring=yes 3863c10dd856SAarushi Mehta else 3864c10dd856SAarushi Mehta if test "$linux_io_uring" = "yes" ; then 3865c10dd856SAarushi Mehta feature_not_found "linux io_uring" "Install liburing devel" 3866c10dd856SAarushi Mehta fi 3867c10dd856SAarushi Mehta linux_io_uring=no 3868c10dd856SAarushi Mehta fi 3869c10dd856SAarushi Mehtafi 38705c6c3a6cSChristoph Hellwig 38715c6c3a6cSChristoph Hellwig########################################## 38727aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX 38733b8acc11SPaolo Bonzini 38747aaa6a16SPaolo Bonziniif test "$tpm" = ""; then 38757aaa6a16SPaolo Bonzini if test "$mingw32" = "yes"; then 38767aaa6a16SPaolo Bonzini tpm=no 38773b8acc11SPaolo Bonzini else 38787aaa6a16SPaolo Bonzini tpm=yes 38797aaa6a16SPaolo Bonzini fi 38807aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then 38817aaa6a16SPaolo Bonzini if test "$mingw32" = "yes" ; then 38827aaa6a16SPaolo Bonzini error_exit "TPM emulation only available on POSIX systems" 38837aaa6a16SPaolo Bonzini fi 38843b8acc11SPaolo Bonzinifi 38853b8acc11SPaolo Bonzini 38863b8acc11SPaolo Bonzini########################################## 3887758e8e38SVenkateswararao Jujjuri (JV)# attr probe 3888758e8e38SVenkateswararao Jujjuri (JV) 3889ec0d5893SMarc-André Lureaulibattr_libs= 3890758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" != "no" ; then 3891758e8e38SVenkateswararao Jujjuri (JV) cat > $TMPC <<EOF 3892758e8e38SVenkateswararao Jujjuri (JV)#include <stdio.h> 3893758e8e38SVenkateswararao Jujjuri (JV)#include <sys/types.h> 3894f2338fb4SPavel Borzenkov#ifdef CONFIG_LIBATTR 3895f2338fb4SPavel Borzenkov#include <attr/xattr.h> 3896f2338fb4SPavel Borzenkov#else 38974f26f2b6SAvi Kivity#include <sys/xattr.h> 3898f2338fb4SPavel Borzenkov#endif 3899758e8e38SVenkateswararao Jujjuri (JV)int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3900758e8e38SVenkateswararao Jujjuri (JV)EOF 39014f26f2b6SAvi Kivity if compile_prog "" "" ; then 39024f26f2b6SAvi Kivity attr=yes 39034f26f2b6SAvi Kivity # Older distros have <attr/xattr.h>, and need -lattr: 3904f2338fb4SPavel Borzenkov elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3905758e8e38SVenkateswararao Jujjuri (JV) attr=yes 3906ec0d5893SMarc-André Lureau libattr_libs="-lattr" 39074f26f2b6SAvi Kivity libattr=yes 3908758e8e38SVenkateswararao Jujjuri (JV) else 3909758e8e38SVenkateswararao Jujjuri (JV) if test "$attr" = "yes" ; then 391021684af0SStewart Smith feature_not_found "ATTR" "Install libc6 or libattr devel" 3911758e8e38SVenkateswararao Jujjuri (JV) fi 3912758e8e38SVenkateswararao Jujjuri (JV) attr=no 3913758e8e38SVenkateswararao Jujjuri (JV) fi 3914758e8e38SVenkateswararao Jujjuri (JV)fi 3915758e8e38SVenkateswararao Jujjuri (JV) 3916758e8e38SVenkateswararao Jujjuri (JV)########################################## 3917bf9298b9Saliguori# iovec probe 3918bf9298b9Saliguoricat > $TMPC <<EOF 3919db34f0b3Sblueswir1#include <sys/types.h> 3920bf9298b9Saliguori#include <sys/uio.h> 3921db34f0b3Sblueswir1#include <unistd.h> 3922f91f9beeSStefan Weilint main(void) { return sizeof(struct iovec); } 3923bf9298b9SaliguoriEOF 3924bf9298b9Saliguoriiovec=no 392552166aa0SJuan Quintelaif compile_prog "" "" ; then 3926bf9298b9Saliguori iovec=yes 3927bf9298b9Saliguorifi 3928bf9298b9Saliguori 3929f652e6afSaurel32########################################## 3930ceb42de8Saliguori# preadv probe 3931ceb42de8Saliguoricat > $TMPC <<EOF 3932ceb42de8Saliguori#include <sys/types.h> 3933ceb42de8Saliguori#include <sys/uio.h> 3934ceb42de8Saliguori#include <unistd.h> 3935c075a723SBlue Swirlint main(void) { return preadv(0, 0, 0, 0); } 3936ceb42de8SaliguoriEOF 3937ceb42de8Saliguoripreadv=no 393852166aa0SJuan Quintelaif compile_prog "" "" ; then 3939ceb42de8Saliguori preadv=yes 3940ceb42de8Saliguorifi 3941ceb42de8Saliguori 3942ceb42de8Saliguori########################################## 3943f652e6afSaurel32# fdt probe 3944e169e1e1SPeter Maydell# fdt support is mandatory for at least some target architectures, 3945e169e1e1SPeter Maydell# so insist on it if we're building those system emulators. 3946e169e1e1SPeter Maydellfdt_required=no 3947e169e1e1SPeter Maydellfor target in $target_list; do 3948e169e1e1SPeter Maydell case $target in 3949c8c35e5fSYoshinori Sato aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu) 3950e169e1e1SPeter Maydell fdt_required=yes 3951e169e1e1SPeter Maydell ;; 3952e169e1e1SPeter Maydell esac 3953e169e1e1SPeter Maydelldone 3954e169e1e1SPeter Maydell 3955e169e1e1SPeter Maydellif test "$fdt_required" = "yes"; then 3956e169e1e1SPeter Maydell if test "$fdt" = "no"; then 3957e169e1e1SPeter Maydell error_exit "fdt disabled but some requested targets require it." \ 3958e169e1e1SPeter Maydell "You can turn off fdt only if you also disable all the system emulation" \ 3959e169e1e1SPeter Maydell "targets which need it (by specifying a cut down --target-list)." 3960e169e1e1SPeter Maydell fi 3961e169e1e1SPeter Maydell fdt=yes 39627ba4a4d3SPhilippe Mathieu-Daudéelif test "$fdt" != "yes" ; then 39637ba4a4d3SPhilippe Mathieu-Daudé fdt=no 3964e169e1e1SPeter Maydellfi 3965e169e1e1SPeter Maydell 3966d599938aSLaurent Vivier# fdt is only required when building softmmu targets 3967d599938aSLaurent Vivierif test -z "$fdt" -a "$softmmu" != "yes" ; then 3968d599938aSLaurent Vivier fdt="no" 3969d599938aSLaurent Vivierfi 3970d599938aSLaurent Vivier 39712df87df7SJuan Quintelaif test "$fdt" != "no" ; then 3972b41af4baSJuan Quintela fdt_libs="-lfdt" 397396ce6545SPeter Crosthwaite # explicitly check for libfdt_env.h as it is missing in some stable installs 39746e85fce0SPaul Burton # and test for required functions to make sure we are on a version >= 1.4.2 3975f652e6afSaurel32 cat > $TMPC << EOF 397631ce0adbSThomas Huth#include <libfdt.h> 397796ce6545SPeter Crosthwaite#include <libfdt_env.h> 3978fea35ca4SAlexey Kardashevskiyint main(void) { fdt_check_full(NULL, 0); return 0; } 3979f652e6afSaurel32EOF 398052166aa0SJuan Quintela if compile_prog "" "$fdt_libs" ; then 3981a540f158SPeter Crosthwaite # system DTC is good - use it 3982e3971d61SPhilippe Mathieu-Daudé fdt=system 3983aef45d51SDaniel P. Berrange else 3984aef45d51SDaniel P. Berrange # have GIT checkout, so activate dtc submodule 3985aef45d51SDaniel P. Berrange if test -e "${source_path}/.git" ; then 3986aef45d51SDaniel P. Berrange git_submodules="${git_submodules} dtc" 3987aef45d51SDaniel P. Berrange fi 3988aef45d51SDaniel P. Berrange if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 3989e3971d61SPhilippe Mathieu-Daudé fdt=git 3990a540f158SPeter Crosthwaite mkdir -p dtc 399125211446SPaolo Bonzini fdt_cflags="-I${source_path}/dtc/libfdt" 399258683d07SPaolo Bonzini fdt_ldflags="-Ldtc/libfdt" 39938a99e9a3SPhilippe Mathieu-Daudé fdt_libs="$fdt_libs" 3994a540f158SPeter Crosthwaite elif test "$fdt" = "yes" ; then 3995aef45d51SDaniel P. Berrange # Not a git build & no libfdt found, prompt for system install 3996aef45d51SDaniel P. Berrange error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 3997aef45d51SDaniel P. Berrange "Please install the DTC (libfdt) devel package" 3998a540f158SPeter Crosthwaite else 3999a540f158SPeter Crosthwaite # don't have and don't want 4000de3a354aSMichael Walle fdt_libs= 40012df87df7SJuan Quintela fdt=no 4002f652e6afSaurel32 fi 4003f652e6afSaurel32 fi 4004aef45d51SDaniel P. Berrangefi 4005f652e6afSaurel32 400620ff075bSMichael Walle########################################## 4007fb719563SOGAWA Hirofumi# opengl probe (for sdl2, gtk, milkymist-tmu2) 4008b1546f32SGerd Hoffmann 4009d52c454aSMarc-André Lureaugbm="no" 4010d52c454aSMarc-André Lureauif $pkg_config gbm; then 4011d52c454aSMarc-André Lureau gbm_cflags="$($pkg_config --cflags gbm)" 4012d52c454aSMarc-André Lureau gbm_libs="$($pkg_config --libs gbm)" 4013d52c454aSMarc-André Lureau gbm="yes" 4014d52c454aSMarc-André Lureaufi 4015d52c454aSMarc-André Lureau 4016da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then 40174939a1dfSMichael Tokarev opengl_pkgs="epoxy gbm" 40185f9b1e35SGerd Hoffmann if $pkg_config $opengl_pkgs; then 40195f9b1e35SGerd Hoffmann opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 40205f9b1e35SGerd Hoffmann opengl_libs="$($pkg_config --libs $opengl_pkgs)" 4021da076ffeSGerd Hoffmann opengl=yes 4022925a0400SGerd Hoffmann if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 4023925a0400SGerd Hoffmann gtk_gl="yes" 4024925a0400SGerd Hoffmann fi 402520ff075bSMichael Walle else 4026da076ffeSGerd Hoffmann if test "$opengl" = "yes" ; then 4027dcf30025SGerd Hoffmann feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 402820ff075bSMichael Walle fi 4029f676c67eSJeremy White opengl_cflags="" 4030da076ffeSGerd Hoffmann opengl_libs="" 4031da076ffeSGerd Hoffmann opengl=no 403220ff075bSMichael Walle fi 403320ff075bSMichael Wallefi 403420ff075bSMichael Walle 4035014cb152SGerd Hoffmannif test "$opengl" = "yes"; then 4036014cb152SGerd Hoffmann cat > $TMPC << EOF 4037014cb152SGerd Hoffmann#include <epoxy/egl.h> 4038014cb152SGerd Hoffmann#ifndef EGL_MESA_image_dma_buf_export 4039014cb152SGerd Hoffmann# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 4040014cb152SGerd Hoffmann#endif 4041014cb152SGerd Hoffmannint main(void) { return 0; } 4042014cb152SGerd HoffmannEOF 4043014cb152SGerd Hoffmann if compile_prog "" "" ; then 4044014cb152SGerd Hoffmann opengl_dmabuf=yes 4045014cb152SGerd Hoffmann fi 4046014cb152SGerd Hoffmannfi 4047c9a12e75SChrysostomos Nanakos 4048e633a5c6SEric Blakeif test "$opengl" = "yes" && test "$have_x11" = "yes"; then 404999e1a93bSPhilippe Mathieu-Daudé for target in $target_list; do 405099e1a93bSPhilippe Mathieu-Daudé case $target in 405199e1a93bSPhilippe Mathieu-Daudé lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 405299e1a93bSPhilippe Mathieu-Daudé need_x11=yes 405399e1a93bSPhilippe Mathieu-Daudé ;; 405499e1a93bSPhilippe Mathieu-Daudé esac 405599e1a93bSPhilippe Mathieu-Daudé done 405699e1a93bSPhilippe Mathieu-Daudéfi 405799e1a93bSPhilippe Mathieu-Daudé 4058ed279a06SKlim Kireev########################################## 4059ed279a06SKlim Kireev# libxml2 probe 4060ed279a06SKlim Kireevif test "$libxml2" != "no" ; then 4061ed279a06SKlim Kireev if $pkg_config --exists libxml-2.0; then 4062ed279a06SKlim Kireev libxml2="yes" 4063ed279a06SKlim Kireev libxml2_cflags=$($pkg_config --cflags libxml-2.0) 4064ed279a06SKlim Kireev libxml2_libs=$($pkg_config --libs libxml-2.0) 4065ed279a06SKlim Kireev else 4066ed279a06SKlim Kireev if test "$libxml2" = "yes"; then 4067ed279a06SKlim Kireev feature_not_found "libxml2" "Install libxml2 devel" 4068ed279a06SKlim Kireev fi 4069ed279a06SKlim Kireev libxml2="no" 4070ed279a06SKlim Kireev fi 4071ed279a06SKlim Kireevfi 4072c9a12e75SChrysostomos Nanakos 4073eb100396SBharata B Rao########################################## 4074eb100396SBharata B Rao# glusterfs probe 4075eb100396SBharata B Raoif test "$glusterfs" != "no" ; then 407665d5d3f9SStefan Weil if $pkg_config --atleast-version=3 glusterfs-api; then 4077e01bee08SBharata B Rao glusterfs="yes" 407889138857SStefan Weil glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 407989138857SStefan Weil glusterfs_libs=$($pkg_config --libs glusterfs-api) 4080d85fa9ebSJeff Cody if $pkg_config --atleast-version=4 glusterfs-api; then 4081d85fa9ebSJeff Cody glusterfs_xlator_opt="yes" 4082d85fa9ebSJeff Cody fi 408365d5d3f9SStefan Weil if $pkg_config --atleast-version=5 glusterfs-api; then 40840c14fb47SBharata B Rao glusterfs_discard="yes" 40850c14fb47SBharata B Rao fi 40867c815372SBharata B Rao if $pkg_config --atleast-version=6 glusterfs-api; then 4087df3a429aSNiels de Vos glusterfs_fallocate="yes" 40887c815372SBharata B Rao glusterfs_zerofill="yes" 40897c815372SBharata B Rao fi 4090e014dbe7SPrasanna Kumar Kalever cat > $TMPC << EOF 4091e014dbe7SPrasanna Kumar Kalever#include <glusterfs/api/glfs.h> 4092e014dbe7SPrasanna Kumar Kalever 4093e014dbe7SPrasanna Kumar Kaleverint 4094e014dbe7SPrasanna Kumar Kalevermain(void) 4095e014dbe7SPrasanna Kumar Kalever{ 4096e014dbe7SPrasanna Kumar Kalever /* new glfs_ftruncate() passes two additional args */ 4097e014dbe7SPrasanna Kumar Kalever return glfs_ftruncate(NULL, 0, NULL, NULL); 4098e014dbe7SPrasanna Kumar Kalever} 4099e014dbe7SPrasanna Kumar KaleverEOF 4100e014dbe7SPrasanna Kumar Kalever if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4101e014dbe7SPrasanna Kumar Kalever glusterfs_ftruncate_has_stat="yes" 4102e014dbe7SPrasanna Kumar Kalever fi 41030e3b891fSNiels de Vos cat > $TMPC << EOF 41040e3b891fSNiels de Vos#include <glusterfs/api/glfs.h> 41050e3b891fSNiels de Vos 41060e3b891fSNiels de Vos/* new glfs_io_cbk() passes two additional glfs_stat structs */ 41070e3b891fSNiels de Vosstatic void 41080e3b891fSNiels de Vosglusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 41090e3b891fSNiels de Vos{} 41100e3b891fSNiels de Vos 41110e3b891fSNiels de Vosint 41120e3b891fSNiels de Vosmain(void) 41130e3b891fSNiels de Vos{ 41140e3b891fSNiels de Vos glfs_io_cbk iocb = &glusterfs_iocb; 41150e3b891fSNiels de Vos iocb(NULL, 0 , NULL, NULL, NULL); 41160e3b891fSNiels de Vos return 0; 41170e3b891fSNiels de Vos} 41180e3b891fSNiels de VosEOF 41190e3b891fSNiels de Vos if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 41200e3b891fSNiels de Vos glusterfs_iocb_has_stat="yes" 41210e3b891fSNiels de Vos fi 4122eb100396SBharata B Rao else 4123eb100396SBharata B Rao if test "$glusterfs" = "yes" ; then 41248efc9363SHu Tao feature_not_found "GlusterFS backend support" \ 41258efc9363SHu Tao "Install glusterfs-api devel >= 3" 4126eb100396SBharata B Rao fi 4127e01bee08SBharata B Rao glusterfs="no" 4128eb100396SBharata B Rao fi 4129eb100396SBharata B Raofi 4130eb100396SBharata B Rao 413139386ac7Saurel32# Check for inotify functions when we are building linux-user 41323b3f24adSaurel32# emulator. This is done because older glibc versions don't 41333b3f24adSaurel32# have syscall stubs for these implemented. In that case we 41343b3f24adSaurel32# don't provide them even if kernel supports them. 41353b3f24adSaurel32# 41363b3f24adSaurel32inotify=no 41373b3f24adSaurel32cat > $TMPC << EOF 41383b3f24adSaurel32#include <sys/inotify.h> 41393b3f24adSaurel32 41403b3f24adSaurel32int 41413b3f24adSaurel32main(void) 41423b3f24adSaurel32{ 41433b3f24adSaurel32 /* try to start inotify */ 41448690e420Saurel32 return inotify_init(); 41453b3f24adSaurel32} 41463b3f24adSaurel32EOF 414752166aa0SJuan Quintelaif compile_prog "" "" ; then 41483b3f24adSaurel32 inotify=yes 41493b3f24adSaurel32fi 41503b3f24adSaurel32 4151c05c7a73SRiku Voipioinotify1=no 4152c05c7a73SRiku Voipiocat > $TMPC << EOF 4153c05c7a73SRiku Voipio#include <sys/inotify.h> 4154c05c7a73SRiku Voipio 4155c05c7a73SRiku Voipioint 4156c05c7a73SRiku Voipiomain(void) 4157c05c7a73SRiku Voipio{ 4158c05c7a73SRiku Voipio /* try to start inotify */ 4159c05c7a73SRiku Voipio return inotify_init1(0); 4160c05c7a73SRiku Voipio} 4161c05c7a73SRiku VoipioEOF 4162c05c7a73SRiku Voipioif compile_prog "" "" ; then 4163c05c7a73SRiku Voipio inotify1=yes 4164c05c7a73SRiku Voipiofi 4165c05c7a73SRiku Voipio 4166099d6b0fSRiku Voipio# check if pipe2 is there 4167099d6b0fSRiku Voipiopipe2=no 4168099d6b0fSRiku Voipiocat > $TMPC << EOF 4169099d6b0fSRiku Voipio#include <unistd.h> 4170099d6b0fSRiku Voipio#include <fcntl.h> 4171099d6b0fSRiku Voipio 4172099d6b0fSRiku Voipioint main(void) 4173099d6b0fSRiku Voipio{ 4174099d6b0fSRiku Voipio int pipefd[2]; 41759bca8162SBruce Rogers return pipe2(pipefd, O_CLOEXEC); 4176099d6b0fSRiku Voipio} 4177099d6b0fSRiku VoipioEOF 417852166aa0SJuan Quintelaif compile_prog "" "" ; then 4179099d6b0fSRiku Voipio pipe2=yes 4180099d6b0fSRiku Voipiofi 4181099d6b0fSRiku Voipio 418240ff6d7eSKevin Wolf# check if accept4 is there 418340ff6d7eSKevin Wolfaccept4=no 418440ff6d7eSKevin Wolfcat > $TMPC << EOF 418540ff6d7eSKevin Wolf#include <sys/socket.h> 418640ff6d7eSKevin Wolf#include <stddef.h> 418740ff6d7eSKevin Wolf 418840ff6d7eSKevin Wolfint main(void) 418940ff6d7eSKevin Wolf{ 419040ff6d7eSKevin Wolf accept4(0, NULL, NULL, SOCK_CLOEXEC); 419140ff6d7eSKevin Wolf return 0; 419240ff6d7eSKevin Wolf} 419340ff6d7eSKevin WolfEOF 419440ff6d7eSKevin Wolfif compile_prog "" "" ; then 419540ff6d7eSKevin Wolf accept4=yes 419640ff6d7eSKevin Wolffi 419740ff6d7eSKevin Wolf 41983ce34dfbSvibisreenivasan# check if tee/splice is there. vmsplice was added same time. 41993ce34dfbSvibisreenivasansplice=no 42003ce34dfbSvibisreenivasancat > $TMPC << EOF 42013ce34dfbSvibisreenivasan#include <unistd.h> 42023ce34dfbSvibisreenivasan#include <fcntl.h> 42033ce34dfbSvibisreenivasan#include <limits.h> 42043ce34dfbSvibisreenivasan 42053ce34dfbSvibisreenivasanint main(void) 42063ce34dfbSvibisreenivasan{ 420766ea0f22SStefan Weil int len, fd = 0; 42083ce34dfbSvibisreenivasan len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 42093ce34dfbSvibisreenivasan splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 42103ce34dfbSvibisreenivasan return 0; 42113ce34dfbSvibisreenivasan} 42123ce34dfbSvibisreenivasanEOF 421352166aa0SJuan Quintelaif compile_prog "" "" ; then 42143ce34dfbSvibisreenivasan splice=yes 42153ce34dfbSvibisreenivasanfi 42163ce34dfbSvibisreenivasan 4217dcc38d1cSMarcelo Tosatti########################################## 4218a99d57bbSWanlong Gao# libnuma probe 4219a99d57bbSWanlong Gao 4220a99d57bbSWanlong Gaoif test "$numa" != "no" ; then 4221a99d57bbSWanlong Gao cat > $TMPC << EOF 4222a99d57bbSWanlong Gao#include <numa.h> 4223a99d57bbSWanlong Gaoint main(void) { return numa_available(); } 4224a99d57bbSWanlong GaoEOF 4225a99d57bbSWanlong Gao 4226a99d57bbSWanlong Gao if compile_prog "" "-lnuma" ; then 4227a99d57bbSWanlong Gao numa=yes 4228ab318051SMarc-André Lureau numa_libs="-lnuma" 4229a99d57bbSWanlong Gao else 4230a99d57bbSWanlong Gao if test "$numa" = "yes" ; then 4231a99d57bbSWanlong Gao feature_not_found "numa" "install numactl devel" 4232a99d57bbSWanlong Gao fi 4233a99d57bbSWanlong Gao numa=no 4234a99d57bbSWanlong Gao fi 4235a99d57bbSWanlong Gaofi 4236a99d57bbSWanlong Gao 4237aa087962SPaolo Bonzinimalloc=system 42387b01cb97SAlexandre Derumierif test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 42397b01cb97SAlexandre Derumier echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 42407b01cb97SAlexandre Derumier exit 1 4241aa087962SPaolo Bonzinielif test "$tcmalloc" = "yes" ; then 4242aa087962SPaolo Bonzini malloc=tcmalloc 4243aa087962SPaolo Bonzinielif test "$jemalloc" = "yes" ; then 4244aa087962SPaolo Bonzini malloc=jemalloc 42457b01cb97SAlexandre Derumierfi 42467b01cb97SAlexandre Derumier 42477b01cb97SAlexandre Derumier########################################## 4248dcc38d1cSMarcelo Tosatti# signalfd probe 4249dcc38d1cSMarcelo Tosattisignalfd="no" 4250dcc38d1cSMarcelo Tosatticat > $TMPC << EOF 4251dcc38d1cSMarcelo Tosatti#include <unistd.h> 4252dcc38d1cSMarcelo Tosatti#include <sys/syscall.h> 4253dcc38d1cSMarcelo Tosatti#include <signal.h> 4254dcc38d1cSMarcelo Tosattiint main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4255dcc38d1cSMarcelo TosattiEOF 4256dcc38d1cSMarcelo Tosatti 4257dcc38d1cSMarcelo Tosattiif compile_prog "" "" ; then 4258dcc38d1cSMarcelo Tosatti signalfd=yes 4259dcc38d1cSMarcelo Tosattifi 4260dcc38d1cSMarcelo Tosatti 4261d339d766SRichard W.M. Jones# check if optreset global is declared by <getopt.h> 4262d339d766SRichard W.M. Jonesoptreset="no" 4263d339d766SRichard W.M. Jonescat > $TMPC << EOF 4264d339d766SRichard W.M. Jones#include <getopt.h> 4265d339d766SRichard W.M. Jonesint main(void) { return optreset; } 4266d339d766SRichard W.M. JonesEOF 4267d339d766SRichard W.M. Jones 4268d339d766SRichard W.M. Jonesif compile_prog "" "" ; then 4269d339d766SRichard W.M. Jones optreset=yes 4270d339d766SRichard W.M. Jonesfi 4271d339d766SRichard W.M. Jones 4272c2882b96SRiku Voipio# check if eventfd is supported 4273c2882b96SRiku Voipioeventfd=no 4274c2882b96SRiku Voipiocat > $TMPC << EOF 4275c2882b96SRiku Voipio#include <sys/eventfd.h> 4276c2882b96SRiku Voipio 4277c2882b96SRiku Voipioint main(void) 4278c2882b96SRiku Voipio{ 427955cc7f3eSStefan Weil return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4280c2882b96SRiku Voipio} 4281c2882b96SRiku VoipioEOF 4282c2882b96SRiku Voipioif compile_prog "" "" ; then 4283c2882b96SRiku Voipio eventfd=yes 4284c2882b96SRiku Voipiofi 4285c2882b96SRiku Voipio 4286751bcc39SMarc-André Lureau# check if memfd is supported 4287751bcc39SMarc-André Lureaumemfd=no 4288751bcc39SMarc-André Lureaucat > $TMPC << EOF 428975e5b70eSPaolo Bonzini#include <sys/mman.h> 4290751bcc39SMarc-André Lureau 4291751bcc39SMarc-André Lureauint main(void) 4292751bcc39SMarc-André Lureau{ 4293751bcc39SMarc-André Lureau return memfd_create("foo", MFD_ALLOW_SEALING); 4294751bcc39SMarc-André Lureau} 4295751bcc39SMarc-André LureauEOF 4296751bcc39SMarc-André Lureauif compile_prog "" "" ; then 4297751bcc39SMarc-André Lureau memfd=yes 4298751bcc39SMarc-André Lureaufi 4299751bcc39SMarc-André Lureau 4300955727d2SCortland Tölva# check for usbfs 4301955727d2SCortland Tölvahave_usbfs=no 4302955727d2SCortland Tölvaif test "$linux_user" = "yes"; then 430396566d09SThomas Petazzoni cat > $TMPC << EOF 430496566d09SThomas Petazzoni#include <linux/usbdevice_fs.h> 430596566d09SThomas Petazzoni 430696566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES 430796566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined" 430896566d09SThomas Petazzoni#endif 430996566d09SThomas Petazzoni 431096566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM 431196566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined" 431296566d09SThomas Petazzoni#endif 431396566d09SThomas Petazzoni 431496566d09SThomas Petazzoniint main(void) 431596566d09SThomas Petazzoni{ 431696566d09SThomas Petazzoni return 0; 431796566d09SThomas Petazzoni} 431896566d09SThomas PetazzoniEOF 431996566d09SThomas Petazzoni if compile_prog "" ""; then 4320955727d2SCortland Tölva have_usbfs=yes 4321955727d2SCortland Tölva fi 4322955727d2SCortland Tölvafi 4323751bcc39SMarc-André Lureau 4324d0927938SUlrich Hecht# check for fallocate 4325d0927938SUlrich Hechtfallocate=no 4326d0927938SUlrich Hechtcat > $TMPC << EOF 4327d0927938SUlrich Hecht#include <fcntl.h> 4328d0927938SUlrich Hecht 4329d0927938SUlrich Hechtint main(void) 4330d0927938SUlrich Hecht{ 4331d0927938SUlrich Hecht fallocate(0, 0, 0, 0); 4332d0927938SUlrich Hecht return 0; 4333d0927938SUlrich Hecht} 4334d0927938SUlrich HechtEOF 43358fb03151SPeter Maydellif compile_prog "" "" ; then 4336d0927938SUlrich Hecht fallocate=yes 4337d0927938SUlrich Hechtfi 4338d0927938SUlrich Hecht 43393d4fa43eSKusanagi Kouichi# check for fallocate hole punching 43403d4fa43eSKusanagi Kouichifallocate_punch_hole=no 43413d4fa43eSKusanagi Kouichicat > $TMPC << EOF 43423d4fa43eSKusanagi Kouichi#include <fcntl.h> 43433d4fa43eSKusanagi Kouichi#include <linux/falloc.h> 43443d4fa43eSKusanagi Kouichi 43453d4fa43eSKusanagi Kouichiint main(void) 43463d4fa43eSKusanagi Kouichi{ 43473d4fa43eSKusanagi Kouichi fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 43483d4fa43eSKusanagi Kouichi return 0; 43493d4fa43eSKusanagi Kouichi} 43503d4fa43eSKusanagi KouichiEOF 43513d4fa43eSKusanagi Kouichiif compile_prog "" "" ; then 43523d4fa43eSKusanagi Kouichi fallocate_punch_hole=yes 43533d4fa43eSKusanagi Kouichifi 43543d4fa43eSKusanagi Kouichi 4355b953f075SDenis V. Lunev# check that fallocate supports range zeroing inside the file 4356b953f075SDenis V. Lunevfallocate_zero_range=no 4357b953f075SDenis V. Lunevcat > $TMPC << EOF 4358b953f075SDenis V. Lunev#include <fcntl.h> 4359b953f075SDenis V. Lunev#include <linux/falloc.h> 4360b953f075SDenis V. Lunev 4361b953f075SDenis V. Lunevint main(void) 4362b953f075SDenis V. Lunev{ 4363b953f075SDenis V. Lunev fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4364b953f075SDenis V. Lunev return 0; 4365b953f075SDenis V. Lunev} 4366b953f075SDenis V. LunevEOF 4367b953f075SDenis V. Lunevif compile_prog "" "" ; then 4368b953f075SDenis V. Lunev fallocate_zero_range=yes 4369b953f075SDenis V. Lunevfi 4370b953f075SDenis V. Lunev 4371ed911435SKevin Wolf# check for posix_fallocate 4372ed911435SKevin Wolfposix_fallocate=no 4373ed911435SKevin Wolfcat > $TMPC << EOF 4374ed911435SKevin Wolf#include <fcntl.h> 4375ed911435SKevin Wolf 4376ed911435SKevin Wolfint main(void) 4377ed911435SKevin Wolf{ 4378ed911435SKevin Wolf posix_fallocate(0, 0, 0); 4379ed911435SKevin Wolf return 0; 4380ed911435SKevin Wolf} 4381ed911435SKevin WolfEOF 4382ed911435SKevin Wolfif compile_prog "" "" ; then 4383ed911435SKevin Wolf posix_fallocate=yes 4384ed911435SKevin Wolffi 4385ed911435SKevin Wolf 4386c727f47dSPeter Maydell# check for sync_file_range 4387c727f47dSPeter Maydellsync_file_range=no 4388c727f47dSPeter Maydellcat > $TMPC << EOF 4389c727f47dSPeter Maydell#include <fcntl.h> 4390c727f47dSPeter Maydell 4391c727f47dSPeter Maydellint main(void) 4392c727f47dSPeter Maydell{ 4393c727f47dSPeter Maydell sync_file_range(0, 0, 0, 0); 4394c727f47dSPeter Maydell return 0; 4395c727f47dSPeter Maydell} 4396c727f47dSPeter MaydellEOF 43978fb03151SPeter Maydellif compile_prog "" "" ; then 4398c727f47dSPeter Maydell sync_file_range=yes 4399c727f47dSPeter Maydellfi 4400c727f47dSPeter Maydell 4401dace20dcSPeter Maydell# check for linux/fiemap.h and FS_IOC_FIEMAP 4402dace20dcSPeter Maydellfiemap=no 4403dace20dcSPeter Maydellcat > $TMPC << EOF 4404dace20dcSPeter Maydell#include <sys/ioctl.h> 4405dace20dcSPeter Maydell#include <linux/fs.h> 4406dace20dcSPeter Maydell#include <linux/fiemap.h> 4407dace20dcSPeter Maydell 4408dace20dcSPeter Maydellint main(void) 4409dace20dcSPeter Maydell{ 4410dace20dcSPeter Maydell ioctl(0, FS_IOC_FIEMAP, 0); 4411dace20dcSPeter Maydell return 0; 4412dace20dcSPeter Maydell} 4413dace20dcSPeter MaydellEOF 44148fb03151SPeter Maydellif compile_prog "" "" ; then 4415dace20dcSPeter Maydell fiemap=yes 4416dace20dcSPeter Maydellfi 4417dace20dcSPeter Maydell 4418d0927938SUlrich Hecht# check for dup3 4419d0927938SUlrich Hechtdup3=no 4420d0927938SUlrich Hechtcat > $TMPC << EOF 4421d0927938SUlrich Hecht#include <unistd.h> 4422d0927938SUlrich Hecht 4423d0927938SUlrich Hechtint main(void) 4424d0927938SUlrich Hecht{ 4425d0927938SUlrich Hecht dup3(0, 0, 0); 4426d0927938SUlrich Hecht return 0; 4427d0927938SUlrich Hecht} 4428d0927938SUlrich HechtEOF 442978f5d726SJan Kiszkaif compile_prog "" "" ; then 4430d0927938SUlrich Hecht dup3=yes 4431d0927938SUlrich Hechtfi 4432d0927938SUlrich Hecht 44334e0c6529SAlex Bligh# check for ppoll support 44344e0c6529SAlex Blighppoll=no 44354e0c6529SAlex Blighcat > $TMPC << EOF 44364e0c6529SAlex Bligh#include <poll.h> 44374e0c6529SAlex Bligh 44384e0c6529SAlex Blighint main(void) 44394e0c6529SAlex Bligh{ 44404e0c6529SAlex Bligh struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 44414e0c6529SAlex Bligh ppoll(&pfd, 1, 0, 0); 44424e0c6529SAlex Bligh return 0; 44434e0c6529SAlex Bligh} 44444e0c6529SAlex BlighEOF 44454e0c6529SAlex Blighif compile_prog "" "" ; then 44464e0c6529SAlex Bligh ppoll=yes 44474e0c6529SAlex Blighfi 44484e0c6529SAlex Bligh 4449cd758dd0SAlex Bligh# check for prctl(PR_SET_TIMERSLACK , ... ) support 4450cd758dd0SAlex Blighprctl_pr_set_timerslack=no 4451cd758dd0SAlex Blighcat > $TMPC << EOF 4452cd758dd0SAlex Bligh#include <sys/prctl.h> 4453cd758dd0SAlex Bligh 4454cd758dd0SAlex Blighint main(void) 4455cd758dd0SAlex Bligh{ 4456cd758dd0SAlex Bligh prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4457cd758dd0SAlex Bligh return 0; 4458cd758dd0SAlex Bligh} 4459cd758dd0SAlex BlighEOF 4460cd758dd0SAlex Blighif compile_prog "" "" ; then 4461cd758dd0SAlex Bligh prctl_pr_set_timerslack=yes 4462cd758dd0SAlex Blighfi 4463cd758dd0SAlex Bligh 44643b6edd16SPeter Maydell# check for epoll support 44653b6edd16SPeter Maydellepoll=no 44663b6edd16SPeter Maydellcat > $TMPC << EOF 44673b6edd16SPeter Maydell#include <sys/epoll.h> 44683b6edd16SPeter Maydell 44693b6edd16SPeter Maydellint main(void) 44703b6edd16SPeter Maydell{ 44713b6edd16SPeter Maydell epoll_create(0); 44723b6edd16SPeter Maydell return 0; 44733b6edd16SPeter Maydell} 44743b6edd16SPeter MaydellEOF 44758fb03151SPeter Maydellif compile_prog "" "" ; then 44763b6edd16SPeter Maydell epoll=yes 44773b6edd16SPeter Maydellfi 44783b6edd16SPeter Maydell 4479227f0214SPeter Maydell# epoll_create1 is a later addition 4480227f0214SPeter Maydell# so we must check separately for its presence 44813b6edd16SPeter Maydellepoll_create1=no 44823b6edd16SPeter Maydellcat > $TMPC << EOF 44833b6edd16SPeter Maydell#include <sys/epoll.h> 44843b6edd16SPeter Maydell 44853b6edd16SPeter Maydellint main(void) 44863b6edd16SPeter Maydell{ 448719e83f6bSPeter Maydell /* Note that we use epoll_create1 as a value, not as 448819e83f6bSPeter Maydell * a function being called. This is necessary so that on 448919e83f6bSPeter Maydell * old SPARC glibc versions where the function was present in 449019e83f6bSPeter Maydell * the library but not declared in the header file we will 449119e83f6bSPeter Maydell * fail the configure check. (Otherwise we will get a compiler 449219e83f6bSPeter Maydell * warning but not an error, and will proceed to fail the 449319e83f6bSPeter Maydell * qemu compile where we compile with -Werror.) 449419e83f6bSPeter Maydell */ 4495c075a723SBlue Swirl return (int)(uintptr_t)&epoll_create1; 44963b6edd16SPeter Maydell} 44973b6edd16SPeter MaydellEOF 44988fb03151SPeter Maydellif compile_prog "" "" ; then 44993b6edd16SPeter Maydell epoll_create1=yes 45003b6edd16SPeter Maydellfi 45013b6edd16SPeter Maydell 4502a8fd1abaSPeter Maydell# check for sendfile support 4503a8fd1abaSPeter Maydellsendfile=no 4504a8fd1abaSPeter Maydellcat > $TMPC << EOF 4505a8fd1abaSPeter Maydell#include <sys/sendfile.h> 4506a8fd1abaSPeter Maydell 4507a8fd1abaSPeter Maydellint main(void) 4508a8fd1abaSPeter Maydell{ 4509a8fd1abaSPeter Maydell return sendfile(0, 0, 0, 0); 4510a8fd1abaSPeter Maydell} 4511a8fd1abaSPeter MaydellEOF 4512a8fd1abaSPeter Maydellif compile_prog "" "" ; then 4513a8fd1abaSPeter Maydell sendfile=yes 4514a8fd1abaSPeter Maydellfi 4515a8fd1abaSPeter Maydell 451651834341SRiku Voipio# check for timerfd support (glibc 2.8 and newer) 451751834341SRiku Voipiotimerfd=no 451851834341SRiku Voipiocat > $TMPC << EOF 451951834341SRiku Voipio#include <sys/timerfd.h> 452051834341SRiku Voipio 452151834341SRiku Voipioint main(void) 452251834341SRiku Voipio{ 452351834341SRiku Voipio return(timerfd_create(CLOCK_REALTIME, 0)); 452451834341SRiku Voipio} 452551834341SRiku VoipioEOF 452651834341SRiku Voipioif compile_prog "" "" ; then 452751834341SRiku Voipio timerfd=yes 452851834341SRiku Voipiofi 452951834341SRiku Voipio 45309af5c906SRiku Voipio# check for setns and unshare support 45319af5c906SRiku Voipiosetns=no 45329af5c906SRiku Voipiocat > $TMPC << EOF 45339af5c906SRiku Voipio#include <sched.h> 45349af5c906SRiku Voipio 45359af5c906SRiku Voipioint main(void) 45369af5c906SRiku Voipio{ 45379af5c906SRiku Voipio int ret; 45389af5c906SRiku Voipio ret = setns(0, 0); 45399af5c906SRiku Voipio ret = unshare(0); 45409af5c906SRiku Voipio return ret; 45419af5c906SRiku Voipio} 45429af5c906SRiku VoipioEOF 45439af5c906SRiku Voipioif compile_prog "" "" ; then 45449af5c906SRiku Voipio setns=yes 45459af5c906SRiku Voipiofi 45469af5c906SRiku Voipio 454738860a03SAleksandar Markovic# clock_adjtime probe 454838860a03SAleksandar Markovicclock_adjtime=no 454938860a03SAleksandar Markoviccat > $TMPC <<EOF 455038860a03SAleksandar Markovic#include <time.h> 455138860a03SAleksandar Markovic 455238860a03SAleksandar Markovicint main(void) 455338860a03SAleksandar Markovic{ 455438860a03SAleksandar Markovic return clock_adjtime(0, 0); 455538860a03SAleksandar Markovic} 455638860a03SAleksandar MarkovicEOF 455738860a03SAleksandar Markovicclock_adjtime=no 455838860a03SAleksandar Markovicif compile_prog "" "" ; then 455938860a03SAleksandar Markovic clock_adjtime=yes 456038860a03SAleksandar Markovicfi 456138860a03SAleksandar Markovic 45625a03cd00SAleksandar Markovic# syncfs probe 45635a03cd00SAleksandar Markovicsyncfs=no 45645a03cd00SAleksandar Markoviccat > $TMPC <<EOF 45655a03cd00SAleksandar Markovic#include <unistd.h> 45665a03cd00SAleksandar Markovic 45675a03cd00SAleksandar Markovicint main(void) 45685a03cd00SAleksandar Markovic{ 45695a03cd00SAleksandar Markovic return syncfs(0); 45705a03cd00SAleksandar Markovic} 45715a03cd00SAleksandar MarkovicEOF 45725a03cd00SAleksandar Markovicsyncfs=no 45735a03cd00SAleksandar Markovicif compile_prog "" "" ; then 45745a03cd00SAleksandar Markovic syncfs=yes 45755a03cd00SAleksandar Markovicfi 45765a03cd00SAleksandar Markovic 4577db37dd89SAleksandar Markovic# check for kcov support (kernel must be 4.4+, compiled with certain options) 4578db37dd89SAleksandar Markovickcov=no 4579db37dd89SAleksandar Markovicif check_include sys/kcov.h ; then 4580db37dd89SAleksandar Markovic kcov=yes 4581db37dd89SAleksandar Markovicfi 4582db37dd89SAleksandar Markovic 4583d6092e08SFilip Bozuta# check for btrfs filesystem support (kernel must be 3.9+) 4584d6092e08SFilip Bozutabtrfs=no 4585d6092e08SFilip Bozutaif check_include linux/btrfs.h ; then 4586d6092e08SFilip Bozuta btrfs=yes 4587d6092e08SFilip Bozutafi 4588d6092e08SFilip Bozuta 4589516e8b7dSPeter Maydell# If we're making warnings fatal, apply this to Sphinx runs as well 4590516e8b7dSPeter Maydellsphinx_werror="" 4591516e8b7dSPeter Maydellif test "$werror" = "yes"; then 4592516e8b7dSPeter Maydell sphinx_werror="-W" 4593516e8b7dSPeter Maydellfi 4594516e8b7dSPeter Maydell 45955f71eac0SPeter Maydell# Check we have a new enough version of sphinx-build 45965f71eac0SPeter Maydellhas_sphinx_build() { 45975f71eac0SPeter Maydell # This is a bit awkward but works: create a trivial document and 45985f71eac0SPeter Maydell # try to run it with our configuration file (which enforces a 45995f71eac0SPeter Maydell # version requirement). This will fail if either 46005f71eac0SPeter Maydell # sphinx-build doesn't exist at all or if it is too old. 46015f71eac0SPeter Maydell mkdir -p "$TMPDIR1/sphinx" 46025f71eac0SPeter Maydell touch "$TMPDIR1/sphinx/index.rst" 4603988ae6c3SAlex Bennée "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ 4604988ae6c3SAlex Bennée -b html "$TMPDIR1/sphinx" \ 4605988ae6c3SAlex Bennée "$TMPDIR1/sphinx/out" >> config.log 2>&1 46065f71eac0SPeter Maydell} 46075f71eac0SPeter Maydell 4608cc8ae6deSpbrook# Check if tools are available to build documentation. 4609a25dba17SJuan Quintelaif test "$docs" != "no" ; then 4610758b617aSPeter Maydell if has_sphinx_build; then 4611758b617aSPeter Maydell sphinx_ok=yes 4612758b617aSPeter Maydell else 4613758b617aSPeter Maydell sphinx_ok=no 4614758b617aSPeter Maydell fi 46151615aeafSPeter Maydell if test "$sphinx_ok" = "yes"; then 4616a25dba17SJuan Quintela docs=yes 461783a3ab8bSJuan Quintela else 4618a25dba17SJuan Quintela if test "$docs" = "yes" ; then 4619758b617aSPeter Maydell if has $sphinx_build && test "$sphinx_ok" != "yes"; then 4620758b617aSPeter Maydell echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 4621758b617aSPeter Maydell fi 46221615aeafSPeter Maydell feature_not_found "docs" "Install a Python 3 version of python-sphinx" 462383a3ab8bSJuan Quintela fi 4624a25dba17SJuan Quintela docs=no 462583a3ab8bSJuan Quintela fi 4626cc8ae6deSpbrookfi 4627cc8ae6deSpbrook 4628f514f41cSStefan Weil# Search for bswap_32 function 46296ae9a1f4SJuan Quintelabyteswap_h=no 46306ae9a1f4SJuan Quintelacat > $TMPC << EOF 46316ae9a1f4SJuan Quintela#include <byteswap.h> 46326ae9a1f4SJuan Quintelaint main(void) { return bswap_32(0); } 46336ae9a1f4SJuan QuintelaEOF 463452166aa0SJuan Quintelaif compile_prog "" "" ; then 46356ae9a1f4SJuan Quintela byteswap_h=yes 46366ae9a1f4SJuan Quintelafi 46376ae9a1f4SJuan Quintela 463875f13596SStefan Weil# Search for bswap32 function 46396ae9a1f4SJuan Quintelabswap_h=no 46406ae9a1f4SJuan Quintelacat > $TMPC << EOF 46416ae9a1f4SJuan Quintela#include <sys/endian.h> 46426ae9a1f4SJuan Quintela#include <sys/types.h> 46436ae9a1f4SJuan Quintela#include <machine/bswap.h> 46446ae9a1f4SJuan Quintelaint main(void) { return bswap32(0); } 46456ae9a1f4SJuan QuintelaEOF 464652166aa0SJuan Quintelaif compile_prog "" "" ; then 46476ae9a1f4SJuan Quintela bswap_h=yes 46486ae9a1f4SJuan Quintelafi 46496ae9a1f4SJuan Quintela 4650da93a1fdSaliguori########################################## 4651e49ab19fSPeter Lieven# Do we have libiscsi >= 1.9.0 4652c589b249SRonnie Sahlbergif test "$libiscsi" != "no" ; then 4653e49ab19fSPeter Lieven if $pkg_config --atleast-version=1.9.0 libiscsi; then 46543c33ea96SPaolo Bonzini libiscsi="yes" 4655ca871ec8SStefan Weil libiscsi_cflags=$($pkg_config --cflags libiscsi) 4656ca871ec8SStefan Weil libiscsi_libs=$($pkg_config --libs libiscsi) 4657c589b249SRonnie Sahlberg else 4658c589b249SRonnie Sahlberg if test "$libiscsi" = "yes" ; then 4659e49ab19fSPeter Lieven feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4660c589b249SRonnie Sahlberg fi 4661c589b249SRonnie Sahlberg libiscsi="no" 4662c589b249SRonnie Sahlberg fi 4663c589b249SRonnie Sahlbergfi 4664c589b249SRonnie Sahlberg 4665c589b249SRonnie Sahlberg########################################## 4666da93a1fdSaliguori# Do we need librt 46678bacde8dSNatanael Copa# uClibc provides 2 versions of clock_gettime(), one with realtime 46688bacde8dSNatanael Copa# support and one without. This means that the clock_gettime() don't 46698bacde8dSNatanael Copa# need -lrt. We still need it for timer_create() so we check for this 46708bacde8dSNatanael Copa# function in addition. 4671da93a1fdSaliguoricat > $TMPC <<EOF 4672da93a1fdSaliguori#include <signal.h> 4673da93a1fdSaliguori#include <time.h> 46748bacde8dSNatanael Copaint main(void) { 46758bacde8dSNatanael Copa timer_create(CLOCK_REALTIME, NULL, NULL); 46768bacde8dSNatanael Copa return clock_gettime(CLOCK_REALTIME, NULL); 46778bacde8dSNatanael Copa} 4678da93a1fdSaliguoriEOF 4679da93a1fdSaliguori 468052166aa0SJuan Quintelaif compile_prog "" "" ; then 468107ffa4bdSJuan Quintela : 46828bacde8dSNatanael Copa# we need pthread for static linking. use previous pthread test result 468318e588b1SRick Liuelif compile_prog "" "$pthread_lib -lrt" ; then 468418e588b1SRick Liu LIBS="$LIBS -lrt" 4685da93a1fdSaliguorifi 4686da93a1fdSaliguori 4687f2995ee4SPaolo Bonzini# Check whether we have openpty() in either libc or libutil 4688d99e97e6SThomas Huthcat > $TMPC << EOF 4689d99e97e6SThomas Huthextern int openpty(int *am, int *as, char *name, void *termp, void *winp); 4690d99e97e6SThomas Huthint main(void) { return openpty(0, 0, 0, 0, 0); } 4691d99e97e6SThomas HuthEOF 4692d99e97e6SThomas Huth 46939df8b20dSThomas Huthhave_openpty="no" 46949df8b20dSThomas Huthif compile_prog "" "" ; then 46959df8b20dSThomas Huth have_openpty="yes" 46969df8b20dSThomas Huthelse 4697d99e97e6SThomas Huth if compile_prog "" "-lutil" ; then 46989df8b20dSThomas Huth have_openpty="yes" 4699d99e97e6SThomas Huth fi 47006362a53fSJuan Quintelafi 47016362a53fSJuan Quintela 4702de5071c5SBlue Swirl########################################## 4703cd4ec0b4SGerd Hoffmann# spice probe 4704cd4ec0b4SGerd Hoffmannif test "$spice" != "no" ; then 4705cd4ec0b4SGerd Hoffmann cat > $TMPC << EOF 4706cd4ec0b4SGerd Hoffmann#include <spice.h> 4707cd4ec0b4SGerd Hoffmannint main(void) { spice_server_new(); return 0; } 4708cd4ec0b4SGerd HoffmannEOF 4709710fc4f5SJiri Denemark spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4710710fc4f5SJiri Denemark spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 47111b63665cSMarc-André Lureau if $pkg_config --atleast-version=0.12.5 spice-server && \ 471265d5d3f9SStefan Weil $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4713cd4ec0b4SGerd Hoffmann compile_prog "$spice_cflags" "$spice_libs" ; then 4714cd4ec0b4SGerd Hoffmann spice="yes" 4715cd4ec0b4SGerd Hoffmann else 4716cd4ec0b4SGerd Hoffmann if test "$spice" = "yes" ; then 47178efc9363SHu Tao feature_not_found "spice" \ 47181b63665cSMarc-André Lureau "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 4719cd4ec0b4SGerd Hoffmann fi 4720cd4ec0b4SGerd Hoffmann spice="no" 4721cd4ec0b4SGerd Hoffmann fi 4722cd4ec0b4SGerd Hoffmannfi 4723cd4ec0b4SGerd Hoffmann 47247b02f544SMarc-André Lureau# check for smartcard support 47257b02f544SMarc-André Lureauif test "$smartcard" != "no"; then 47260f5c642dSMichal Privoznik if $pkg_config --atleast-version=2.5.1 libcacard; then 47277b02f544SMarc-André Lureau libcacard_cflags=$($pkg_config --cflags libcacard) 47287b02f544SMarc-André Lureau libcacard_libs=$($pkg_config --libs libcacard) 47297b02f544SMarc-André Lureau smartcard="yes" 4730111a38b0SRobert Relyea else 47317b02f544SMarc-André Lureau if test "$smartcard" = "yes"; then 47327b02f544SMarc-André Lureau feature_not_found "smartcard" "Install libcacard devel" 4733111a38b0SRobert Relyea fi 47347b02f544SMarc-André Lureau smartcard="no" 4735111a38b0SRobert Relyea fi 4736111a38b0SRobert Relyeafi 4737111a38b0SRobert Relyea 47382b2325ffSGerd Hoffmann# check for libusb 47392b2325ffSGerd Hoffmannif test "$libusb" != "no" ; then 474065d5d3f9SStefan Weil if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 47412b2325ffSGerd Hoffmann libusb="yes" 4742ca871ec8SStefan Weil libusb_cflags=$($pkg_config --cflags libusb-1.0) 4743ca871ec8SStefan Weil libusb_libs=$($pkg_config --libs libusb-1.0) 47442b2325ffSGerd Hoffmann else 47452b2325ffSGerd Hoffmann if test "$libusb" = "yes"; then 47468efc9363SHu Tao feature_not_found "libusb" "Install libusb devel >= 1.0.13" 47472b2325ffSGerd Hoffmann fi 47482b2325ffSGerd Hoffmann libusb="no" 47492b2325ffSGerd Hoffmann fi 47502b2325ffSGerd Hoffmannfi 47512b2325ffSGerd Hoffmann 475269354a83SHans de Goede# check for usbredirparser for usb network redirection support 475369354a83SHans de Goedeif test "$usb_redir" != "no" ; then 475465d5d3f9SStefan Weil if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 475569354a83SHans de Goede usb_redir="yes" 4756ca871ec8SStefan Weil usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4757ca871ec8SStefan Weil usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 475869354a83SHans de Goede else 475969354a83SHans de Goede if test "$usb_redir" = "yes"; then 476021684af0SStewart Smith feature_not_found "usb-redir" "Install usbredir devel" 476169354a83SHans de Goede fi 476269354a83SHans de Goede usb_redir="no" 476369354a83SHans de Goede fi 476469354a83SHans de Goedefi 476569354a83SHans de Goede 4766cd4ec0b4SGerd Hoffmann########################################## 4767d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win 4768d9840e25STomoki Sekiyama 4769e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4770e633a5c6SEric Blake test "$vss_win32_sdk" != "no" ; then 4771d9840e25STomoki Sekiyama case "$vss_win32_sdk" in 4772690604f6SMichael Roth "") vss_win32_include="-isystem $source_path" ;; 4773d9840e25STomoki Sekiyama *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4774d9840e25STomoki Sekiyama # handle path with spaces. So we symlink the headers into ".sdk/vss". 4775690604f6SMichael Roth vss_win32_include="-isystem $source_path/.sdk/vss" 4776d9840e25STomoki Sekiyama symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4777d9840e25STomoki Sekiyama ;; 4778690604f6SMichael Roth *) vss_win32_include="-isystem $vss_win32_sdk" 4779d9840e25STomoki Sekiyama esac 4780d9840e25STomoki Sekiyama cat > $TMPC << EOF 4781d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__ 4782d9840e25STomoki Sekiyama#include <inc/win2003/vss.h> 4783d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; } 4784d9840e25STomoki SekiyamaEOF 4785d9840e25STomoki Sekiyama if compile_prog "$vss_win32_include" "" ; then 4786d9840e25STomoki Sekiyama guest_agent_with_vss="yes" 4787d9840e25STomoki Sekiyama QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4788315d3184SFam Zheng libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4789f33ca81fSMichael Roth qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4790d9840e25STomoki Sekiyama else 4791d9840e25STomoki Sekiyama if test "$vss_win32_sdk" != "" ; then 4792d9840e25STomoki Sekiyama echo "ERROR: Please download and install Microsoft VSS SDK:" 4793d9840e25STomoki Sekiyama echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4794d9840e25STomoki Sekiyama echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4795d9840e25STomoki Sekiyama echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4796d9840e25STomoki Sekiyama echo "ERROR: The headers are extracted in the directory \`inc'." 4797d9840e25STomoki Sekiyama feature_not_found "VSS support" 4798d9840e25STomoki Sekiyama fi 4799d9840e25STomoki Sekiyama guest_agent_with_vss="no" 4800d9840e25STomoki Sekiyama fi 4801d9840e25STomoki Sekiyamafi 4802d9840e25STomoki Sekiyama 4803d9840e25STomoki Sekiyama########################################## 4804d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified) 4805d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent 4806d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the 4807d9840e25STomoki Sekiyama# pre-compiled .tlb file is included. 4808d9840e25STomoki Sekiyama 4809e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4810e633a5c6SEric Blake test "$guest_agent_with_vss" = "yes" ; then 4811d9840e25STomoki Sekiyama if test -z "$win_sdk"; then 4812d9840e25STomoki Sekiyama programfiles="$PROGRAMFILES" 4813d9840e25STomoki Sekiyama test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4814d9840e25STomoki Sekiyama if test -n "$programfiles"; then 4815d9840e25STomoki Sekiyama win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4816d9840e25STomoki Sekiyama else 4817d9840e25STomoki Sekiyama feature_not_found "Windows SDK" 4818d9840e25STomoki Sekiyama fi 4819d9840e25STomoki Sekiyama elif test "$win_sdk" = "no"; then 4820d9840e25STomoki Sekiyama win_sdk="" 4821d9840e25STomoki Sekiyama fi 4822d9840e25STomoki Sekiyamafi 4823d9840e25STomoki Sekiyama 4824d9840e25STomoki Sekiyama########################################## 482550cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h 4826e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 482750cbebb9SMichael Roth cat > $TMPC << EOF 482850cbebb9SMichael Roth#include <windows.h> 482950cbebb9SMichael Roth#include <ntddscsi.h> 483050cbebb9SMichael Rothint main(void) { 483150cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS) 483250cbebb9SMichael Roth#error Missing required ioctl definitions 483350cbebb9SMichael Roth#endif 483450cbebb9SMichael Roth SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 483550cbebb9SMichael Roth return addr.Lun; 483650cbebb9SMichael Roth} 483750cbebb9SMichael RothEOF 483850cbebb9SMichael Roth if compile_prog "" "" ; then 483950cbebb9SMichael Roth guest_agent_ntddscsi=yes 4840996b9cdcSMatt Hines libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 484150cbebb9SMichael Roth fi 484250cbebb9SMichael Rothfi 484350cbebb9SMichael Roth 484450cbebb9SMichael Roth########################################## 48459d9e1521SGerd Hoffmann# virgl renderer probe 48469d9e1521SGerd Hoffmann 48479d9e1521SGerd Hoffmannif test "$virglrenderer" != "no" ; then 48489d9e1521SGerd Hoffmann cat > $TMPC << EOF 48499d9e1521SGerd Hoffmann#include <virglrenderer.h> 48509d9e1521SGerd Hoffmannint main(void) { virgl_renderer_poll(); return 0; } 48519d9e1521SGerd HoffmannEOF 48529d9e1521SGerd Hoffmann virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 48539d9e1521SGerd Hoffmann virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 485447479c55SMarc-André Lureau virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 48559d9e1521SGerd Hoffmann if $pkg_config virglrenderer >/dev/null 2>&1 && \ 48569d9e1521SGerd Hoffmann compile_prog "$virgl_cflags" "$virgl_libs" ; then 48579d9e1521SGerd Hoffmann virglrenderer="yes" 48589d9e1521SGerd Hoffmann else 48599d9e1521SGerd Hoffmann if test "$virglrenderer" = "yes" ; then 48609d9e1521SGerd Hoffmann feature_not_found "virglrenderer" 48619d9e1521SGerd Hoffmann fi 48629d9e1521SGerd Hoffmann virglrenderer="no" 48639d9e1521SGerd Hoffmann fi 48649d9e1521SGerd Hoffmannfi 48659d9e1521SGerd Hoffmann 48669d9e1521SGerd Hoffmann########################################## 48678ca80760SRichard Henderson# capstone 48688ca80760SRichard Henderson 4869e219c499SRichard Hendersoncase "$capstone" in 4870e219c499SRichard Henderson "" | yes) 48718ca80760SRichard Henderson if $pkg_config capstone; then 4872e219c499SRichard Henderson capstone=system 4873e633a5c6SEric Blake elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 4874e219c499SRichard Henderson capstone=git 4875e219c499SRichard Henderson elif test -e "${source_path}/capstone/Makefile" ; then 4876e219c499SRichard Henderson capstone=internal 4877e219c499SRichard Henderson elif test -z "$capstone" ; then 4878e219c499SRichard Henderson capstone=no 4879e219c499SRichard Henderson else 4880e219c499SRichard Henderson feature_not_found "capstone" "Install capstone devel or git submodule" 4881e219c499SRichard Henderson fi 4882e219c499SRichard Henderson ;; 4883e219c499SRichard Henderson 4884e219c499SRichard Henderson system) 4885e219c499SRichard Henderson if ! $pkg_config capstone; then 4886e219c499SRichard Henderson feature_not_found "capstone" "Install capstone devel" 4887e219c499SRichard Henderson fi 4888e219c499SRichard Henderson ;; 4889e219c499SRichard Hendersonesac 4890e219c499SRichard Henderson 4891e219c499SRichard Hendersoncase "$capstone" in 4892e219c499SRichard Henderson git | internal) 4893e219c499SRichard Henderson if test "$capstone" = git; then 4894e219c499SRichard Henderson git_submodules="${git_submodules} capstone" 4895e219c499SRichard Henderson fi 4896e219c499SRichard Henderson mkdir -p capstone 4897e219c499SRichard Henderson if test "$mingw32" = "yes"; then 4898e219c499SRichard Henderson LIBCAPSTONE=capstone.lib 4899e219c499SRichard Henderson else 4900e219c499SRichard Henderson LIBCAPSTONE=libcapstone.a 4901e219c499SRichard Henderson fi 490258683d07SPaolo Bonzini capstone_libs="-Lcapstone -lcapstone" 4903c9322ab5SMarc-André Lureau capstone_cflags="-I${source_path}/capstone/include" 4904e219c499SRichard Henderson ;; 4905e219c499SRichard Henderson 4906e219c499SRichard Henderson system) 4907c9322ab5SMarc-André Lureau capstone_libs="$($pkg_config --libs capstone)" 4908c9322ab5SMarc-André Lureau capstone_cflags="$($pkg_config --cflags capstone)" 4909e219c499SRichard Henderson ;; 4910e219c499SRichard Henderson 4911e219c499SRichard Henderson no) 4912e219c499SRichard Henderson ;; 4913e219c499SRichard Henderson *) 4914e219c499SRichard Henderson error_exit "Unknown state for capstone: $capstone" 4915e219c499SRichard Henderson ;; 4916e219c499SRichard Hendersonesac 49178ca80760SRichard Henderson 49188ca80760SRichard Henderson########################################## 49195f6b9e8fSBlue Swirl# check if we have fdatasync 49205f6b9e8fSBlue Swirl 49215f6b9e8fSBlue Swirlfdatasync=no 49225f6b9e8fSBlue Swirlcat > $TMPC << EOF 49235f6b9e8fSBlue Swirl#include <unistd.h> 4924d1722a27SAlexandre Raymondint main(void) { 4925d1722a27SAlexandre Raymond#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4926d1722a27SAlexandre Raymondreturn fdatasync(0); 4927d1722a27SAlexandre Raymond#else 4928e172fe11SStefan Weil#error Not supported 4929d1722a27SAlexandre Raymond#endif 4930d1722a27SAlexandre Raymond} 49315f6b9e8fSBlue SwirlEOF 49325f6b9e8fSBlue Swirlif compile_prog "" "" ; then 49335f6b9e8fSBlue Swirl fdatasync=yes 49345f6b9e8fSBlue Swirlfi 49355f6b9e8fSBlue Swirl 493694a420b1SStefan Hajnoczi########################################## 4937e78815a5SAndreas Färber# check if we have madvise 4938e78815a5SAndreas Färber 4939e78815a5SAndreas Färbermadvise=no 4940e78815a5SAndreas Färbercat > $TMPC << EOF 4941e78815a5SAndreas Färber#include <sys/types.h> 4942e78815a5SAndreas Färber#include <sys/mman.h> 4943832ce9c2SScott Wood#include <stddef.h> 4944e78815a5SAndreas Färberint main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4945e78815a5SAndreas FärberEOF 4946e78815a5SAndreas Färberif compile_prog "" "" ; then 4947e78815a5SAndreas Färber madvise=yes 4948e78815a5SAndreas Färberfi 4949e78815a5SAndreas Färber 4950e78815a5SAndreas Färber########################################## 4951e78815a5SAndreas Färber# check if we have posix_madvise 4952e78815a5SAndreas Färber 4953e78815a5SAndreas Färberposix_madvise=no 4954e78815a5SAndreas Färbercat > $TMPC << EOF 4955e78815a5SAndreas Färber#include <sys/mman.h> 4956832ce9c2SScott Wood#include <stddef.h> 4957e78815a5SAndreas Färberint main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4958e78815a5SAndreas FärberEOF 4959e78815a5SAndreas Färberif compile_prog "" "" ; then 4960e78815a5SAndreas Färber posix_madvise=yes 4961e78815a5SAndreas Färberfi 4962e78815a5SAndreas Färber 4963e78815a5SAndreas Färber########################################## 49649bc5a719SAndreas Gustafsson# check if we have posix_memalign() 49659bc5a719SAndreas Gustafsson 49669bc5a719SAndreas Gustafssonposix_memalign=no 49679bc5a719SAndreas Gustafssoncat > $TMPC << EOF 49689bc5a719SAndreas Gustafsson#include <stdlib.h> 49699bc5a719SAndreas Gustafssonint main(void) { 49709bc5a719SAndreas Gustafsson void *p; 49719bc5a719SAndreas Gustafsson return posix_memalign(&p, 8, 8); 49729bc5a719SAndreas Gustafsson} 49739bc5a719SAndreas GustafssonEOF 49749bc5a719SAndreas Gustafssonif compile_prog "" "" ; then 49759bc5a719SAndreas Gustafsson posix_memalign=yes 49769bc5a719SAndreas Gustafssonfi 49779bc5a719SAndreas Gustafsson 49789bc5a719SAndreas Gustafsson########################################## 49790a852417SPaul Durrant# check if we have posix_syslog 49800a852417SPaul Durrant 49810a852417SPaul Durrantposix_syslog=no 49820a852417SPaul Durrantcat > $TMPC << EOF 49830a852417SPaul Durrant#include <syslog.h> 49840a852417SPaul Durrantint main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 49850a852417SPaul DurrantEOF 49860a852417SPaul Durrantif compile_prog "" "" ; then 49870a852417SPaul Durrant posix_syslog=yes 49880a852417SPaul Durrantfi 49890a852417SPaul Durrant 49900a852417SPaul Durrant########################################## 4991401bc051SPeter Maydell# check if we have sem_timedwait 4992401bc051SPeter Maydell 4993401bc051SPeter Maydellsem_timedwait=no 4994401bc051SPeter Maydellcat > $TMPC << EOF 4995401bc051SPeter Maydell#include <semaphore.h> 4996811294b7SDaniel P. Berrangéint main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 4997401bc051SPeter MaydellEOF 4998401bc051SPeter Maydellif compile_prog "" "" ; then 4999401bc051SPeter Maydell sem_timedwait=yes 5000401bc051SPeter Maydellfi 5001401bc051SPeter Maydell 5002401bc051SPeter Maydell########################################## 50035c99fa37SKeno Fischer# check if we have strchrnul 50045c99fa37SKeno Fischer 50055c99fa37SKeno Fischerstrchrnul=no 50065c99fa37SKeno Fischercat > $TMPC << EOF 50075c99fa37SKeno Fischer#include <string.h> 50085c99fa37SKeno Fischerint main(void); 50095c99fa37SKeno Fischer// Use a haystack that the compiler shouldn't be able to constant fold 50105c99fa37SKeno Fischerchar *haystack = (char*)&main; 50115c99fa37SKeno Fischerint main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 50125c99fa37SKeno FischerEOF 50135c99fa37SKeno Fischerif compile_prog "" "" ; then 50145c99fa37SKeno Fischer strchrnul=yes 50155c99fa37SKeno Fischerfi 50165c99fa37SKeno Fischer 50178a792b03SJiufei Xue######################################### 50188a792b03SJiufei Xue# check if we have st_atim 50198a792b03SJiufei Xue 50208a792b03SJiufei Xuest_atim=no 50218a792b03SJiufei Xuecat > $TMPC << EOF 50228a792b03SJiufei Xue#include <sys/stat.h> 50238a792b03SJiufei Xue#include <stddef.h> 50248a792b03SJiufei Xueint main(void) { return offsetof(struct stat, st_atim); } 50258a792b03SJiufei XueEOF 50268a792b03SJiufei Xueif compile_prog "" "" ; then 50278a792b03SJiufei Xue st_atim=yes 50288a792b03SJiufei Xuefi 50298a792b03SJiufei Xue 50305c99fa37SKeno Fischer########################################## 503194a420b1SStefan Hajnoczi# check if trace backend exists 503294a420b1SStefan Hajnoczi 50335b808275SLluís Vilanova$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 503494a420b1SStefan Hajnocziif test "$?" -ne 0 ; then 50355b808275SLluís Vilanova error_exit "invalid trace backends" \ 50365b808275SLluís Vilanova "Please choose supported trace backends." 503794a420b1SStefan Hajnoczifi 503894a420b1SStefan Hajnoczi 50397e24e92aSStefan Hajnoczi########################################## 50407e24e92aSStefan Hajnoczi# For 'ust' backend, test if ust headers are present 50415b808275SLluís Vilanovaif have_backend "ust"; then 50427e24e92aSStefan Hajnoczi cat > $TMPC << EOF 5043bf15f63cSMohamad Gebai#include <lttng/tracepoint.h> 50447e24e92aSStefan Hajnocziint main(void) { return 0; } 50457e24e92aSStefan HajnocziEOF 5046c79ed23dSFrancis Deslauriers if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5047bf15f63cSMohamad Gebai if $pkg_config lttng-ust --exists; then 504889138857SStefan Weil lttng_ust_libs=$($pkg_config --libs lttng-ust) 50497e24e92aSStefan Hajnoczi else 5050c79ed23dSFrancis Deslauriers lttng_ust_libs="-llttng-ust -ldl" 5051bf15f63cSMohamad Gebai fi 5052bf15f63cSMohamad Gebai if $pkg_config liburcu-bp --exists; then 505389138857SStefan Weil urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5054bf15f63cSMohamad Gebai else 5055bf15f63cSMohamad Gebai urcu_bp_libs="-lurcu-bp" 5056bf15f63cSMohamad Gebai fi 5057bf15f63cSMohamad Gebai else 5058bf15f63cSMohamad Gebai error_exit "Trace backend 'ust' missing lttng-ust header files" 50597e24e92aSStefan Hajnoczi fi 50607e24e92aSStefan Hajnoczifi 5061b3d08c02SDaniel P. Berrange 5062b3d08c02SDaniel P. Berrange########################################## 5063b3d08c02SDaniel P. Berrange# For 'dtrace' backend, test if 'dtrace' command is present 50645b808275SLluís Vilanovaif have_backend "dtrace"; then 5065b3d08c02SDaniel P. Berrange if ! has 'dtrace' ; then 506676ad07a4SPeter Maydell error_exit "dtrace command is not found in PATH $PATH" 5067b3d08c02SDaniel P. Berrange fi 5068c276b17dSDaniel P. Berrange trace_backend_stap="no" 5069c276b17dSDaniel P. Berrange if has 'stap' ; then 5070c276b17dSDaniel P. Berrange trace_backend_stap="yes" 5071c276b17dSDaniel P. Berrange fi 5072b3d08c02SDaniel P. Berrangefi 5073b3d08c02SDaniel P. Berrange 50747e24e92aSStefan Hajnoczi########################################## 5075519175a2SAlex Barcelo# check and set a backend for coroutine 5076d0e2fce5SAneesh Kumar K.V 50777c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback 507833c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows 507933c53c54SDaniel P. Berrange# specific one. 50807c2acc70SPeter Maydell 50817c2acc70SPeter Maydellucontext_works=no 5082d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then 5083d0e2fce5SAneesh Kumar K.V cat > $TMPC << EOF 5084d0e2fce5SAneesh Kumar K.V#include <ucontext.h> 5085cdf84806SPeter Maydell#ifdef __stub_makecontext 5086cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail 5087cdf84806SPeter Maydell#endif 508875cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; } 5089d0e2fce5SAneesh Kumar K.VEOF 5090d0e2fce5SAneesh Kumar K.V if compile_prog "" "" ; then 50917c2acc70SPeter Maydell ucontext_works=yes 5092d0e2fce5SAneesh Kumar K.V fi 5093519175a2SAlex Barcelofi 50947c2acc70SPeter Maydell 50957c2acc70SPeter Maydellif test "$coroutine" = ""; then 50967c2acc70SPeter Maydell if test "$mingw32" = "yes"; then 50977c2acc70SPeter Maydell coroutine=win32 50987c2acc70SPeter Maydell elif test "$ucontext_works" = "yes"; then 50997c2acc70SPeter Maydell coroutine=ucontext 5100519175a2SAlex Barcelo else 51017c2acc70SPeter Maydell coroutine=sigaltstack 51027c2acc70SPeter Maydell fi 51037c2acc70SPeter Maydellelse 51047c2acc70SPeter Maydell case $coroutine in 51057c2acc70SPeter Maydell windows) 51067c2acc70SPeter Maydell if test "$mingw32" != "yes"; then 51077c2acc70SPeter Maydell error_exit "'windows' coroutine backend only valid for Windows" 51087c2acc70SPeter Maydell fi 51097c2acc70SPeter Maydell # Unfortunately the user visible backend name doesn't match the 51107c2acc70SPeter Maydell # coroutine-*.c filename for this case, so we have to adjust it here. 51117c2acc70SPeter Maydell coroutine=win32 51127c2acc70SPeter Maydell ;; 51137c2acc70SPeter Maydell ucontext) 51147c2acc70SPeter Maydell if test "$ucontext_works" != "yes"; then 51157c2acc70SPeter Maydell feature_not_found "ucontext" 51167c2acc70SPeter Maydell fi 51177c2acc70SPeter Maydell ;; 511833c53c54SDaniel P. Berrange sigaltstack) 51197c2acc70SPeter Maydell if test "$mingw32" = "yes"; then 51207c2acc70SPeter Maydell error_exit "only the 'windows' coroutine backend is valid for Windows" 51217c2acc70SPeter Maydell fi 51227c2acc70SPeter Maydell ;; 51237c2acc70SPeter Maydell *) 512476ad07a4SPeter Maydell error_exit "unknown coroutine backend $coroutine" 51257c2acc70SPeter Maydell ;; 51267c2acc70SPeter Maydell esac 5127d0e2fce5SAneesh Kumar K.Vfi 5128d0e2fce5SAneesh Kumar K.V 512970c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then 513070c60c08SStefan Hajnoczi coroutine_pool=yes 513170c60c08SStefan Hajnoczifi 513270c60c08SStefan Hajnoczi 51337d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then 51347d992e4dSPeter Lieven if test "$coroutine_pool" = "yes"; then 51357d992e4dSPeter Lieven echo "WARN: disabling coroutine pool for stack usage debugging" 51367d992e4dSPeter Lieven coroutine_pool=no 51377d992e4dSPeter Lieven fi 51387d992e4dSPeter Lievenfi 51397d992e4dSPeter Lieven 51401e4f6065SDaniele Buono################################################## 51411e4f6065SDaniele Buono# SafeStack 51421e4f6065SDaniele Buono 51431e4f6065SDaniele Buono 51441e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then 51451e4f6065SDaniele Buonocat > $TMPC << EOF 51461e4f6065SDaniele Buonoint main(int argc, char *argv[]) 51471e4f6065SDaniele Buono{ 51481e4f6065SDaniele Buono#if ! __has_feature(safe_stack) 51491e4f6065SDaniele Buono#error SafeStack Disabled 51501e4f6065SDaniele Buono#endif 51511e4f6065SDaniele Buono return 0; 51521e4f6065SDaniele Buono} 51531e4f6065SDaniele BuonoEOF 51541e4f6065SDaniele Buono flag="-fsanitize=safe-stack" 51551e4f6065SDaniele Buono # Check that safe-stack is supported and enabled. 51561e4f6065SDaniele Buono if compile_prog "-Werror $flag" "$flag"; then 51571e4f6065SDaniele Buono # Flag needed both at compilation and at linking 51581e4f6065SDaniele Buono QEMU_CFLAGS="$QEMU_CFLAGS $flag" 51591e4f6065SDaniele Buono QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 51601e4f6065SDaniele Buono else 51611e4f6065SDaniele Buono error_exit "SafeStack not supported by your compiler" 51621e4f6065SDaniele Buono fi 51631e4f6065SDaniele Buono if test "$coroutine" != "ucontext"; then 51641e4f6065SDaniele Buono error_exit "SafeStack is only supported by the coroutine backend ucontext" 51651e4f6065SDaniele Buono fi 51661e4f6065SDaniele Buonoelse 51671e4f6065SDaniele Buonocat > $TMPC << EOF 51681e4f6065SDaniele Buonoint main(int argc, char *argv[]) 51691e4f6065SDaniele Buono{ 51701e4f6065SDaniele Buono#if defined(__has_feature) 51711e4f6065SDaniele Buono#if __has_feature(safe_stack) 51721e4f6065SDaniele Buono#error SafeStack Enabled 51731e4f6065SDaniele Buono#endif 51741e4f6065SDaniele Buono#endif 51751e4f6065SDaniele Buono return 0; 51761e4f6065SDaniele Buono} 51771e4f6065SDaniele BuonoEOF 51781e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then 51791e4f6065SDaniele Buono # Make sure that safe-stack is disabled 51801e4f6065SDaniele Buono if ! compile_prog "-Werror" ""; then 51811e4f6065SDaniele Buono # SafeStack was already enabled, try to explicitly remove the feature 51821e4f6065SDaniele Buono flag="-fno-sanitize=safe-stack" 51831e4f6065SDaniele Buono if ! compile_prog "-Werror $flag" "$flag"; then 51841e4f6065SDaniele Buono error_exit "Configure cannot disable SafeStack" 51851e4f6065SDaniele Buono fi 51861e4f6065SDaniele Buono QEMU_CFLAGS="$QEMU_CFLAGS $flag" 51871e4f6065SDaniele Buono QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 51881e4f6065SDaniele Buono fi 51891e4f6065SDaniele Buonoelse # "$safe_stack" = "" 51901e4f6065SDaniele Buono # Set safe_stack to yes or no based on pre-existing flags 51911e4f6065SDaniele Buono if compile_prog "-Werror" ""; then 51921e4f6065SDaniele Buono safe_stack="no" 51931e4f6065SDaniele Buono else 51941e4f6065SDaniele Buono safe_stack="yes" 51951e4f6065SDaniele Buono if test "$coroutine" != "ucontext"; then 51961e4f6065SDaniele Buono error_exit "SafeStack is only supported by the coroutine backend ucontext" 51971e4f6065SDaniele Buono fi 51981e4f6065SDaniele Buono fi 51991e4f6065SDaniele Buonofi 52001e4f6065SDaniele Buonofi 52017d992e4dSPeter Lieven 5202d0e2fce5SAneesh Kumar K.V########################################## 5203d2042378SAneesh Kumar K.V# check if we have open_by_handle_at 5204d2042378SAneesh Kumar K.V 52054e1797f9SStefan Weilopen_by_handle_at=no 5206d2042378SAneesh Kumar K.Vcat > $TMPC << EOF 5207d2042378SAneesh Kumar K.V#include <fcntl.h> 5208acc55ba8SStefan Weil#if !defined(AT_EMPTY_PATH) 5209acc55ba8SStefan Weil# error missing definition 5210acc55ba8SStefan Weil#else 521175cafad7SStefan Weilint main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5212acc55ba8SStefan Weil#endif 5213d2042378SAneesh Kumar K.VEOF 5214d2042378SAneesh Kumar K.Vif compile_prog "" "" ; then 5215d2042378SAneesh Kumar K.V open_by_handle_at=yes 5216d2042378SAneesh Kumar K.Vfi 5217d2042378SAneesh Kumar K.V 5218e06a765eSHarsh Prateek Bora######################################## 5219e06a765eSHarsh Prateek Bora# check if we have linux/magic.h 5220e06a765eSHarsh Prateek Bora 5221e06a765eSHarsh Prateek Boralinux_magic_h=no 5222e06a765eSHarsh Prateek Boracat > $TMPC << EOF 5223e06a765eSHarsh Prateek Bora#include <linux/magic.h> 5224e06a765eSHarsh Prateek Boraint main(void) { 522575cafad7SStefan Weil return 0; 5226e06a765eSHarsh Prateek Bora} 5227e06a765eSHarsh Prateek BoraEOF 5228e06a765eSHarsh Prateek Boraif compile_prog "" "" ; then 5229e06a765eSHarsh Prateek Bora linux_magic_h=yes 5230e06a765eSHarsh Prateek Borafi 5231e06a765eSHarsh Prateek Bora 52328ab1bf12SLuiz Capitulino######################################## 5233541be927SChristian Borntraeger# check if we have valgrind/valgrind.h 52343f4349dcSKevin Wolf 52353f4349dcSKevin Wolfvalgrind_h=no 52363f4349dcSKevin Wolfcat > $TMPC << EOF 52373f4349dcSKevin Wolf#include <valgrind/valgrind.h> 52383f4349dcSKevin Wolfint main(void) { 52393f4349dcSKevin Wolf return 0; 52403f4349dcSKevin Wolf} 52413f4349dcSKevin WolfEOF 52423f4349dcSKevin Wolfif compile_prog "" "" ; then 52433f4349dcSKevin Wolf valgrind_h=yes 52443f4349dcSKevin Wolffi 52453f4349dcSKevin Wolf 52463f4349dcSKevin Wolf######################################## 52478ab1bf12SLuiz Capitulino# check if environ is declared 52488ab1bf12SLuiz Capitulino 52498ab1bf12SLuiz Capitulinohas_environ=no 52508ab1bf12SLuiz Capitulinocat > $TMPC << EOF 52518ab1bf12SLuiz Capitulino#include <unistd.h> 52528ab1bf12SLuiz Capitulinoint main(void) { 5253c075a723SBlue Swirl environ = 0; 52548ab1bf12SLuiz Capitulino return 0; 52558ab1bf12SLuiz Capitulino} 52568ab1bf12SLuiz CapitulinoEOF 52578ab1bf12SLuiz Capitulinoif compile_prog "" "" ; then 52588ab1bf12SLuiz Capitulino has_environ=yes 52598ab1bf12SLuiz Capitulinofi 52608ab1bf12SLuiz Capitulino 526176a347e1SRichard Henderson######################################## 526276a347e1SRichard Henderson# check if cpuid.h is usable. 526376a347e1SRichard Henderson 526476a347e1SRichard Hendersoncat > $TMPC << EOF 526576a347e1SRichard Henderson#include <cpuid.h> 526676a347e1SRichard Hendersonint main(void) { 5267774d566cSPeter Maydell unsigned a, b, c, d; 5268774d566cSPeter Maydell int max = __get_cpuid_max(0, 0); 5269774d566cSPeter Maydell 5270774d566cSPeter Maydell if (max >= 1) { 5271774d566cSPeter Maydell __cpuid(1, a, b, c, d); 5272774d566cSPeter Maydell } 5273774d566cSPeter Maydell 5274774d566cSPeter Maydell if (max >= 7) { 5275774d566cSPeter Maydell __cpuid_count(7, 0, a, b, c, d); 5276774d566cSPeter Maydell } 5277774d566cSPeter Maydell 527876a347e1SRichard Henderson return 0; 527976a347e1SRichard Henderson} 528076a347e1SRichard HendersonEOF 528176a347e1SRichard Hendersonif compile_prog "" "" ; then 528276a347e1SRichard Henderson cpuid_h=yes 528376a347e1SRichard Hendersonfi 528476a347e1SRichard Henderson 52855dd89908SRichard Henderson########################################## 52865dd89908SRichard Henderson# avx2 optimization requirement check 52875dd89908SRichard Henderson# 52885dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable, 52895dd89908SRichard Henderson# since we won't be able to select the new routines. 52905dd89908SRichard Henderson 5291e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 52925dd89908SRichard Henderson cat > $TMPC << EOF 52935dd89908SRichard Henderson#pragma GCC push_options 52945dd89908SRichard Henderson#pragma GCC target("avx2") 52955dd89908SRichard Henderson#include <cpuid.h> 52965dd89908SRichard Henderson#include <immintrin.h> 52975dd89908SRichard Hendersonstatic int bar(void *a) { 52985dd89908SRichard Henderson __m256i x = *(__m256i *)a; 52995dd89908SRichard Henderson return _mm256_testz_si256(x, x); 53005dd89908SRichard Henderson} 53015dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); } 53025dd89908SRichard HendersonEOF 53035dd89908SRichard Henderson if compile_object "" ; then 53045dd89908SRichard Henderson avx2_opt="yes" 530586583a07SLiam Merwick else 530686583a07SLiam Merwick avx2_opt="no" 53075dd89908SRichard Henderson fi 53085dd89908SRichard Hendersonfi 53095dd89908SRichard Henderson 53106b8cd447SRobert Hoo########################################## 53116b8cd447SRobert Hoo# avx512f optimization requirement check 53126b8cd447SRobert Hoo# 53136b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable, 53146b8cd447SRobert Hoo# since we won't be able to select the new routines. 53156b8cd447SRobert Hoo# by default, it is turned off. 53166b8cd447SRobert Hoo# if user explicitly want to enable it, check environment 53176b8cd447SRobert Hoo 53186b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 53196b8cd447SRobert Hoo cat > $TMPC << EOF 53206b8cd447SRobert Hoo#pragma GCC push_options 53216b8cd447SRobert Hoo#pragma GCC target("avx512f") 53226b8cd447SRobert Hoo#include <cpuid.h> 53236b8cd447SRobert Hoo#include <immintrin.h> 53246b8cd447SRobert Hoostatic int bar(void *a) { 53256b8cd447SRobert Hoo __m512i x = *(__m512i *)a; 53266b8cd447SRobert Hoo return _mm512_test_epi64_mask(x, x); 53276b8cd447SRobert Hoo} 53286b8cd447SRobert Hooint main(int argc, char *argv[]) 53296b8cd447SRobert Hoo{ 53306b8cd447SRobert Hoo return bar(argv[0]); 53316b8cd447SRobert Hoo} 53326b8cd447SRobert HooEOF 53336b8cd447SRobert Hoo if ! compile_object "" ; then 53346b8cd447SRobert Hoo avx512f_opt="no" 53356b8cd447SRobert Hoo fi 53366b8cd447SRobert Hooelse 53376b8cd447SRobert Hoo avx512f_opt="no" 53386b8cd447SRobert Hoofi 53396b8cd447SRobert Hoo 5340f540166bSRichard Henderson######################################## 5341f540166bSRichard Henderson# check if __[u]int128_t is usable. 5342f540166bSRichard Henderson 5343f540166bSRichard Hendersonint128=no 5344f540166bSRichard Hendersoncat > $TMPC << EOF 5345f540166bSRichard Henderson__int128_t a; 5346f540166bSRichard Henderson__uint128_t b; 5347f540166bSRichard Hendersonint main (void) { 5348f540166bSRichard Henderson a = a + b; 5349f540166bSRichard Henderson b = a * b; 5350464e3671SPeter Maydell a = a * a; 5351f540166bSRichard Henderson return 0; 5352f540166bSRichard Henderson} 5353f540166bSRichard HendersonEOF 5354f540166bSRichard Hendersonif compile_prog "" "" ; then 5355f540166bSRichard Henderson int128=yes 5356f540166bSRichard Hendersonfi 535776a347e1SRichard Henderson 53587ebee43eSRichard Henderson######################################### 53597ebee43eSRichard Henderson# See if 128-bit atomic operations are supported. 53607ebee43eSRichard Henderson 53617ebee43eSRichard Hendersonatomic128=no 53627ebee43eSRichard Hendersonif test "$int128" = "yes"; then 53637ebee43eSRichard Henderson cat > $TMPC << EOF 53647ebee43eSRichard Hendersonint main(void) 53657ebee43eSRichard Henderson{ 53667ebee43eSRichard Henderson unsigned __int128 x = 0, y = 0; 53677ebee43eSRichard Henderson y = __atomic_load_16(&x, 0); 53687ebee43eSRichard Henderson __atomic_store_16(&x, y, 0); 53697ebee43eSRichard Henderson __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 53707ebee43eSRichard Henderson return 0; 53717ebee43eSRichard Henderson} 53727ebee43eSRichard HendersonEOF 53737ebee43eSRichard Henderson if compile_prog "" "" ; then 53747ebee43eSRichard Henderson atomic128=yes 53757ebee43eSRichard Henderson fi 53767ebee43eSRichard Hendersonfi 53777ebee43eSRichard Henderson 5378e6cd4bb5SRichard Hendersoncmpxchg128=no 5379e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then 5380e6cd4bb5SRichard Henderson cat > $TMPC << EOF 5381e6cd4bb5SRichard Hendersonint main(void) 5382e6cd4bb5SRichard Henderson{ 5383e6cd4bb5SRichard Henderson unsigned __int128 x = 0, y = 0; 5384e6cd4bb5SRichard Henderson __sync_val_compare_and_swap_16(&x, y, x); 5385e6cd4bb5SRichard Henderson return 0; 5386e6cd4bb5SRichard Henderson} 5387e6cd4bb5SRichard HendersonEOF 5388e6cd4bb5SRichard Henderson if compile_prog "" "" ; then 5389e6cd4bb5SRichard Henderson cmpxchg128=yes 5390e6cd4bb5SRichard Henderson fi 5391e6cd4bb5SRichard Hendersonfi 5392e6cd4bb5SRichard Henderson 5393df79b996SRichard Henderson######################################### 5394df79b996SRichard Henderson# See if 64-bit atomic operations are supported. 5395df79b996SRichard Henderson# Note that without __atomic builtins, we can only 5396df79b996SRichard Henderson# assume atomic loads/stores max at pointer size. 5397df79b996SRichard Henderson 5398df79b996SRichard Hendersoncat > $TMPC << EOF 5399df79b996SRichard Henderson#include <stdint.h> 5400df79b996SRichard Hendersonint main(void) 5401df79b996SRichard Henderson{ 5402df79b996SRichard Henderson uint64_t x = 0, y = 0; 5403df79b996SRichard Henderson#ifdef __ATOMIC_RELAXED 54045fe40765SThomas Huth y = __atomic_load_n(&x, __ATOMIC_RELAXED); 54055fe40765SThomas Huth __atomic_store_n(&x, y, __ATOMIC_RELAXED); 54065fe40765SThomas Huth __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED); 54075fe40765SThomas Huth __atomic_exchange_n(&x, y, __ATOMIC_RELAXED); 54085fe40765SThomas Huth __atomic_fetch_add(&x, y, __ATOMIC_RELAXED); 5409df79b996SRichard Henderson#else 5410df79b996SRichard Henderson typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5411df79b996SRichard Henderson __sync_lock_test_and_set(&x, y); 5412df79b996SRichard Henderson __sync_val_compare_and_swap(&x, y, 0); 5413df79b996SRichard Henderson __sync_fetch_and_add(&x, y); 5414df79b996SRichard Henderson#endif 5415df79b996SRichard Henderson return 0; 5416df79b996SRichard Henderson} 5417df79b996SRichard HendersonEOF 5418df79b996SRichard Hendersonif compile_prog "" "" ; then 5419df79b996SRichard Henderson atomic64=yes 5420df79b996SRichard Hendersonfi 5421df79b996SRichard Henderson 542226fffe29SEmilio G. Cota######################################### 542326fffe29SEmilio G. Cota# See if --dynamic-list is supported by the linker 542426fffe29SEmilio G. Cotald_dynamic_list="no" 542526fffe29SEmilio G. Cotaif test "$static" = "no" ; then 542626fffe29SEmilio G. Cota cat > $TMPTXT <<EOF 542726fffe29SEmilio G. Cota{ 542826fffe29SEmilio G. Cota foo; 542926fffe29SEmilio G. Cota}; 543026fffe29SEmilio G. CotaEOF 543126fffe29SEmilio G. Cota 543226fffe29SEmilio G. Cota cat > $TMPC <<EOF 543326fffe29SEmilio G. Cota#include <stdio.h> 543426fffe29SEmilio G. Cotavoid foo(void); 543526fffe29SEmilio G. Cota 543626fffe29SEmilio G. Cotavoid foo(void) 543726fffe29SEmilio G. Cota{ 543826fffe29SEmilio G. Cota printf("foo\n"); 543926fffe29SEmilio G. Cota} 544026fffe29SEmilio G. Cota 544126fffe29SEmilio G. Cotaint main(void) 544226fffe29SEmilio G. Cota{ 544326fffe29SEmilio G. Cota foo(); 544426fffe29SEmilio G. Cota return 0; 544526fffe29SEmilio G. Cota} 544626fffe29SEmilio G. CotaEOF 544726fffe29SEmilio G. Cota 544826fffe29SEmilio G. Cota if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 544926fffe29SEmilio G. Cota ld_dynamic_list="yes" 545026fffe29SEmilio G. Cota fi 545126fffe29SEmilio G. Cotafi 545226fffe29SEmilio G. Cota 545326fffe29SEmilio G. Cota######################################### 545426fffe29SEmilio G. Cota# See if -exported_symbols_list is supported by the linker 545526fffe29SEmilio G. Cota 545626fffe29SEmilio G. Cotald_exported_symbols_list="no" 545726fffe29SEmilio G. Cotaif test "$static" = "no" ; then 545826fffe29SEmilio G. Cota cat > $TMPTXT <<EOF 545926fffe29SEmilio G. Cota _foo 546026fffe29SEmilio G. CotaEOF 546126fffe29SEmilio G. Cota 546226fffe29SEmilio G. Cota if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 546326fffe29SEmilio G. Cota ld_exported_symbols_list="yes" 546426fffe29SEmilio G. Cota fi 546526fffe29SEmilio G. Cotafi 546626fffe29SEmilio G. Cota 546726fffe29SEmilio G. Cotaif test "$plugins" = "yes" && 546826fffe29SEmilio G. Cota test "$ld_dynamic_list" = "no" && 546926fffe29SEmilio G. Cota test "$ld_exported_symbols_list" = "no" ; then 547026fffe29SEmilio G. Cota error_exit \ 547126fffe29SEmilio G. Cota "Plugin support requires dynamic linking and specifying a set of symbols " \ 547226fffe29SEmilio G. Cota "that are exported to plugins. Unfortunately your linker doesn't " \ 547326fffe29SEmilio G. Cota "support the flag (--dynamic-list or -exported_symbols_list) used " \ 547426fffe29SEmilio G. Cota "for this purpose. You can't build with --static." 547526fffe29SEmilio G. Cotafi 547626fffe29SEmilio G. Cota 54771e6e9acaSRichard Henderson######################################## 5478db8aaae8SRichard Henderson# See if __attribute__((alias)) is supported. 5479db8aaae8SRichard Henderson# This false for Xcode 9, but has been remedied for Xcode 10. 5480db8aaae8SRichard Henderson# Unfortunately, travis uses Xcode 9 by default. 5481db8aaae8SRichard Henderson 5482db8aaae8SRichard Hendersonattralias=no 5483db8aaae8SRichard Hendersoncat > $TMPC << EOF 5484db8aaae8SRichard Hendersonint x = 1; 5485db8aaae8SRichard Hendersonextern const int y __attribute__((alias("x"))); 5486db8aaae8SRichard Hendersonint main(void) { return 0; } 5487db8aaae8SRichard HendersonEOF 5488db8aaae8SRichard Hendersonif compile_prog "" "" ; then 5489db8aaae8SRichard Henderson attralias=yes 5490db8aaae8SRichard Hendersonfi 5491db8aaae8SRichard Henderson 5492db8aaae8SRichard Henderson######################################## 54931e6e9acaSRichard Henderson# check if getauxval is available. 54941e6e9acaSRichard Henderson 54951e6e9acaSRichard Hendersongetauxval=no 54961e6e9acaSRichard Hendersoncat > $TMPC << EOF 54971e6e9acaSRichard Henderson#include <sys/auxv.h> 54981e6e9acaSRichard Hendersonint main(void) { 54991e6e9acaSRichard Henderson return getauxval(AT_HWCAP) == 0; 55001e6e9acaSRichard Henderson} 55011e6e9acaSRichard HendersonEOF 55021e6e9acaSRichard Hendersonif compile_prog "" "" ; then 55031e6e9acaSRichard Henderson getauxval=yes 55041e6e9acaSRichard Hendersonfi 55051e6e9acaSRichard Henderson 5506fd0e6053SJohn Snow######################################## 5507fd0e6053SJohn Snow# check if ccache is interfering with 5508fd0e6053SJohn Snow# semantic analysis of macros 5509fd0e6053SJohn Snow 55105e4dfd3dSJohn Snowunset CCACHE_CPP2 5511fd0e6053SJohn Snowccache_cpp2=no 5512fd0e6053SJohn Snowcat > $TMPC << EOF 5513fd0e6053SJohn Snowstatic const int Z = 1; 5514fd0e6053SJohn Snow#define fn() ({ Z; }) 5515fd0e6053SJohn Snow#define TAUT(X) ((X) == Z) 5516fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y) 5517fd0e6053SJohn Snow#define ID(X) (X) 5518fd0e6053SJohn Snowint main(int argc, char *argv[]) 5519fd0e6053SJohn Snow{ 5520fd0e6053SJohn Snow int x = 0, y = 0; 5521fd0e6053SJohn Snow x = ID(x); 5522fd0e6053SJohn Snow x = fn(); 5523fd0e6053SJohn Snow fn(); 5524fd0e6053SJohn Snow if (PAREN(x, y)) return 0; 5525fd0e6053SJohn Snow if (TAUT(Z)) return 0; 5526fd0e6053SJohn Snow return 0; 5527fd0e6053SJohn Snow} 5528fd0e6053SJohn SnowEOF 5529fd0e6053SJohn Snow 5530fd0e6053SJohn Snowif ! compile_object "-Werror"; then 5531fd0e6053SJohn Snow ccache_cpp2=yes 5532fd0e6053SJohn Snowfi 5533fd0e6053SJohn Snow 5534b553a042SJohn Snow################################################# 5535b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE. 5536b553a042SJohn Snow 5537b553a042SJohn Snowif test "$fortify_source" != "no"; then 5538b553a042SJohn Snow if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5539b553a042SJohn Snow fortify_source="no"; 5540e189091fSPeter Maydell elif test -n "$cxx" && has $cxx && 5541cfcc7c14SJohn Snow echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5542b553a042SJohn Snow fortify_source="no"; 5543b553a042SJohn Snow else 5544b553a042SJohn Snow fortify_source="yes" 5545b553a042SJohn Snow fi 5546b553a042SJohn Snowfi 5547b553a042SJohn Snow 55481efad060SFam Zheng############################################### 55491efad060SFam Zheng# Check if copy_file_range is provided by glibc 55501efad060SFam Zhenghave_copy_file_range=no 55511efad060SFam Zhengcat > $TMPC << EOF 55521efad060SFam Zheng#include <unistd.h> 55531efad060SFam Zhengint main(void) { 55541efad060SFam Zheng copy_file_range(0, NULL, 0, NULL, 0, 0); 55551efad060SFam Zheng return 0; 55561efad060SFam Zheng} 55571efad060SFam ZhengEOF 55581efad060SFam Zhengif compile_prog "" "" ; then 55591efad060SFam Zheng have_copy_file_range=yes 55601efad060SFam Zhengfi 55611efad060SFam Zheng 5562d2042378SAneesh Kumar K.V########################################## 5563277abf15SJan Vesely# check if struct fsxattr is available via linux/fs.h 5564277abf15SJan Vesely 5565277abf15SJan Veselyhave_fsxattr=no 5566277abf15SJan Veselycat > $TMPC << EOF 5567277abf15SJan Vesely#include <linux/fs.h> 5568277abf15SJan Veselystruct fsxattr foo; 5569277abf15SJan Veselyint main(void) { 5570277abf15SJan Vesely return 0; 5571277abf15SJan Vesely} 5572277abf15SJan VeselyEOF 5573277abf15SJan Veselyif compile_prog "" "" ; then 5574277abf15SJan Vesely have_fsxattr=yes 5575277abf15SJan Veselyfi 5576277abf15SJan Vesely 5577b66e10e4SPeter Maydell########################################## 5578a40161cbSPaolo Bonzini# check for usable membarrier system call 5579a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then 5580a40161cbSPaolo Bonzini have_membarrier=no 5581a40161cbSPaolo Bonzini if test "$mingw32" = "yes" ; then 5582a40161cbSPaolo Bonzini have_membarrier=yes 5583a40161cbSPaolo Bonzini elif test "$linux" = "yes" ; then 5584a40161cbSPaolo Bonzini cat > $TMPC << EOF 5585a40161cbSPaolo Bonzini #include <linux/membarrier.h> 5586a40161cbSPaolo Bonzini #include <sys/syscall.h> 5587a40161cbSPaolo Bonzini #include <unistd.h> 5588a40161cbSPaolo Bonzini #include <stdlib.h> 5589a40161cbSPaolo Bonzini int main(void) { 5590a40161cbSPaolo Bonzini syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5591a40161cbSPaolo Bonzini syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5592a40161cbSPaolo Bonzini exit(0); 5593a40161cbSPaolo Bonzini } 5594a40161cbSPaolo BonziniEOF 5595a40161cbSPaolo Bonzini if compile_prog "" "" ; then 5596a40161cbSPaolo Bonzini have_membarrier=yes 5597a40161cbSPaolo Bonzini fi 5598a40161cbSPaolo Bonzini fi 5599a40161cbSPaolo Bonzini if test "$have_membarrier" = "no"; then 5600a40161cbSPaolo Bonzini feature_not_found "membarrier" "membarrier system call not available" 5601a40161cbSPaolo Bonzini fi 5602a40161cbSPaolo Bonzinielse 5603a40161cbSPaolo Bonzini # Do not enable it by default even for Mingw32, because it doesn't 5604a40161cbSPaolo Bonzini # work on Wine. 5605a40161cbSPaolo Bonzini membarrier=no 5606a40161cbSPaolo Bonzinifi 5607a40161cbSPaolo Bonzini 5608a40161cbSPaolo Bonzini########################################## 5609b66e10e4SPeter Maydell# check if rtnetlink.h exists and is useful 5610575b22b1SLaurent Vivierhave_rtnetlink=no 5611575b22b1SLaurent Viviercat > $TMPC << EOF 5612575b22b1SLaurent Vivier#include <linux/rtnetlink.h> 5613575b22b1SLaurent Vivierint main(void) { 5614575b22b1SLaurent Vivier return IFLA_PROTO_DOWN; 5615575b22b1SLaurent Vivier} 5616575b22b1SLaurent VivierEOF 5617575b22b1SLaurent Vivierif compile_prog "" "" ; then 5618575b22b1SLaurent Vivier have_rtnetlink=yes 5619575b22b1SLaurent Vivierfi 5620575b22b1SLaurent Vivier 56216a02c806SStefan Hajnoczi########################################## 56226a02c806SStefan Hajnoczi# check for usable AF_VSOCK environment 56236a02c806SStefan Hajnoczihave_af_vsock=no 56246a02c806SStefan Hajnoczicat > $TMPC << EOF 56256a02c806SStefan Hajnoczi#include <errno.h> 56266a02c806SStefan Hajnoczi#include <sys/types.h> 56276a02c806SStefan Hajnoczi#include <sys/socket.h> 56286a02c806SStefan Hajnoczi#if !defined(AF_VSOCK) 56296a02c806SStefan Hajnoczi# error missing AF_VSOCK flag 56306a02c806SStefan Hajnoczi#endif 56316a02c806SStefan Hajnoczi#include <linux/vm_sockets.h> 56326a02c806SStefan Hajnocziint main(void) { 56336a02c806SStefan Hajnoczi int sock, ret; 56346a02c806SStefan Hajnoczi struct sockaddr_vm svm; 56356a02c806SStefan Hajnoczi socklen_t len = sizeof(svm); 56366a02c806SStefan Hajnoczi sock = socket(AF_VSOCK, SOCK_STREAM, 0); 56376a02c806SStefan Hajnoczi ret = getpeername(sock, (struct sockaddr *)&svm, &len); 56386a02c806SStefan Hajnoczi if ((ret == -1) && (errno == ENOTCONN)) { 56396a02c806SStefan Hajnoczi return 0; 56406a02c806SStefan Hajnoczi } 56416a02c806SStefan Hajnoczi return -1; 56426a02c806SStefan Hajnoczi} 56436a02c806SStefan HajnocziEOF 56446a02c806SStefan Hajnocziif compile_prog "" "" ; then 56456a02c806SStefan Hajnoczi have_af_vsock=yes 56466a02c806SStefan Hajnoczifi 56476a02c806SStefan Hajnoczi 5648f0d92b56SLongpeng(Mike)########################################## 5649f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment 56504f67366eSThomas Huthhave_afalg=no 5651f0d92b56SLongpeng(Mike)cat > $TMPC << EOF 5652f0d92b56SLongpeng(Mike)#include <errno.h> 5653f0d92b56SLongpeng(Mike)#include <sys/types.h> 5654f0d92b56SLongpeng(Mike)#include <sys/socket.h> 5655f0d92b56SLongpeng(Mike)#include <linux/if_alg.h> 5656f0d92b56SLongpeng(Mike)int main(void) { 5657f0d92b56SLongpeng(Mike) int sock; 5658f0d92b56SLongpeng(Mike) sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5659f0d92b56SLongpeng(Mike) return sock; 5660f0d92b56SLongpeng(Mike)} 5661f0d92b56SLongpeng(Mike)EOF 5662f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then 5663f0d92b56SLongpeng(Mike) have_afalg=yes 5664f0d92b56SLongpeng(Mike)fi 5665f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" 5666f0d92b56SLongpeng(Mike)then 5667f0d92b56SLongpeng(Mike) if test "$have_afalg" != "yes" 5668f0d92b56SLongpeng(Mike) then 5669f0d92b56SLongpeng(Mike) error_exit "AF_ALG requested but could not be detected" 5670f0d92b56SLongpeng(Mike) fi 5671f0d92b56SLongpeng(Mike)fi 5672f0d92b56SLongpeng(Mike) 5673f0d92b56SLongpeng(Mike) 56746969ec6cSJames Clarke################################################# 56754d04351fSChristopher Covington# check for sysmacros.h 56764d04351fSChristopher Covington 56774d04351fSChristopher Covingtonhave_sysmacros=no 56784d04351fSChristopher Covingtoncat > $TMPC << EOF 56794d04351fSChristopher Covington#include <sys/sysmacros.h> 56804d04351fSChristopher Covingtonint main(void) { 56814d04351fSChristopher Covington return makedev(0, 0); 56824d04351fSChristopher Covington} 56834d04351fSChristopher CovingtonEOF 56844d04351fSChristopher Covingtonif compile_prog "" "" ; then 56854d04351fSChristopher Covington have_sysmacros=yes 56864d04351fSChristopher Covingtonfi 56874d04351fSChristopher Covington 56884d04351fSChristopher Covington########################################## 568949e00a18SAndreas Grapentin# check for _Static_assert() 569049e00a18SAndreas Grapentin 569149e00a18SAndreas Grapentinhave_static_assert=no 569249e00a18SAndreas Grapentincat > $TMPC << EOF 569349e00a18SAndreas Grapentin_Static_assert(1, "success"); 569449e00a18SAndreas Grapentinint main(void) { 569549e00a18SAndreas Grapentin return 0; 569649e00a18SAndreas Grapentin} 569749e00a18SAndreas GrapentinEOF 569849e00a18SAndreas Grapentinif compile_prog "" "" ; then 569949e00a18SAndreas Grapentin have_static_assert=yes 570049e00a18SAndreas Grapentinfi 570149e00a18SAndreas Grapentin 570249e00a18SAndreas Grapentin########################################## 5703e674605fSTomáš Golembiovský# check for utmpx.h, it is missing e.g. on OpenBSD 5704e674605fSTomáš Golembiovský 5705e674605fSTomáš Golembiovskýhave_utmpx=no 5706e674605fSTomáš Golembiovskýcat > $TMPC << EOF 5707e674605fSTomáš Golembiovský#include <utmpx.h> 5708e674605fSTomáš Golembiovskýstruct utmpx user_info; 5709e674605fSTomáš Golembiovskýint main(void) { 5710e674605fSTomáš Golembiovský return 0; 5711e674605fSTomáš Golembiovský} 5712e674605fSTomáš GolembiovskýEOF 5713e674605fSTomáš Golembiovskýif compile_prog "" "" ; then 5714e674605fSTomáš Golembiovský have_utmpx=yes 5715e674605fSTomáš Golembiovskýfi 5716e674605fSTomáš Golembiovský 5717e674605fSTomáš Golembiovský########################################## 5718db1ed1abSRichard Henderson# check for getrandom() 5719db1ed1abSRichard Henderson 5720db1ed1abSRichard Hendersonhave_getrandom=no 5721db1ed1abSRichard Hendersoncat > $TMPC << EOF 5722db1ed1abSRichard Henderson#include <sys/random.h> 5723db1ed1abSRichard Hendersonint main(void) { 5724db1ed1abSRichard Henderson return getrandom(0, 0, GRND_NONBLOCK); 5725db1ed1abSRichard Henderson} 5726db1ed1abSRichard HendersonEOF 5727db1ed1abSRichard Hendersonif compile_prog "" "" ; then 5728db1ed1abSRichard Henderson have_getrandom=yes 5729db1ed1abSRichard Hendersonfi 5730db1ed1abSRichard Henderson 5731db1ed1abSRichard Henderson########################################## 5732247724cbSMarc-André Lureau# checks for sanitizers 5733247724cbSMarc-André Lureau 5734247724cbSMarc-André Lureauhave_asan=no 5735247724cbSMarc-André Lureauhave_ubsan=no 5736d83414e1SMarc-André Lureauhave_asan_iface_h=no 5737d83414e1SMarc-André Lureauhave_asan_iface_fiber=no 5738247724cbSMarc-André Lureau 5739247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then 5740b9f44da2SMarc-André Lureau write_c_skeleton 5741247724cbSMarc-André Lureau if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5742247724cbSMarc-André Lureau have_asan=yes 5743247724cbSMarc-André Lureau fi 5744b9f44da2SMarc-André Lureau 5745b9f44da2SMarc-André Lureau # we could use a simple skeleton for flags checks, but this also 5746b9f44da2SMarc-André Lureau # detect the static linking issue of ubsan, see also: 5747b9f44da2SMarc-André Lureau # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5748b9f44da2SMarc-André Lureau cat > $TMPC << EOF 5749b9f44da2SMarc-André Lureau#include <stdlib.h> 5750b9f44da2SMarc-André Lureauint main(void) { 5751b9f44da2SMarc-André Lureau void *tmp = malloc(10); 5752f2dfe54cSLeonid Bloch if (tmp != NULL) { 5753b9f44da2SMarc-André Lureau return *(int *)(tmp + 2); 5754b9f44da2SMarc-André Lureau } 5755d1abf3fcSOlaf Hering return 1; 5756f2dfe54cSLeonid Bloch} 5757b9f44da2SMarc-André LureauEOF 5758247724cbSMarc-André Lureau if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5759247724cbSMarc-André Lureau have_ubsan=yes 5760247724cbSMarc-André Lureau fi 5761d83414e1SMarc-André Lureau 5762d83414e1SMarc-André Lureau if check_include "sanitizer/asan_interface.h" ; then 5763d83414e1SMarc-André Lureau have_asan_iface_h=yes 5764d83414e1SMarc-André Lureau fi 5765d83414e1SMarc-André Lureau 5766d83414e1SMarc-André Lureau cat > $TMPC << EOF 5767d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h> 5768d83414e1SMarc-André Lureauint main(void) { 5769d83414e1SMarc-André Lureau __sanitizer_start_switch_fiber(0, 0, 0); 5770d83414e1SMarc-André Lureau return 0; 5771d83414e1SMarc-André Lureau} 5772d83414e1SMarc-André LureauEOF 5773d83414e1SMarc-André Lureau if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5774d83414e1SMarc-André Lureau have_asan_iface_fiber=yes 5775d83414e1SMarc-André Lureau fi 5776247724cbSMarc-André Lureaufi 5777247724cbSMarc-André Lureau 5778247724cbSMarc-André Lureau########################################## 5779adc28027SAlexander Bulekov# checks for fuzzer 578054c9e41dSAlexander Bulekovif test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then 5781adc28027SAlexander Bulekov write_c_fuzzer_skeleton 5782dd016265SAlexander Bulekov if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then 5783adc28027SAlexander Bulekov have_fuzzer=yes 578464ed6f92SPaolo Bonzini else 578564ed6f92SPaolo Bonzini error_exit "Your compiler doesn't support -fsanitize=fuzzer" 578664ed6f92SPaolo Bonzini exit 1 5787adc28027SAlexander Bulekov fi 5788adc28027SAlexander Bulekovfi 5789adc28027SAlexander Bulekov 57900aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers; 57910aebab04SLingfeng Yang# keep it separate until that is not the case. 57920aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 57930aebab04SLingfeng Yang error_exit "TSAN is not supported with other sanitiziers." 57940aebab04SLingfeng Yangfi 57950aebab04SLingfeng Yanghave_tsan=no 57960aebab04SLingfeng Yanghave_tsan_iface_fiber=no 57970aebab04SLingfeng Yangif test "$tsan" = "yes" ; then 57980aebab04SLingfeng Yang write_c_skeleton 57990aebab04SLingfeng Yang if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 58000aebab04SLingfeng Yang have_tsan=yes 58010aebab04SLingfeng Yang fi 58020aebab04SLingfeng Yang cat > $TMPC << EOF 58030aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h> 58040aebab04SLingfeng Yangint main(void) { 58050aebab04SLingfeng Yang __tsan_create_fiber(0); 58060aebab04SLingfeng Yang return 0; 58070aebab04SLingfeng Yang} 58080aebab04SLingfeng YangEOF 58090aebab04SLingfeng Yang if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 58100aebab04SLingfeng Yang have_tsan_iface_fiber=yes 58110aebab04SLingfeng Yang fi 58120aebab04SLingfeng Yangfi 58130aebab04SLingfeng Yang 5814adc28027SAlexander Bulekov########################################## 581517824406SJunyan He# check for libpmem 581617824406SJunyan He 581717824406SJunyan Heif test "$libpmem" != "no"; then 581817824406SJunyan He if $pkg_config --exists "libpmem"; then 581917824406SJunyan He libpmem="yes" 582017824406SJunyan He libpmem_libs=$($pkg_config --libs libpmem) 582117824406SJunyan He libpmem_cflags=$($pkg_config --cflags libpmem) 582217824406SJunyan He else 582317824406SJunyan He if test "$libpmem" = "yes" ; then 582417824406SJunyan He feature_not_found "libpmem" "Install nvml or pmdk" 582517824406SJunyan He fi 582617824406SJunyan He libpmem="no" 582717824406SJunyan He fi 582817824406SJunyan Hefi 582917824406SJunyan He 583017824406SJunyan He########################################## 583121b2eca6SJingqi Liu# check for libdaxctl 583221b2eca6SJingqi Liu 583321b2eca6SJingqi Liuif test "$libdaxctl" != "no"; then 583421b2eca6SJingqi Liu if $pkg_config --atleast-version=57 "libdaxctl"; then 583521b2eca6SJingqi Liu libdaxctl="yes" 583621b2eca6SJingqi Liu libdaxctl_libs=$($pkg_config --libs libdaxctl) 583721b2eca6SJingqi Liu libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 583821b2eca6SJingqi Liu else 583921b2eca6SJingqi Liu if test "$libdaxctl" = "yes" ; then 584021b2eca6SJingqi Liu feature_not_found "libdaxctl" "Install libdaxctl" 584121b2eca6SJingqi Liu fi 584221b2eca6SJingqi Liu libdaxctl="no" 584321b2eca6SJingqi Liu fi 584421b2eca6SJingqi Liufi 584521b2eca6SJingqi Liu 584621b2eca6SJingqi Liu########################################## 5847675b9b53SMarc-André Lureau# check for slirp 5848675b9b53SMarc-André Lureau 5849d599938aSLaurent Vivier# slirp is only required when building softmmu targets 5850d599938aSLaurent Vivierif test -z "$slirp" -a "$softmmu" != "yes" ; then 5851d599938aSLaurent Vivier slirp="no" 5852d599938aSLaurent Vivierfi 5853d599938aSLaurent Vivier 5854675b9b53SMarc-André Lureaucase "$slirp" in 5855675b9b53SMarc-André Lureau "" | yes) 5856675b9b53SMarc-André Lureau if $pkg_config slirp; then 5857675b9b53SMarc-André Lureau slirp=system 58587c57bdd8SMarc-André Lureau elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 58597c57bdd8SMarc-André Lureau slirp=git 5860675b9b53SMarc-André Lureau elif test -e "${source_path}/slirp/Makefile" ; then 5861675b9b53SMarc-André Lureau slirp=internal 5862675b9b53SMarc-André Lureau elif test -z "$slirp" ; then 5863675b9b53SMarc-André Lureau slirp=no 5864675b9b53SMarc-André Lureau else 5865675b9b53SMarc-André Lureau feature_not_found "slirp" "Install slirp devel or git submodule" 5866675b9b53SMarc-André Lureau fi 5867675b9b53SMarc-André Lureau ;; 5868675b9b53SMarc-André Lureau 5869675b9b53SMarc-André Lureau system) 5870675b9b53SMarc-André Lureau if ! $pkg_config slirp; then 5871675b9b53SMarc-André Lureau feature_not_found "slirp" "Install slirp devel" 5872675b9b53SMarc-André Lureau fi 5873675b9b53SMarc-André Lureau ;; 5874675b9b53SMarc-André Lureauesac 5875675b9b53SMarc-André Lureau 5876675b9b53SMarc-André Lureaucase "$slirp" in 58777c57bdd8SMarc-André Lureau git | internal) 58787c57bdd8SMarc-André Lureau if test "$slirp" = git; then 58797c57bdd8SMarc-André Lureau git_submodules="${git_submodules} slirp" 58807c57bdd8SMarc-André Lureau fi 5881675b9b53SMarc-André Lureau mkdir -p slirp 588258683d07SPaolo Bonzini slirp_cflags="-I${source_path}/slirp/src -Islirp/src" 588358683d07SPaolo Bonzini slirp_libs="-Lslirp -lslirp" 5884b965e8c5SPaolo Bonzini if test "$mingw32" = "yes" ; then 5885b965e8c5SPaolo Bonzini slirp_libs="$slirp_libs -lws2_32 -liphlpapi" 5886b965e8c5SPaolo Bonzini fi 5887675b9b53SMarc-André Lureau ;; 5888675b9b53SMarc-André Lureau 5889675b9b53SMarc-André Lureau system) 5890675b9b53SMarc-André Lureau slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 5891675b9b53SMarc-André Lureau slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 5892675b9b53SMarc-André Lureau slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 5893675b9b53SMarc-André Lureau ;; 5894675b9b53SMarc-André Lureau 5895675b9b53SMarc-André Lureau no) 5896675b9b53SMarc-André Lureau ;; 5897675b9b53SMarc-André Lureau *) 5898675b9b53SMarc-André Lureau error_exit "Unknown state for slirp: $slirp" 5899675b9b53SMarc-André Lureau ;; 5900675b9b53SMarc-André Lureauesac 5901675b9b53SMarc-André Lureau 590254e7aac0SAlexey Krasikov########################################## 590354e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall 590454e7aac0SAlexey Krasikov 590554e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then 590654e7aac0SAlexey Krasikov 590754e7aac0SAlexey Krasikov have_keyring=no 590854e7aac0SAlexey Krasikov cat > $TMPC << EOF 590954e7aac0SAlexey Krasikov#include <errno.h> 591054e7aac0SAlexey Krasikov#include <asm/unistd.h> 591154e7aac0SAlexey Krasikov#include <linux/keyctl.h> 591254e7aac0SAlexey Krasikov#include <unistd.h> 591354e7aac0SAlexey Krasikovint main(void) { 591454e7aac0SAlexey Krasikov return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 591554e7aac0SAlexey Krasikov} 591654e7aac0SAlexey KrasikovEOF 591754e7aac0SAlexey Krasikov if compile_prog "" "" ; then 591854e7aac0SAlexey Krasikov have_keyring=yes 591954e7aac0SAlexey Krasikov fi 592054e7aac0SAlexey Krasikovfi 592154e7aac0SAlexey Krasikovif test "$secret_keyring" != "no" 592254e7aac0SAlexey Krasikovthen 5923b418d265SDavid Edmondson if test "$have_keyring" = "yes" 592454e7aac0SAlexey Krasikov then 592554e7aac0SAlexey Krasikov secret_keyring=yes 592654e7aac0SAlexey Krasikov else 592754e7aac0SAlexey Krasikov if test "$secret_keyring" = "yes" 592854e7aac0SAlexey Krasikov then 592954e7aac0SAlexey Krasikov error_exit "syscall __NR_keyctl requested, \ 593054e7aac0SAlexey Krasikovbut not implemented on your system" 593154e7aac0SAlexey Krasikov else 593254e7aac0SAlexey Krasikov secret_keyring=no 593354e7aac0SAlexey Krasikov fi 593454e7aac0SAlexey Krasikov fi 593554e7aac0SAlexey Krasikovfi 593654e7aac0SAlexey Krasikov 593792500362SAlexey Krasikov########################################## 5938e86ecd4bSJuan Quintela# End of CC checks 5939e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs 5940e86ecd4bSJuan Quintela 5941d83414e1SMarc-André Lureauwrite_c_skeleton 5942d83414e1SMarc-André Lureau 59431d728c39SBlue Swirlif test "$gcov" = "yes" ; then 5944bf0e56a3SMarc-André Lureau : 5945b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then 5946086d5f75SPaolo Bonzini QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 5947086d5f75SPaolo Bonzini debug=no 5948086d5f75SPaolo Bonzinifi 5949086d5f75SPaolo Bonziniif test "$debug_info" = "yes"; then 5950086d5f75SPaolo Bonzini CFLAGS="-g $CFLAGS" 5951086d5f75SPaolo Bonzini LDFLAGS="-g $LDFLAGS" 5952086d5f75SPaolo Bonzinifi 5953a5665051SPaolo Bonziniif test "$debug" = "no"; then 5954a5665051SPaolo Bonzini CFLAGS="-O2 $CFLAGS" 5955a5665051SPaolo Bonzinifi 5956086d5f75SPaolo Bonzini 5957086d5f75SPaolo Bonzinicase "$ARCH" in 5958086d5f75SPaolo Bonzinialpha) 5959086d5f75SPaolo Bonzini # Ensure there's only a single GP 5960086d5f75SPaolo Bonzini QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 5961086d5f75SPaolo Bonzini;; 5962086d5f75SPaolo Bonziniesac 5963086d5f75SPaolo Bonzini 5964086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then 5965086d5f75SPaolo Bonzini QEMU_CFLAGS="-p $QEMU_CFLAGS" 5966086d5f75SPaolo Bonzini QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 5967086d5f75SPaolo Bonzinifi 5968a316e378SJuan Quintela 5969247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then 5970db5adeaaSPaolo Bonzini QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 5971db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 5972d83414e1SMarc-André Lureau if test "$have_asan_iface_h" = "no" ; then 5973d83414e1SMarc-André Lureau echo "ASAN build enabled, but ASAN header missing." \ 5974d83414e1SMarc-André Lureau "Without code annotation, the report may be inferior." 5975d83414e1SMarc-André Lureau elif test "$have_asan_iface_fiber" = "no" ; then 5976d83414e1SMarc-André Lureau echo "ASAN build enabled, but ASAN header is too old." \ 5977d83414e1SMarc-André Lureau "Without code annotation, the report may be inferior." 5978d83414e1SMarc-André Lureau fi 5979247724cbSMarc-André Lureaufi 59800aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then 59810aebab04SLingfeng Yang if test "$have_tsan_iface_fiber" = "yes" ; then 59820aebab04SLingfeng Yang QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 59830aebab04SLingfeng Yang QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 59840aebab04SLingfeng Yang else 59850aebab04SLingfeng Yang error_exit "Cannot enable TSAN due to missing fiber annotation interface." 59860aebab04SLingfeng Yang fi 59870aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then 59880aebab04SLingfeng Yang error_exit "Cannot enable TSAN due to missing sanitize thread interface." 59890aebab04SLingfeng Yangfi 5990247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then 5991db5adeaaSPaolo Bonzini QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 5992db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 5993247724cbSMarc-André Lureaufi 5994247724cbSMarc-André Lureau 59956542aa9cSPeter Lieven########################################## 59966542aa9cSPeter Lieven# Do we have libnfs 59976542aa9cSPeter Lievenif test "$libnfs" != "no" ; then 5998b7d769c9SPeter Lieven if $pkg_config --atleast-version=1.9.3 libnfs; then 59996542aa9cSPeter Lieven libnfs="yes" 60006542aa9cSPeter Lieven libnfs_libs=$($pkg_config --libs libnfs) 60016542aa9cSPeter Lieven else 60026542aa9cSPeter Lieven if test "$libnfs" = "yes" ; then 60038efc9363SHu Tao feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 60046542aa9cSPeter Lieven fi 60056542aa9cSPeter Lieven libnfs="no" 60066542aa9cSPeter Lieven fi 60076542aa9cSPeter Lievenfi 60081d728c39SBlue Swirl 60093efac6ebSTomáš Golembiovský########################################## 60103efac6ebSTomáš Golembiovský 60110aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 60120aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then 6013e86ecd4bSJuan Quintela if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6014db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 6015e86ecd4bSJuan Quintela fi 6016e86ecd4bSJuan Quintelafi 6017e86ecd4bSJuan Quintela 6018952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available 6019952afb71SBlue Swirlif test "$mingw32" = "yes" ; then 6020952afb71SBlue Swirl for flag in --dynamicbase --no-seh --nxcompat; do 6021e9a3591fSChristian Borntraeger if ld_has $flag ; then 6022db5adeaaSPaolo Bonzini QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 6023952afb71SBlue Swirl fi 6024952afb71SBlue Swirl done 6025952afb71SBlue Swirlfi 6026952afb71SBlue Swirl 602710ff82d1SMarc-André Lureauqemu_confdir="$sysconfdir/$qemu_suffix" 602810ff82d1SMarc-André Lureauqemu_moddir="$libdir/$qemu_suffix" 602910ff82d1SMarc-André Lureauqemu_datadir="$datadir/$qemu_suffix" 6030ca8c0909SMarc-André Lureauqemu_docdir="$docdir/$qemu_suffix" 6031834574eaSAnthony Liguoriqemu_localedir="$datadir/locale" 6032a8260d38SDaniel P. Berrangéqemu_icondir="$datadir/icons" 603367ea9546SDaniel P. Berrangéqemu_desktopdir="$datadir/applications" 60345a67135aSbellard 6035e0580342SKamil Rytarowski# We can only support ivshmem if we have eventfd 6036e0580342SKamil Rytarowskiif [ "$eventfd" = "yes" ]; then 6037e0580342SKamil Rytarowski ivshmem=yes 6038e0580342SKamil Rytarowskifi 6039e0580342SKamil Rytarowski 60404b1c11fdSDaniel P. Berrangeif test "$softmmu" = yes ; then 6041b855f8d1SPaolo Bonzini if test "$linux" = yes; then 60427e462613SPaolo Bonzini if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 6043983eef5aSMeador Inge virtfs=yes 6044983eef5aSMeador Inge else 6045983eef5aSMeador Inge if test "$virtfs" = yes; then 60467e462613SPaolo Bonzini error_exit "VirtFS requires libcap-ng devel and libattr devel" 6047983eef5aSMeador Inge fi 604817500370SAndreas Färber virtfs=no 6049983eef5aSMeador Inge fi 6050b855f8d1SPaolo Bonzini else 6051b855f8d1SPaolo Bonzini if test "$virtfs" = yes; then 6052b855f8d1SPaolo Bonzini error_exit "VirtFS is supported only on Linux" 6053b855f8d1SPaolo Bonzini fi 6054b855f8d1SPaolo Bonzini virtfs=no 605517bff52bSM. Mohan Kumar fi 6056ff69fd8cSLaurent Vivierfi 60579d6bc27bSMichael Roth 60589d6bc27bSMichael Roth# Probe for guest agent support/options 60599d6bc27bSMichael Roth 6060e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then 6061a5125905SLaurent Vivier if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6062a5125905SLaurent Vivier guest_agent=no 6063a5125905SLaurent Vivier elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6064e8ef31a3SMichael Tokarev guest_agent=yes 6065e8ef31a3SMichael Tokarev elif [ "$guest_agent" != yes ]; then 6066e8ef31a3SMichael Tokarev guest_agent=no 6067e8ef31a3SMichael Tokarev else 6068e8ef31a3SMichael Tokarev error_exit "Guest agent is not supported on this platform" 6069ca35f780SPaolo Bonzini fi 60704b1c11fdSDaniel P. Berrangefi 6071ca35f780SPaolo Bonzini 60729d6bc27bSMichael Roth# Guest agent Window MSI package 60739d6bc27bSMichael Roth 60749d6bc27bSMichael Rothif test "$guest_agent" != yes; then 60759d6bc27bSMichael Roth if test "$guest_agent_msi" = yes; then 60769d6bc27bSMichael Roth error_exit "MSI guest agent package requires guest agent enabled" 60779d6bc27bSMichael Roth fi 60789d6bc27bSMichael Roth guest_agent_msi=no 60799d6bc27bSMichael Rothelif test "$mingw32" != "yes"; then 60809d6bc27bSMichael Roth if test "$guest_agent_msi" = "yes"; then 60819d6bc27bSMichael Roth error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 60829d6bc27bSMichael Roth fi 60839d6bc27bSMichael Roth guest_agent_msi=no 60849d6bc27bSMichael Rothelif ! has wixl; then 60859d6bc27bSMichael Roth if test "$guest_agent_msi" = "yes"; then 60869d6bc27bSMichael Roth error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 60879d6bc27bSMichael Roth fi 60889d6bc27bSMichael Roth guest_agent_msi=no 60891a34904eSMichael Rothelse 60901a34904eSMichael Roth # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 60911a34904eSMichael Roth # disabled explicitly 60921a34904eSMichael Roth if test "$guest_agent_msi" != "no"; then 60931a34904eSMichael Roth guest_agent_msi=yes 60941a34904eSMichael Roth fi 60959d6bc27bSMichael Rothfi 60969d6bc27bSMichael Roth 60971a34904eSMichael Rothif test "$guest_agent_msi" = "yes"; then 60989d6bc27bSMichael Roth if test "$guest_agent_with_vss" = "yes"; then 60999d6bc27bSMichael Roth QEMU_GA_MSI_WITH_VSS="-D InstallVss" 61009d6bc27bSMichael Roth fi 61019d6bc27bSMichael Roth 61029d6bc27bSMichael Roth if test "$QEMU_GA_MANUFACTURER" = ""; then 61039d6bc27bSMichael Roth QEMU_GA_MANUFACTURER=QEMU 61049d6bc27bSMichael Roth fi 61059d6bc27bSMichael Roth 61069d6bc27bSMichael Roth if test "$QEMU_GA_DISTRO" = ""; then 61079d6bc27bSMichael Roth QEMU_GA_DISTRO=Linux 61089d6bc27bSMichael Roth fi 61099d6bc27bSMichael Roth 61109d6bc27bSMichael Roth if test "$QEMU_GA_VERSION" = ""; then 611189138857SStefan Weil QEMU_GA_VERSION=$(cat $source_path/VERSION) 61129d6bc27bSMichael Roth fi 61139d6bc27bSMichael Roth 611489138857SStefan Weil QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 61159d6bc27bSMichael Roth 61169d6bc27bSMichael Roth case "$cpu" in 61179d6bc27bSMichael Roth x86_64) 61189d6bc27bSMichael Roth QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 61199d6bc27bSMichael Roth ;; 61209d6bc27bSMichael Roth i386) 61219d6bc27bSMichael Roth QEMU_GA_MSI_ARCH="-D Arch=32" 61229d6bc27bSMichael Roth ;; 61239d6bc27bSMichael Roth *) 61249d6bc27bSMichael Roth error_exit "CPU $cpu not supported for building installation package" 61259d6bc27bSMichael Roth ;; 61269d6bc27bSMichael Roth esac 61279d6bc27bSMichael Rothfi 61289d6bc27bSMichael Roth 6129ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler 6130ca35f780SPaolo Bonziniroms= 6131e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6132e633a5c6SEric Blake test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6133e633a5c6SEric Blake test "$softmmu" = yes ; then 6134e57218b6SPeter Maydell # Different host OS linkers have different ideas about the name of the ELF 6135c65d5e4eSBrad Smith # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6136c65d5e4eSBrad Smith # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6137c65d5e4eSBrad Smith for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6138e57218b6SPeter Maydell if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6139e57218b6SPeter Maydell ld_i386_emulation="$emu" 6140ca35f780SPaolo Bonzini roms="optionrom" 6141e57218b6SPeter Maydell break 6142e57218b6SPeter Maydell fi 6143e57218b6SPeter Maydell done 6144ca35f780SPaolo Bonzinifi 6145ca35f780SPaolo Bonzini 61462e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 61479933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then 61482e33c3f8SThomas Huth write_c_skeleton 61492e33c3f8SThomas Huth if compile_prog "-march=z900" ""; then 61509933c305SChristian Borntraeger roms="$roms s390-ccw" 61511ef6bfc2SPhilippe Mathieu-Daudé # SLOF is required for building the s390-ccw firmware on s390x, 61521ef6bfc2SPhilippe Mathieu-Daudé # since it is using the libnet code from SLOF for network booting. 61531ef6bfc2SPhilippe Mathieu-Daudé if test -e "${source_path}/.git" ; then 61541ef6bfc2SPhilippe Mathieu-Daudé git_submodules="${git_submodules} roms/SLOF" 61551ef6bfc2SPhilippe Mathieu-Daudé fi 61569933c305SChristian Borntraeger fi 61572e33c3f8SThomas Huthfi 61589933c305SChristian Borntraeger 615911cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler. 616011cde1c8SBruno 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. 616111cde1c8SBruno Dominguezif has $cxx; then 616211cde1c8SBruno Dominguez cat > $TMPC <<EOF 616311cde1c8SBruno Dominguezint c_function(void); 616411cde1c8SBruno Dominguezint main(void) { return c_function(); } 616511cde1c8SBruno DominguezEOF 616611cde1c8SBruno Dominguez 616711cde1c8SBruno Dominguez compile_object 616811cde1c8SBruno Dominguez 616911cde1c8SBruno Dominguez cat > $TMPCXX <<EOF 617011cde1c8SBruno Dominguezextern "C" { 617111cde1c8SBruno Dominguez int c_function(void); 617211cde1c8SBruno Dominguez} 617311cde1c8SBruno Dominguezint c_function(void) { return 42; } 617411cde1c8SBruno DominguezEOF 617511cde1c8SBruno Dominguez 617611cde1c8SBruno Dominguez update_cxxflags 617711cde1c8SBruno Dominguez 6178086d5f75SPaolo Bonzini if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 617911cde1c8SBruno Dominguez # C++ compiler $cxx works ok with C compiler $cc 618011cde1c8SBruno Dominguez : 618111cde1c8SBruno Dominguez else 618211cde1c8SBruno Dominguez echo "C++ compiler $cxx does not work with C compiler $cc" 618311cde1c8SBruno Dominguez echo "Disabling C++ specific optional code" 618411cde1c8SBruno Dominguez cxx= 618511cde1c8SBruno Dominguez fi 618611cde1c8SBruno Dominguezelse 618711cde1c8SBruno Dominguez echo "No C++ compiler available; disabling C++ specific optional code" 618811cde1c8SBruno Dominguez cxx= 618911cde1c8SBruno Dominguezfi 619011cde1c8SBruno Dominguez 61915d91a2edSYonggang Luoif test $git_update = 'yes' ; then 61925d91a2edSYonggang Luo (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules") 61935d91a2edSYonggang Luofi 61945d91a2edSYonggang Luoif test "$fdt" = "git" ; then 61955d91a2edSYonggang Luo symlink "$source_path/dtc/Makefile" "dtc/Makefile" 61965d91a2edSYonggang Luofi 61975d91a2edSYonggang Luo 619898ec69acSJuan Quintelaconfig_host_mak="config-host.mak" 619997a847bcSbellard 620098ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak 620198ec69acSJuan Quintelaecho >> $config_host_mak 620298ec69acSJuan Quintela 6203e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak 620499d7cc75SPaolo Bonziniecho "prefix=$prefix" >> $config_host_mak 620599d7cc75SPaolo Bonziniecho "bindir=$bindir" >> $config_host_mak 62063aa5d2beSAlon Levyecho "libdir=$libdir" >> $config_host_mak 62078bf188aaSMichael Tokarevecho "libexecdir=$libexecdir" >> $config_host_mak 62080f94d6daSAlon Levyecho "includedir=$includedir" >> $config_host_mak 620999d7cc75SPaolo Bonziniecho "sysconfdir=$sysconfdir" >> $config_host_mak 621022d07038SEduardo Habkostecho "qemu_confdir=$qemu_confdir" >> $config_host_mak 62119afa52ceSEduardo Habkostecho "qemu_datadir=$qemu_datadir" >> $config_host_mak 62123d5eecabSGerd Hoffmannecho "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6213e26110cfSFam Zhengecho "qemu_moddir=$qemu_moddir" >> $config_host_mak 62145a699bbbSLaszlo Ersekif test "$mingw32" = "no" ; then 6215785c23aeSLuiz Capitulino echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 62165a699bbbSLaszlo Ersekfi 6217f354b1a1SMichael Tokarevecho "qemu_helperdir=$libexecdir" >> $config_host_mak 6218834574eaSAnthony Liguoriecho "qemu_localedir=$qemu_localedir" >> $config_host_mak 6219a8260d38SDaniel P. Berrangéecho "qemu_icondir=$qemu_icondir" >> $config_host_mak 622067ea9546SDaniel P. Berrangéecho "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 6221cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak 6222aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6223f62bbee5SDaniel P. Berrangeecho "GIT_UPDATE=$git_update" >> $config_host_mak 6224804edf29SJuan Quintela 622598ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak 6226727e5283SPaolo Bonzini 6227f3494749SPaolo Bonziniif test "$default_devices" = "yes" ; then 6228f3494749SPaolo Bonzini echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 6229f3494749SPaolo Bonzinielse 6230f3494749SPaolo Bonzini echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 6231f3494749SPaolo Bonzinifi 6232f8393946Saurel32if test "$debug_tcg" = "yes" ; then 62332358a494SJuan Quintela echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6234f8393946Saurel32fi 62351625af87Saliguoriif test "$strip_opt" = "yes" ; then 623652ba784dSHollis Blanchard echo "STRIP=${strip}" >> $config_host_mak 62371625af87Saliguorifi 62387d13299dSbellardif test "$bigendian" = "yes" ; then 6239e2542fe2SJuan Quintela echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 624097a847bcSbellardfi 624167b915a5Sbellardif test "$mingw32" = "yes" ; then 624298ec69acSJuan Quintela echo "CONFIG_WIN32=y" >> $config_host_mak 624389138857SStefan Weil rc_version=$(cat $source_path/VERSION) 62449fe6de94SBlue Swirl version_major=${rc_version%%.*} 62459fe6de94SBlue Swirl rc_version=${rc_version#*.} 62469fe6de94SBlue Swirl version_minor=${rc_version%%.*} 62479fe6de94SBlue Swirl rc_version=${rc_version#*.} 62489fe6de94SBlue Swirl version_subminor=${rc_version%%.*} 62499fe6de94SBlue Swirl version_micro=0 62509fe6de94SBlue Swirl echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 62519fe6de94SBlue Swirl echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6252d9840e25STomoki Sekiyama if test "$guest_agent_with_vss" = "yes" ; then 6253d9840e25STomoki Sekiyama echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6254f33ca81fSMichael Roth echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6255d9840e25STomoki Sekiyama echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6256d9840e25STomoki Sekiyama fi 625750cbebb9SMichael Roth if test "$guest_agent_ntddscsi" = "yes" ; then 625876dc75caSTomáš Golembiovský echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 625950cbebb9SMichael Roth fi 62601a34904eSMichael Roth if test "$guest_agent_msi" = "yes"; then 62614bad7c3bSStefan Hajnoczi echo "CONFIG_QGA_MSI=y" >> $config_host_mak 62629dacf32dSYossi Hindin echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 62639dacf32dSYossi Hindin echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 62649dacf32dSYossi Hindin echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 62659dacf32dSYossi Hindin echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 62669dacf32dSYossi Hindin echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 62679dacf32dSYossi Hindin echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 62689dacf32dSYossi Hindin fi 6269210fa556Spbrookelse 627035f4df27SJuan Quintela echo "CONFIG_POSIX=y" >> $config_host_mak 6271210fa556Spbrookfi 6272128ab2ffSblueswir1 6273dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then 6274dffcb71cSMark McLoughlin echo "CONFIG_LINUX=y" >> $config_host_mak 6275dffcb71cSMark McLoughlinfi 6276dffcb71cSMark McLoughlin 627783fb7adfSbellardif test "$darwin" = "yes" ; then 627898ec69acSJuan Quintela echo "CONFIG_DARWIN=y" >> $config_host_mak 627983fb7adfSbellardfi 6280b29fe3edSmalc 6281ec530c81Sbellardif test "$solaris" = "yes" ; then 628298ec69acSJuan Quintela echo "CONFIG_SOLARIS=y" >> $config_host_mak 6283ec530c81Sbellardfi 6284179cf400SAndreas Färberif test "$haiku" = "yes" ; then 6285179cf400SAndreas Färber echo "CONFIG_HAIKU=y" >> $config_host_mak 6286179cf400SAndreas Färberfi 628797a847bcSbellardif test "$static" = "yes" ; then 628898ec69acSJuan Quintela echo "CONFIG_STATIC=y" >> $config_host_mak 628997a847bcSbellardfi 62901ba16968SStefan Weilif test "$profiler" = "yes" ; then 62912358a494SJuan Quintela echo "CONFIG_PROFILER=y" >> $config_host_mak 629205c2a3e7Sbellardfi 6293c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then 6294c932ce31SPaolo Bonzini echo "CONFIG_TOOLS=y" >> $config_host_mak 6295c932ce31SPaolo Bonzinifi 6296f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then 6297f15bff25SPaolo Bonzini echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 6298f15bff25SPaolo Bonzinifi 6299675b9b53SMarc-André Lureauif test "$slirp" != "no"; then 630098ec69acSJuan Quintela echo "CONFIG_SLIRP=y" >> $config_host_mak 6301e2d8830eSBrad echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6302675b9b53SMarc-André Lureau echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 6303675b9b53SMarc-André Lureau echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 6304675b9b53SMarc-André Lureaufi 6305859aef02SPaolo Bonzinisubdirs= 63067c57bdd8SMarc-André Lureauif [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 6307859aef02SPaolo Bonzini subdirs="$subdirs slirp" 6308c20709aaSbellardfi 63098a16d273Sthsif test "$vde" = "yes" ; then 631098ec69acSJuan Quintela echo "CONFIG_VDE=y" >> $config_host_mak 6311e2ad6f16SFam Zheng echo "VDE_LIBS=$vde_libs" >> $config_host_mak 63128a16d273Sthsfi 631358952137SVincenzo Maffioneif test "$netmap" = "yes" ; then 631458952137SVincenzo Maffione echo "CONFIG_NETMAP=y" >> $config_host_mak 631558952137SVincenzo Maffionefi 6316015a33bdSGongleiif test "$l2tpv3" = "yes" ; then 6317015a33bdSGonglei echo "CONFIG_L2TPV3=y" >> $config_host_mak 6318015a33bdSGongleifi 63194cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then 63204cc600d2SPaolo Bonzini echo "CONFIG_GPROF=y" >> $config_host_mak 63214cc600d2SPaolo Bonzinifi 632247e98658SCorey Bryantif test "$cap_ng" = "yes" ; then 6323a358bca2SPaolo Bonzini echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 63243f99cf57SPaolo Bonzini echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak 632547e98658SCorey Bryantfi 63262358a494SJuan Quintelaecho "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 63270c58ac1cSmalcfor drv in $audio_drv_list; do 63281ef1ec2aSGerd Hoffmann def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6329484e2cc7SPaolo Bonzini echo "$def=y" >> $config_host_mak 63300c58ac1cSmalcdone 6331478e943fSPaolo Bonziniif test "$alsa" = "yes" ; then 6332478e943fSPaolo Bonzini echo "CONFIG_ALSA=y" >> $config_host_mak 6333478e943fSPaolo Bonzinifi 6334b1149911SFam Zhengecho "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6335478e943fSPaolo Bonziniecho "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak 6336478e943fSPaolo Bonziniif test "$libpulse" = "yes" ; then 6337478e943fSPaolo Bonzini echo "CONFIG_LIBPULSE=y" >> $config_host_mak 6338478e943fSPaolo Bonzinifi 6339b1149911SFam Zhengecho "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6340478e943fSPaolo Bonziniecho "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak 6341b1149911SFam Zhengecho "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6342b1149911SFam Zhengecho "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6343b1149911SFam Zhengecho "OSS_LIBS=$oss_libs" >> $config_host_mak 6344478e943fSPaolo Bonziniif test "$libjack" = "yes" ; then 6345478e943fSPaolo Bonzini echo "CONFIG_LIBJACK=y" >> $config_host_mak 6346478e943fSPaolo Bonzinifi 63472e445703SGeoffrey McRaeecho "JACK_LIBS=$jack_libs" >> $config_host_mak 6348d5631638Smalcif test "$audio_win_int" = "yes" ; then 6349d5631638Smalc echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6350d5631638Smalcfi 6351b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6352b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6353dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then 6354dce512deSChristoph Hellwig echo "CONFIG_XFS=y" >> $config_host_mak 6355dce512deSChristoph Hellwigfi 635689138857SStefan Weilqemu_version=$(head $source_path/VERSION) 63572358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak 635898ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak 63592b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak 6360a25dba17SJuan Quintelaif [ "$docs" = "yes" ] ; then 636198ec69acSJuan Quintela echo "BUILD_DOCS=yes" >> $config_host_mak 6362cc8ae6deSpbrookfi 636317969268SFam Zhengif test "$modules" = "yes"; then 6364e26110cfSFam Zheng # $shacmd can generate a hash started with digit, which the compiler doesn't 6365e26110cfSFam Zheng # like as an symbol. So prefix it with an underscore 636689138857SStefan Weil echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 636717969268SFam Zheng echo "CONFIG_MODULES=y" >> $config_host_mak 636817969268SFam Zhengfi 6369bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then 6370bd83c861SChristian Ehrhardt echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 6371bd83c861SChristian Ehrhardtfi 6372e633a5c6SEric Blakeif test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 63738781595bSGerd Hoffmann echo "CONFIG_X11=y" >> $config_host_mak 63748781595bSGerd Hoffmann echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 63758781595bSGerd Hoffmann echo "X11_LIBS=$x11_libs" >> $config_host_mak 63768781595bSGerd Hoffmannfi 6377e08bb301SSamuel Thibaultif test "$iconv" = "yes" ; then 6378e08bb301SSamuel Thibault echo "CONFIG_ICONV=y" >> $config_host_mak 6379e08bb301SSamuel Thibault echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 6380e08bb301SSamuel Thibault echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 6381e08bb301SSamuel Thibaultfi 63824d3b6f6eSbalrogif test "$curses" = "yes" ; then 6383484e2cc7SPaolo Bonzini echo "CONFIG_CURSES=y" >> $config_host_mak 63842373f7d5SGerd Hoffmann echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 63852373f7d5SGerd Hoffmann echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6386ab4e5602SJan Kiszkafi 6387099d6b0fSRiku Voipioif test "$pipe2" = "yes" ; then 63882358a494SJuan Quintela echo "CONFIG_PIPE2=y" >> $config_host_mak 6389099d6b0fSRiku Voipiofi 639040ff6d7eSKevin Wolfif test "$accept4" = "yes" ; then 639140ff6d7eSKevin Wolf echo "CONFIG_ACCEPT4=y" >> $config_host_mak 639240ff6d7eSKevin Wolffi 63933ce34dfbSvibisreenivasanif test "$splice" = "yes" ; then 63942358a494SJuan Quintela echo "CONFIG_SPLICE=y" >> $config_host_mak 63953ce34dfbSvibisreenivasanfi 6396c2882b96SRiku Voipioif test "$eventfd" = "yes" ; then 6397c2882b96SRiku Voipio echo "CONFIG_EVENTFD=y" >> $config_host_mak 6398c2882b96SRiku Voipiofi 6399751bcc39SMarc-André Lureauif test "$memfd" = "yes" ; then 6400751bcc39SMarc-André Lureau echo "CONFIG_MEMFD=y" >> $config_host_mak 6401751bcc39SMarc-André Lureaufi 6402955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then 6403955727d2SCortland Tölva echo "CONFIG_USBFS=y" >> $config_host_mak 6404955727d2SCortland Tölvafi 6405d0927938SUlrich Hechtif test "$fallocate" = "yes" ; then 6406d0927938SUlrich Hecht echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6407d0927938SUlrich Hechtfi 64083d4fa43eSKusanagi Kouichiif test "$fallocate_punch_hole" = "yes" ; then 64093d4fa43eSKusanagi Kouichi echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 64103d4fa43eSKusanagi Kouichifi 6411b953f075SDenis V. Lunevif test "$fallocate_zero_range" = "yes" ; then 6412b953f075SDenis V. Lunev echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6413b953f075SDenis V. Lunevfi 6414ed911435SKevin Wolfif test "$posix_fallocate" = "yes" ; then 6415ed911435SKevin Wolf echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6416ed911435SKevin Wolffi 6417c727f47dSPeter Maydellif test "$sync_file_range" = "yes" ; then 6418c727f47dSPeter Maydell echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6419c727f47dSPeter Maydellfi 6420dace20dcSPeter Maydellif test "$fiemap" = "yes" ; then 6421dace20dcSPeter Maydell echo "CONFIG_FIEMAP=y" >> $config_host_mak 6422dace20dcSPeter Maydellfi 6423d0927938SUlrich Hechtif test "$dup3" = "yes" ; then 6424d0927938SUlrich Hecht echo "CONFIG_DUP3=y" >> $config_host_mak 6425d0927938SUlrich Hechtfi 64264e0c6529SAlex Blighif test "$ppoll" = "yes" ; then 64274e0c6529SAlex Bligh echo "CONFIG_PPOLL=y" >> $config_host_mak 64284e0c6529SAlex Blighfi 6429cd758dd0SAlex Blighif test "$prctl_pr_set_timerslack" = "yes" ; then 6430cd758dd0SAlex Bligh echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6431cd758dd0SAlex Blighfi 64323b6edd16SPeter Maydellif test "$epoll" = "yes" ; then 64333b6edd16SPeter Maydell echo "CONFIG_EPOLL=y" >> $config_host_mak 64343b6edd16SPeter Maydellfi 64353b6edd16SPeter Maydellif test "$epoll_create1" = "yes" ; then 64363b6edd16SPeter Maydell echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 64373b6edd16SPeter Maydellfi 6438a8fd1abaSPeter Maydellif test "$sendfile" = "yes" ; then 6439a8fd1abaSPeter Maydell echo "CONFIG_SENDFILE=y" >> $config_host_mak 6440a8fd1abaSPeter Maydellfi 644151834341SRiku Voipioif test "$timerfd" = "yes" ; then 644251834341SRiku Voipio echo "CONFIG_TIMERFD=y" >> $config_host_mak 644351834341SRiku Voipiofi 64449af5c906SRiku Voipioif test "$setns" = "yes" ; then 64459af5c906SRiku Voipio echo "CONFIG_SETNS=y" >> $config_host_mak 64469af5c906SRiku Voipiofi 644738860a03SAleksandar Markovicif test "$clock_adjtime" = "yes" ; then 644838860a03SAleksandar Markovic echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 644938860a03SAleksandar Markovicfi 64505a03cd00SAleksandar Markovicif test "$syncfs" = "yes" ; then 64515a03cd00SAleksandar Markovic echo "CONFIG_SYNCFS=y" >> $config_host_mak 64525a03cd00SAleksandar Markovicfi 6453db37dd89SAleksandar Markovicif test "$kcov" = "yes" ; then 6454db37dd89SAleksandar Markovic echo "CONFIG_KCOV=y" >> $config_host_mak 6455db37dd89SAleksandar Markovicfi 6456d6092e08SFilip Bozutaif test "$btrfs" = "yes" ; then 6457d6092e08SFilip Bozuta echo "CONFIG_BTRFS=y" >> $config_host_mak 6458d6092e08SFilip Bozutafi 64593b3f24adSaurel32if test "$inotify" = "yes" ; then 64602358a494SJuan Quintela echo "CONFIG_INOTIFY=y" >> $config_host_mak 64613b3f24adSaurel32fi 6462c05c7a73SRiku Voipioif test "$inotify1" = "yes" ; then 6463c05c7a73SRiku Voipio echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6464c05c7a73SRiku Voipiofi 6465401bc051SPeter Maydellif test "$sem_timedwait" = "yes" ; then 6466401bc051SPeter Maydell echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6467401bc051SPeter Maydellfi 64685c99fa37SKeno Fischerif test "$strchrnul" = "yes" ; then 64695c99fa37SKeno Fischer echo "HAVE_STRCHRNUL=y" >> $config_host_mak 64705c99fa37SKeno Fischerfi 64718a792b03SJiufei Xueif test "$st_atim" = "yes" ; then 64728a792b03SJiufei Xue echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 64738a792b03SJiufei Xuefi 64746ae9a1f4SJuan Quintelaif test "$byteswap_h" = "yes" ; then 64756ae9a1f4SJuan Quintela echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 64766ae9a1f4SJuan Quintelafi 64776ae9a1f4SJuan Quintelaif test "$bswap_h" = "yes" ; then 64786ae9a1f4SJuan Quintela echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 64796ae9a1f4SJuan Quintelafi 6480769ce76dSAlexander Grafif test "$curl" = "yes" ; then 6481484e2cc7SPaolo Bonzini echo "CONFIG_CURL=y" >> $config_host_mak 6482b1d5a277SJuan Quintela echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 64836ebc91e5SFam Zheng echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6484769ce76dSAlexander Graffi 64852e4d9fb1Saurel32if test "$brlapi" = "yes" ; then 648698ec69acSJuan Quintela echo "CONFIG_BRLAPI=y" >> $config_host_mak 64878eca2889SFam Zheng echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 64882e4d9fb1Saurel32fi 6489a4ccabcfSAnthony Liguoriif test "$gtk" = "yes" ; then 6490484e2cc7SPaolo Bonzini echo "CONFIG_GTK=y" >> $config_host_mak 6491a4ccabcfSAnthony Liguori echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6492014cb152SGerd Hoffmann echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6493925a0400SGerd Hoffmann if test "$gtk_gl" = "yes" ; then 6494925a0400SGerd Hoffmann echo "CONFIG_GTK_GL=y" >> $config_host_mak 6495925a0400SGerd Hoffmann fi 6496bbbf9bfbSStefan Weilfi 6497f876b765SMarc-André Lureauif test "$gio" = "yes" ; then 6498f876b765SMarc-André Lureau echo "CONFIG_GIO=y" >> $config_host_mak 6499f876b765SMarc-André Lureau echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 6500f876b765SMarc-André Lureau echo "GIO_LIBS=$gio_libs" >> $config_host_mak 650125a97a56SMarc-André Lureau echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 6502f876b765SMarc-André Lureaufi 6503a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6504ddbb0d09SDaniel P. Berrangeif test "$gnutls" = "yes" ; then 6505ddbb0d09SDaniel P. Berrange echo "CONFIG_GNUTLS=y" >> $config_host_mak 6506a81df1b6SPaolo Bonzini echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak 6507a81df1b6SPaolo Bonzini echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak 6508ddbb0d09SDaniel P. Berrangefi 650991bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" ; then 651091bfcdb0SDaniel P. Berrange echo "CONFIG_GCRYPT=y" >> $config_host_mak 65111f923c70SLongpeng(Mike) if test "$gcrypt_hmac" = "yes" ; then 65121f923c70SLongpeng(Mike) echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 65131f923c70SLongpeng(Mike) fi 651446859d93SDaniel P. Berrangé echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak 651546859d93SDaniel P. Berrangé echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak 651662893b67SDaniel P. Berrangefi 651791bfcdb0SDaniel P. Berrangeif test "$nettle" = "yes" ; then 651891bfcdb0SDaniel P. Berrange echo "CONFIG_NETTLE=y" >> $config_host_mak 6519becaeb72SRadim Krčmář echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6520a81df1b6SPaolo Bonzini echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak 6521a81df1b6SPaolo Bonzini echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak 6522ed754746SDaniel P. Berrangefi 6523e0576942SDaniel P. Berrangéif test "$qemu_private_xts" = "yes" ; then 6524e0576942SDaniel P. Berrangé echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 6525e0576942SDaniel P. Berrangéfi 65269a2fd434SDaniel P. Berrangeif test "$tasn1" = "yes" ; then 65279a2fd434SDaniel P. Berrange echo "CONFIG_TASN1=y" >> $config_host_mak 65289a2fd434SDaniel P. Berrangefi 65298953caf3SDaniel P. Berrangeif test "$auth_pam" = "yes" ; then 65308953caf3SDaniel P. Berrange echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 65318953caf3SDaniel P. Berrangefi 6532559607eaSDaniel P. Berrangeif test "$have_ifaddrs_h" = "yes" ; then 6533559607eaSDaniel P. Berrange echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6534559607eaSDaniel P. Berrangefi 6535e865b97fSChen Gangif test "$have_drm_h" = "yes" ; then 6536e865b97fSChen Gang echo "HAVE_DRM_H=y" >> $config_host_mak 6537e865b97fSChen Gangfi 65386b39b063SEric Blakeif test "$have_broken_size_max" = "yes" ; then 65396b39b063SEric Blake echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 65406b39b063SEric Blakefi 65419df8b20dSThomas Huthif test "$have_openpty" = "yes" ; then 65429df8b20dSThomas Huth echo "HAVE_OPENPTY=y" >> $config_host_mak 65439df8b20dSThomas Huthfi 65442a4b472cSDavid CARLIERif test "$have_sys_signal_h" = "yes" ; then 65452a4b472cSDavid CARLIER echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak 65462a4b472cSDavid CARLIERfi 6547277abf15SJan Vesely 6548277abf15SJan Vesely# Work around a system header bug with some kernel/XFS header 6549277abf15SJan Vesely# versions where they both try to define 'struct fsxattr': 6550277abf15SJan Vesely# xfs headers will not try to redefine structs from linux headers 6551277abf15SJan Vesely# if this macro is set. 6552277abf15SJan Veselyif test "$have_fsxattr" = "yes" ; then 6553277abf15SJan Vesely echo "HAVE_FSXATTR=y" >> $config_host_mak 6554277abf15SJan Veselyfi 65551efad060SFam Zhengif test "$have_copy_file_range" = "yes" ; then 65561efad060SFam Zheng echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 65571efad060SFam Zhengfi 6558bbbf9bfbSStefan Weilif test "$vte" = "yes" ; then 6559bbbf9bfbSStefan Weil echo "CONFIG_VTE=y" >> $config_host_mak 6560a4ccabcfSAnthony Liguori echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6561e0fb129cSGerd Hoffmann echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6562a4ccabcfSAnthony Liguorifi 65639d9e1521SGerd Hoffmannif test "$virglrenderer" = "yes" ; then 65649d9e1521SGerd Hoffmann echo "CONFIG_VIRGL=y" >> $config_host_mak 65659d9e1521SGerd Hoffmann echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 65669d9e1521SGerd Hoffmann echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 65679d9e1521SGerd Hoffmannfi 65681badb709SPaolo Bonziniif test "$xen" = "enabled" ; then 65696dbd588aSJan Kiszka echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6570d5b93ddfSAnthony PERARD echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6571582ea95fSMarc-André Lureau echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 6572582ea95fSMarc-André Lureau echo "XEN_LIBS=$xen_libs" >> $config_host_mak 6573e37630caSaliguorifi 65745c6c3a6cSChristoph Hellwigif test "$linux_aio" = "yes" ; then 65755c6c3a6cSChristoph Hellwig echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 65765c6c3a6cSChristoph Hellwigfi 6577c10dd856SAarushi Mehtaif test "$linux_io_uring" = "yes" ; then 6578c10dd856SAarushi Mehta echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 6579c10dd856SAarushi Mehta echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 6580c10dd856SAarushi Mehta echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 6581c10dd856SAarushi Mehtafi 6582758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" = "yes" ; then 6583758e8e38SVenkateswararao Jujjuri (JV) echo "CONFIG_ATTR=y" >> $config_host_mak 6584ec0d5893SMarc-André Lureau echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak 6585758e8e38SVenkateswararao Jujjuri (JV)fi 65864f26f2b6SAvi Kivityif test "$libattr" = "yes" ; then 65874f26f2b6SAvi Kivity echo "CONFIG_LIBATTR=y" >> $config_host_mak 65884f26f2b6SAvi Kivityfi 6589983eef5aSMeador Ingeif test "$virtfs" = "yes" ; then 6590758e8e38SVenkateswararao Jujjuri (JV) echo "CONFIG_VIRTFS=y" >> $config_host_mak 6591758e8e38SVenkateswararao Jujjuri (JV)fi 65925e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then 65935e9be92dSNicholas Bellinger echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 65945e9be92dSNicholas Bellingerfi 6595af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then 6596af3bba76SPaolo Bonzini echo "CONFIG_VHOST_NET=y" >> $config_host_mak 6597af3bba76SPaolo Bonzinifi 6598af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then 659956f41de7SPaolo Bonzini echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 660003ce5744SNikolay Nikolaevfi 6601108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then 6602108a6481SCindy Lu echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 6603108a6481SCindy Lufi 6604042cea27SGongleiif test "$vhost_crypto" = "yes" ; then 6605042cea27SGonglei echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6606042cea27SGongleifi 6607fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then 6608fc0b9b0eSStefan Hajnoczi echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 66095fe97d88SStefano Garzarella if test "$vhost_user" = "yes" ; then 66105fe97d88SStefano Garzarella echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 66115fe97d88SStefano Garzarella fi 6612fc0b9b0eSStefan Hajnoczifi 6613299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then 6614299e6f19SPaolo Bonzini echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 6615299e6f19SPaolo Bonzinifi 6616e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then 6617e6a74868SMarc-André Lureau echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6618e6a74868SMarc-André Lureaufi 6619108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then 6620108a6481SCindy Lu echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 6621108a6481SCindy Lufi 662298fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then 662398fc1adaSDr. David Alan Gilbert echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 662498fc1adaSDr. David Alan Gilbertfi 662577755340Sthsif test "$blobs" = "yes" ; then 662698ec69acSJuan Quintela echo "INSTALL_BLOBS=yes" >> $config_host_mak 662777755340Sthsfi 6628bf9298b9Saliguoriif test "$iovec" = "yes" ; then 66292358a494SJuan Quintela echo "CONFIG_IOVEC=y" >> $config_host_mak 6630bf9298b9Saliguorifi 6631ceb42de8Saliguoriif test "$preadv" = "yes" ; then 66322358a494SJuan Quintela echo "CONFIG_PREADV=y" >> $config_host_mak 6633ceb42de8Saliguorifi 6634e3971d61SPhilippe Mathieu-Daudéif test "$fdt" != "no" ; then 66353f0855b1SJuan Quintela echo "CONFIG_FDT=y" >> $config_host_mak 66364a96337dSPaolo Bonzini echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak 66374a96337dSPaolo Bonzini echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak 6638f652e6afSaurel32fi 6639a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then 6640a40161cbSPaolo Bonzini echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6641a40161cbSPaolo Bonzinifi 6642dcc38d1cSMarcelo Tosattiif test "$signalfd" = "yes" ; then 6643dcc38d1cSMarcelo Tosatti echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6644dcc38d1cSMarcelo Tosattifi 6645d339d766SRichard W.M. Jonesif test "$optreset" = "yes" ; then 6646d339d766SRichard W.M. Jones echo "HAVE_OPTRESET=y" >> $config_host_mak 6647d339d766SRichard W.M. Jonesfi 66481badb709SPaolo Bonziniif test "$tcg" = "enabled"; then 66499195b2c2SStefan Weil if test "$tcg_interpreter" = "yes" ; then 66509195b2c2SStefan Weil echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 66519195b2c2SStefan Weil fi 6652b3f6ea7eSPaolo Bonzinifi 66535f6b9e8fSBlue Swirlif test "$fdatasync" = "yes" ; then 66545f6b9e8fSBlue Swirl echo "CONFIG_FDATASYNC=y" >> $config_host_mak 66555f6b9e8fSBlue Swirlfi 6656e78815a5SAndreas Färberif test "$madvise" = "yes" ; then 6657e78815a5SAndreas Färber echo "CONFIG_MADVISE=y" >> $config_host_mak 6658e78815a5SAndreas Färberfi 6659e78815a5SAndreas Färberif test "$posix_madvise" = "yes" ; then 6660e78815a5SAndreas Färber echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6661e78815a5SAndreas Färberfi 66629bc5a719SAndreas Gustafssonif test "$posix_memalign" = "yes" ; then 66639bc5a719SAndreas Gustafsson echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 66649bc5a719SAndreas Gustafssonfi 6665cd4ec0b4SGerd Hoffmannif test "$spice" = "yes" ; then 6666cd4ec0b4SGerd Hoffmann echo "CONFIG_SPICE=y" >> $config_host_mak 66672634733cSPaolo Bonzini echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak 66682634733cSPaolo Bonzini echo "SPICE_LIBS=$spice_libs" >> $config_host_mak 6669cd4ec0b4SGerd Hoffmannfi 6670cd4ec0b4SGerd Hoffmann 66717b02f544SMarc-André Lureauif test "$smartcard" = "yes" ; then 66727b02f544SMarc-André Lureau echo "CONFIG_SMARTCARD=y" >> $config_host_mak 66737b62bf5aSFam Zheng echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 66747b62bf5aSFam Zheng echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6675111a38b0SRobert Relyeafi 6676111a38b0SRobert Relyea 66772b2325ffSGerd Hoffmannif test "$libusb" = "yes" ; then 66782b2325ffSGerd Hoffmann echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6679b878b652SFam Zheng echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6680b878b652SFam Zheng echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 66812b2325ffSGerd Hoffmannfi 66822b2325ffSGerd Hoffmann 668369354a83SHans de Goedeif test "$usb_redir" = "yes" ; then 668469354a83SHans de Goede echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6685cc7923fcSFam Zheng echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6686cc7923fcSFam Zheng echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 668769354a83SHans de Goedefi 668869354a83SHans de Goede 6689da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then 6690da076ffeSGerd Hoffmann echo "CONFIG_OPENGL=y" >> $config_host_mak 6691de2d3005SPaolo Bonzini echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 6692da076ffeSGerd Hoffmann echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6693014cb152SGerd Hoffmann if test "$opengl_dmabuf" = "yes" ; then 6694014cb152SGerd Hoffmann echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6695014cb152SGerd Hoffmann fi 669620ff075bSMichael Wallefi 669720ff075bSMichael Walle 6698d52c454aSMarc-André Lureauif test "$gbm" = "yes" ; then 6699d52c454aSMarc-André Lureau echo "CONFIG_GBM=y" >> $config_host_mak 6700d52c454aSMarc-André Lureau echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 6701d52c454aSMarc-André Lureau echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 6702d52c454aSMarc-André Lureaufi 6703d52c454aSMarc-André Lureau 6704d52c454aSMarc-André Lureau 670599f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then 670699f2dbd3SLiang Li echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 670799f2dbd3SLiang Lifi 670899f2dbd3SLiang Li 67096b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then 67106b8cd447SRobert Hoo echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 67116b8cd447SRobert Hoofi 67126b8cd447SRobert Hoo 6713607dacd0Sqiaonuohanif test "$lzo" = "yes" ; then 6714607dacd0Sqiaonuohan echo "CONFIG_LZO=y" >> $config_host_mak 6715708eab42SMarc-André Lureau echo "LZO_LIBS=$lzo_libs" >> $config_host_mak 6716607dacd0Sqiaonuohanfi 6717607dacd0Sqiaonuohan 6718607dacd0Sqiaonuohanif test "$snappy" = "yes" ; then 6719607dacd0Sqiaonuohan echo "CONFIG_SNAPPY=y" >> $config_host_mak 6720708eab42SMarc-André Lureau echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak 6721607dacd0Sqiaonuohanfi 6722607dacd0Sqiaonuohan 67236b383c08SPeter Wuif test "$bzip2" = "yes" ; then 67246b383c08SPeter Wu echo "CONFIG_BZIP2=y" >> $config_host_mak 67256b383c08SPeter Wu echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 67266b383c08SPeter Wufi 67276b383c08SPeter Wu 672883bc1f97SJulio Faraccoif test "$lzfse" = "yes" ; then 672983bc1f97SJulio Faracco echo "CONFIG_LZFSE=y" >> $config_host_mak 673083bc1f97SJulio Faracco echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 673183bc1f97SJulio Faraccofi 673283bc1f97SJulio Faracco 67333a678481SJuan Quintelaif test "$zstd" = "yes" ; then 67343a678481SJuan Quintela echo "CONFIG_ZSTD=y" >> $config_host_mak 67355e5733e5SMarc-André Lureau echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak 67365e5733e5SMarc-André Lureau echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak 67373a678481SJuan Quintelafi 67383a678481SJuan Quintela 6739c589b249SRonnie Sahlbergif test "$libiscsi" = "yes" ; then 6740484e2cc7SPaolo Bonzini echo "CONFIG_LIBISCSI=y" >> $config_host_mak 67416ebc91e5SFam Zheng echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 67426ebc91e5SFam Zheng echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6743c589b249SRonnie Sahlbergfi 6744c589b249SRonnie Sahlberg 67456542aa9cSPeter Lievenif test "$libnfs" = "yes" ; then 6746484e2cc7SPaolo Bonzini echo "CONFIG_LIBNFS=y" >> $config_host_mak 67474be4879fSColin Lord echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 67486542aa9cSPeter Lievenfi 67496542aa9cSPeter Lieven 6750f794573eSEduardo Otuboif test "$seccomp" = "yes"; then 6751f794573eSEduardo Otubo echo "CONFIG_SECCOMP=y" >> $config_host_mak 6752c3883e1fSFam Zheng echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6753c3883e1fSFam Zheng echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6754f794573eSEduardo Otubofi 6755f794573eSEduardo Otubo 675683fb7adfSbellard# XXX: suppress that 67577d3505c5Sbellardif [ "$bsd" = "yes" ] ; then 67582358a494SJuan Quintela echo "CONFIG_BSD=y" >> $config_host_mak 67597d3505c5Sbellardfi 67607d3505c5Sbellard 67614d9310f4SDaniel P. Berrangeif test "$localtime_r" = "yes" ; then 67624d9310f4SDaniel P. Berrange echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 67634d9310f4SDaniel P. Berrangefi 67643556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then 67653556c233SPaolo Bonzini echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 67663556c233SPaolo Bonzinifi 6767f27aaf4bSChristian Brunnerif test "$rbd" = "yes" ; then 6768484e2cc7SPaolo Bonzini echo "CONFIG_RBD=y" >> $config_host_mak 67696ebc91e5SFam Zheng echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6770f27aaf4bSChristian Brunnerfi 677120ff6c80SAnthony Liguori 67727c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 677370c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then 677470c60c08SStefan Hajnoczi echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 677570c60c08SStefan Hajnoczielse 677670c60c08SStefan Hajnoczi echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 677770c60c08SStefan Hajnoczifi 6778d0e2fce5SAneesh Kumar K.V 67797d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then 67807d992e4dSPeter Lieven echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 67817d992e4dSPeter Lievenfi 67827d992e4dSPeter Lieven 6783f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then 6784f0d92b56SLongpeng(Mike) echo "CONFIG_AF_ALG=y" >> $config_host_mak 6785f0d92b56SLongpeng(Mike)fi 6786f0d92b56SLongpeng(Mike) 6787d2042378SAneesh Kumar K.Vif test "$open_by_handle_at" = "yes" ; then 6788d2042378SAneesh Kumar K.V echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 6789d2042378SAneesh Kumar K.Vfi 6790d2042378SAneesh Kumar K.V 6791e06a765eSHarsh Prateek Boraif test "$linux_magic_h" = "yes" ; then 6792e06a765eSHarsh Prateek Bora echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 6793e06a765eSHarsh Prateek Borafi 6794e06a765eSHarsh Prateek Bora 67953f4349dcSKevin Wolfif test "$valgrind_h" = "yes" ; then 67963f4349dcSKevin Wolf echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 67973f4349dcSKevin Wolffi 67983f4349dcSKevin Wolf 6799d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then 6800d83414e1SMarc-André Lureau echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 6801d83414e1SMarc-André Lureaufi 6802d83414e1SMarc-André Lureau 68030aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 68040aebab04SLingfeng Yang echo "CONFIG_TSAN=y" >> $config_host_mak 68050aebab04SLingfeng Yangfi 68060aebab04SLingfeng Yang 68078ab1bf12SLuiz Capitulinoif test "$has_environ" = "yes" ; then 68088ab1bf12SLuiz Capitulino echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 68098ab1bf12SLuiz Capitulinofi 68108ab1bf12SLuiz Capitulino 681176a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then 681276a347e1SRichard Henderson echo "CONFIG_CPUID_H=y" >> $config_host_mak 681376a347e1SRichard Hendersonfi 681476a347e1SRichard Henderson 6815f540166bSRichard Hendersonif test "$int128" = "yes" ; then 6816f540166bSRichard Henderson echo "CONFIG_INT128=y" >> $config_host_mak 6817f540166bSRichard Hendersonfi 6818f540166bSRichard Henderson 68197ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then 68207ebee43eSRichard Henderson echo "CONFIG_ATOMIC128=y" >> $config_host_mak 68217ebee43eSRichard Hendersonfi 68227ebee43eSRichard Henderson 6823e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then 6824e6cd4bb5SRichard Henderson echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 6825e6cd4bb5SRichard Hendersonfi 6826e6cd4bb5SRichard Henderson 6827df79b996SRichard Hendersonif test "$atomic64" = "yes" ; then 6828df79b996SRichard Henderson echo "CONFIG_ATOMIC64=y" >> $config_host_mak 6829df79b996SRichard Hendersonfi 6830df79b996SRichard Henderson 6831db8aaae8SRichard Hendersonif test "$attralias" = "yes" ; then 6832db8aaae8SRichard Henderson echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 6833db8aaae8SRichard Hendersonfi 6834db8aaae8SRichard Henderson 68351e6e9acaSRichard Hendersonif test "$getauxval" = "yes" ; then 68361e6e9acaSRichard Henderson echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 68371e6e9acaSRichard Hendersonfi 68381e6e9acaSRichard Henderson 6839eb100396SBharata B Raoif test "$glusterfs" = "yes" ; then 6840484e2cc7SPaolo Bonzini echo "CONFIG_GLUSTERFS=y" >> $config_host_mak 68416ebc91e5SFam Zheng echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 68426ebc91e5SFam Zheng echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 6843eb100396SBharata B Raofi 6844eb100396SBharata B Rao 6845d85fa9ebSJeff Codyif test "$glusterfs_xlator_opt" = "yes" ; then 6846d85fa9ebSJeff Cody echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 6847d85fa9ebSJeff Codyfi 6848d85fa9ebSJeff Cody 68490c14fb47SBharata B Raoif test "$glusterfs_discard" = "yes" ; then 68500c14fb47SBharata B Rao echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 68510c14fb47SBharata B Raofi 68520c14fb47SBharata B Rao 6853df3a429aSNiels de Vosif test "$glusterfs_fallocate" = "yes" ; then 6854df3a429aSNiels de Vos echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6855df3a429aSNiels de Vosfi 6856df3a429aSNiels de Vos 68577c815372SBharata B Raoif test "$glusterfs_zerofill" = "yes" ; then 68587c815372SBharata B Rao echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 68597c815372SBharata B Raofi 68607c815372SBharata B Rao 6861e014dbe7SPrasanna Kumar Kaleverif test "$glusterfs_ftruncate_has_stat" = "yes" ; then 6862e014dbe7SPrasanna Kumar Kalever echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 6863e014dbe7SPrasanna Kumar Kaleverfi 6864e014dbe7SPrasanna Kumar Kalever 68650e3b891fSNiels de Vosif test "$glusterfs_iocb_has_stat" = "yes" ; then 68660e3b891fSNiels de Vos echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 68670e3b891fSNiels de Vosfi 68680e3b891fSNiels de Vos 6869b10d49d7SPino Toscanoif test "$libssh" = "yes" ; then 6870484e2cc7SPaolo Bonzini echo "CONFIG_LIBSSH=y" >> $config_host_mak 6871b10d49d7SPino Toscano echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 6872b10d49d7SPino Toscano echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 68730a12ec87SRichard W.M. Jonesfi 68740a12ec87SRichard W.M. Jones 6875ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then 6876ed1701c6SDr. David Alan Gilbert echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6877ed1701c6SDr. David Alan Gilbertfi 6878ed1701c6SDr. David Alan Gilbert 68793b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then 68803cae16dbSPaolo Bonzini echo 'CONFIG_TPM=y' >> $config_host_mak 68813b8acc11SPaolo Bonzinifi 68823b8acc11SPaolo Bonzini 68835b808275SLluís Vilanovaecho "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 68845b808275SLluís Vilanovaif have_backend "nop"; then 68856d8a764eSLluís echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 688622890ab5SPrerna Saxenafi 68875b808275SLluís Vilanovaif have_backend "simple"; then 68886d8a764eSLluís echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 68896d8a764eSLluís # Set the appropriate trace file. 6890953ffe0fSAndreas Färber trace_file="\"$trace_file-\" FMT_pid" 68919410b56cSPrerna Saxenafi 6892ed7f5f1dSPaolo Bonziniif have_backend "log"; then 6893ed7f5f1dSPaolo Bonzini echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 68946d8a764eSLluísfi 68955b808275SLluís Vilanovaif have_backend "ust"; then 68966d8a764eSLluís echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6897a81df1b6SPaolo Bonzini echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak 6898a81df1b6SPaolo Bonzini echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak 68996d8a764eSLluísfi 69005b808275SLluís Vilanovaif have_backend "dtrace"; then 69016d8a764eSLluís echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 69026d8a764eSLluís if test "$trace_backend_stap" = "yes" ; then 69036d8a764eSLluís echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 69046d8a764eSLluís fi 6905c276b17dSDaniel P. Berrangefi 69065b808275SLluís Vilanovaif have_backend "ftrace"; then 6907781e9545SEiichi Tsukata if test "$linux" = "yes" ; then 6908781e9545SEiichi Tsukata echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6909781e9545SEiichi Tsukata else 691021684af0SStewart Smith feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6911781e9545SEiichi Tsukata fi 6912781e9545SEiichi Tsukatafi 69130a852417SPaul Durrantif have_backend "syslog"; then 69140a852417SPaul Durrant if test "$posix_syslog" = "yes" ; then 69150a852417SPaul Durrant echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 69160a852417SPaul Durrant else 69170a852417SPaul Durrant feature_not_found "syslog(trace backend)" "syslog not available" 69180a852417SPaul Durrant fi 69190a852417SPaul Durrantfi 69209410b56cSPrerna Saxenaecho "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 69219410b56cSPrerna Saxena 69222da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then 69232da776dbSMichael R. Hines echo "CONFIG_RDMA=y" >> $config_host_mak 6924392fb643SFam Zheng echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 69252da776dbSMichael R. Hinesfi 69262da776dbSMichael R. Hines 692721ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then 692821ab34c9SMarcel Apfelbaum echo "CONFIG_PVRDMA=y" >> $config_host_mak 692921ab34c9SMarcel Apfelbaumfi 693021ab34c9SMarcel Apfelbaum 6931575b22b1SLaurent Vivierif test "$have_rtnetlink" = "yes" ; then 6932575b22b1SLaurent Vivier echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6933575b22b1SLaurent Vivierfi 6934575b22b1SLaurent Vivier 6935ed279a06SKlim Kireevif test "$libxml2" = "yes" ; then 6936ed279a06SKlim Kireev echo "CONFIG_LIBXML2=y" >> $config_host_mak 6937ed279a06SKlim Kireev echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6938ed279a06SKlim Kireev echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6939ed279a06SKlim Kireevfi 6940ed279a06SKlim Kireev 6941a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then 6942a6b1d4c0SChanglong Xie echo "CONFIG_REPLICATION=y" >> $config_host_mak 6943a6b1d4c0SChanglong Xiefi 6944a6b1d4c0SChanglong Xie 69456a02c806SStefan Hajnocziif test "$have_af_vsock" = "yes" ; then 69466a02c806SStefan Hajnoczi echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 69476a02c806SStefan Hajnoczifi 69486a02c806SStefan Hajnoczi 69494d04351fSChristopher Covingtonif test "$have_sysmacros" = "yes" ; then 69504d04351fSChristopher Covington echo "CONFIG_SYSMACROS=y" >> $config_host_mak 69514d04351fSChristopher Covingtonfi 69524d04351fSChristopher Covington 695349e00a18SAndreas Grapentinif test "$have_static_assert" = "yes" ; then 695449e00a18SAndreas Grapentin echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 695549e00a18SAndreas Grapentinfi 695649e00a18SAndreas Grapentin 6957e674605fSTomáš Golembiovskýif test "$have_utmpx" = "yes" ; then 6958e674605fSTomáš Golembiovský echo "HAVE_UTMPX=y" >> $config_host_mak 6959e674605fSTomáš Golembiovskýfi 6960db1ed1abSRichard Hendersonif test "$have_getrandom" = "yes" ; then 6961db1ed1abSRichard Henderson echo "CONFIG_GETRANDOM=y" >> $config_host_mak 6962db1ed1abSRichard Hendersonfi 6963e0580342SKamil Rytarowskiif test "$ivshmem" = "yes" ; then 6964e0580342SKamil Rytarowski echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6965e0580342SKamil Rytarowskifi 6966e219c499SRichard Hendersonif test "$capstone" != "no" ; then 69678ca80760SRichard Henderson echo "CONFIG_CAPSTONE=y" >> $config_host_mak 6968c9322ab5SMarc-André Lureau echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak 6969c9322ab5SMarc-André Lureau echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak 69708ca80760SRichard Hendersonfi 6971ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then 6972ba59fb77SPaolo Bonzini echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6973ba59fb77SPaolo Bonzinifi 6974e0580342SKamil Rytarowski 69755c312079SDr. David Alan Gilbert# Hold two types of flag: 69765c312079SDr. David Alan Gilbert# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 69775c312079SDr. David Alan Gilbert# a thread we have a handle to 6978479a5747SRoman Bolshakov# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 69795c312079SDr. David Alan Gilbert# platform 6980479a5747SRoman Bolshakovif test "$pthread_setname_np_w_tid" = "yes" ; then 69815c312079SDr. David Alan Gilbert echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6982479a5747SRoman Bolshakov echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 6983479a5747SRoman Bolshakovelif test "$pthread_setname_np_wo_tid" = "yes" ; then 6984479a5747SRoman Bolshakov echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6985479a5747SRoman Bolshakov echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 69865c312079SDr. David Alan Gilbertfi 69875c312079SDr. David Alan Gilbert 698817824406SJunyan Heif test "$libpmem" = "yes" ; then 698917824406SJunyan He echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6990c9322ab5SMarc-André Lureau echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak 6991c9322ab5SMarc-André Lureau echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak 699217824406SJunyan Hefi 699317824406SJunyan He 699421b2eca6SJingqi Liuif test "$libdaxctl" = "yes" ; then 699521b2eca6SJingqi Liu echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 6996c7c91a74SBruce Rogers echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak 699721b2eca6SJingqi Liufi 699821b2eca6SJingqi Liu 69992f740136SJeff Codyif test "$bochs" = "yes" ; then 70002f740136SJeff Cody echo "CONFIG_BOCHS=y" >> $config_host_mak 70012f740136SJeff Codyfi 70022f740136SJeff Codyif test "$cloop" = "yes" ; then 70032f740136SJeff Cody echo "CONFIG_CLOOP=y" >> $config_host_mak 70042f740136SJeff Codyfi 70052f740136SJeff Codyif test "$dmg" = "yes" ; then 70062f740136SJeff Cody echo "CONFIG_DMG=y" >> $config_host_mak 70072f740136SJeff Codyfi 70082f740136SJeff Codyif test "$qcow1" = "yes" ; then 70092f740136SJeff Cody echo "CONFIG_QCOW1=y" >> $config_host_mak 70102f740136SJeff Codyfi 70112f740136SJeff Codyif test "$vdi" = "yes" ; then 70122f740136SJeff Cody echo "CONFIG_VDI=y" >> $config_host_mak 70132f740136SJeff Codyfi 70142f740136SJeff Codyif test "$vvfat" = "yes" ; then 70152f740136SJeff Cody echo "CONFIG_VVFAT=y" >> $config_host_mak 70162f740136SJeff Codyfi 70172f740136SJeff Codyif test "$qed" = "yes" ; then 70182f740136SJeff Cody echo "CONFIG_QED=y" >> $config_host_mak 70192f740136SJeff Codyfi 70202f740136SJeff Codyif test "$parallels" = "yes" ; then 70212f740136SJeff Cody echo "CONFIG_PARALLELS=y" >> $config_host_mak 70222f740136SJeff Codyfi 70232f740136SJeff Codyif test "$sheepdog" = "yes" ; then 70242f740136SJeff Cody echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 70252f740136SJeff Codyfi 7026c9c8b88fSDavid CARLIERif test "$pty_h" = "yes" ; then 7027c9c8b88fSDavid CARLIER echo "HAVE_PTY_H=y" >> $config_host_mak 7028c9c8b88fSDavid CARLIERfi 7029195588ccSDavid CARLIERif test "$have_mlockall" = "yes" ; then 7030195588ccSDavid CARLIER echo "HAVE_MLOCKALL=y" >> $config_host_mak 7031195588ccSDavid CARLIERfi 7032adc28027SAlexander Bulekovif test "$fuzzing" = "yes" ; then 703354c9e41dSAlexander Bulekov # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the 703454c9e41dSAlexander Bulekov # needed CFLAGS have already been provided 703554c9e41dSAlexander Bulekov if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then 7036086d5f75SPaolo Bonzini QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" 703754c9e41dSAlexander Bulekov FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer" 703854c9e41dSAlexander Bulekov else 703954c9e41dSAlexander Bulekov FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE" 704054c9e41dSAlexander Bulekov fi 7041adc28027SAlexander Bulekovfi 70422f740136SJeff Cody 704340e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then 704440e8c6f4SAlex Bennée echo "CONFIG_PLUGIN=y" >> $config_host_mak 704526fffe29SEmilio G. Cota # Copy the export object list to the build dir 704626fffe29SEmilio G. Cota if test "$ld_dynamic_list" = "yes" ; then 704726fffe29SEmilio G. Cota echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 704826fffe29SEmilio G. Cota ld_symbols=qemu-plugins-ld.symbols 704926fffe29SEmilio G. Cota cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 705026fffe29SEmilio G. Cota elif test "$ld_exported_symbols_list" = "yes" ; then 705126fffe29SEmilio G. Cota echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 705226fffe29SEmilio G. Cota ld64_symbols=qemu-plugins-ld64.symbols 705326fffe29SEmilio G. Cota echo "# Automatically generated by configure - do not modify" > $ld64_symbols 705426fffe29SEmilio G. Cota grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 705526fffe29SEmilio G. Cota sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 705626fffe29SEmilio G. Cota else 705726fffe29SEmilio G. Cota error_exit \ 705826fffe29SEmilio G. Cota "If \$plugins=yes, either \$ld_dynamic_list or " \ 705926fffe29SEmilio G. Cota "\$ld_exported_symbols_list should have been set to 'yes'." 706026fffe29SEmilio G. Cota fi 706140e8c6f4SAlex Bennéefi 706240e8c6f4SAlex Bennée 7063f48e590aSAlex Bennéeif test -n "$gdb_bin" ; then 7064f48e590aSAlex Bennée echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 7065f48e590aSAlex Bennéefi 7066f48e590aSAlex Bennée 706754e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then 706854e7aac0SAlexey Krasikov echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 706954e7aac0SAlexey Krasikovfi 707054e7aac0SAlexey Krasikov 70715b5e3037SPaolo Bonziniif test "$tcg_interpreter" = "yes"; then 707225211446SPaolo Bonzini QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES" 70735b5e3037SPaolo Bonzinielif test "$ARCH" = "sparc64" ; then 707425211446SPaolo Bonzini QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES" 70755b5e3037SPaolo Bonzinielif test "$ARCH" = "s390x" ; then 707625211446SPaolo Bonzini QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES" 7077e633a5c6SEric Blakeelif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 707825211446SPaolo Bonzini QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES" 707940d964b5SRichard Hendersonelif test "$ARCH" = "ppc64" ; then 708025211446SPaolo Bonzini QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES" 7081e633a5c6SEric Blakeelif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 708225211446SPaolo Bonzini QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES" 70835b5e3037SPaolo Bonzinielse 708425211446SPaolo Bonzini QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES" 70855b5e3037SPaolo Bonzinifi 70865b5e3037SPaolo Bonzini 708798ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak 7088804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak 7089c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak 70902eb054c2SPeter Maydellecho "SPHINX_BUILD=$sphinx_build" >> $config_host_mak 709139d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak 7092a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak 7093804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak 7094a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then 7095859aef02SPaolo Bonzini echo "CONFIG_IASL=$iasl" >> $config_host_mak 7096a31a8642SMichael S. Tsirkinfi 709783f73fceSTomoki Sekiyamaecho "CXX=$cxx" >> $config_host_mak 70983c4a4d0dSPeter Maydellecho "OBJCC=$objcc" >> $config_host_mak 7099804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak 710045d285abSPeter Maydellecho "ARFLAGS=$ARFLAGS" >> $config_host_mak 7101cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak 71025f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak 71033dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak 7104804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak 7105804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak 71069f81aeb5SAlistair Francisecho "RANLIB=$ranlib" >> $config_host_mak 71074852ee95SStefan Weilecho "NM=$nm" >> $config_host_mak 7108daa79d9aSAlex Bennéeecho "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 71099fe6de94SBlue Swirlecho "WINDRES=$windres" >> $config_host_mak 7110e2a2ed06SJuan Quintelaecho "CFLAGS=$CFLAGS" >> $config_host_mak 711146eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7112a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 711311cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7114f9728943SPaolo Bonziniecho "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7115a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 7116a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak 71178a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7118db5adeaaSPaolo Bonziniecho "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7119e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7120409437e1SDaniel P. Berrangeecho "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7121804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak 7122484e2cc7SPaolo Bonziniecho "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak 7123f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak 712490246037SDaniel P. Berrangeecho "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 712590246037SDaniel P. Berrangeecho "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 71261d728c39SBlue Swirlif test "$gcov" = "yes" ; then 71271d728c39SBlue Swirl echo "CONFIG_GCOV=y" >> $config_host_mak 71281d728c39SBlue Swirlfi 7129804edf29SJuan Quintela 7130adc28027SAlexander Bulekovif test "$fuzzing" != "no"; then 7131adc28027SAlexander Bulekov echo "CONFIG_FUZZ=y" >> $config_host_mak 7132adc28027SAlexander Bulekovfi 713354c9e41dSAlexander Bulekovecho "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak 71343efac6ebSTomáš Golembiovský 713505dfa22bSPhilippe Mathieu-Daudéif test "$edk2_blobs" = "yes" ; then 713605dfa22bSPhilippe Mathieu-Daudé echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak 713705dfa22bSPhilippe Mathieu-Daudéfi 713805dfa22bSPhilippe Mathieu-Daudé 7139b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then 7140b767d257SMarek Marczykowski-Górecki echo "CONFIG_RNG_NONE=y" >> $config_host_mak 7141b767d257SMarek Marczykowski-Góreckifi 7142b767d257SMarek Marczykowski-Górecki 71436efd7517SPeter Maydell# use included Linux headers 71446efd7517SPeter Maydellif test "$linux" = "yes" ; then 7145a307beb6SAndreas Färber mkdir -p linux-headers 71466efd7517SPeter Maydell case "$cpu" in 7147c72b26ecSRichard Henderson i386|x86_64|x32) 714808312a63SPeter Maydell linux_arch=x86 71496efd7517SPeter Maydell ;; 7150f8378accSRichard Henderson ppc|ppc64|ppc64le) 715108312a63SPeter Maydell linux_arch=powerpc 71526efd7517SPeter Maydell ;; 71536efd7517SPeter Maydell s390x) 715408312a63SPeter Maydell linux_arch=s390 715508312a63SPeter Maydell ;; 71561f080313SClaudio Fontana aarch64) 71571f080313SClaudio Fontana linux_arch=arm64 71581f080313SClaudio Fontana ;; 7159222e7d11SSanjay Lal mips64) 7160222e7d11SSanjay Lal linux_arch=mips 7161222e7d11SSanjay Lal ;; 716208312a63SPeter Maydell *) 716308312a63SPeter Maydell # For most CPUs the kernel architecture name and QEMU CPU name match. 716408312a63SPeter Maydell linux_arch="$cpu" 71656efd7517SPeter Maydell ;; 71666efd7517SPeter Maydell esac 716708312a63SPeter Maydell # For non-KVM architectures we will not have asm headers 716808312a63SPeter Maydell if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 716908312a63SPeter Maydell symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 717008312a63SPeter Maydell fi 71716efd7517SPeter Maydellfi 71726efd7517SPeter Maydell 717397a847bcSbellardfor target in $target_list; do 717497a847bcSbellard target_dir="$target" 717589138857SStefan Weil target_name=$(echo $target | cut -d '-' -f 1) 717697a847bcSbellard mkdir -p $target_dir 7177fdb75aefSPaolo Bonzini case $target in 7178fdb75aefSPaolo Bonzini *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; 7179fdb75aefSPaolo Bonzini *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; 71802408a527Saurel32 esac 718156aebc89Spbrookdone 71827d13299dSbellard 7183e3971d61SPhilippe Mathieu-Daudéif [ "$fdt" = "git" ]; then 7184859aef02SPaolo Bonzini subdirs="$subdirs dtc" 7185a540f158SPeter Crosthwaitefi 7186e219c499SRichard Hendersonif [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7187859aef02SPaolo Bonzini subdirs="$subdirs capstone" 7188e219c499SRichard Hendersonfi 7189765686d6SPaolo Bonziniecho "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak 7190fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then 7191fdb75aefSPaolo Bonzini echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak 7192fdb75aefSPaolo Bonzinifi 7193859aef02SPaolo Bonziniecho "SUBDIRS=$subdirs" >> $config_host_mak 7194e219c499SRichard Hendersonif test -n "$LIBCAPSTONE"; then 7195e219c499SRichard Henderson echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7196e219c499SRichard Hendersonfi 7197a540f158SPeter Crosthwaite 7198a99d57bbSWanlong Gaoif test "$numa" = "yes"; then 7199a99d57bbSWanlong Gao echo "CONFIG_NUMA=y" >> $config_host_mak 7200ab318051SMarc-André Lureau echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 7201a99d57bbSWanlong Gaofi 7202a99d57bbSWanlong Gao 7203fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then 7204fd0e6053SJohn Snow echo "export CCACHE_CPP2=y" >> $config_host_mak 7205fd0e6053SJohn Snowfi 7206fd0e6053SJohn Snow 72071e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then 72081e4f6065SDaniele Buono echo "CONFIG_SAFESTACK=y" >> $config_host_mak 72091e4f6065SDaniele Buonofi 72101e4f6065SDaniele Buono 7211e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now. 7212e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree; 7213e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree 7214e29e5c6eSPeter Maydell# (these can be both files and directories). 7215e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This 7216e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is 7217e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun 7218e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and 7219e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own 7220e29e5c6eSPeter Maydell# directory and symlink the directory instead. 722109db9b9dSGerd Hoffmann# UNLINK is used to remove symlinks from older development versions 722209db9b9dSGerd Hoffmann# that might get into the way when doing "git update" without doing 722309db9b9dSGerd Hoffmann# a "make distclean" in between. 72241cf4323eSThomas HuthDIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 72251cf4323eSThomas HuthDIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 7226b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi" 7227744a928cSAlexey KardashevskiyDIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 72288db2a4fdSGerd HoffmannDIRS="$DIRS roms/seabios" 7229c17a386bSAlex BennéeDIRS="$DIRS contrib/plugins/" 72302038f8c8SPaolo BonziniLINKS="Makefile" 7231e8f3bd71SMarc-André LureauLINKS="$LINKS tests/tcg/lm32/Makefile" 72323941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target" 7233ddcf607fSGerd HoffmannLINKS="$LINKS pc-bios/optionrom/Makefile" 7234e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile" 72358db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile" 7236e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp" 7237e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 723839950353SPeter MaydellLINKS="$LINKS tests/acceptance tests/data" 723939950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check" 72408f8fd9edSCleber RosaLINKS="$LINKS python" 7241c17a386bSAlex BennéeLINKS="$LINKS contrib/plugins/Makefile " 724209db9b9dSGerd HoffmannUNLINK="pc-bios/keymaps" 7243753d11f2SRichard Hendersonfor bios_file in \ 7244753d11f2SRichard Henderson $source_path/pc-bios/*.bin \ 72453a631b8eSBin Meng $source_path/pc-bios/*.elf \ 7246225a9ab8SAlexey Kardashevskiy $source_path/pc-bios/*.lid \ 7247753d11f2SRichard Henderson $source_path/pc-bios/*.rom \ 7248753d11f2SRichard Henderson $source_path/pc-bios/*.dtb \ 7249e89e33e1SDominik Dingel $source_path/pc-bios/*.img \ 7250753d11f2SRichard Henderson $source_path/pc-bios/openbios-* \ 72514e73c781SAlexander Graf $source_path/pc-bios/u-boot.* \ 725226ce90fdSLaszlo Ersek $source_path/pc-bios/edk2-*.fd.bz2 \ 7253753d11f2SRichard Henderson $source_path/pc-bios/palcode-* 7254753d11f2SRichard Hendersondo 7255e29e5c6eSPeter Maydell LINKS="$LINKS pc-bios/$(basename $bios_file)" 72567ea78b74SJan Kiszkadone 7257d1807a4fSPaolo Bonzinimkdir -p $DIRS 7258e29e5c6eSPeter Maydellfor f in $LINKS ; do 72590f4d8894SPaolo Bonzini if [ -e "$source_path/$f" ]; then 7260f9245e10SPeter Maydell symlink "$source_path/$f" "$f" 7261f9245e10SPeter Maydell fi 72627d13299dSbellarddone 726309db9b9dSGerd Hoffmannfor f in $UNLINK ; do 726409db9b9dSGerd Hoffmann if [ -L "$f" ]; then 726509db9b9dSGerd Hoffmann rm -f "$f" 726609db9b9dSGerd Hoffmann fi 726709db9b9dSGerd Hoffmanndone 72681ad2134fSPaul Brook 72692038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do 72702038f8c8SPaolo Bonzini export $i 72712038f8c8SPaolo Bonzinidone 7272afc3a8f9SAlex Bennéeexport target_list source_path use_containers 72732038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh) 72742038f8c8SPaolo Bonzini 7275c34ebfdcSAnthony Liguori# temporary config to build submodules 72768db2a4fdSGerd Hoffmannfor rom in seabios; do 7277c34ebfdcSAnthony Liguori config_mak=roms/$rom/config.mak 727837116c89SStefan Weil echo "# Automatically generated by configure - do not modify" > $config_mak 7279c34ebfdcSAnthony Liguori echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7280cdbd727cSRichard Henderson echo "AS=$as" >> $config_mak 72815f6f0e27SRichard Henderson echo "CCAS=$ccas" >> $config_mak 7282c34ebfdcSAnthony Liguori echo "CC=$cc" >> $config_mak 7283c34ebfdcSAnthony Liguori echo "BCC=bcc" >> $config_mak 72843dd46c78SBlue Swirl echo "CPP=$cpp" >> $config_mak 7285c34ebfdcSAnthony Liguori echo "OBJCOPY=objcopy" >> $config_mak 7286a31a8642SMichael S. Tsirkin echo "IASL=$iasl" >> $config_mak 7287c34ebfdcSAnthony Liguori echo "LD=$ld" >> $config_mak 72889f81aeb5SAlistair Francis echo "RANLIB=$ranlib" >> $config_mak 7289c34ebfdcSAnthony Liguoridone 7290c34ebfdcSAnthony Liguori 729176c7560aSMax Reitz# set up qemu-iotests in this build directory 729276c7560aSMax Reitziotests_common_env="tests/qemu-iotests/common.env" 729376c7560aSMax Reitz 729476c7560aSMax Reitzecho "# Automatically generated by configure - do not modify" > "$iotests_common_env" 729576c7560aSMax Reitzecho >> "$iotests_common_env" 729676c7560aSMax Reitzecho "export PYTHON='$python'" >> "$iotests_common_env" 729776c7560aSMax Reitz 7298a5665051SPaolo Bonziniif test "$skip_meson" = no; then 7299fc929892SMarc-André Lureaucross="config-meson.cross.new" 7300fc929892SMarc-André Lureaumeson_quote() { 7301fc929892SMarc-André Lureau echo "['$(echo $* | sed "s/ /','/g")']" 7302fc929892SMarc-André Lureau} 7303fc929892SMarc-André Lureau 7304fc929892SMarc-André Lureauecho "# Automatically generated by configure - do not modify" > $cross 7305fc929892SMarc-André Lureauecho "[properties]" >> $cross 7306fc929892SMarc-André Lureautest -z "$cxx" && echo "link_language = 'c'" >> $cross 7307fc929892SMarc-André Lureauecho "[binaries]" >> $cross 7308fc929892SMarc-André Lureauecho "c = $(meson_quote $cc)" >> $cross 7309fc929892SMarc-André Lureautest -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross 7310fc929892SMarc-André Lureauecho "ar = $(meson_quote $ar)" >> $cross 7311fc929892SMarc-André Lureauecho "nm = $(meson_quote $nm)" >> $cross 7312fc929892SMarc-André Lureauecho "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross 7313fc929892SMarc-André Lureauecho "ranlib = $(meson_quote $ranlib)" >> $cross 7314e8178514SPaolo Bonziniif has $sdl2_config; then 7315e8178514SPaolo Bonzini echo "sdl2-config = $(meson_quote $sdl2_config)" >> $cross 7316e8178514SPaolo Bonzinifi 7317fc929892SMarc-André Lureauecho "strip = $(meson_quote $strip)" >> $cross 7318fc929892SMarc-André Lureauecho "windres = $(meson_quote $windres)" >> $cross 7319fc929892SMarc-André Lureauif test -n "$cross_prefix"; then 7320fc929892SMarc-André Lureau cross_arg="--cross-file config-meson.cross" 7321fc929892SMarc-André Lureau echo "[host_machine]" >> $cross 7322fc929892SMarc-André Lureau if test "$mingw32" = "yes" ; then 7323fc929892SMarc-André Lureau echo "system = 'windows'" >> $cross 7324fc929892SMarc-André Lureau fi 7325853b4bafSThomas Huth if test "$linux" = "yes" ; then 7326853b4bafSThomas Huth echo "system = 'linux'" >> $cross 7327853b4bafSThomas Huth fi 7328fc929892SMarc-André Lureau case "$ARCH" in 7329fc929892SMarc-André Lureau i386|x86_64) 7330fc929892SMarc-André Lureau echo "cpu_family = 'x86'" >> $cross 7331fc929892SMarc-André Lureau ;; 7332fc929892SMarc-André Lureau ppc64le) 7333fc929892SMarc-André Lureau echo "cpu_family = 'ppc64'" >> $cross 7334fc929892SMarc-André Lureau ;; 7335fc929892SMarc-André Lureau *) 7336fc929892SMarc-André Lureau echo "cpu_family = '$ARCH'" >> $cross 7337fc929892SMarc-André Lureau ;; 7338fc929892SMarc-André Lureau esac 7339fc929892SMarc-André Lureau echo "cpu = '$cpu'" >> $cross 7340fc929892SMarc-André Lureau if test "$bigendian" = "yes" ; then 7341fc929892SMarc-André Lureau echo "endian = 'big'" >> $cross 7342fc929892SMarc-André Lureau else 7343fc929892SMarc-André Lureau echo "endian = 'little'" >> $cross 7344fc929892SMarc-André Lureau fi 7345fc929892SMarc-André Lureauelse 7346fc929892SMarc-André Lureau cross_arg="--native-file config-meson.cross" 7347fc929892SMarc-André Lureaufi 7348fc929892SMarc-André Lureaumv $cross config-meson.cross 7349fc929892SMarc-André Lureau 7350a5665051SPaolo Bonzinirm -rf meson-private meson-info meson-logs 735148328880SPaolo BonziniNINJA=${ninja:-$PWD/ninjatool} $meson setup \ 7352d17f305aSPaolo Bonzini --prefix "$prefix" \ 7353d17f305aSPaolo Bonzini --libdir "$libdir" \ 7354d17f305aSPaolo Bonzini --libexecdir "$libexecdir" \ 7355d17f305aSPaolo Bonzini --bindir "$bindir" \ 7356d17f305aSPaolo Bonzini --includedir "$includedir" \ 7357d17f305aSPaolo Bonzini --datadir "$datadir" \ 7358d17f305aSPaolo Bonzini --mandir "$mandir" \ 7359d17f305aSPaolo Bonzini --sysconfdir "$sysconfdir" \ 7360d17f305aSPaolo Bonzini --localstatedir "$local_statedir" \ 7361d17f305aSPaolo Bonzini -Ddocdir="$docdir" \ 736273f3aa37SMarc-André Lureau -Dqemu_suffix="$qemu_suffix" \ 7363a5665051SPaolo Bonzini -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 7364a5665051SPaolo Bonzini -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 7365a5665051SPaolo Bonzini -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 7366a5665051SPaolo Bonzini -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 7367da6d48b9SMarc-André Lureau -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 7368bf0e56a3SMarc-André Lureau -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 7369*deb62371SPaolo Bonzini -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \ 73701badb709SPaolo Bonzini -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \ 73711badb709SPaolo Bonzini -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \ 7372b4e312e9SPaolo Bonzini -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \ 7373a0b93237SPaolo Bonzini -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ 73740a40bcb7SCésar Belley -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\ 7375fc929892SMarc-André Lureau $cross_arg \ 7376a5665051SPaolo Bonzini "$PWD" "$source_path" 7377a5665051SPaolo Bonzini 7378a5665051SPaolo Bonziniif test "$?" -ne 0 ; then 7379a5665051SPaolo Bonzini error_exit "meson setup failed" 7380a5665051SPaolo Bonzinifi 7381a5665051SPaolo Bonzinitouch ninjatool.stamp 7382a5665051SPaolo Bonzinifi 7383a5665051SPaolo Bonzini 73842d838d9bSAlex Bennéeif test -n "${deprecated_features}"; then 73852d838d9bSAlex Bennée echo "Warning, deprecated features enabled." 73862d838d9bSAlex Bennée echo "Please see docs/system/deprecated.rst" 73872d838d9bSAlex Bennée echo " features: ${deprecated_features}" 73882d838d9bSAlex Bennéefi 73892d838d9bSAlex Bennée 7390dc655404SMichael S. Tsirkin# Save the configure command line for later reuse. 7391dc655404SMichael S. Tsirkincat <<EOD >config.status 7392dc655404SMichael S. Tsirkin#!/bin/sh 7393dc655404SMichael S. Tsirkin# Generated by configure. 7394dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration. 7395dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging 7396dc655404SMichael S. Tsirkin# configure, is in config.log if it exists. 7397dc655404SMichael S. TsirkinEOD 7398e811da7fSDaniel P. Berrangé 7399e811da7fSDaniel P. Berrangépreserve_env() { 7400e811da7fSDaniel P. Berrangé envname=$1 7401e811da7fSDaniel P. Berrangé 7402e811da7fSDaniel P. Berrangé eval envval=\$$envname 7403e811da7fSDaniel P. Berrangé 7404e811da7fSDaniel P. Berrangé if test -n "$envval" 7405e811da7fSDaniel P. Berrangé then 7406e811da7fSDaniel P. Berrangé echo "$envname='$envval'" >> config.status 7407e811da7fSDaniel P. Berrangé echo "export $envname" >> config.status 7408e811da7fSDaniel P. Berrangé else 7409e811da7fSDaniel P. Berrangé echo "unset $envname" >> config.status 7410e811da7fSDaniel P. Berrangé fi 7411e811da7fSDaniel P. Berrangé} 7412e811da7fSDaniel P. Berrangé 7413e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what 7414e811da7fSDaniel P. Berrangé# features/build target configure will detect 7415e811da7fSDaniel P. Berrangépreserve_env AR 7416e811da7fSDaniel P. Berrangépreserve_env AS 7417e811da7fSDaniel P. Berrangépreserve_env CC 7418e811da7fSDaniel P. Berrangépreserve_env CPP 7419e811da7fSDaniel P. Berrangépreserve_env CXX 7420e811da7fSDaniel P. Berrangépreserve_env INSTALL 7421e811da7fSDaniel P. Berrangépreserve_env LD 7422e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH 7423e811da7fSDaniel P. Berrangépreserve_env LIBTOOL 7424e811da7fSDaniel P. Berrangépreserve_env MAKE 7425e811da7fSDaniel P. Berrangépreserve_env NM 7426e811da7fSDaniel P. Berrangépreserve_env OBJCOPY 7427e811da7fSDaniel P. Berrangépreserve_env PATH 7428e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG 7429e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR 7430e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH 7431e811da7fSDaniel P. Berrangépreserve_env PYTHON 7432e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG 7433e811da7fSDaniel P. Berrangépreserve_env SMBD 7434e811da7fSDaniel P. Berrangépreserve_env STRIP 7435e811da7fSDaniel P. Berrangépreserve_env WINDRES 7436e811da7fSDaniel P. Berrangé 7437dc655404SMichael S. Tsirkinprintf "exec" >>config.status 7438a5665051SPaolo Bonzinifor i in "$0" "$@"; do 7439a5665051SPaolo Bonzini test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status 7440a5665051SPaolo Bonzinidone 7441cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status 7442dc655404SMichael S. Tsirkinchmod +x config.status 7443dc655404SMichael S. Tsirkin 74448cd05ab6SPeter Maydellrm -r "$TMPDIR1" 7445