xref: /openbmc/qemu/configure (revision 0e8e77d487b3d8ae33158e61c30e1fe5c753a114)
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"
1585770e8afSPaolo Bonzini    CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_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"
1735770e8afSPaolo Bonzini  do_cc $CFLAGS $CONFIGURE_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"
1795770e8afSPaolo Bonzini  do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
1805770e8afSPaolo Bonzini      $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
18152166aa0SJuan Quintela}
18252166aa0SJuan Quintela
18311568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
18411568d6dSPaolo Bonzinisymlink() {
18572b8b5a1SStefan Weil  rm -rf "$2"
186ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
18772b8b5a1SStefan Weil  ln -s "$1" "$2"
18811568d6dSPaolo Bonzini}
18911568d6dSPaolo Bonzini
1900dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
1910dba6195SLoïc Minier# executable or a builtin)
1920dba6195SLoïc Minierhas() {
1930dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
1940dba6195SLoïc Minier}
1950dba6195SLoïc Minier
1960a01d76fSMarc-André Lureauversion_ge () {
1970a01d76fSMarc-André Lureau    local_ver1=`echo $1 | tr . ' '`
1980a01d76fSMarc-André Lureau    local_ver2=`echo $2 | tr . ' '`
1990a01d76fSMarc-André Lureau    while true; do
2000a01d76fSMarc-André Lureau        set x $local_ver1
2010a01d76fSMarc-André Lureau        local_first=${2-0}
202c44a33e2SStefano Garzarella        # 'shift 2' if $2 is set, or 'shift' if $2 is not set
203c44a33e2SStefano Garzarella        shift ${2:+2}
2040a01d76fSMarc-André Lureau        local_ver1=$*
2050a01d76fSMarc-André Lureau        set x $local_ver2
2060a01d76fSMarc-André Lureau        # the second argument finished, the first must be greater or equal
2070a01d76fSMarc-André Lureau        test $# = 1 && return 0
2080a01d76fSMarc-André Lureau        test $local_first -lt $2 && return 1
2090a01d76fSMarc-André Lureau        test $local_first -gt $2 && return 0
210c44a33e2SStefano Garzarella        shift ${2:+2}
2110a01d76fSMarc-André Lureau        local_ver2=$*
2120a01d76fSMarc-André Lureau    done
2130a01d76fSMarc-André Lureau}
2140a01d76fSMarc-André Lureau
2155b808275SLluís Vilanovahave_backend () {
2165b808275SLluís Vilanova    echo "$trace_backends" | grep "$1" >/dev/null
2175b808275SLluís Vilanova}
2185b808275SLluís Vilanova
2193b6b7550SPaolo Bonziniglob() {
2203b6b7550SPaolo Bonzini    eval test -z '"${1#'"$2"'}"'
2213b6b7550SPaolo Bonzini}
2223b6b7550SPaolo Bonzini
223e9a3591fSChristian Borntraegerld_has() {
224e9a3591fSChristian Borntraeger    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
225e9a3591fSChristian Borntraeger}
226e9a3591fSChristian Borntraeger
2274ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
2284ace32e2SAntonio Ospitethen
2294ace32e2SAntonio Ospite  error_exit "main directory cannot contain spaces nor colons"
2304ace32e2SAntonio Ospitefi
2314ace32e2SAntonio Ospite
23214211825SAntonio Ospite# default parameters
2332ff6b91eSJuan Quintelacpu=""
234a31a8642SMichael S. Tsirkiniasl="iasl"
2351e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M"
23643ce4dfeSbellardstatic="no"
2377d13299dSbellardcross_prefix=""
2380c58ac1cSmalcaudio_drv_list=""
239b64ec4e4SFam Zhengblock_drv_rw_whitelist=""
240b64ec4e4SFam Zhengblock_drv_ro_whitelist=""
241e49d021eSPeter Maydellhost_cc="cc"
242d5631638Smalcaudio_win_int=""
243957f1f99SMichael Rothlibs_qga=""
2445bc62e01SGerd Hoffmanndebug_info="yes"
24563678e17SSteven Noonanstack_protector=""
2461e4f6065SDaniele Buonosafe_stack=""
247afc3a8f9SAlex Bennéeuse_containers="yes"
248f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
249ac0df51dSaliguori
25092712822SDaniel P. Berrangeif test -e "$source_path/.git"
25192712822SDaniel P. Berrangethen
252f62bbee5SDaniel P. Berrange    git_update=yes
25392712822SDaniel P. Berrange    git_submodules="ui/keycodemapdb"
2543ac1f813SEmilio G. Cota    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
2553ac1f813SEmilio G. Cota    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
25692712822SDaniel P. Berrangeelse
257f62bbee5SDaniel P. Berrange    git_update=no
258aef45d51SDaniel P. Berrange    git_submodules=""
2595c0ef67aSDaniel P. Berrangé
2605c0ef67aSDaniel P. Berrangé    if ! test -f "$source_path/ui/keycodemapdb/README"
2615c0ef67aSDaniel P. Berrangé    then
2625c0ef67aSDaniel P. Berrangé        echo
2635c0ef67aSDaniel P. Berrangé        echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
2645c0ef67aSDaniel P. Berrangé        echo
2655c0ef67aSDaniel P. Berrangé        echo "This is not a GIT checkout but module content appears to"
2665c0ef67aSDaniel P. Berrangé        echo "be missing. Do not use 'git archive' or GitHub download links"
2675c0ef67aSDaniel P. Berrangé        echo "to acquire QEMU source archives. Non-GIT builds are only"
2685c0ef67aSDaniel P. Berrangé        echo "supported with source archives linked from:"
2695c0ef67aSDaniel P. Berrangé        echo
270a3e3b521SPeter Maydell        echo "  https://www.qemu.org/download/#source"
2715c0ef67aSDaniel P. Berrangé        echo
2725c0ef67aSDaniel P. Berrangé        echo "Developers working with GIT can use scripts/archive-source.sh"
2735c0ef67aSDaniel P. Berrangé        echo "if they need to create valid source archives."
2745c0ef67aSDaniel P. Berrangé        echo
2755c0ef67aSDaniel P. Berrangé        exit 1
2765c0ef67aSDaniel P. Berrangé    fi
27792712822SDaniel P. Berrangefi
278cc84d63aSDaniel P. Berrangegit="git"
279ac0df51dSaliguori
280afb63ebdSStefan Weil# Don't accept a target_list environment variable.
281afb63ebdSStefan Weilunset target_list
282447e133fSAlex Bennéeunset target_list_exclude
283377529c0SPaolo Bonzini
284377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
285377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
286377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
287377529c0SPaolo Bonzini#              unless --disable-foo is given
288377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
289377529c0SPaolo Bonzini#              feature will searched for,
290377529c0SPaolo Bonzini#              if not found, configure exits with error
291377529c0SPaolo Bonzini#
292377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
293377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
294377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
295377529c0SPaolo Bonzini
296377529c0SPaolo Bonzinibrlapi=""
297377529c0SPaolo Bonzinicurl=""
2985285e593SYonggang Luoiconv="auto"
2995285e593SYonggang Luocurses="auto"
300e3667660SYonggang Luodocs="auto"
301fbb4121dSPaolo Bonzinifdt="auto"
30258952137SVincenzo Maffionenetmap="no"
30335be72baSPaolo Bonzinisdl="auto"
30435be72baSPaolo Bonzinisdl_image="auto"
305cece116cSMisono Tomohirovirtiofsd="auto"
306983eef5aSMeador Ingevirtfs=""
3075c53015aSPaolo Bonzinilibudev="auto"
3086ec0e15dSPaolo Bonzinimpath="auto"
309a0b93237SPaolo Bonzinivnc="enabled"
310deb62371SPaolo Bonzinisparse="auto"
311377529c0SPaolo Bonzinivde=""
312a0b93237SPaolo Bonzinivnc_sasl="auto"
313a0b93237SPaolo Bonzinivnc_jpeg="auto"
314a0b93237SPaolo Bonzinivnc_png="auto"
3154113f4cfSLaurent Vivierxkbcommon="auto"
316377529c0SPaolo Bonzinixen=""
317d5b93ddfSAnthony PERARDxen_ctrl_version=""
3181badb709SPaolo Bonzinixen_pci_passthrough="auto"
319377529c0SPaolo Bonzinilinux_aio=""
320c10dd856SAarushi Mehtalinux_io_uring=""
32147e98658SCorey Bryantcap_ng=""
322377529c0SPaolo Bonziniattr=""
3234f26f2b6SAvi Kivitylibattr=""
324377529c0SPaolo Bonzinixfs=""
3251badb709SPaolo Bonzinitcg="enabled"
326a40161cbSPaolo Bonzinimembarrier=""
327299e6f19SPaolo Bonzinivhost_net=""
328299e6f19SPaolo Bonzinivhost_crypto=""
329299e6f19SPaolo Bonzinivhost_scsi=""
330299e6f19SPaolo Bonzinivhost_vsock=""
331d88618f7SStefan Hajnoczivhost_user="no"
332e5e856c1SStefan Hajnoczivhost_user_blk_server="auto"
33398fc1adaSDr. David Alan Gilbertvhost_user_fs=""
3343bd40ec7SPaolo Bonzinikvm="auto"
3353bd40ec7SPaolo Bonzinihax="auto"
3363bd40ec7SPaolo Bonzinihvf="auto"
3373bd40ec7SPaolo Bonziniwhpx="auto"
3382da776dbSMichael R. Hinesrdma=""
33921ab34c9SMarcel Apfelbaumpvrdma=""
340377529c0SPaolo Bonzinigprof="no"
341377529c0SPaolo Bonzinidebug_tcg="no"
342377529c0SPaolo Bonzinidebug="no"
343247724cbSMarc-André Lureausanitizers="no"
3440aebab04SLingfeng Yangtsan="no"
345b553a042SJohn Snowfortify_source=""
346377529c0SPaolo Bonzinistrip_opt="yes"
3479195b2c2SStefan Weiltcg_interpreter="no"
348377529c0SPaolo Bonzinibigendian="no"
349377529c0SPaolo Bonzinimingw32="no"
3501d728c39SBlue Swirlgcov="no"
351377529c0SPaolo BonziniEXESUF=""
352484e2cc7SPaolo BonziniHOST_DSOSUF=".so"
35317969268SFam Zhengmodules="no"
354bd83c861SChristian Ehrhardtmodule_upgrades="no"
355377529c0SPaolo Bonziniprefix="/usr/local"
35610ff82d1SMarc-André Lureauqemu_suffix="qemu"
3574d34a86bSPaolo Bonzinislirp="auto"
358377529c0SPaolo Bonzinioss_lib=""
359377529c0SPaolo Bonzinibsd="no"
360377529c0SPaolo Bonzinilinux="no"
361377529c0SPaolo Bonzinisolaris="no"
362377529c0SPaolo Bonziniprofiler="no"
363b4e312e9SPaolo Bonzinicocoa="auto"
364377529c0SPaolo Bonzinisoftmmu="yes"
365377529c0SPaolo Bonzinilinux_user="no"
366377529c0SPaolo Bonzinibsd_user="no"
367c8d5450bSPaolo Bonziniblobs="true"
368377529c0SPaolo Bonzinipkgversion=""
36940d6444eSAvi Kivitypie=""
3703556c233SPaolo Bonziniqom_cast_debug="yes"
371baf86d6bSPaolo Bonzinitrace_backends="log"
372377529c0SPaolo Bonzinitrace_file="trace"
373377529c0SPaolo Bonzinispice=""
374377529c0SPaolo Bonzinirbd=""
3757b02f544SMarc-André Lureausmartcard=""
3760a40bcb7SCésar Belleyu2f="auto"
3772b2325ffSGerd Hoffmannlibusb=""
37869354a83SHans de Goedeusb_redir=""
379da076ffeSGerd Hoffmannopengl=""
380014cb152SGerd Hoffmannopengl_dmabuf="no"
3815dd89908SRichard Hendersoncpuid_h="no"
38286583a07SLiam Merwickavx2_opt=""
3838b18cdbfSRichard Hendersoncapstone="auto"
384b25c9dffSStefan Weillzo=""
385b25c9dffSStefan Weilsnappy=""
3866b383c08SPeter Wubzip2=""
38783bc1f97SJulio Faraccolzfse=""
3883a678481SJuan Quintelazstd=""
389e8ef31a3SMichael Tokarevguest_agent=""
390d9840e25STomoki Sekiyamaguest_agent_with_vss="no"
39150cbebb9SMichael Rothguest_agent_ntddscsi="no"
3929dacf32dSYossi Hindinguest_agent_msi=""
393d9840e25STomoki Sekiyamavss_win32_sdk=""
394d9840e25STomoki Sekiyamawin_sdk="no"
395e10ee3f5SPhilippe Mathieu-Daudéwant_tools=""
396c589b249SRonnie Sahlberglibiscsi=""
3976542aa9cSPeter Lievenlibnfs=""
398519175a2SAlex Barcelocoroutine=""
39970c60c08SStefan Hajnoczicoroutine_pool=""
4007d992e4dSPeter Lievendebug_stack_usage="no"
401f0d92b56SLongpeng(Mike)crypto_afalg="no"
402f794573eSEduardo Otuboseccomp=""
403eb100396SBharata B Raoglusterfs=""
404d85fa9ebSJeff Codyglusterfs_xlator_opt="no"
4050c14fb47SBharata B Raoglusterfs_discard="no"
406df3a429aSNiels de Vosglusterfs_fallocate="no"
4077c815372SBharata B Raoglusterfs_zerofill="no"
408e014dbe7SPrasanna Kumar Kaleverglusterfs_ftruncate_has_stat="no"
4090e3b891fSNiels de Vosglusterfs_iocb_has_stat="no"
410a4ccabcfSAnthony Liguorigtk=""
411925a0400SGerd Hoffmanngtk_gl="no"
412a1c5e949SDaniel P. Berrangetls_priority="NORMAL"
413ddbb0d09SDaniel P. Berrangegnutls=""
41491bfcdb0SDaniel P. Berrangenettle=""
415dc2207afSDaniel P. Berrangénettle_xts="no"
41691bfcdb0SDaniel P. Berrangegcrypt=""
4171f923c70SLongpeng(Mike)gcrypt_hmac="no"
418e0576942SDaniel P. Berrangégcrypt_xts="no"
419e0576942SDaniel P. Berrangéqemu_private_xts="yes"
4208953caf3SDaniel P. Berrangeauth_pam=""
421bbbf9bfbSStefan Weilvte=""
4229d9e1521SGerd Hoffmannvirglrenderer=""
4237aaa6a16SPaolo Bonzinitpm=""
424b10d49d7SPino Toscanolibssh=""
425ed1701c6SDr. David Alan Gilbertlive_block_migration="yes"
426a99d57bbSWanlong Gaonuma=""
4272847b469SFam Zhengtcmalloc="no"
4287b01cb97SAlexandre Derumierjemalloc="no"
429a6b1d4c0SChanglong Xiereplication="yes"
4302f740136SJeff Codybochs="yes"
4312f740136SJeff Codycloop="yes"
4322f740136SJeff Codydmg="yes"
4332f740136SJeff Codyqcow1="yes"
4342f740136SJeff Codyvdi="yes"
4352f740136SJeff Codyvvfat="yes"
4362f740136SJeff Codyqed="yes"
4372f740136SJeff Codyparallels="yes"
438e1c42697SDaniel P. Berrangésheepdog="no"
439ed279a06SKlim Kireevlibxml2=""
440ba59fb77SPaolo Bonzinidebug_mutex="no"
44117824406SJunyan Helibpmem=""
442f3494749SPaolo Bonzinidefault_devices="yes"
44340e8c6f4SAlex Bennéeplugins="no"
444adc28027SAlexander Bulekovfuzzing="no"
445b767d257SMarek Marczykowski-Góreckirng_none="no"
44654e7aac0SAlexey Krasikovsecret_keyring=""
44721b2eca6SJingqi Liulibdaxctl=""
448a5665051SPaolo Bonzinimeson=""
44948328880SPaolo Bonzinininja=""
450a5665051SPaolo Bonziniskip_meson=no
451*0e8e77d4SAlex Bennéegettext="auto"
452a484a719SMax Reitzfuse="auto"
453df4ea709SMax Reitzfuse_lseek="auto"
454377529c0SPaolo Bonzini
455fb59dabdSPeter Maydellbogus_os="no"
456aa087962SPaolo Bonzinimalloc_trim="auto"
457898be3e0SPeter Maydell
458ac0df51dSaliguori# parse CC options first
459ac0df51dSaliguorifor opt do
46089138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
461ac0df51dSaliguori  case "$opt" in
462ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
463ac0df51dSaliguori  ;;
4643d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
465ac0df51dSaliguori  ;;
46683f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
46783f73fceSTomoki Sekiyama  ;;
4682ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
4692ff6b91eSJuan Quintela  ;;
470de385287SAlex Bennée  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
471db5adeaaSPaolo Bonzini                    QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
472e2a2ed06SJuan Quintela  ;;
47311cde1c8SBruno Dominguez  --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
47411cde1c8SBruno Dominguez  ;;
475db5adeaaSPaolo Bonzini  --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
476f9943cd5SGerd Hoffmann                     EXTRA_LDFLAGS="$optarg"
477e2a2ed06SJuan Quintela  ;;
4785bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
4795bc62e01SGerd Hoffmann  ;;
4805bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
4815bc62e01SGerd Hoffmann  ;;
482d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
483d75402b5SAlex Bennée  ;;
484d422b2bcSAlex Bennée  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
485d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
4862038f8c8SPaolo Bonzini                      cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
487d422b2bcSAlex Bennée  ;;
488d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
4892038f8c8SPaolo Bonzini                cc_archs="$cc_archs $cc_arch"
490d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
4912038f8c8SPaolo Bonzini                cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
492d75402b5SAlex Bennée  ;;
493ac0df51dSaliguori  esac
494ac0df51dSaliguoridone
495ac0df51dSaliguori# OS specific
496ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
49793148aa5SStefan Weil# we can eliminate its usage altogether.
498ac0df51dSaliguori
499e49d021eSPeter Maydell# Preferred compiler:
500e49d021eSPeter Maydell#  ${CC} (if set)
501e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
502e49d021eSPeter Maydell#  system compiler
503e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
504e49d021eSPeter Maydell  cc="$host_cc"
505e49d021eSPeter Maydellelse
506b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
507e49d021eSPeter Maydellfi
508e49d021eSPeter Maydell
50983f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
51083f73fceSTomoki Sekiyama  cxx="c++"
51183f73fceSTomoki Sekiyamaelse
51283f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
51383f73fceSTomoki Sekiyamafi
51483f73fceSTomoki Sekiyama
515b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
516cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
5175f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
5183dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
519b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
520b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
5219f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
5224852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
523b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
524b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
52517884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
52617884d7bSSergei Trofimovichquery_pkg_config() {
52717884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
52817884d7bSSergei Trofimovich}
52917884d7bSSergei Trofimovichpkg_config=query_pkg_config
53047c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
531ac0df51dSaliguori
53245d285abSPeter Maydell# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
53345d285abSPeter MaydellARFLAGS="${ARFLAGS-rv}"
53445d285abSPeter Maydell
535be17dc90SMichael S. Tsirkin# default flags for all hosts
5362d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
5372d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
5382d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
5392d31515bSPeter Maydell# provides these semantics.)
540086d5f75SPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
541086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
542c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
543be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
5445770e8afSPaolo Bonzini
5455770e8afSPaolo Bonzini# Flags that are needed during configure but later taken care of by Meson
5465770e8afSPaolo BonziniCONFIGURE_CFLAGS="-std=gnu99 -Wall"
5475770e8afSPaolo BonziniCONFIGURE_LDFLAGS=
548086d5f75SPaolo Bonzini
549be17dc90SMichael S. Tsirkin
550ac0df51dSaliguoricheck_define() {
551ac0df51dSaliguoricat > $TMPC <<EOF
552ac0df51dSaliguori#if !defined($1)
553fd786e1aSPeter Maydell#error $1 not defined
554ac0df51dSaliguori#endif
555ac0df51dSaliguoriint main(void) { return 0; }
556ac0df51dSaliguoriEOF
55752166aa0SJuan Quintela  compile_object
558ac0df51dSaliguori}
559ac0df51dSaliguori
560307119e7SGerd Hoffmanncheck_include() {
561307119e7SGerd Hoffmanncat > $TMPC <<EOF
562307119e7SGerd Hoffmann#include <$1>
563307119e7SGerd Hoffmannint main(void) { return 0; }
564307119e7SGerd HoffmannEOF
565307119e7SGerd Hoffmann  compile_object
566307119e7SGerd Hoffmann}
567307119e7SGerd Hoffmann
56893b25869SJohn Snowwrite_c_skeleton() {
56993b25869SJohn Snow    cat > $TMPC <<EOF
57093b25869SJohn Snowint main(void) { return 0; }
57193b25869SJohn SnowEOF
57293b25869SJohn Snow}
57393b25869SJohn Snow
574adc28027SAlexander Bulekovwrite_c_fuzzer_skeleton() {
575adc28027SAlexander Bulekov    cat > $TMPC <<EOF
576adc28027SAlexander Bulekov#include <stdint.h>
577adc28027SAlexander Bulekov#include <sys/types.h>
578adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
579adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
580adc28027SAlexander BulekovEOF
581adc28027SAlexander Bulekov}
582adc28027SAlexander Bulekov
583bbea4050SPeter Maydellif check_define __linux__ ; then
584bbea4050SPeter Maydell  targetos="Linux"
585bbea4050SPeter Maydellelif check_define _WIN32 ; then
586bbea4050SPeter Maydell  targetos='MINGW32'
587bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
588bbea4050SPeter Maydell  targetos='OpenBSD'
589bbea4050SPeter Maydellelif check_define __sun__ ; then
590bbea4050SPeter Maydell  targetos='SunOS'
591bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
592bbea4050SPeter Maydell  targetos='Haiku'
593951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
594951fedfcSPeter Maydell  targetos='FreeBSD'
595951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
596951fedfcSPeter Maydell  targetos='GNU/kFreeBSD'
597951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
598951fedfcSPeter Maydell  targetos='DragonFly'
599951fedfcSPeter Maydellelif check_define __NetBSD__; then
600951fedfcSPeter Maydell  targetos='NetBSD'
601951fedfcSPeter Maydellelif check_define __APPLE__; then
602951fedfcSPeter Maydell  targetos='Darwin'
603bbea4050SPeter Maydellelse
604951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
605951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
606951fedfcSPeter Maydell  # be the result of a missing compiler.
607951fedfcSPeter Maydell  targetos='bogus'
608951fedfcSPeter Maydell  bogus_os='yes'
609bbea4050SPeter Maydellfi
610bbea4050SPeter Maydell
611bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use.
612bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're
613bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify
614bbea4050SPeter Maydell# the correct CPU with the --cpu option.
615bbea4050SPeter Maydellcase $targetos in
616bbea4050SPeter MaydellDarwin)
617bbea4050SPeter Maydell  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
618bbea4050SPeter Maydell  # run 64-bit userspace code.
619bbea4050SPeter Maydell  # If the user didn't specify a CPU explicitly and the kernel says this is
620bbea4050SPeter Maydell  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
621bbea4050SPeter Maydell  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
622bbea4050SPeter Maydell    cpu="x86_64"
623bbea4050SPeter Maydell  fi
6245869f8ddSGerd Hoffmann  HOST_DSOSUF=".dylib"
625bbea4050SPeter Maydell  ;;
626bbea4050SPeter MaydellSunOS)
62789138857SStefan Weil  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
628bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
629bbea4050SPeter Maydell    cpu="x86_64"
630bbea4050SPeter Maydell  fi
631bbea4050SPeter Maydellesac
632bbea4050SPeter Maydell
6332ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
6342ff6b91eSJuan Quintela  # command line argument
6352ff6b91eSJuan Quintela  :
6362ff6b91eSJuan Quintelaelif check_define __i386__ ; then
637ac0df51dSaliguori  cpu="i386"
638ac0df51dSaliguorielif check_define __x86_64__ ; then
639c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
640c72b26ecSRichard Henderson    cpu="x32"
641c72b26ecSRichard Henderson  else
642ac0df51dSaliguori    cpu="x86_64"
643c72b26ecSRichard Henderson  fi
6443aa9bd6cSblueswir1elif check_define __sparc__ ; then
6453aa9bd6cSblueswir1  if check_define __arch64__ ; then
6463aa9bd6cSblueswir1    cpu="sparc64"
6473aa9bd6cSblueswir1  else
6483aa9bd6cSblueswir1    cpu="sparc"
6493aa9bd6cSblueswir1  fi
650fdf7ed96Smalcelif check_define _ARCH_PPC ; then
651fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
652f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
653f8378accSRichard Henderson      cpu="ppc64le"
654f8378accSRichard Henderson    else
655fdf7ed96Smalc      cpu="ppc64"
656f8378accSRichard Henderson    fi
657ac0df51dSaliguori  else
658fdf7ed96Smalc    cpu="ppc"
659fdf7ed96Smalc  fi
660afa05235SAurelien Jarnoelif check_define __mips__ ; then
661afa05235SAurelien Jarno  cpu="mips"
662d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
663d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
664d66ed0eaSAurelien Jarno    cpu="s390x"
665d66ed0eaSAurelien Jarno  else
666d66ed0eaSAurelien Jarno    cpu="s390"
667d66ed0eaSAurelien Jarno  fi
668c4f80543SAlistair Franciselif check_define __riscv ; then
669c4f80543SAlistair Francis  if check_define _LP64 ; then
670c4f80543SAlistair Francis    cpu="riscv64"
671c4f80543SAlistair Francis  else
672c4f80543SAlistair Francis    cpu="riscv32"
673c4f80543SAlistair Francis  fi
67421d89f84SPeter Maydellelif check_define __arm__ ; then
67521d89f84SPeter Maydell  cpu="arm"
6761f080313SClaudio Fontanaelif check_define __aarch64__ ; then
6771f080313SClaudio Fontana  cpu="aarch64"
678fdf7ed96Smalcelse
67989138857SStefan Weil  cpu=$(uname -m)
680ac0df51dSaliguorifi
681ac0df51dSaliguori
682359bc95dSPeter MaydellARCH=
683359bc95dSPeter Maydell# Normalise host CPU name and set ARCH.
684359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
6857d13299dSbellardcase "$cpu" in
686ee35e968SThomas Huth  ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
687898be3e0SPeter Maydell  ;;
688f8378accSRichard Henderson  ppc64le)
689f8378accSRichard Henderson    ARCH="ppc64"
690f8378accSRichard Henderson  ;;
6917d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
69297a847bcSbellard    cpu="i386"
6937d13299dSbellard  ;;
694aaa5fa14Saurel32  x86_64|amd64)
695aaa5fa14Saurel32    cpu="x86_64"
696aaa5fa14Saurel32  ;;
69721d89f84SPeter Maydell  armv*b|armv*l|arm)
69821d89f84SPeter Maydell    cpu="arm"
6997d13299dSbellard  ;;
7001f080313SClaudio Fontana  aarch64)
7011f080313SClaudio Fontana    cpu="aarch64"
7021f080313SClaudio Fontana  ;;
703afa05235SAurelien Jarno  mips*)
704afa05235SAurelien Jarno    cpu="mips"
705afa05235SAurelien Jarno  ;;
7063142255cSblueswir1  sparc|sun4[cdmuv])
707ae228531Sbellard    cpu="sparc"
708ae228531Sbellard  ;;
7097d13299dSbellard  *)
710359bc95dSPeter Maydell    # This will result in either an error or falling back to TCI later
711359bc95dSPeter Maydell    ARCH=unknown
7127d13299dSbellard  ;;
7137d13299dSbellardesac
714359bc95dSPeter Maydellif test -z "$ARCH"; then
715359bc95dSPeter Maydell  ARCH="$cpu"
716359bc95dSPeter Maydellfi
717e2d52ad3SJuan Quintela
7187d13299dSbellard# OS specific
7190dbfc675SJuan Quintela
7207d13299dSbellardcase $targetos in
72167b915a5SbellardMINGW32*)
72267b915a5Sbellard  mingw32="yes"
7233cec7cc2SKővágó, Zoltán  audio_possible_drivers="dsound sdl"
724307119e7SGerd Hoffmann  if check_include dsound.h; then
7253cec7cc2SKővágó, Zoltán    audio_drv_list="dsound"
726307119e7SGerd Hoffmann  else
727307119e7SGerd Hoffmann    audio_drv_list=""
728307119e7SGerd Hoffmann  fi
729898be3e0SPeter Maydell  supported_os="yes"
730fb648e9cSDaniel P. Berrangé  pie="no"
73167b915a5Sbellard;;
7325c40d2bdSthsGNU/kFreeBSD)
733a167ba50SAurelien Jarno  bsd="yes"
7346a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7350bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
7365c40d2bdSths;;
7377d3505c5SbellardFreeBSD)
7387d3505c5Sbellard  bsd="yes"
7390db4a067SPaolo Bonzini  make="${MAKE-gmake}"
7406a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7410bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
742f01576f1SJuergen Lock  # needed for kinfo_getvmmap(3) in libutil.h
74358952137SVincenzo Maffione  netmap=""  # enable netmap autodetect
7447d3505c5Sbellard;;
745c5e97233Sblueswir1DragonFly)
746c5e97233Sblueswir1  bsd="yes"
7470db4a067SPaolo Bonzini  make="${MAKE-gmake}"
7486a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7490bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
750c5e97233Sblueswir1;;
7517d3505c5SbellardNetBSD)
7527d3505c5Sbellard  bsd="yes"
7530db4a067SPaolo Bonzini  make="${MAKE-gmake}"
7546a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7550bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl"
7568ef92a88Sblueswir1  oss_lib="-lossaudio"
7577d3505c5Sbellard;;
7587d3505c5SbellardOpenBSD)
7597d3505c5Sbellard  bsd="yes"
7600db4a067SPaolo Bonzini  make="${MAKE-gmake}"
761f92c7168SGerd Hoffmann  audio_drv_list="try-sdl"
7620bac1111SKővágó, Zoltán  audio_possible_drivers="sdl"
7637d3505c5Sbellard;;
76483fb7adfSbellardDarwin)
76583fb7adfSbellard  bsd="yes"
76683fb7adfSbellard  darwin="yes"
7671b0f9cc2Saliguori  if [ "$cpu" = "x86_64" ] ; then
768a558ee17SJuan Quintela    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
769db5adeaaSPaolo Bonzini    QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
7701b0f9cc2Saliguori  fi
771b4e312e9SPaolo Bonzini  cocoa="enabled"
7726a485418SGerd Hoffmann  audio_drv_list="coreaudio try-sdl"
77314382605SKővágó, Zoltán  audio_possible_drivers="coreaudio sdl"
774db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
775a0b7cf6bSPeter Maydell  # Disable attempts to use ObjectiveC features in os/object.h since they
776a0b7cf6bSPeter Maydell  # won't work when we're compiling with gcc as a C compiler.
777a0b7cf6bSPeter Maydell  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
77883fb7adfSbellard;;
779ec530c81SbellardSunOS)
780ec530c81Sbellard  solaris="yes"
7810db4a067SPaolo Bonzini  make="${MAKE-gmake}"
782e2d8830eSBrad  smbd="${SMBD-/usr/sfw/sbin/smbd}"
7836b4d2ba1Sths  if test -f /usr/include/sys/soundcard.h ; then
7846a485418SGerd Hoffmann    audio_drv_list="oss try-sdl"
7856b4d2ba1Sths  fi
786c2de5c91Smalc  audio_possible_drivers="oss sdl"
787d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h
788d741429aSBlue Swirl  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
789d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h
790d741429aSBlue Swirl  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
791ec530c81Sbellard;;
792179cf400SAndreas FärberHaiku)
793179cf400SAndreas Färber  haiku="yes"
794cde99253SThomas Huth  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
795179cf400SAndreas Färber;;
796898be3e0SPeter MaydellLinux)
7977183834aSGerd Hoffmann  audio_drv_list="try-pa oss"
7980bac1111SKővágó, Zoltán  audio_possible_drivers="oss alsa sdl pa"
7995327cf48Sbellard  linux="yes"
800831b7825Sths  linux_user="yes"
801d88618f7SStefan Hajnoczi  vhost_user="yes"
802898be3e0SPeter Maydell;;
8037d13299dSbellardesac
8047d13299dSbellard
8057d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
806b1a550a0Spbrook  if [ "$darwin" != "yes" ] ; then
80784778508Sblueswir1    bsd_user="yes"
8087d3505c5Sbellard  fi
80908de3949SAndreas Färberfi
8107d3505c5Sbellard
8110db4a067SPaolo Bonzini: ${make=${MAKE-make}}
812b6daf4d3SPaolo Bonzini
813faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally
814faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so
815ddf90699SEduardo Habkost# we check that too
816faf44142SDaniel P. Berrangépython=
8170a01d76fSMarc-André Lureauexplicit_python=no
818ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python
819faf44142SDaniel P. Berrangédo
820faf44142SDaniel P. Berrangé    if has "$binary"
821faf44142SDaniel P. Berrangé    then
82295c5f2deSPaolo Bonzini        python=$(command -v "$binary")
823faf44142SDaniel P. Berrangé        break
824faf44142SDaniel P. Berrangé    fi
825faf44142SDaniel P. Berrangédone
826903458c8SMarkus Armbruster
827903458c8SMarkus Armbruster
82839d87c8cSAlex Bennée# Check for ancillary tools used in testing
82939d87c8cSAlex Bennéegenisoimage=
8303df437c7SAlex Bennéefor binary in genisoimage mkisofs
83139d87c8cSAlex Bennéedo
83239d87c8cSAlex Bennée    if has $binary
83339d87c8cSAlex Bennée    then
83439d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
83539d87c8cSAlex Bennée        break
83639d87c8cSAlex Bennée    fi
83739d87c8cSAlex Bennéedone
83839d87c8cSAlex Bennée
839e2d8830eSBrad: ${smbd=${SMBD-/usr/sbin/smbd}}
8400db4a067SPaolo Bonzini
8413c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
8423c4a4d0dSPeter Maydellif has clang; then
8433c4a4d0dSPeter Maydell  objcc=clang
8443c4a4d0dSPeter Maydellelse
8453c4a4d0dSPeter Maydell  objcc="$cc"
8463c4a4d0dSPeter Maydellfi
8473c4a4d0dSPeter Maydell
8483457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
8493457a3f8SJuan Quintela  EXESUF=".exe"
850484e2cc7SPaolo Bonzini  HOST_DSOSUF=".dll"
85178e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
8525770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
85393b25869SJohn Snow  write_c_skeleton;
854d17f305aSPaolo Bonzini  prefix="/qemu"
85577433a5fSMarc-André Lureau  qemu_suffix=""
856105fad6bSBishara AbuHattoum  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
8573457a3f8SJuan Quintelafi
8583457a3f8SJuan Quintela
859487fefdbSAnthony Liguoriwerror=""
86085aa5189Sbellard
8617d13299dSbellardfor opt do
86289138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
8637d13299dSbellard  case "$opt" in
8642efc3265Sbellard  --help|-h) show_help=yes
8652efc3265Sbellard  ;;
86699123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
86799123e13SMike Frysinger  ;;
868b1a550a0Spbrook  --prefix=*) prefix="$optarg"
8697d13299dSbellard  ;;
870b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
87132ce6337Sbellard  ;;
872ac0df51dSaliguori  --cross-prefix=*)
8737d13299dSbellard  ;;
874ac0df51dSaliguori  --cc=*)
8757d13299dSbellard  ;;
876b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
87783469015Sbellard  ;;
87883f73fceSTomoki Sekiyama  --cxx=*)
87983f73fceSTomoki Sekiyama  ;;
880e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
881e007dbecSMichael S. Tsirkin  ;;
8823c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
8833c4a4d0dSPeter Maydell  ;;
884b1a550a0Spbrook  --make=*) make="$optarg"
8857d13299dSbellard  ;;
886b6daf4d3SPaolo Bonzini  --install=*)
8876a882643Spbrook  ;;
8880a01d76fSMarc-André Lureau  --python=*) python="$optarg" ; explicit_python=yes
889c886edfbSBlue Swirl  ;;
8902eb054c2SPeter Maydell  --sphinx-build=*) sphinx_build="$optarg"
8912eb054c2SPeter Maydell  ;;
892a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
893a5665051SPaolo Bonzini  ;;
894a5665051SPaolo Bonzini  --meson=*) meson="$optarg"
895a5665051SPaolo Bonzini  ;;
89648328880SPaolo Bonzini  --ninja=*) ninja="$optarg"
89748328880SPaolo Bonzini  ;;
898e2d8830eSBrad  --smbd=*) smbd="$optarg"
899e2d8830eSBrad  ;;
900e2a2ed06SJuan Quintela  --extra-cflags=*)
9017d13299dSbellard  ;;
90211cde1c8SBruno Dominguez  --extra-cxxflags=*)
90311cde1c8SBruno Dominguez  ;;
904e2a2ed06SJuan Quintela  --extra-ldflags=*)
9057d13299dSbellard  ;;
9065bc62e01SGerd Hoffmann  --enable-debug-info)
9075bc62e01SGerd Hoffmann  ;;
9085bc62e01SGerd Hoffmann  --disable-debug-info)
9095bc62e01SGerd Hoffmann  ;;
910d75402b5SAlex Bennée  --cross-cc-*)
911d75402b5SAlex Bennée  ;;
91217969268SFam Zheng  --enable-modules)
91317969268SFam Zheng      modules="yes"
91417969268SFam Zheng  ;;
9153aa88b31SStefan Hajnoczi  --disable-modules)
9163aa88b31SStefan Hajnoczi      modules="no"
9173aa88b31SStefan Hajnoczi  ;;
918bd83c861SChristian Ehrhardt  --disable-module-upgrades) module_upgrades="no"
919bd83c861SChristian Ehrhardt  ;;
920bd83c861SChristian Ehrhardt  --enable-module-upgrades) module_upgrades="yes"
921bd83c861SChristian Ehrhardt  ;;
9222ff6b91eSJuan Quintela  --cpu=*)
9237d13299dSbellard  ;;
924b1a550a0Spbrook  --target-list=*) target_list="$optarg"
925447e133fSAlex Bennée                   if test "$target_list_exclude"; then
926447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
927447e133fSAlex Bennée                   fi
928447e133fSAlex Bennée  ;;
929447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
930447e133fSAlex Bennée                   if test "$target_list"; then
931447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
932447e133fSAlex Bennée                   fi
933de83cd02Sbellard  ;;
9345b808275SLluís Vilanova  --enable-trace-backends=*) trace_backends="$optarg"
9355b808275SLluís Vilanova  ;;
9365b808275SLluís Vilanova  # XXX: backwards compatibility
9375b808275SLluís Vilanova  --enable-trace-backend=*) trace_backends="$optarg"
93894a420b1SStefan Hajnoczi  ;;
93974242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
9409410b56cSPrerna Saxena  ;;
941f3494749SPaolo Bonzini  --with-default-devices) default_devices="yes"
942f3494749SPaolo Bonzini  ;;
943f3494749SPaolo Bonzini  --without-default-devices) default_devices="no"
944f3494749SPaolo Bonzini  ;;
9457d13299dSbellard  --enable-gprof) gprof="yes"
9467d13299dSbellard  ;;
9471d728c39SBlue Swirl  --enable-gcov) gcov="yes"
9481d728c39SBlue Swirl  ;;
94979427693SLoïc Minier  --static)
95079427693SLoïc Minier    static="yes"
95117884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
95243ce4dfeSbellard  ;;
9530b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
9540b24e75fSPaolo Bonzini  ;;
9550b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
9560b24e75fSPaolo Bonzini  ;;
9573aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
9583aa5d2beSAlon Levy  ;;
9598bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
9608bf188aaSMichael Tokarev  ;;
9610f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
9620f94d6daSAlon Levy  ;;
963528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
9640b24e75fSPaolo Bonzini  ;;
96577433a5fSMarc-André Lureau  --with-suffix=*) qemu_suffix="$optarg"
966023d3d67SEduardo Habkost  ;;
967c6502638SBruce Rogers  --docdir=*) docdir="$optarg"
9680b24e75fSPaolo Bonzini  ;;
969fe0038beSPaolo Bonzini  --localedir=*) localedir="$optarg"
970fe0038beSPaolo 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=*|\
980fe0038beSPaolo Bonzini  --oldincludedir=*|--datarootdir=*|--infodir=*|\
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  ;;
10035c53015aSPaolo Bonzini  --disable-libudev) libudev="disabled"
10045c53015aSPaolo Bonzini  ;;
10055c53015aSPaolo Bonzini  --enable-libudev) libudev="enabled"
10065c53015aSPaolo Bonzini  ;;
1007cece116cSMisono Tomohiro  --disable-virtiofsd) virtiofsd="disabled"
1008cece116cSMisono Tomohiro  ;;
1009cece116cSMisono Tomohiro  --enable-virtiofsd) virtiofsd="enabled"
1010cece116cSMisono Tomohiro  ;;
10116ec0e15dSPaolo Bonzini  --disable-mpath) mpath="disabled"
1012fe8fc5aeSPaolo Bonzini  ;;
10136ec0e15dSPaolo Bonzini  --enable-mpath) mpath="enabled"
1014fe8fc5aeSPaolo Bonzini  ;;
1015a0b93237SPaolo Bonzini  --disable-vnc) vnc="disabled"
1016821601eaSJes Sorensen  ;;
1017a0b93237SPaolo Bonzini  --enable-vnc) vnc="enabled"
1018821601eaSJes Sorensen  ;;
1019*0e8e77d4SAlex Bennée  --disable-gettext) gettext="disabled"
1020e8f3bd71SMarc-André Lureau  ;;
1021*0e8e77d4SAlex Bennée  --enable-gettext) gettext="enabled"
1022e8f3bd71SMarc-André Lureau  ;;
10232f6a1ab0Sblueswir1  --oss-lib=*) oss_lib="$optarg"
10242f6a1ab0Sblueswir1  ;;
10250c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
10260c58ac1cSmalc  ;;
102789138857SStefan Weil  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1028b64ec4e4SFam Zheng  ;;
102989138857SStefan Weil  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1030eb852011SMarkus Armbruster  ;;
1031f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
1032f8393946Saurel32  ;;
1033f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
1034f8393946Saurel32  ;;
1035f3d08ee6SPaul Brook  --enable-debug)
1036f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
1037f3d08ee6SPaul Brook      debug_tcg="yes"
10381fcc6d42SPeter Xu      debug_mutex="yes"
1039f3d08ee6SPaul Brook      debug="yes"
1040f3d08ee6SPaul Brook      strip_opt="no"
1041b553a042SJohn Snow      fortify_source="no"
1042f3d08ee6SPaul Brook  ;;
1043247724cbSMarc-André Lureau  --enable-sanitizers) sanitizers="yes"
1044247724cbSMarc-André Lureau  ;;
1045247724cbSMarc-André Lureau  --disable-sanitizers) sanitizers="no"
1046247724cbSMarc-André Lureau  ;;
10470aebab04SLingfeng Yang  --enable-tsan) tsan="yes"
10480aebab04SLingfeng Yang  ;;
10490aebab04SLingfeng Yang  --disable-tsan) tsan="no"
10500aebab04SLingfeng Yang  ;;
1051deb62371SPaolo Bonzini  --enable-sparse) sparse="enabled"
105203b4fe7dSaliguori  ;;
1053deb62371SPaolo Bonzini  --disable-sparse) sparse="disabled"
105403b4fe7dSaliguori  ;;
10551625af87Saliguori  --disable-strip) strip_opt="no"
10561625af87Saliguori  ;;
1057a0b93237SPaolo Bonzini  --disable-vnc-sasl) vnc_sasl="disabled"
10582f9606b3Saliguori  ;;
1059a0b93237SPaolo Bonzini  --enable-vnc-sasl) vnc_sasl="enabled"
1060ea784e3bSJuan Quintela  ;;
1061a0b93237SPaolo Bonzini  --disable-vnc-jpeg) vnc_jpeg="disabled"
10622f6f5c7aSCorentin Chary  ;;
1063a0b93237SPaolo Bonzini  --enable-vnc-jpeg) vnc_jpeg="enabled"
10642f6f5c7aSCorentin Chary  ;;
1065a0b93237SPaolo Bonzini  --disable-vnc-png) vnc_png="disabled"
1066efe556adSCorentin Chary  ;;
1067a0b93237SPaolo Bonzini  --enable-vnc-png) vnc_png="enabled"
1068efe556adSCorentin Chary  ;;
10694d34a86bSPaolo Bonzini  --disable-slirp) slirp="disabled"
1070c20709aaSbellard  ;;
10714d34a86bSPaolo Bonzini  --enable-slirp=git) slirp="internal"
10727c57bdd8SMarc-André Lureau  ;;
1073675b9b53SMarc-André Lureau  --enable-slirp=system) slirp="system"
1074675b9b53SMarc-André Lureau  ;;
1075e0e6c8c0Saliguori  --disable-vde) vde="no"
10768a16d273Sths  ;;
1077dfb278bdSJuan Quintela  --enable-vde) vde="yes"
1078dfb278bdSJuan Quintela  ;;
107958952137SVincenzo Maffione  --disable-netmap) netmap="no"
108058952137SVincenzo Maffione  ;;
108158952137SVincenzo Maffione  --enable-netmap) netmap="yes"
108258952137SVincenzo Maffione  ;;
10831badb709SPaolo Bonzini  --disable-xen) xen="disabled"
1084e37630caSaliguori  ;;
10851badb709SPaolo Bonzini  --enable-xen) xen="enabled"
1086fc321b4bSJuan Quintela  ;;
10871badb709SPaolo Bonzini  --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1088eb6fda0fSAnthony PERARD  ;;
10891badb709SPaolo Bonzini  --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1090eb6fda0fSAnthony PERARD  ;;
10912e4d9fb1Saurel32  --disable-brlapi) brlapi="no"
10922e4d9fb1Saurel32  ;;
10934ffcedb6SJuan Quintela  --enable-brlapi) brlapi="yes"
10944ffcedb6SJuan Quintela  ;;
10951badb709SPaolo Bonzini  --disable-kvm) kvm="disabled"
10967ba1e619Saliguori  ;;
10971badb709SPaolo Bonzini  --enable-kvm) kvm="enabled"
1098b31a0277SJuan Quintela  ;;
10991badb709SPaolo Bonzini  --disable-hax) hax="disabled"
1100180fb750Szhanghailiang  ;;
11011badb709SPaolo Bonzini  --enable-hax) hax="enabled"
1102180fb750Szhanghailiang  ;;
11031badb709SPaolo Bonzini  --disable-hvf) hvf="disabled"
1104c97d6d2cSSergio Andres Gomez Del Real  ;;
11051badb709SPaolo Bonzini  --enable-hvf) hvf="enabled"
1106c97d6d2cSSergio Andres Gomez Del Real  ;;
11071badb709SPaolo Bonzini  --disable-whpx) whpx="disabled"
1108d661d9a4SJustin Terry (VM)  ;;
11091badb709SPaolo Bonzini  --enable-whpx) whpx="enabled"
1110d661d9a4SJustin Terry (VM)  ;;
11119195b2c2SStefan Weil  --disable-tcg-interpreter) tcg_interpreter="no"
11129195b2c2SStefan Weil  ;;
11139195b2c2SStefan Weil  --enable-tcg-interpreter) tcg_interpreter="yes"
11149195b2c2SStefan Weil  ;;
111547e98658SCorey Bryant  --disable-cap-ng)  cap_ng="no"
111647e98658SCorey Bryant  ;;
111747e98658SCorey Bryant  --enable-cap-ng) cap_ng="yes"
111847e98658SCorey Bryant  ;;
11191badb709SPaolo Bonzini  --disable-tcg) tcg="disabled"
1120b3f6ea7eSPaolo Bonzini  ;;
11211badb709SPaolo Bonzini  --enable-tcg) tcg="enabled"
1122b3f6ea7eSPaolo Bonzini  ;;
1123aa087962SPaolo Bonzini  --disable-malloc-trim) malloc_trim="disabled"
11245a22ab71SYang Zhong  ;;
1125aa087962SPaolo Bonzini  --enable-malloc-trim) malloc_trim="enabled"
11265a22ab71SYang Zhong  ;;
1127cd4ec0b4SGerd Hoffmann  --disable-spice) spice="no"
1128cd4ec0b4SGerd Hoffmann  ;;
1129cd4ec0b4SGerd Hoffmann  --enable-spice) spice="yes"
1130cd4ec0b4SGerd Hoffmann  ;;
1131c589b249SRonnie Sahlberg  --disable-libiscsi) libiscsi="no"
1132c589b249SRonnie Sahlberg  ;;
1133c589b249SRonnie Sahlberg  --enable-libiscsi) libiscsi="yes"
1134c589b249SRonnie Sahlberg  ;;
11356542aa9cSPeter Lieven  --disable-libnfs) libnfs="no"
11366542aa9cSPeter Lieven  ;;
11376542aa9cSPeter Lieven  --enable-libnfs) libnfs="yes"
11386542aa9cSPeter Lieven  ;;
113905c2a3e7Sbellard  --enable-profiler) profiler="yes"
114005c2a3e7Sbellard  ;;
1141b4e312e9SPaolo Bonzini  --disable-cocoa) cocoa="disabled"
114214821030SPavel Borzenkov  ;;
1143c2de5c91Smalc  --enable-cocoa)
1144b4e312e9SPaolo Bonzini      cocoa="enabled" ;
114589138857SStefan Weil      audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
11465b0753e0Sbellard  ;;
1147cad25d69Spbrook  --disable-system) softmmu="no"
11480a8e90f4Spbrook  ;;
1149cad25d69Spbrook  --enable-system) softmmu="yes"
11500a8e90f4Spbrook  ;;
11510953a80fSZachary Amsden  --disable-user)
11520953a80fSZachary Amsden      linux_user="no" ;
11530953a80fSZachary Amsden      bsd_user="no" ;
11540953a80fSZachary Amsden  ;;
11550953a80fSZachary Amsden  --enable-user) ;;
1156831b7825Sths  --disable-linux-user) linux_user="no"
11570a8e90f4Spbrook  ;;
1158831b7825Sths  --enable-linux-user) linux_user="yes"
1159831b7825Sths  ;;
116084778508Sblueswir1  --disable-bsd-user) bsd_user="no"
116184778508Sblueswir1  ;;
116284778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
116384778508Sblueswir1  ;;
116440d6444eSAvi Kivity  --enable-pie) pie="yes"
116534005a00SKirill A. Shutemov  ;;
116640d6444eSAvi Kivity  --disable-pie) pie="no"
116734005a00SKirill A. Shutemov  ;;
116885aa5189Sbellard  --enable-werror) werror="yes"
116985aa5189Sbellard  ;;
117085aa5189Sbellard  --disable-werror) werror="no"
117185aa5189Sbellard  ;;
117263678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
117363678e17SSteven Noonan  ;;
117463678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
117563678e17SSteven Noonan  ;;
11761e4f6065SDaniele Buono  --enable-safe-stack) safe_stack="yes"
11771e4f6065SDaniele Buono  ;;
11781e4f6065SDaniele Buono  --disable-safe-stack) safe_stack="no"
11791e4f6065SDaniele Buono  ;;
11805285e593SYonggang Luo  --disable-curses) curses="disabled"
11814d3b6f6eSbalrog  ;;
11825285e593SYonggang Luo  --enable-curses) curses="enabled"
1183c584a6d0SJuan Quintela  ;;
11845285e593SYonggang Luo  --disable-iconv) iconv="disabled"
1185e08bb301SSamuel Thibault  ;;
11865285e593SYonggang Luo  --enable-iconv) iconv="enabled"
1187e08bb301SSamuel Thibault  ;;
1188769ce76dSAlexander Graf  --disable-curl) curl="no"
1189769ce76dSAlexander Graf  ;;
1190788c8196SJuan Quintela  --enable-curl) curl="yes"
1191788c8196SJuan Quintela  ;;
1192fbb4121dSPaolo Bonzini  --disable-fdt) fdt="disabled"
11932df87df7SJuan Quintela  ;;
1194fbb4121dSPaolo Bonzini  --enable-fdt) fdt="enabled"
1195fbb4121dSPaolo Bonzini  ;;
1196fbb4121dSPaolo Bonzini  --enable-fdt=git) fdt="internal"
1197fbb4121dSPaolo Bonzini  ;;
1198fbb4121dSPaolo Bonzini  --enable-fdt=system) fdt="system"
11992df87df7SJuan Quintela  ;;
12005c6c3a6cSChristoph Hellwig  --disable-linux-aio) linux_aio="no"
12015c6c3a6cSChristoph Hellwig  ;;
12025c6c3a6cSChristoph Hellwig  --enable-linux-aio) linux_aio="yes"
12035c6c3a6cSChristoph Hellwig  ;;
1204c10dd856SAarushi Mehta  --disable-linux-io-uring) linux_io_uring="no"
1205c10dd856SAarushi Mehta  ;;
1206c10dd856SAarushi Mehta  --enable-linux-io-uring) linux_io_uring="yes"
1207c10dd856SAarushi Mehta  ;;
1208758e8e38SVenkateswararao Jujjuri (JV)  --disable-attr) attr="no"
1209758e8e38SVenkateswararao Jujjuri (JV)  ;;
1210758e8e38SVenkateswararao Jujjuri (JV)  --enable-attr) attr="yes"
1211758e8e38SVenkateswararao Jujjuri (JV)  ;;
1212a40161cbSPaolo Bonzini  --disable-membarrier) membarrier="no"
1213a40161cbSPaolo Bonzini  ;;
1214a40161cbSPaolo Bonzini  --enable-membarrier) membarrier="yes"
1215a40161cbSPaolo Bonzini  ;;
1216c8d5450bSPaolo Bonzini  --disable-blobs) blobs="false"
121777755340Sths  ;;
12187e563bfbSThomas Huth  --with-pkgversion=*) pkgversion="$optarg"
12194a19f1ecSpbrook  ;;
1220519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
1221519175a2SAlex Barcelo  ;;
122270c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
122370c60c08SStefan Hajnoczi  ;;
122470c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
122570c60c08SStefan Hajnoczi  ;;
12267d992e4dSPeter Lieven  --enable-debug-stack-usage) debug_stack_usage="yes"
12277d992e4dSPeter Lieven  ;;
1228f0d92b56SLongpeng(Mike)  --enable-crypto-afalg) crypto_afalg="yes"
1229f0d92b56SLongpeng(Mike)  ;;
1230f0d92b56SLongpeng(Mike)  --disable-crypto-afalg) crypto_afalg="no"
1231f0d92b56SLongpeng(Mike)  ;;
1232e3667660SYonggang Luo  --disable-docs) docs="disabled"
123370ec5dc0SAnthony Liguori  ;;
1234e3667660SYonggang Luo  --enable-docs) docs="enabled"
123583a3ab8bSJuan Quintela  ;;
1236d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
1237d5970055SMichael S. Tsirkin  ;;
1238d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
1239d5970055SMichael S. Tsirkin  ;;
1240042cea27SGonglei  --disable-vhost-crypto) vhost_crypto="no"
1241042cea27SGonglei  ;;
1242299e6f19SPaolo Bonzini  --enable-vhost-crypto) vhost_crypto="yes"
1243042cea27SGonglei  ;;
12445e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
12455e9be92dSNicholas Bellinger  ;;
12465e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
12475e9be92dSNicholas Bellinger  ;;
1248fc0b9b0eSStefan Hajnoczi  --disable-vhost-vsock) vhost_vsock="no"
1249fc0b9b0eSStefan Hajnoczi  ;;
1250fc0b9b0eSStefan Hajnoczi  --enable-vhost-vsock) vhost_vsock="yes"
1251fc0b9b0eSStefan Hajnoczi  ;;
1252e5e856c1SStefan Hajnoczi  --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
1253bc15e44cSStefan Hajnoczi  ;;
1254e5e856c1SStefan Hajnoczi  --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
1255bc15e44cSStefan Hajnoczi  ;;
125698fc1adaSDr. David Alan Gilbert  --disable-vhost-user-fs) vhost_user_fs="no"
125798fc1adaSDr. David Alan Gilbert  ;;
125898fc1adaSDr. David Alan Gilbert  --enable-vhost-user-fs) vhost_user_fs="yes"
125998fc1adaSDr. David Alan Gilbert  ;;
1260da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
126120ff075bSMichael Walle  ;;
1262da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
126320ff075bSMichael Walle  ;;
1264f27aaf4bSChristian Brunner  --disable-rbd) rbd="no"
1265f27aaf4bSChristian Brunner  ;;
1266f27aaf4bSChristian Brunner  --enable-rbd) rbd="yes"
1267f27aaf4bSChristian Brunner  ;;
12688c84cf11SSergei Trofimovich  --disable-xfsctl) xfs="no"
12698c84cf11SSergei Trofimovich  ;;
12708c84cf11SSergei Trofimovich  --enable-xfsctl) xfs="yes"
12718c84cf11SSergei Trofimovich  ;;
12727b02f544SMarc-André Lureau  --disable-smartcard) smartcard="no"
1273111a38b0SRobert Relyea  ;;
12747b02f544SMarc-André Lureau  --enable-smartcard) smartcard="yes"
1275111a38b0SRobert Relyea  ;;
12760a40bcb7SCésar Belley  --disable-u2f) u2f="disabled"
12770a40bcb7SCésar Belley  ;;
12780a40bcb7SCésar Belley  --enable-u2f) u2f="enabled"
12790a40bcb7SCésar Belley  ;;
12802b2325ffSGerd Hoffmann  --disable-libusb) libusb="no"
12812b2325ffSGerd Hoffmann  ;;
12822b2325ffSGerd Hoffmann  --enable-libusb) libusb="yes"
12832b2325ffSGerd Hoffmann  ;;
128469354a83SHans de Goede  --disable-usb-redir) usb_redir="no"
128569354a83SHans de Goede  ;;
128669354a83SHans de Goede  --enable-usb-redir) usb_redir="yes"
128769354a83SHans de Goede  ;;
12881ffb3bbbSPaolo Bonzini  --disable-zlib-test)
12891ece9905SAlon Levy  ;;
1290b25c9dffSStefan Weil  --disable-lzo) lzo="no"
1291b25c9dffSStefan Weil  ;;
1292607dacd0Sqiaonuohan  --enable-lzo) lzo="yes"
1293607dacd0Sqiaonuohan  ;;
1294b25c9dffSStefan Weil  --disable-snappy) snappy="no"
1295b25c9dffSStefan Weil  ;;
1296607dacd0Sqiaonuohan  --enable-snappy) snappy="yes"
1297607dacd0Sqiaonuohan  ;;
12986b383c08SPeter Wu  --disable-bzip2) bzip2="no"
12996b383c08SPeter Wu  ;;
13006b383c08SPeter Wu  --enable-bzip2) bzip2="yes"
13016b383c08SPeter Wu  ;;
130283bc1f97SJulio Faracco  --enable-lzfse) lzfse="yes"
130383bc1f97SJulio Faracco  ;;
130483bc1f97SJulio Faracco  --disable-lzfse) lzfse="no"
130583bc1f97SJulio Faracco  ;;
13063a678481SJuan Quintela  --disable-zstd) zstd="no"
13073a678481SJuan Quintela  ;;
13083a678481SJuan Quintela  --enable-zstd) zstd="yes"
13093a678481SJuan Quintela  ;;
1310d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1311d138cee9SMichael Roth  ;;
1312d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1313d138cee9SMichael Roth  ;;
13149dacf32dSYossi Hindin  --enable-guest-agent-msi) guest_agent_msi="yes"
13159dacf32dSYossi Hindin  ;;
13169dacf32dSYossi Hindin  --disable-guest-agent-msi) guest_agent_msi="no"
13179dacf32dSYossi Hindin  ;;
1318d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1319d9840e25STomoki Sekiyama  ;;
1320d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1321d9840e25STomoki Sekiyama  ;;
1322d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1323d9840e25STomoki Sekiyama  ;;
1324d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1325d9840e25STomoki Sekiyama  ;;
1326d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1327d9840e25STomoki Sekiyama  ;;
1328d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1329d9840e25STomoki Sekiyama  ;;
13304b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
13314b1c11fdSDaniel P. Berrange  ;;
13324b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
13334b1c11fdSDaniel P. Berrange  ;;
1334f794573eSEduardo Otubo  --enable-seccomp) seccomp="yes"
1335f794573eSEduardo Otubo  ;;
1336f794573eSEduardo Otubo  --disable-seccomp) seccomp="no"
1337f794573eSEduardo Otubo  ;;
1338eb100396SBharata B Rao  --disable-glusterfs) glusterfs="no"
1339eb100396SBharata B Rao  ;;
134086583a07SLiam Merwick  --disable-avx2) avx2_opt="no"
134186583a07SLiam Merwick  ;;
134286583a07SLiam Merwick  --enable-avx2) avx2_opt="yes"
134386583a07SLiam Merwick  ;;
13446b8cd447SRobert Hoo  --disable-avx512f) avx512f_opt="no"
13456b8cd447SRobert Hoo  ;;
13466b8cd447SRobert Hoo  --enable-avx512f) avx512f_opt="yes"
13476b8cd447SRobert Hoo  ;;
13486b8cd447SRobert Hoo
1349eb100396SBharata B Rao  --enable-glusterfs) glusterfs="yes"
1350eb100396SBharata B Rao  ;;
135152b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
135252b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1353583f6e7bSStefan Hajnoczi  ;;
1354cb6414dfSFam Zheng  --enable-vhdx|--disable-vhdx)
1355cb6414dfSFam Zheng      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1356cb6414dfSFam Zheng  ;;
1357315d3184SFam Zheng  --enable-uuid|--disable-uuid)
1358315d3184SFam Zheng      echo "$0: $opt is obsolete, UUID support is always built" >&2
1359315d3184SFam Zheng  ;;
1360a4ccabcfSAnthony Liguori  --disable-gtk) gtk="no"
1361a4ccabcfSAnthony Liguori  ;;
1362a4ccabcfSAnthony Liguori  --enable-gtk) gtk="yes"
1363a4ccabcfSAnthony Liguori  ;;
1364a1c5e949SDaniel P. Berrange  --tls-priority=*) tls_priority="$optarg"
1365a1c5e949SDaniel P. Berrange  ;;
1366ddbb0d09SDaniel P. Berrange  --disable-gnutls) gnutls="no"
1367ddbb0d09SDaniel P. Berrange  ;;
1368ddbb0d09SDaniel P. Berrange  --enable-gnutls) gnutls="yes"
1369ddbb0d09SDaniel P. Berrange  ;;
137091bfcdb0SDaniel P. Berrange  --disable-nettle) nettle="no"
137191bfcdb0SDaniel P. Berrange  ;;
137291bfcdb0SDaniel P. Berrange  --enable-nettle) nettle="yes"
137391bfcdb0SDaniel P. Berrange  ;;
137491bfcdb0SDaniel P. Berrange  --disable-gcrypt) gcrypt="no"
137591bfcdb0SDaniel P. Berrange  ;;
137691bfcdb0SDaniel P. Berrange  --enable-gcrypt) gcrypt="yes"
137791bfcdb0SDaniel P. Berrange  ;;
13788953caf3SDaniel P. Berrange  --disable-auth-pam) auth_pam="no"
13798953caf3SDaniel P. Berrange  ;;
13808953caf3SDaniel P. Berrange  --enable-auth-pam) auth_pam="yes"
13818953caf3SDaniel P. Berrange  ;;
13822da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
13832da776dbSMichael R. Hines  ;;
13842da776dbSMichael R. Hines  --disable-rdma) rdma="no"
13852da776dbSMichael R. Hines  ;;
138621ab34c9SMarcel Apfelbaum  --enable-pvrdma) pvrdma="yes"
138721ab34c9SMarcel Apfelbaum  ;;
138821ab34c9SMarcel Apfelbaum  --disable-pvrdma) pvrdma="no"
138921ab34c9SMarcel Apfelbaum  ;;
1390bbbf9bfbSStefan Weil  --disable-vte) vte="no"
1391bbbf9bfbSStefan Weil  ;;
1392bbbf9bfbSStefan Weil  --enable-vte) vte="yes"
1393bbbf9bfbSStefan Weil  ;;
13949d9e1521SGerd Hoffmann  --disable-virglrenderer) virglrenderer="no"
13959d9e1521SGerd Hoffmann  ;;
13969d9e1521SGerd Hoffmann  --enable-virglrenderer) virglrenderer="yes"
13979d9e1521SGerd Hoffmann  ;;
1398e91c793cSCole Robinson  --disable-tpm) tpm="no"
1399e91c793cSCole Robinson  ;;
1400ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1401ab214c29SStefan Berger  ;;
1402b10d49d7SPino Toscano  --disable-libssh) libssh="no"
14030a12ec87SRichard W.M. Jones  ;;
1404b10d49d7SPino Toscano  --enable-libssh) libssh="yes"
14050a12ec87SRichard W.M. Jones  ;;
1406ed1701c6SDr. David Alan Gilbert  --disable-live-block-migration) live_block_migration="no"
1407ed1701c6SDr. David Alan Gilbert  ;;
1408ed1701c6SDr. David Alan Gilbert  --enable-live-block-migration) live_block_migration="yes"
1409ed1701c6SDr. David Alan Gilbert  ;;
1410a99d57bbSWanlong Gao  --disable-numa) numa="no"
1411a99d57bbSWanlong Gao  ;;
1412a99d57bbSWanlong Gao  --enable-numa) numa="yes"
1413a99d57bbSWanlong Gao  ;;
1414ed279a06SKlim Kireev  --disable-libxml2) libxml2="no"
1415ed279a06SKlim Kireev  ;;
1416ed279a06SKlim Kireev  --enable-libxml2) libxml2="yes"
1417ed279a06SKlim Kireev  ;;
14182847b469SFam Zheng  --disable-tcmalloc) tcmalloc="no"
14192847b469SFam Zheng  ;;
14202847b469SFam Zheng  --enable-tcmalloc) tcmalloc="yes"
14212847b469SFam Zheng  ;;
14227b01cb97SAlexandre Derumier  --disable-jemalloc) jemalloc="no"
14237b01cb97SAlexandre Derumier  ;;
14247b01cb97SAlexandre Derumier  --enable-jemalloc) jemalloc="yes"
14257b01cb97SAlexandre Derumier  ;;
1426a6b1d4c0SChanglong Xie  --disable-replication) replication="no"
1427a6b1d4c0SChanglong Xie  ;;
1428a6b1d4c0SChanglong Xie  --enable-replication) replication="yes"
1429a6b1d4c0SChanglong Xie  ;;
14302f740136SJeff Cody  --disable-bochs) bochs="no"
14312f740136SJeff Cody  ;;
14322f740136SJeff Cody  --enable-bochs) bochs="yes"
14332f740136SJeff Cody  ;;
14342f740136SJeff Cody  --disable-cloop) cloop="no"
14352f740136SJeff Cody  ;;
14362f740136SJeff Cody  --enable-cloop) cloop="yes"
14372f740136SJeff Cody  ;;
14382f740136SJeff Cody  --disable-dmg) dmg="no"
14392f740136SJeff Cody  ;;
14402f740136SJeff Cody  --enable-dmg) dmg="yes"
14412f740136SJeff Cody  ;;
14422f740136SJeff Cody  --disable-qcow1) qcow1="no"
14432f740136SJeff Cody  ;;
14442f740136SJeff Cody  --enable-qcow1) qcow1="yes"
14452f740136SJeff Cody  ;;
14462f740136SJeff Cody  --disable-vdi) vdi="no"
14472f740136SJeff Cody  ;;
14482f740136SJeff Cody  --enable-vdi) vdi="yes"
14492f740136SJeff Cody  ;;
14502f740136SJeff Cody  --disable-vvfat) vvfat="no"
14512f740136SJeff Cody  ;;
14522f740136SJeff Cody  --enable-vvfat) vvfat="yes"
14532f740136SJeff Cody  ;;
14542f740136SJeff Cody  --disable-qed) qed="no"
14552f740136SJeff Cody  ;;
14562f740136SJeff Cody  --enable-qed) qed="yes"
14572f740136SJeff Cody  ;;
14582f740136SJeff Cody  --disable-parallels) parallels="no"
14592f740136SJeff Cody  ;;
14602f740136SJeff Cody  --enable-parallels) parallels="yes"
14612f740136SJeff Cody  ;;
14622f740136SJeff Cody  --disable-sheepdog) sheepdog="no"
14632f740136SJeff Cody  ;;
14642f740136SJeff Cody  --enable-sheepdog) sheepdog="yes"
14652f740136SJeff Cody  ;;
1466e6a74868SMarc-André Lureau  --disable-vhost-user) vhost_user="no"
1467e6a74868SMarc-André Lureau  ;;
1468299e6f19SPaolo Bonzini  --enable-vhost-user) vhost_user="yes"
1469299e6f19SPaolo Bonzini  ;;
1470108a6481SCindy Lu  --disable-vhost-vdpa) vhost_vdpa="no"
1471108a6481SCindy Lu  ;;
1472108a6481SCindy Lu  --enable-vhost-vdpa) vhost_vdpa="yes"
1473108a6481SCindy Lu  ;;
1474299e6f19SPaolo Bonzini  --disable-vhost-kernel) vhost_kernel="no"
1475299e6f19SPaolo Bonzini  ;;
1476299e6f19SPaolo Bonzini  --enable-vhost-kernel) vhost_kernel="yes"
1477e6a74868SMarc-André Lureau  ;;
14788b18cdbfSRichard Henderson  --disable-capstone) capstone="disabled"
14798ca80760SRichard Henderson  ;;
14808b18cdbfSRichard Henderson  --enable-capstone) capstone="enabled"
14818ca80760SRichard Henderson  ;;
14828b18cdbfSRichard Henderson  --enable-capstone=git) capstone="internal"
1483e219c499SRichard Henderson  ;;
1484e219c499SRichard Henderson  --enable-capstone=system) capstone="system"
1485e219c499SRichard Henderson  ;;
1486cc84d63aSDaniel P. Berrange  --with-git=*) git="$optarg"
1487cc84d63aSDaniel P. Berrange  ;;
1488f62bbee5SDaniel P. Berrange  --enable-git-update) git_update=yes
1489f62bbee5SDaniel P. Berrange  ;;
1490f62bbee5SDaniel P. Berrange  --disable-git-update) git_update=no
1491f62bbee5SDaniel P. Berrange  ;;
1492ba59fb77SPaolo Bonzini  --enable-debug-mutex) debug_mutex=yes
1493ba59fb77SPaolo Bonzini  ;;
1494ba59fb77SPaolo Bonzini  --disable-debug-mutex) debug_mutex=no
1495ba59fb77SPaolo Bonzini  ;;
149617824406SJunyan He  --enable-libpmem) libpmem=yes
149717824406SJunyan He  ;;
149817824406SJunyan He  --disable-libpmem) libpmem=no
149917824406SJunyan He  ;;
15004113f4cfSLaurent Vivier  --enable-xkbcommon) xkbcommon="enabled"
150175411919SJames Le Cuirot  ;;
15024113f4cfSLaurent Vivier  --disable-xkbcommon) xkbcommon="disabled"
150375411919SJames Le Cuirot  ;;
150440e8c6f4SAlex Bennée  --enable-plugins) plugins="yes"
150540e8c6f4SAlex Bennée  ;;
150640e8c6f4SAlex Bennée  --disable-plugins) plugins="no"
150740e8c6f4SAlex Bennée  ;;
1508afc3a8f9SAlex Bennée  --enable-containers) use_containers="yes"
1509afc3a8f9SAlex Bennée  ;;
1510afc3a8f9SAlex Bennée  --disable-containers) use_containers="no"
1511afc3a8f9SAlex Bennée  ;;
1512adc28027SAlexander Bulekov  --enable-fuzzing) fuzzing=yes
1513adc28027SAlexander Bulekov  ;;
1514adc28027SAlexander Bulekov  --disable-fuzzing) fuzzing=no
1515adc28027SAlexander Bulekov  ;;
1516f48e590aSAlex Bennée  --gdb=*) gdb_bin="$optarg"
1517f48e590aSAlex Bennée  ;;
1518b767d257SMarek Marczykowski-Górecki  --enable-rng-none) rng_none=yes
1519b767d257SMarek Marczykowski-Górecki  ;;
1520b767d257SMarek Marczykowski-Górecki  --disable-rng-none) rng_none=no
1521b767d257SMarek Marczykowski-Górecki  ;;
152254e7aac0SAlexey Krasikov  --enable-keyring) secret_keyring="yes"
152354e7aac0SAlexey Krasikov  ;;
152454e7aac0SAlexey Krasikov  --disable-keyring) secret_keyring="no"
152554e7aac0SAlexey Krasikov  ;;
152621b2eca6SJingqi Liu  --enable-libdaxctl) libdaxctl=yes
152721b2eca6SJingqi Liu  ;;
152821b2eca6SJingqi Liu  --disable-libdaxctl) libdaxctl=no
152921b2eca6SJingqi Liu  ;;
1530a484a719SMax Reitz  --enable-fuse) fuse="enabled"
1531a484a719SMax Reitz  ;;
1532a484a719SMax Reitz  --disable-fuse) fuse="disabled"
1533a484a719SMax Reitz  ;;
1534df4ea709SMax Reitz  --enable-fuse-lseek) fuse_lseek="enabled"
1535df4ea709SMax Reitz  ;;
1536df4ea709SMax Reitz  --disable-fuse-lseek) fuse_lseek="disabled"
1537df4ea709SMax Reitz  ;;
15382d2ad6d0SFam Zheng  *)
15392d2ad6d0SFam Zheng      echo "ERROR: unknown option $opt"
15402d2ad6d0SFam Zheng      echo "Try '$0 --help' for more information"
15412d2ad6d0SFam Zheng      exit 1
15427f1559c6Sbalrog  ;;
15437d13299dSbellard  esac
15447d13299dSbellarddone
15457d13299dSbellard
154622a87800SMarc-André Lureaulibdir="${libdir:-$prefix/lib}"
154722a87800SMarc-André Lureaulibexecdir="${libexecdir:-$prefix/libexec}"
154822a87800SMarc-André Lureauincludedir="${includedir:-$prefix/include}"
154922a87800SMarc-André Lureau
155022a87800SMarc-André Lureauif test "$mingw32" = "yes" ; then
155122a87800SMarc-André Lureau    mandir="$prefix"
155222a87800SMarc-André Lureau    datadir="$prefix"
1553ca8c0909SMarc-André Lureau    docdir="$prefix"
155422a87800SMarc-André Lureau    bindir="$prefix"
155522a87800SMarc-André Lureau    sysconfdir="$prefix"
155616bf7a33SPaolo Bonzini    local_statedir="$prefix"
155722a87800SMarc-André Lureauelse
155822a87800SMarc-André Lureau    mandir="${mandir:-$prefix/share/man}"
155922a87800SMarc-André Lureau    datadir="${datadir:-$prefix/share}"
1560ca8c0909SMarc-André Lureau    docdir="${docdir:-$prefix/share/doc}"
156122a87800SMarc-André Lureau    bindir="${bindir:-$prefix/bin}"
156222a87800SMarc-André Lureau    sysconfdir="${sysconfdir:-$prefix/etc}"
156322a87800SMarc-André Lureau    local_statedir="${local_statedir:-$prefix/var}"
156422a87800SMarc-André Lureaufi
156516bf7a33SPaolo Bonzinifirmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
156616bf7a33SPaolo Bonzinilocaledir="${localedir:-$datadir/locale}"
156722a87800SMarc-André Lureau
156840293e58Sbellardcase "$cpu" in
1569e3608d66SRichard Henderson    ppc)
1570e3608d66SRichard Henderson           CPU_CFLAGS="-m32"
1571db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1572e3608d66SRichard Henderson           ;;
1573e3608d66SRichard Henderson    ppc64)
1574e3608d66SRichard Henderson           CPU_CFLAGS="-m64"
1575db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1576e3608d66SRichard Henderson           ;;
15779b9c37c3SRichard Henderson    sparc)
1578f1079bb8SRichard Henderson           CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1579db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
15803142255cSblueswir1           ;;
1581ed968ff1SJuan Quintela    sparc64)
158279f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1583db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
15843142255cSblueswir1           ;;
158576d83bdeSths    s390)
1586061cdd81SRichard Henderson           CPU_CFLAGS="-m31"
1587db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
158828d7cc49SRichard Henderson           ;;
158928d7cc49SRichard Henderson    s390x)
1590061cdd81SRichard Henderson           CPU_CFLAGS="-m64"
1591db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
159276d83bdeSths           ;;
159340293e58Sbellard    i386)
159479f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m32"
1595db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
159640293e58Sbellard           ;;
159740293e58Sbellard    x86_64)
15987ebee43eSRichard Henderson           # ??? Only extremely old AMD cpus do not have cmpxchg16b.
15997ebee43eSRichard Henderson           # If we truly care, we should simply detect this case at
16007ebee43eSRichard Henderson           # runtime and generate the fallback to serial emulation.
16017ebee43eSRichard Henderson           CPU_CFLAGS="-m64 -mcx16"
1602db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1603379f6698SPaul Brook           ;;
1604c72b26ecSRichard Henderson    x32)
1605c72b26ecSRichard Henderson           CPU_CFLAGS="-mx32"
1606db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1607c72b26ecSRichard Henderson           ;;
160830163d89SPeter Maydell    # No special flags required for other host CPUs
16093142255cSblueswir1esac
16103142255cSblueswir1
16112038f8c8SPaolo Bonzinieval "cross_cc_${cpu}=\$host_cc"
16122038f8c8SPaolo Bonzinicross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
161379f3b12fSPeter CrosthwaiteQEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
161479f3b12fSPeter Crosthwaite
1615affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly
1616affc88ccSPeter Maydell# support, even if we're using TCI.
1617affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then
1618affc88ccSPeter Maydell  bsd_user="no"
1619affc88ccSPeter Maydell  linux_user="no"
1620affc88ccSPeter Maydellfi
1621affc88ccSPeter Maydell
162260e0df25SPeter Maydelldefault_target_list=""
1623fdb75aefSPaolo Bonzinideprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu
1624fdb75aefSPaolo Bonzinideprecated_features=""
16256e92f823SPeter Maydellmak_wilds=""
16266e92f823SPeter Maydell
162760e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
162873362fc0SPaolo Bonzini    mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
162960e0df25SPeter Maydellfi
163060e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
163173362fc0SPaolo Bonzini    mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
163260e0df25SPeter Maydellfi
163360e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
163473362fc0SPaolo Bonzini    mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
163560e0df25SPeter Maydellfi
163660e0df25SPeter Maydell
16373a5ae4a9SAlex Bennée# If the user doesn't explicitly specify a deprecated target we will
16383a5ae4a9SAlex Bennée# skip it.
16393a5ae4a9SAlex Bennéeif test -z "$target_list"; then
16403a5ae4a9SAlex Bennée    if test -z "$target_list_exclude"; then
16413a5ae4a9SAlex Bennée        target_list_exclude="$deprecated_targets_list"
16423a5ae4a9SAlex Bennée    else
16433a5ae4a9SAlex Bennée        target_list_exclude="$target_list_exclude,$deprecated_targets_list"
16443a5ae4a9SAlex Bennée    fi
16452d838d9bSAlex Bennéefi
16462d838d9bSAlex Bennée
1647447e133fSAlex Bennéefor config in $mak_wilds; do
1648447e133fSAlex Bennée    target="$(basename "$config" .mak)"
164998db9a06SAlex Bennée    if echo "$target_list_exclude" | grep -vq "$target"; then
1650447e133fSAlex Bennée        default_target_list="${default_target_list} $target"
1651447e133fSAlex Bennée    fi
1652447e133fSAlex Bennéedone
16536e92f823SPeter Maydell
1654c53eeaf7SStefan Hajnoczi# Enumerate public trace backends for --help output
165564a6047dSGreg Kurztrace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1656c53eeaf7SStefan Hajnoczi
1657af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1658af5db58eSpbrookcat << EOF
1659af5db58eSpbrook
1660af5db58eSpbrookUsage: configure [options]
1661af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1662af5db58eSpbrook
166308fb77edSStefan WeilStandard options:
166408fb77edSStefan Weil  --help                   print this message
166508fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
166608fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
166708fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
16682deca810SAlex Bennée  --target-list=LIST       set target list (default: build all non-deprecated)
166908fb77edSStefan Weil$(echo Available targets: $default_target_list | \
167008fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
16712deca810SAlex Bennée$(echo Deprecated targets: $deprecated_targets_list | \
16722deca810SAlex Bennée  fold -s -w 53 | sed -e 's/^/                           /')
1673447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
167408fb77edSStefan Weil
167508fb77edSStefan WeilAdvanced options (experts only):
167608fb77edSStefan Weil  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
167708fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
167808fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
167908fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
168008fb77edSStefan Weil                           build time
168108fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
168208fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
168308fb77edSStefan Weil  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
168411cde1c8SBruno Dominguez  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
168508fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1686d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1687d422b2bcSAlex Bennée  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
168808fb77edSStefan Weil  --make=MAKE              use specified make [$make]
168908fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
16902eb054c2SPeter Maydell  --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1691a5665051SPaolo Bonzini  --meson=MESON            use specified meson [$meson]
169248328880SPaolo Bonzini  --ninja=NINJA            use specified ninja [$ninja]
169308fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1694db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
169508fb77edSStefan Weil  --static                 enable static build [$static]
169608fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
169710ff82d1SMarc-André Lureau  --datadir=PATH           install firmware in PATH/$qemu_suffix
1698fe0038beSPaolo Bonzini  --localedir=PATH         install translation in PATH/$qemu_suffix
169910ff82d1SMarc-André Lureau  --docdir=PATH            install documentation in PATH/$qemu_suffix
170008fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
170108fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
1702db1b5f13SThomas Huth  --libexecdir=PATH        install helper binaries in PATH
170310ff82d1SMarc-André Lureau  --sysconfdir=PATH        install config in PATH/$qemu_suffix
170408fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
17053d5eecabSGerd Hoffmann  --firmwarepath=PATH      search PATH for firmware files
170613336606SRobert Foley  --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1707ca8c0909SMarc-André Lureau  --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1708db1b5f13SThomas Huth  --with-pkgversion=VERS   use specified string as sub-version of the package
170908fb77edSStefan Weil  --enable-debug           enable common debug build options
1710247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
17110aebab04SLingfeng Yang  --enable-tsan            enable thread sanitizer
171208fb77edSStefan Weil  --disable-strip          disable stripping binaries
171308fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
171463678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
171508fb77edSStefan Weil  --audio-drv-list=LIST    set audio drivers list:
171608fb77edSStefan Weil                           Available drivers: $audio_possible_drivers
171708fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
171808fb77edSStefan Weil  --block-drv-rw-whitelist=L
171908fb77edSStefan Weil                           set block driver read-write whitelist
172008fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
172108fb77edSStefan Weil  --block-drv-ro-whitelist=L
172208fb77edSStefan Weil                           set block driver read-only whitelist
172308fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
17245b808275SLluís Vilanova  --enable-trace-backends=B Set trace backend
1725c53eeaf7SStefan Hajnoczi                           Available backends: $trace_backend_list
172608fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
172708fb77edSStefan Weil                           Default:trace-<pid>
1728c23f23b9SMichael Tokarev  --disable-slirp          disable SLIRP userspace network connectivity
1729c23f23b9SMichael Tokarev  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
17305a22ab71SYang Zhong  --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1731c23f23b9SMichael Tokarev  --oss-lib                path to OSS library
1732c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
173308fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
173433c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
173508fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
1736c23f23b9SMichael Tokarev  --disable-blobs          disable installing provided firmware blobs
1737c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1738c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1739a1c5e949SDaniel P. Berrange  --tls-priority           default TLS protocol/cipher priority string
1740c12d66aaSLin Ma  --enable-gprof           QEMU profiling with gprof
1741c12d66aaSLin Ma  --enable-profiler        profiler support
1742c12d66aaSLin Ma  --enable-debug-stack-usage
1743c12d66aaSLin Ma                           track the maximum stack usage of stacks created by qemu_alloc_stack
174440e8c6f4SAlex Bennée  --enable-plugins
174540e8c6f4SAlex Bennée                           enable plugins via shared library loading
1746afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
1747f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
1748c23f23b9SMichael Tokarev
1749c23f23b9SMichael TokarevOptional features, enabled with --enable-FEATURE and
1750c23f23b9SMichael Tokarevdisabled with --disable-FEATURE, default is enabled if available:
1751c23f23b9SMichael Tokarev
1752c23f23b9SMichael Tokarev  system          all system emulation targets
1753c23f23b9SMichael Tokarev  user            supported user emulation targets
1754c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1755c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1756c23f23b9SMichael Tokarev  docs            build documentation
1757c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1758c23f23b9SMichael Tokarev  guest-agent-msi build guest agent Windows MSI installation package
1759c23f23b9SMichael Tokarev  pie             Position Independent Executables
176021e709aaSMarc-André Lureau  modules         modules support (non-Windows)
1761bd83c861SChristian Ehrhardt  module-upgrades try to load modules from alternate paths for upgrades
1762c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1763c23f23b9SMichael Tokarev  debug-info      debugging information
1764c23f23b9SMichael Tokarev  sparse          sparse checker
17651e4f6065SDaniele Buono  safe-stack      SafeStack Stack Smash Protection. Depends on
17661e4f6065SDaniele Buono                  clang/llvm >= 3.7 and requires coroutine backend ucontext.
1767c23f23b9SMichael Tokarev
1768ddbb0d09SDaniel P. Berrange  gnutls          GNUTLS cryptography support
176991bfcdb0SDaniel P. Berrange  nettle          nettle cryptography support
177091bfcdb0SDaniel P. Berrange  gcrypt          libgcrypt cryptography support
17718953caf3SDaniel P. Berrange  auth-pam        PAM access control
1772c23f23b9SMichael Tokarev  sdl             SDL UI
177304c6e16fSMarkus Armbruster  sdl-image       SDL Image support for icons
1774c23f23b9SMichael Tokarev  gtk             gtk UI
1775c23f23b9SMichael Tokarev  vte             vte support for the gtk UI
1776c23f23b9SMichael Tokarev  curses          curses UI
1777e08bb301SSamuel Thibault  iconv           font glyph conversion support
1778c23f23b9SMichael Tokarev  vnc             VNC UI support
1779c23f23b9SMichael Tokarev  vnc-sasl        SASL encryption for VNC server
1780c23f23b9SMichael Tokarev  vnc-jpeg        JPEG lossy compression for VNC server
1781c23f23b9SMichael Tokarev  vnc-png         PNG compression for VNC server
1782c23f23b9SMichael Tokarev  cocoa           Cocoa UI (Mac OS X only)
1783c23f23b9SMichael Tokarev  virtfs          VirtFS
1784cece116cSMisono Tomohiro  virtiofsd       build virtiofs daemon (virtiofsd)
17855c53015aSPaolo Bonzini  libudev         Use libudev to enumerate host devices
1786fe8fc5aeSPaolo Bonzini  mpath           Multipath persistent reservation passthrough
1787c23f23b9SMichael Tokarev  xen             xen backend driver support
178870c292afSAnthony PERARD  xen-pci-passthrough    PCI passthrough support for Xen
1789c23f23b9SMichael Tokarev  brlapi          BrlAPI (Braile)
1790c23f23b9SMichael Tokarev  curl            curl connectivity
1791a40161cbSPaolo Bonzini  membarrier      membarrier system call (for Linux 4.14+ or Windows)
1792c23f23b9SMichael Tokarev  fdt             fdt device tree
1793c23f23b9SMichael Tokarev  kvm             KVM acceleration support
1794b0cb0a66SVincent Palatin  hax             HAX acceleration support
1795c97d6d2cSSergio Andres Gomez Del Real  hvf             Hypervisor.framework acceleration support
1796d661d9a4SJustin Terry (VM)  whpx            Windows Hypervisor Platform acceleration support
179721ab34c9SMarcel Apfelbaum  rdma            Enable RDMA-based migration
179821ab34c9SMarcel Apfelbaum  pvrdma          Enable PVRDMA support
1799c23f23b9SMichael Tokarev  vde             support for vde network
1800c23f23b9SMichael Tokarev  netmap          support for netmap network
1801c23f23b9SMichael Tokarev  linux-aio       Linux AIO support
1802c10dd856SAarushi Mehta  linux-io-uring  Linux io_uring support
1803c23f23b9SMichael Tokarev  cap-ng          libcap-ng support
1804c23f23b9SMichael Tokarev  attr            attr and xattr support
1805299e6f19SPaolo Bonzini  vhost-net       vhost-net kernel acceleration support
1806299e6f19SPaolo Bonzini  vhost-vsock     virtio sockets device support
1807299e6f19SPaolo Bonzini  vhost-scsi      vhost-scsi kernel target support
1808299e6f19SPaolo Bonzini  vhost-crypto    vhost-user-crypto backend support
1809299e6f19SPaolo Bonzini  vhost-kernel    vhost kernel backend support
1810299e6f19SPaolo Bonzini  vhost-user      vhost-user backend support
1811bc15e44cSStefan Hajnoczi  vhost-user-blk-server    vhost-user-blk server support
1812108a6481SCindy Lu  vhost-vdpa      vhost-vdpa kernel backend support
1813c23f23b9SMichael Tokarev  spice           spice
1814c23f23b9SMichael Tokarev  rbd             rados block device (rbd)
1815c23f23b9SMichael Tokarev  libiscsi        iscsi support
1816c23f23b9SMichael Tokarev  libnfs          nfs support
18177b02f544SMarc-André Lureau  smartcard       smartcard support (libcacard)
18180a40bcb7SCésar Belley  u2f             U2F support (u2f-emu)
1819c23f23b9SMichael Tokarev  libusb          libusb (for usb passthrough)
1820ed1701c6SDr. David Alan Gilbert  live-block-migration   Block migration in the main migration stream
1821c23f23b9SMichael Tokarev  usb-redir       usb network redirection support
1822c23f23b9SMichael Tokarev  lzo             support of lzo compression library
1823c23f23b9SMichael Tokarev  snappy          support of snappy compression library
1824c23f23b9SMichael Tokarev  bzip2           support of bzip2 compression library
1825c23f23b9SMichael Tokarev                  (for reading bzip2-compressed dmg images)
182683bc1f97SJulio Faracco  lzfse           support of lzfse compression library
182783bc1f97SJulio Faracco                  (for reading lzfse-compressed dmg images)
18283a678481SJuan Quintela  zstd            support for zstd compression library
1829d298ac10SDenis Plotnikov                  (for migration compression and qcow2 cluster compression)
1830c23f23b9SMichael Tokarev  seccomp         seccomp support
1831c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1832c23f23b9SMichael Tokarev  glusterfs       GlusterFS backend
1833c23f23b9SMichael Tokarev  tpm             TPM support
1834b10d49d7SPino Toscano  libssh          ssh block device support
1835c23f23b9SMichael Tokarev  numa            libnuma support
1836ed279a06SKlim Kireev  libxml2         for Parallels image format
1837c23f23b9SMichael Tokarev  tcmalloc        tcmalloc support
18387b01cb97SAlexandre Derumier  jemalloc        jemalloc support
183986583a07SLiam Merwick  avx2            AVX2 optimization support
18406b8cd447SRobert Hoo  avx512f         AVX512F optimization support
1841a6b1d4c0SChanglong Xie  replication     replication support
1842c12d66aaSLin Ma  opengl          opengl support
1843c12d66aaSLin Ma  virglrenderer   virgl rendering support
1844c12d66aaSLin Ma  xfsctl          xfsctl support
1845c12d66aaSLin Ma  qom-cast-debug  cast debugging support
18468de73fa8SCleber Rosa  tools           build qemu-io, qemu-nbd and qemu-img tools
18472f740136SJeff Cody  bochs           bochs image format support
18482f740136SJeff Cody  cloop           cloop image format support
18492f740136SJeff Cody  dmg             dmg image format support
18502f740136SJeff Cody  qcow1           qcow v1 image format support
18512f740136SJeff Cody  vdi             vdi image format support
18522f740136SJeff Cody  vvfat           vvfat image format support
18532f740136SJeff Cody  qed             qed image format support
18542f740136SJeff Cody  parallels       parallels image format support
1855e1c42697SDaniel P. Berrangé  sheepdog        sheepdog block driver support (deprecated)
1856f0d92b56SLongpeng(Mike)  crypto-afalg    Linux AF_ALG crypto backend driver
18578ca80760SRichard Henderson  capstone        capstone disassembler support
1858ba59fb77SPaolo Bonzini  debug-mutex     mutex debugging support
185917824406SJunyan He  libpmem         libpmem support
186075411919SJames Le Cuirot  xkbcommon       xkbcommon support
1861b767d257SMarek Marczykowski-Górecki  rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
186221b2eca6SJingqi Liu  libdaxctl       libdaxctl support
1863a484a719SMax Reitz  fuse            FUSE block device export
1864df4ea709SMax Reitz  fuse-lseek      SEEK_HOLE/SEEK_DATA support for FUSE exports
186508fb77edSStefan Weil
186608fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1867af5db58eSpbrookEOF
18682d2ad6d0SFam Zhengexit 0
1869af5db58eSpbrookfi
1870af5db58eSpbrook
18719c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
1872bb768f71SThomas Huthrm -f */config-devices.mak.d
18739c790242SThomas Huth
1874faf44142SDaniel P. Berrangéif test -z "$python"
1875faf44142SDaniel P. Berrangéthen
1876c53eeaf7SStefan Hajnoczi    error_exit "Python not found. Use --python=/path/to/python"
1877c53eeaf7SStefan Hajnoczifi
18788e2c76bdSRoman Bolshakovif ! has "$make"
18798e2c76bdSRoman Bolshakovthen
18808e2c76bdSRoman Bolshakov    error_exit "GNU make ($make) not found"
18818e2c76bdSRoman Bolshakovfi
1882c53eeaf7SStefan Hajnoczi
1883c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit
1884c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value.
18851b11f28dSThomas Huthif ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
18861b11f28dSThomas Huth  error_exit "Cannot use '$python', Python >= 3.6 is required." \
1887c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
1888c53eeaf7SStefan Hajnoczifi
1889c53eeaf7SStefan Hajnoczi
1890755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it
1891406ab2f3SCleber 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)
1892755ee70fSCleber Rosa
1893c53eeaf7SStefan Hajnoczi# Suppress writing compiled files
1894c53eeaf7SStefan Hajnoczipython="$python -B"
1895c53eeaf7SStefan Hajnoczi
18960a01d76fSMarc-André Lureauif test -z "$meson"; then
18976ebd89cfSPaolo Bonzini    if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
18980a01d76fSMarc-André Lureau        meson=meson
18990a01d76fSMarc-André Lureau    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
19000a01d76fSMarc-André Lureau        meson=git
19010a01d76fSMarc-André Lureau    elif test -e "${source_path}/meson/meson.py" ; then
19020a01d76fSMarc-André Lureau        meson=internal
19030a01d76fSMarc-André Lureau    else
19040a01d76fSMarc-André Lureau        if test "$explicit_python" = yes; then
19050a01d76fSMarc-André Lureau            error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
19060a01d76fSMarc-André Lureau        else
1907a5665051SPaolo Bonzini            error_exit "Meson not found.  Use --meson=/path/to/meson"
1908a5665051SPaolo Bonzini        fi
19090a01d76fSMarc-André Lureau    fi
19100a01d76fSMarc-André Lureauelse
19110a01d76fSMarc-André Lureau    # Meson uses its own Python interpreter to invoke other Python scripts,
19120a01d76fSMarc-André Lureau    # but the user wants to use the one they specified with --python.
19130a01d76fSMarc-André Lureau    #
19140a01d76fSMarc-André Lureau    # We do not want to override the distro Python interpreter (and sometimes
19150a01d76fSMarc-André Lureau    # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
19160a01d76fSMarc-André Lureau    # just require --meson=git|internal together with --python.
19170a01d76fSMarc-André Lureau    if test "$explicit_python" = yes; then
19180a01d76fSMarc-André Lureau        case "$meson" in
19190a01d76fSMarc-André Lureau            git | internal) ;;
19200a01d76fSMarc-André Lureau            *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
19210a01d76fSMarc-André Lureau        esac
19220a01d76fSMarc-André Lureau    fi
19230a01d76fSMarc-André Lureaufi
1924a5665051SPaolo Bonzini
19250a01d76fSMarc-André Lureauif test "$meson" = git; then
19260a01d76fSMarc-André Lureau    git_submodules="${git_submodules} meson"
19270a01d76fSMarc-André Lureaufi
19280a01d76fSMarc-André Lureau
19290a01d76fSMarc-André Lureaucase "$meson" in
19300a01d76fSMarc-André Lureau    git | internal)
19310a01d76fSMarc-André Lureau        meson="$python ${source_path}/meson/meson.py"
19320a01d76fSMarc-André Lureau        ;;
193384ec0c24SPaolo Bonzini    *) meson=$(command -v "$meson") ;;
19340a01d76fSMarc-André Lureauesac
19350a01d76fSMarc-André Lureau
193609e93326SPaolo Bonzini# Probe for ninja
193748328880SPaolo Bonzini
193848328880SPaolo Bonziniif test -z "$ninja"; then
193948328880SPaolo Bonzini    for c in ninja ninja-build samu; do
194048328880SPaolo Bonzini        if has $c; then
194148328880SPaolo Bonzini            ninja=$(command -v "$c")
194248328880SPaolo Bonzini            break
194348328880SPaolo Bonzini        fi
194448328880SPaolo Bonzini    done
194509e93326SPaolo Bonzini    if test -z "$ninja"; then
194609e93326SPaolo Bonzini      error_exit "Cannot find Ninja"
194709e93326SPaolo Bonzini    fi
194848328880SPaolo Bonzinifi
1949a5665051SPaolo Bonzini
19509aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
19519aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
19529aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
19539aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
19549aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
19559aae6e54SDaniel Henrique Barbozaif compile_object ; then
19569aae6e54SDaniel Henrique Barboza  : C compiler works ok
19579aae6e54SDaniel Henrique Barbozaelse
19589aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
19599aae6e54SDaniel Henrique Barbozafi
19609aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
19619aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
19629aae6e54SDaniel Henrique Barbozafi
19639aae6e54SDaniel Henrique Barboza
19649c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
19659c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
19669c83ffd8SPeter Maydellif test -z "$werror" ; then
1967fd73745dSAlexey Kardashevskiy    if test -e "$source_path/.git" && \
1968e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
19699c83ffd8SPeter Maydell        werror="yes"
19709c83ffd8SPeter Maydell    else
19719c83ffd8SPeter Maydell        werror="no"
19729c83ffd8SPeter Maydell    fi
19739c83ffd8SPeter Maydellfi
19749c83ffd8SPeter Maydell
1975fb59dabdSPeter Maydellif test "$bogus_os" = "yes"; then
1976fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
1977fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
1978fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
1979fb59dabdSPeter Maydell    # host OS we should stop now.
1980951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1981fb59dabdSPeter Maydellfi
1982fb59dabdSPeter Maydell
1983efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
1984efc6c070SThomas Huthcat > $TMPC << EOF
1985efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
1986efc6c070SThomas Huth# ifdef __apple_build_version__
1987efc6c070SThomas Huth#  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1988efc6c070SThomas Huth#   error You need at least XCode Clang v5.1 to compile QEMU
1989efc6c070SThomas Huth#  endif
1990efc6c070SThomas Huth# else
1991efc6c070SThomas Huth#  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1992efc6c070SThomas Huth#   error You need at least Clang v3.4 to compile QEMU
1993efc6c070SThomas Huth#  endif
1994efc6c070SThomas Huth# endif
1995efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1996efc6c070SThomas Huth# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1997efc6c070SThomas Huth#  error You need at least GCC v4.8 to compile QEMU
1998efc6c070SThomas Huth# endif
1999efc6c070SThomas Huth#else
2000efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
2001efc6c070SThomas Huth#endif
2002efc6c070SThomas Huthint main (void) { return 0; }
2003efc6c070SThomas HuthEOF
2004efc6c070SThomas Huthif ! compile_prog "" "" ; then
2005efc6c070SThomas Huth    error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2006efc6c070SThomas Huthfi
2007efc6c070SThomas Huth
200800849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately.
200900849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second.
201000849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all
201100849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would
201200849b92SRichard Henderson# just silently disable some features, so it's too error prone.
201300849b92SRichard Henderson
201400849b92SRichard Hendersonwarn_flags=
201500849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration
201600849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition
201700849b92SRichard Hendersonadd_to warn_flags -Wtype-limits
201800849b92SRichard Hendersonadd_to warn_flags -Wformat-security
201900849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k
202000849b92SRichard Hendersonadd_to warn_flags -Winit-self
202100849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers
202200849b92SRichard Hendersonadd_to warn_flags -Wempty-body
202300849b92SRichard Hendersonadd_to warn_flags -Wnested-externs
202400849b92SRichard Hendersonadd_to warn_flags -Wendif-labels
202500849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined
20260a2ebce9SThomas Huthadd_to warn_flags -Wimplicit-fallthrough=2
202700849b92SRichard Henderson
202800849b92SRichard Hendersonnowarn_flags=
202900849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides
203000849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs
203100849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value
203200849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int
203300849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition
2034aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare
2035bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi
203600849b92SRichard Henderson
203700849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags"
203893b25869SJohn Snow
203993b25869SJohn Snowcc_has_warning_flag() {
204093b25869SJohn Snow    write_c_skeleton;
204193b25869SJohn Snow
2042a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
2043a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
2044a1d29d6cSPeter Maydell    # warning options).
204593b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
204693b25869SJohn Snow    compile_prog "-Werror $optflag" ""
204793b25869SJohn Snow}
204893b25869SJohn Snow
204993b25869SJohn Snowfor flag in $gcc_flags; do
205093b25869SJohn Snow    if cc_has_warning_flag $flag ; then
20518d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
20528d05095cSPaolo Bonzini    fi
20538d05095cSPaolo Bonzinidone
20548d05095cSPaolo Bonzini
205563678e17SSteven Noonanif test "$stack_protector" != "no"; then
2056fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
2057fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
2058fccd35a0SRodrigo Rebello{
2059fccd35a0SRodrigo Rebello    char arr[64], *p = arr, *c = argv[0];
2060fccd35a0SRodrigo Rebello    while (*c) {
2061fccd35a0SRodrigo Rebello        *p++ = *c++;
2062fccd35a0SRodrigo Rebello    }
2063fccd35a0SRodrigo Rebello    return 0;
2064fccd35a0SRodrigo Rebello}
2065fccd35a0SRodrigo RebelloEOF
206663678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
20673b463a3fSMiroslav Rezanina  sp_on=0
206863678e17SSteven Noonan  for flag in $gcc_flags; do
2069590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
2070590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
2071086d5f75SPaolo Bonzini    if compile_object "-Werror $flag" &&
2072590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
207363678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2074db5adeaaSPaolo Bonzini      QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
20753b463a3fSMiroslav Rezanina      sp_on=1
207663678e17SSteven Noonan      break
207763678e17SSteven Noonan    fi
207863678e17SSteven Noonan  done
20793b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
20803b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
20813b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
20823b463a3fSMiroslav Rezanina    fi
20833b463a3fSMiroslav Rezanina  fi
208437746c5eSMarc-André Lureaufi
208537746c5eSMarc-André Lureau
208620bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for
208720bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}.
208820bc94a2SPaolo Bonzinicat > $TMPC << EOF
208920bc94a2SPaolo Bonzinistruct {
209020bc94a2SPaolo Bonzini  int a[2];
209120bc94a2SPaolo Bonzini} x = {0};
209220bc94a2SPaolo BonziniEOF
209320bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then
209420bc94a2SPaolo Bonzini  :
209520bc94a2SPaolo Bonzinielse
209620bc94a2SPaolo Bonzini  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
209720bc94a2SPaolo Bonzinifi
209820bc94a2SPaolo Bonzini
209921e709aaSMarc-André Lureau# Our module code doesn't support Windows
210021e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then
210121e709aaSMarc-André Lureau  error_exit "Modules are not available for Windows"
210221e709aaSMarc-André Lureaufi
210321e709aaSMarc-André Lureau
2104bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled
2105bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2106bd83c861SChristian Ehrhardt  error_exit "Can't enable module-upgrades as Modules are not enabled"
2107bd83c861SChristian Ehrhardtfi
2108bd83c861SChristian Ehrhardt
2109d376e9deSThomas Huth# Static linking is not possible with modules or PIE
211040d6444eSAvi Kivityif test "$static" = "yes" ; then
2111aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
2112aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
2113aa0d1f44SPaolo Bonzini  fi
211440d6444eSAvi Kivityfi
211540d6444eSAvi Kivity
2116768b7855SEmilio G. Cota# Unconditional check for compiler __thread support
2117768b7855SEmilio G. Cota  cat > $TMPC << EOF
2118768b7855SEmilio G. Cotastatic __thread int tls_var;
2119768b7855SEmilio G. Cotaint main(void) { return tls_var; }
2120768b7855SEmilio G. CotaEOF
2121768b7855SEmilio G. Cota
2122768b7855SEmilio G. Cotaif ! compile_prog "-Werror" "" ; then
2123768b7855SEmilio G. Cota    error_exit "Your compiler does not support the __thread specifier for " \
2124768b7855SEmilio G. Cota	"Thread-Local Storage (TLS). Please upgrade to a version that does."
2125768b7855SEmilio G. Cotafi
2126768b7855SEmilio G. Cota
212740d6444eSAvi Kivitycat > $TMPC << EOF
212821d4a791SAvi Kivity
212921d4a791SAvi Kivity#ifdef __linux__
213021d4a791SAvi Kivity#  define THREAD __thread
213121d4a791SAvi Kivity#else
213221d4a791SAvi Kivity#  define THREAD
213321d4a791SAvi Kivity#endif
213421d4a791SAvi Kivitystatic THREAD int tls_var;
213521d4a791SAvi Kivityint main(void) { return tls_var; }
213640d6444eSAvi KivityEOF
2137b2634124SRichard Henderson
2138b2634124SRichard Henderson# Check we support --no-pie first; we will need this for building ROMs.
2139412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then
2140412aeacdSAlex Bennée  CFLAGS_NOPIE="-fno-pie"
2141412aeacdSAlex Bennéefi
2142412aeacdSAlex Bennée
214312781462SRichard Hendersonif test "$static" = "yes"; then
2144eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
21455770e8afSPaolo Bonzini    CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
214612781462SRichard Henderson    QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
214712781462SRichard Henderson    pie="yes"
214812781462SRichard Henderson  elif test "$pie" = "yes"; then
214912781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
215012781462SRichard Henderson  else
215112781462SRichard Henderson    QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
215212781462SRichard Henderson    pie="no"
215312781462SRichard Henderson  fi
215412781462SRichard Hendersonelif test "$pie" = "no"; then
21555770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2156eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
21575770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
21585770e8afSPaolo Bonzini  CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
215940d6444eSAvi Kivity  pie="yes"
21602c674109SRichard Hendersonelif test "$pie" = "yes"; then
216176ad07a4SPeter Maydell  error_exit "PIE not available due to missing toolchain support"
216240d6444eSAvi Kivityelse
216340d6444eSAvi Kivity  echo "Disabling PIE due to missing toolchain support"
216440d6444eSAvi Kivity  pie="no"
216540d6444eSAvi Kivityfi
216640d6444eSAvi Kivity
2167e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2168e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too.
2169e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2170e6cbd751SRichard Henderson  QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2171e6cbd751SRichard Hendersonfi
2172e6cbd751SRichard Henderson
217309dada40SPaolo Bonzini##########################################
217409dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
217509dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
217609dada40SPaolo Bonzini# specification is necessary
217709dada40SPaolo Bonzini
217809dada40SPaolo Bonziniif test "$cpu" = "i386"; then
217909dada40SPaolo Bonzini  cat > $TMPC << EOF
218009dada40SPaolo Bonzinistatic int sfaa(int *ptr)
218109dada40SPaolo Bonzini{
218209dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
218309dada40SPaolo Bonzini}
218409dada40SPaolo Bonzini
218509dada40SPaolo Bonziniint main(void)
218609dada40SPaolo Bonzini{
218709dada40SPaolo Bonzini  int val = 42;
21881405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
218909dada40SPaolo Bonzini  sfaa(&val);
219009dada40SPaolo Bonzini  return val;
219109dada40SPaolo Bonzini}
219209dada40SPaolo BonziniEOF
219309dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
219409dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
219509dada40SPaolo Bonzini  fi
219609dada40SPaolo Bonzinifi
219709dada40SPaolo Bonzini
219809dada40SPaolo Bonzini#########################################
2199ec530c81Sbellard# Solaris specific configure tool chain decisions
220009dada40SPaolo Bonzini
2201ec530c81Sbellardif test "$solaris" = "yes" ; then
22026792aa11SLoïc Minier  if has ar; then
22036792aa11SLoïc Minier    :
22046792aa11SLoïc Minier  else
2205ec530c81Sbellard    if test -f /usr/ccs/bin/ar ; then
220676ad07a4SPeter Maydell      error_exit "No path includes ar" \
220776ad07a4SPeter Maydell          "Add /usr/ccs/bin to your path and rerun configure"
2208ec530c81Sbellard    fi
220976ad07a4SPeter Maydell    error_exit "No path includes ar"
2210ec530c81Sbellard  fi
2211ec530c81Sbellardfi
2212ec530c81Sbellard
2213afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
2214fdb75aefSPaolo Bonzini    default_targets=yes
2215d880a3baSPaolo Bonzini    for target in $default_target_list; do
2216d880a3baSPaolo Bonzini        target_list="$target_list $target"
2217d880a3baSPaolo Bonzini    done
2218d880a3baSPaolo Bonzini    target_list="${target_list# }"
2219121afa9eSAnthony Liguorielse
2220fdb75aefSPaolo Bonzini    default_targets=no
222189138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2222d880a3baSPaolo Bonzini    for target in $target_list; do
222325b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
222425b48338SPeter Maydell        # friendly error message than if we let it fall through.
222525b48338SPeter Maydell        case " $default_target_list " in
222625b48338SPeter Maydell            *" $target "*)
222725b48338SPeter Maydell                ;;
222825b48338SPeter Maydell            *)
222925b48338SPeter Maydell                error_exit "Unknown target name '$target'"
223025b48338SPeter Maydell                ;;
223125b48338SPeter Maydell        esac
223225b48338SPeter Maydell    done
2233d880a3baSPaolo Bonzinifi
223425b48338SPeter Maydell
2235fdb75aefSPaolo Bonzinifor target in $target_list; do
2236fdb75aefSPaolo Bonzini    # if a deprecated target is enabled we note it here
2237fdb75aefSPaolo Bonzini    if echo "$deprecated_targets_list" | grep -q "$target"; then
2238fdb75aefSPaolo Bonzini        add_to deprecated_features $target
2239fdb75aefSPaolo Bonzini    fi
2240fdb75aefSPaolo Bonzinidone
2241fdb75aefSPaolo Bonzini
2242f55fe278SPaolo Bonzini# see if system emulation was really requested
2243f55fe278SPaolo Bonzinicase " $target_list " in
2244f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
2245f55fe278SPaolo Bonzini  ;;
2246f55fe278SPaolo Bonzini  *) softmmu=no
2247f55fe278SPaolo Bonzini  ;;
2248f55fe278SPaolo Bonziniesac
22495327cf48Sbellard
2250249247c9SJuan Quintelafeature_not_found() {
2251249247c9SJuan Quintela  feature=$1
225221684af0SStewart Smith  remedy=$2
2253249247c9SJuan Quintela
225476ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
225521684af0SStewart Smith      "configure was not able to find it." \
225621684af0SStewart Smith      "$remedy"
2257249247c9SJuan Quintela}
2258249247c9SJuan Quintela
22597d13299dSbellard# ---
22607d13299dSbellard# big/little endian test
22617d13299dSbellardcat > $TMPC << EOF
226261cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
226361cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
226461cc919fSMike Frysingerextern int foo(short *, short *);
226561cc919fSMike Frysingerint main(int argc, char *argv[]) {
226661cc919fSMike Frysinger    return foo(big_endian, little_endian);
22677d13299dSbellard}
22687d13299dSbellardEOF
22697d13299dSbellard
227061cc919fSMike Frysingerif compile_object ; then
227112f15c91SAlice Frosi    if strings -a $TMPO | grep -q BiGeNdIaN ; then
227261cc919fSMike Frysinger        bigendian="yes"
227312f15c91SAlice Frosi    elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
227461cc919fSMike Frysinger        bigendian="no"
22757d13299dSbellard    else
22767d13299dSbellard        echo big/little test failed
22777d13299dSbellard    fi
22787d13299dSbellardelse
227961cc919fSMike Frysinger    echo big/little test failed
22807d13299dSbellardfi
22817d13299dSbellard
2282b0a47e79SJuan Quintela##########################################
2283e10ee3f5SPhilippe Mathieu-Daudé# system tools
2284e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then
2285e10ee3f5SPhilippe Mathieu-Daudé    if test "$softmmu" = "no"; then
2286e10ee3f5SPhilippe Mathieu-Daudé        want_tools=no
2287e10ee3f5SPhilippe Mathieu-Daudé    else
2288e10ee3f5SPhilippe Mathieu-Daudé        want_tools=yes
2289e10ee3f5SPhilippe Mathieu-Daudé    fi
2290e10ee3f5SPhilippe Mathieu-Daudéfi
2291e10ee3f5SPhilippe Mathieu-Daudé
2292e10ee3f5SPhilippe Mathieu-Daudé##########################################
2293a30878e7SPeter Maydell# cocoa implies not SDL or GTK
2294a30878e7SPeter Maydell# (the cocoa UI code currently assumes it is always the active UI
2295a30878e7SPeter Maydell# and doesn't interact well with other UI frontend code)
2296b4e312e9SPaolo Bonziniif test "$cocoa" = "enabled"; then
2297b4e312e9SPaolo Bonzini    if test "$sdl" = "enabled"; then
2298a30878e7SPeter Maydell        error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2299a30878e7SPeter Maydell    fi
2300a30878e7SPeter Maydell    if test "$gtk" = "yes"; then
2301a30878e7SPeter Maydell        error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2302a30878e7SPeter Maydell    fi
2303a30878e7SPeter Maydell    gtk=no
230435be72baSPaolo Bonzini    sdl=disabled
2305a30878e7SPeter Maydellfi
2306a30878e7SPeter Maydell
23076b39b063SEric Blake# Some versions of Mac OS X incorrectly define SIZE_MAX
23086b39b063SEric Blakecat > $TMPC << EOF
23096b39b063SEric Blake#include <stdint.h>
23106b39b063SEric Blake#include <stdio.h>
23116b39b063SEric Blakeint main(int argc, char *argv[]) {
23126b39b063SEric Blake    return printf("%zu", SIZE_MAX);
23136b39b063SEric Blake}
23146b39b063SEric BlakeEOF
23156b39b063SEric Blakehave_broken_size_max=no
23166b39b063SEric Blakeif ! compile_object -Werror ; then
23176b39b063SEric Blake    have_broken_size_max=yes
23186b39b063SEric Blakefi
23196b39b063SEric Blake
2320a30878e7SPeter Maydell##########################################
2321015a33bdSGonglei# L2TPV3 probe
2322015a33bdSGonglei
2323015a33bdSGongleicat > $TMPC <<EOF
2324015a33bdSGonglei#include <sys/socket.h>
2325bff6cb72SMichael Tokarev#include <linux/ip.h>
2326015a33bdSGongleiint main(void) { return sizeof(struct mmsghdr); }
2327015a33bdSGongleiEOF
2328015a33bdSGongleiif compile_prog "" "" ; then
2329015a33bdSGonglei  l2tpv3=yes
2330015a33bdSGongleielse
2331015a33bdSGonglei  l2tpv3=no
2332015a33bdSGongleifi
2333015a33bdSGonglei
2334195588ccSDavid CARLIERcat > $TMPC <<EOF
2335195588ccSDavid CARLIER#include <sys/mman.h>
2336195588ccSDavid CARLIERint main(int argc, char *argv[]) {
2337195588ccSDavid CARLIER    return mlockall(MCL_FUTURE);
2338195588ccSDavid CARLIER}
2339195588ccSDavid CARLIEREOF
2340195588ccSDavid CARLIERif compile_prog "" "" ; then
2341195588ccSDavid CARLIER  have_mlockall=yes
2342195588ccSDavid CARLIERelse
2343195588ccSDavid CARLIER  have_mlockall=no
2344195588ccSDavid CARLIERfi
2345195588ccSDavid CARLIER
2346299e6f19SPaolo Bonzini#########################################
2347299e6f19SPaolo Bonzini# vhost interdependencies and host support
2348299e6f19SPaolo Bonzini
2349299e6f19SPaolo Bonzini# vhost backends
2350d88618f7SStefan Hajnocziif test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2351d88618f7SStefan Hajnoczi  error_exit "vhost-user is only available on Linux"
2352299e6f19SPaolo Bonzinifi
2353108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux
2354108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2355108a6481SCindy Lu  error_exit "vhost-vdpa is only available on Linux"
2356108a6481SCindy Lufi
2357299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux
2358299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2359299e6f19SPaolo Bonzini  error_exit "vhost-kernel is only available on Linux"
2360299e6f19SPaolo Bonzinifi
2361299e6f19SPaolo Bonzini
2362299e6f19SPaolo Bonzini# vhost-kernel devices
2363299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2364299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2365299e6f19SPaolo Bonzini  error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2366299e6f19SPaolo Bonzinifi
2367299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2368299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2369299e6f19SPaolo Bonzini  error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2370299e6f19SPaolo Bonzinifi
2371299e6f19SPaolo Bonzini
2372299e6f19SPaolo Bonzini# vhost-user backends
2373299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2374299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2375299e6f19SPaolo Bonzini  error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2376299e6f19SPaolo Bonzinifi
2377299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2378299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2379299e6f19SPaolo Bonzini  error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2380299e6f19SPaolo Bonzinifi
238198fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
238298fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
238398fc1adaSDr. David Alan Gilbert  error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
238498fc1adaSDr. David Alan Gilbertfi
2385108a6481SCindy Lu#vhost-vdpa backends
2386108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2387108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2388108a6481SCindy Lu  error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2389108a6481SCindy Lufi
2390299e6f19SPaolo Bonzini
239140bc0ca9SLaurent Vivier# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2392299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then
2393299e6f19SPaolo Bonzini  test "$vhost_net_user" = "yes" && vhost_net=yes
239440bc0ca9SLaurent Vivier  test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2395299e6f19SPaolo Bonzini  test "$vhost_kernel" = "yes" && vhost_net=yes
2396299e6f19SPaolo Bonzinifi
2397299e6f19SPaolo Bonzini
2398015a33bdSGonglei##########################################
2399779ab5e3SStefan Weil# pkg-config probe
2400779ab5e3SStefan Weil
2401779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
240276ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
2403779ab5e3SStefan Weilfi
2404779ab5e3SStefan Weil
2405779ab5e3SStefan Weil##########################################
2406b0a47e79SJuan Quintela# NPTL probe
2407b0a47e79SJuan Quintela
240824cb36a6SPeter Maydellif test "$linux_user" = "yes"; then
2409bd0c5661Spbrook  cat > $TMPC <<EOF
2410bd0c5661Spbrook#include <sched.h>
241130813ceaSpbrook#include <linux/futex.h>
2412182eacc0SStefan Weilint main(void) {
2413bd0c5661Spbrook#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2414bd0c5661Spbrook#error bork
2415bd0c5661Spbrook#endif
2416182eacc0SStefan Weil  return 0;
2417bd0c5661Spbrook}
2418bd0c5661SpbrookEOF
241924cb36a6SPeter Maydell  if ! compile_object ; then
242021684af0SStewart Smith    feature_not_found "nptl" "Install glibc and linux kernel headers."
2421b0a47e79SJuan Quintela  fi
2422bd0c5661Spbrookfi
2423bd0c5661Spbrook
2424ac62922eSbalrog##########################################
2425607dacd0Sqiaonuohan# lzo check
2426607dacd0Sqiaonuohan
2427607dacd0Sqiaonuohanif test "$lzo" != "no" ; then
2428607dacd0Sqiaonuohan    cat > $TMPC << EOF
2429607dacd0Sqiaonuohan#include <lzo/lzo1x.h>
2430607dacd0Sqiaonuohanint main(void) { lzo_version(); return 0; }
2431607dacd0SqiaonuohanEOF
2432607dacd0Sqiaonuohan    if compile_prog "" "-llzo2" ; then
2433708eab42SMarc-André Lureau        lzo_libs="-llzo2"
2434b25c9dffSStefan Weil        lzo="yes"
2435b25c9dffSStefan Weil    else
2436b25c9dffSStefan Weil        if test "$lzo" = "yes"; then
2437b25c9dffSStefan Weil            feature_not_found "liblzo2" "Install liblzo2 devel"
2438b25c9dffSStefan Weil        fi
2439b25c9dffSStefan Weil        lzo="no"
2440b25c9dffSStefan Weil    fi
2441607dacd0Sqiaonuohanfi
2442607dacd0Sqiaonuohan
2443607dacd0Sqiaonuohan##########################################
2444607dacd0Sqiaonuohan# snappy check
2445607dacd0Sqiaonuohan
2446607dacd0Sqiaonuohanif test "$snappy" != "no" ; then
2447607dacd0Sqiaonuohan    cat > $TMPC << EOF
2448607dacd0Sqiaonuohan#include <snappy-c.h>
2449607dacd0Sqiaonuohanint main(void) { snappy_max_compressed_length(4096); return 0; }
2450607dacd0SqiaonuohanEOF
2451607dacd0Sqiaonuohan    if compile_prog "" "-lsnappy" ; then
2452708eab42SMarc-André Lureau        snappy_libs='-lsnappy'
2453b25c9dffSStefan Weil        snappy="yes"
2454b25c9dffSStefan Weil    else
2455b25c9dffSStefan Weil        if test "$snappy" = "yes"; then
2456b25c9dffSStefan Weil            feature_not_found "libsnappy" "Install libsnappy devel"
2457b25c9dffSStefan Weil        fi
2458b25c9dffSStefan Weil        snappy="no"
2459b25c9dffSStefan Weil    fi
2460607dacd0Sqiaonuohanfi
2461607dacd0Sqiaonuohan
2462607dacd0Sqiaonuohan##########################################
24636b383c08SPeter Wu# bzip2 check
24646b383c08SPeter Wu
24656b383c08SPeter Wuif test "$bzip2" != "no" ; then
24666b383c08SPeter Wu    cat > $TMPC << EOF
24676b383c08SPeter Wu#include <bzlib.h>
24686b383c08SPeter Wuint main(void) { BZ2_bzlibVersion(); return 0; }
24696b383c08SPeter WuEOF
24706b383c08SPeter Wu    if compile_prog "" "-lbz2" ; then
24716b383c08SPeter Wu        bzip2="yes"
24726b383c08SPeter Wu    else
24736b383c08SPeter Wu        if test "$bzip2" = "yes"; then
24746b383c08SPeter Wu            feature_not_found "libbzip2" "Install libbzip2 devel"
24756b383c08SPeter Wu        fi
24766b383c08SPeter Wu        bzip2="no"
24776b383c08SPeter Wu    fi
24786b383c08SPeter Wufi
24796b383c08SPeter Wu
24806b383c08SPeter Wu##########################################
248183bc1f97SJulio Faracco# lzfse check
248283bc1f97SJulio Faracco
248383bc1f97SJulio Faraccoif test "$lzfse" != "no" ; then
248483bc1f97SJulio Faracco    cat > $TMPC << EOF
248583bc1f97SJulio Faracco#include <lzfse.h>
248683bc1f97SJulio Faraccoint main(void) { lzfse_decode_scratch_size(); return 0; }
248783bc1f97SJulio FaraccoEOF
248883bc1f97SJulio Faracco    if compile_prog "" "-llzfse" ; then
248983bc1f97SJulio Faracco        lzfse="yes"
249083bc1f97SJulio Faracco    else
249183bc1f97SJulio Faracco        if test "$lzfse" = "yes"; then
249283bc1f97SJulio Faracco            feature_not_found "lzfse" "Install lzfse devel"
249383bc1f97SJulio Faracco        fi
249483bc1f97SJulio Faracco        lzfse="no"
249583bc1f97SJulio Faracco    fi
249683bc1f97SJulio Faraccofi
249783bc1f97SJulio Faracco
249883bc1f97SJulio Faracco##########################################
24993a678481SJuan Quintela# zstd check
25003a678481SJuan Quintela
25013a678481SJuan Quintelaif test "$zstd" != "no" ; then
2502297254c7SJuan Quintela    libzstd_minver="1.4.0"
2503297254c7SJuan Quintela    if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
25043a678481SJuan Quintela        zstd_cflags="$($pkg_config --cflags libzstd)"
25053a678481SJuan Quintela        zstd_libs="$($pkg_config --libs libzstd)"
25063a678481SJuan Quintela        zstd="yes"
25073a678481SJuan Quintela    else
25083a678481SJuan Quintela        if test "$zstd" = "yes" ; then
25093a678481SJuan Quintela            feature_not_found "libzstd" "Install libzstd devel"
25103a678481SJuan Quintela        fi
25113a678481SJuan Quintela        zstd="no"
25123a678481SJuan Quintela    fi
25133a678481SJuan Quintelafi
25143a678481SJuan Quintela
25153a678481SJuan Quintela##########################################
2516f794573eSEduardo Otubo# libseccomp check
2517f794573eSEduardo Otubo
2518f794573eSEduardo Otuboif test "$seccomp" != "no" ; then
25193e684455SMichael Strosaker    libseccomp_minver="2.3.0"
252025ed0eccSHelge Deller    if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2521c3883e1fSFam Zheng        seccomp_cflags="$($pkg_config --cflags libseccomp)"
2522c3883e1fSFam Zheng        seccomp_libs="$($pkg_config --libs libseccomp)"
2523f794573eSEduardo Otubo        seccomp="yes"
2524f794573eSEduardo Otubo    else
2525f794573eSEduardo Otubo        if test "$seccomp" = "yes" ; then
2526693e5910SAndrew Jones            feature_not_found "libseccomp" \
2527693e5910SAndrew Jones                 "Install libseccomp devel >= $libseccomp_minver"
2528896848f0SEduardo Otubo        fi
2529e84d5956SYann E. MORIN        seccomp="no"
2530f794573eSEduardo Otubo    fi
2531f794573eSEduardo Otubofi
25323bd40ec7SPaolo Bonzini
2533f794573eSEduardo Otubo##########################################
2534e37630caSaliguori# xen probe
2535e37630caSaliguori
25361badb709SPaolo Bonziniif test "$xen" != "disabled" ; then
2537c1cdd9d5SJuergen Gross  # Check whether Xen library path is specified via --extra-ldflags to avoid
2538c1cdd9d5SJuergen Gross  # overriding this setting with pkg-config output. If not, try pkg-config
2539c1cdd9d5SJuergen Gross  # to obtain all needed flags.
2540c1cdd9d5SJuergen Gross
2541c1cdd9d5SJuergen Gross  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2542c1cdd9d5SJuergen Gross     $pkg_config --exists xencontrol ; then
2543c1cdd9d5SJuergen Gross    xen_ctrl_version="$(printf '%d%02d%02d' \
2544c1cdd9d5SJuergen Gross      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
25451badb709SPaolo Bonzini    xen=enabled
25465b6a8f43SMichael Tokarev    xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2547c1cdd9d5SJuergen Gross    xen_pc="$xen_pc xenevtchn xendevicemodel"
254858ea9a7aSAnthony PERARD    if $pkg_config --exists xentoolcore; then
254958ea9a7aSAnthony PERARD      xen_pc="$xen_pc xentoolcore"
255058ea9a7aSAnthony PERARD    fi
2551582ea95fSMarc-André Lureau    xen_cflags="$($pkg_config --cflags $xen_pc)"
2552582ea95fSMarc-André Lureau    xen_libs="$($pkg_config --libs $xen_pc)"
2553c1cdd9d5SJuergen Gross  else
2554c1cdd9d5SJuergen Gross
25555b6a8f43SMichael Tokarev    xen_libs="-lxenstore -lxenctrl"
2556d9506cabSAnthony PERARD    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2557d5b93ddfSAnthony PERARD
255850ced5b3SStefan Weil    # First we test whether Xen headers and libraries are available.
255950ced5b3SStefan Weil    # If no, we are done and there is no Xen support.
256050ced5b3SStefan Weil    # If yes, more tests are run to detect the Xen version.
256150ced5b3SStefan Weil
256250ced5b3SStefan Weil    # Xen (any)
256350ced5b3SStefan Weil    cat > $TMPC <<EOF
256450ced5b3SStefan Weil#include <xenctrl.h>
256550ced5b3SStefan Weilint main(void) {
256650ced5b3SStefan Weil  return 0;
256750ced5b3SStefan Weil}
256850ced5b3SStefan WeilEOF
256950ced5b3SStefan Weil    if ! compile_prog "" "$xen_libs" ; then
257050ced5b3SStefan Weil      # Xen not found
25711badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
257221684af0SStewart Smith        feature_not_found "xen" "Install xen devel"
257350ced5b3SStefan Weil      fi
25741badb709SPaolo Bonzini      xen=disabled
257550ced5b3SStefan Weil
2576d5b93ddfSAnthony PERARD    # Xen unstable
257769deef08SPeter Maydell    elif
257869deef08SPeter Maydell        cat > $TMPC <<EOF &&
25792cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API
25802cbf8903SRoss Lagerwall#define __XEN_TOOLS__
25812cbf8903SRoss Lagerwall#include <xendevicemodel.h>
2582d3c49ebbSPaul Durrant#include <xenforeignmemory.h>
25832cbf8903SRoss Lagerwallint main(void) {
25842cbf8903SRoss Lagerwall  xendevicemodel_handle *xd;
2585d3c49ebbSPaul Durrant  xenforeignmemory_handle *xfmem;
25862cbf8903SRoss Lagerwall
25872cbf8903SRoss Lagerwall  xd = xendevicemodel_open(0, 0);
25882cbf8903SRoss Lagerwall  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
25892cbf8903SRoss Lagerwall
2590d3c49ebbSPaul Durrant  xfmem = xenforeignmemory_open(0, 0);
2591d3c49ebbSPaul Durrant  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2592d3c49ebbSPaul Durrant
25932cbf8903SRoss Lagerwall  return 0;
25942cbf8903SRoss Lagerwall}
25952cbf8903SRoss LagerwallEOF
25962cbf8903SRoss Lagerwall        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
25972cbf8903SRoss Lagerwall      then
25982cbf8903SRoss Lagerwall      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
25992cbf8903SRoss Lagerwall      xen_ctrl_version=41100
26001badb709SPaolo Bonzini      xen=enabled
26012cbf8903SRoss Lagerwall    elif
26022cbf8903SRoss Lagerwall        cat > $TMPC <<EOF &&
26035ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API
26045ba3d756SIgor Druzhinin#include <xenforeignmemory.h>
260558ea9a7aSAnthony PERARD#include <xentoolcore.h>
26065ba3d756SIgor Druzhininint main(void) {
26075ba3d756SIgor Druzhinin  xenforeignmemory_handle *xfmem;
26085ba3d756SIgor Druzhinin
26095ba3d756SIgor Druzhinin  xfmem = xenforeignmemory_open(0, 0);
26105ba3d756SIgor Druzhinin  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
261158ea9a7aSAnthony PERARD  xentoolcore_restrict_all(0);
26125ba3d756SIgor Druzhinin
26135ba3d756SIgor Druzhinin  return 0;
26145ba3d756SIgor Druzhinin}
26155ba3d756SIgor DruzhininEOF
261658ea9a7aSAnthony PERARD        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
26175ba3d756SIgor Druzhinin      then
261858ea9a7aSAnthony PERARD      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
26195ba3d756SIgor Druzhinin      xen_ctrl_version=41000
26201badb709SPaolo Bonzini      xen=enabled
26215ba3d756SIgor Druzhinin    elif
26225ba3d756SIgor Druzhinin        cat > $TMPC <<EOF &&
2623da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API
2624da8090ccSPaul Durrant#define __XEN_TOOLS__
2625da8090ccSPaul Durrant#include <xendevicemodel.h>
2626da8090ccSPaul Durrantint main(void) {
2627da8090ccSPaul Durrant  xendevicemodel_handle *xd;
2628da8090ccSPaul Durrant
2629da8090ccSPaul Durrant  xd = xendevicemodel_open(0, 0);
2630da8090ccSPaul Durrant  xendevicemodel_close(xd);
2631da8090ccSPaul Durrant
2632da8090ccSPaul Durrant  return 0;
2633da8090ccSPaul Durrant}
2634da8090ccSPaul DurrantEOF
2635da8090ccSPaul Durrant        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2636da8090ccSPaul Durrant      then
2637da8090ccSPaul Durrant      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2638f1167ee6SJuergen Gross      xen_ctrl_version=40900
26391badb709SPaolo Bonzini      xen=enabled
2640da8090ccSPaul Durrant    elif
2641da8090ccSPaul Durrant        cat > $TMPC <<EOF &&
26425eeb39c2SIan Campbell/*
26435eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat
26445eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given.
2645b6eb9b45SPaulina Szubarczyk *
2646b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and
2647b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented.
2648b6eb9b45SPaulina Szubarczyk */
2649b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API
2650b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API
2651b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2652b6eb9b45SPaulina Szubarczyk#include <xenctrl.h>
2653b6eb9b45SPaulina Szubarczyk#include <xenstore.h>
2654b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h>
2655b6eb9b45SPaulina Szubarczyk#include <xengnttab.h>
2656b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h>
2657b6eb9b45SPaulina Szubarczyk#include <stdint.h>
2658b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h>
2659b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS)
2660b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined
2661b6eb9b45SPaulina Szubarczyk#endif
2662b6eb9b45SPaulina Szubarczykint main(void) {
2663b6eb9b45SPaulina Szubarczyk  xc_interface *xc = NULL;
2664b6eb9b45SPaulina Szubarczyk  xenforeignmemory_handle *xfmem;
2665b6eb9b45SPaulina Szubarczyk  xenevtchn_handle *xe;
2666b6eb9b45SPaulina Szubarczyk  xengnttab_handle *xg;
2667b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy_segment_t* seg = NULL;
2668b6eb9b45SPaulina Szubarczyk
2669b6eb9b45SPaulina Szubarczyk  xs_daemon_open();
2670b6eb9b45SPaulina Szubarczyk
2671b6eb9b45SPaulina Szubarczyk  xc = xc_interface_open(0, 0, 0);
2672b6eb9b45SPaulina Szubarczyk  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2673b6eb9b45SPaulina Szubarczyk  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2674b6eb9b45SPaulina Szubarczyk  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2675b6eb9b45SPaulina Szubarczyk  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2676b6eb9b45SPaulina Szubarczyk
2677b6eb9b45SPaulina Szubarczyk  xfmem = xenforeignmemory_open(0, 0);
2678b6eb9b45SPaulina Szubarczyk  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2679b6eb9b45SPaulina Szubarczyk
2680b6eb9b45SPaulina Szubarczyk  xe = xenevtchn_open(0, 0);
2681b6eb9b45SPaulina Szubarczyk  xenevtchn_fd(xe);
2682b6eb9b45SPaulina Szubarczyk
2683b6eb9b45SPaulina Szubarczyk  xg = xengnttab_open(0, 0);
2684b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy(xg, 0, seg);
2685b6eb9b45SPaulina Szubarczyk
2686b6eb9b45SPaulina Szubarczyk  return 0;
2687b6eb9b45SPaulina Szubarczyk}
2688b6eb9b45SPaulina SzubarczykEOF
2689b6eb9b45SPaulina Szubarczyk        compile_prog "" "$xen_libs $xen_stable_libs"
2690b6eb9b45SPaulina Szubarczyk      then
2691f1167ee6SJuergen Gross      xen_ctrl_version=40800
26921badb709SPaolo Bonzini      xen=enabled
2693b6eb9b45SPaulina Szubarczyk    elif
2694b6eb9b45SPaulina Szubarczyk        cat > $TMPC <<EOF &&
2695b6eb9b45SPaulina Szubarczyk/*
2696b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat
2697b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given.
26985eeb39c2SIan Campbell */
26995eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API
27005eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API
27015eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API
27025eeb39c2SIan Campbell#include <xenctrl.h>
27035eeb39c2SIan Campbell#include <xenstore.h>
27045eeb39c2SIan Campbell#include <xenevtchn.h>
27055eeb39c2SIan Campbell#include <xengnttab.h>
27065eeb39c2SIan Campbell#include <xenforeignmemory.h>
27075eeb39c2SIan Campbell#include <stdint.h>
27085eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h>
27095eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS)
27105eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined
27115eeb39c2SIan Campbell#endif
27125eeb39c2SIan Campbellint main(void) {
27135eeb39c2SIan Campbell  xc_interface *xc = NULL;
27145eeb39c2SIan Campbell  xenforeignmemory_handle *xfmem;
27155eeb39c2SIan Campbell  xenevtchn_handle *xe;
27165eeb39c2SIan Campbell  xengnttab_handle *xg;
27175eeb39c2SIan Campbell
27185eeb39c2SIan Campbell  xs_daemon_open();
27195eeb39c2SIan Campbell
27205eeb39c2SIan Campbell  xc = xc_interface_open(0, 0, 0);
27215eeb39c2SIan Campbell  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
27225eeb39c2SIan Campbell  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
27235eeb39c2SIan Campbell  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
27245eeb39c2SIan Campbell  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
27255eeb39c2SIan Campbell
27265eeb39c2SIan Campbell  xfmem = xenforeignmemory_open(0, 0);
27275eeb39c2SIan Campbell  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
27285eeb39c2SIan Campbell
27295eeb39c2SIan Campbell  xe = xenevtchn_open(0, 0);
27305eeb39c2SIan Campbell  xenevtchn_fd(xe);
27315eeb39c2SIan Campbell
27325eeb39c2SIan Campbell  xg = xengnttab_open(0, 0);
27335eeb39c2SIan Campbell  xengnttab_map_grant_ref(xg, 0, 0, 0);
27345eeb39c2SIan Campbell
27355eeb39c2SIan Campbell  return 0;
27365eeb39c2SIan Campbell}
27375eeb39c2SIan CampbellEOF
27385eeb39c2SIan Campbell        compile_prog "" "$xen_libs $xen_stable_libs"
27395eeb39c2SIan Campbell      then
2740f1167ee6SJuergen Gross      xen_ctrl_version=40701
27411badb709SPaolo Bonzini      xen=enabled
2742cdadde39SRoger Pau Monne
2743cdadde39SRoger Pau Monne    # Xen 4.6
2744cdadde39SRoger Pau Monne    elif
2745cdadde39SRoger Pau Monne        cat > $TMPC <<EOF &&
2746cdadde39SRoger Pau Monne#include <xenctrl.h>
2747e108a3c1SAnthony PERARD#include <xenstore.h>
2748d5b93ddfSAnthony PERARD#include <stdint.h>
2749d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
2750d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
2751d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
2752d5b93ddfSAnthony PERARD#endif
2753d5b93ddfSAnthony PERARDint main(void) {
2754d5b93ddfSAnthony PERARD  xc_interface *xc;
2755d5b93ddfSAnthony PERARD  xs_daemon_open();
2756d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
2757d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2758d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
2759b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
27608688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2761d8b441a3SJan Beulich  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
276220a544c7SKonrad Rzeszutek Wilk  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2763d8b441a3SJan Beulich  return 0;
2764d8b441a3SJan Beulich}
2765d8b441a3SJan BeulichEOF
2766d8b441a3SJan Beulich        compile_prog "" "$xen_libs"
2767d8b441a3SJan Beulich      then
2768f1167ee6SJuergen Gross      xen_ctrl_version=40600
27691badb709SPaolo Bonzini      xen=enabled
2770d8b441a3SJan Beulich
2771d8b441a3SJan Beulich    # Xen 4.5
2772d8b441a3SJan Beulich    elif
2773d8b441a3SJan Beulich        cat > $TMPC <<EOF &&
2774d8b441a3SJan Beulich#include <xenctrl.h>
2775d8b441a3SJan Beulich#include <xenstore.h>
2776d8b441a3SJan Beulich#include <stdint.h>
2777d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h>
2778d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS)
2779d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined
2780d8b441a3SJan Beulich#endif
2781d8b441a3SJan Beulichint main(void) {
2782d8b441a3SJan Beulich  xc_interface *xc;
2783d8b441a3SJan Beulich  xs_daemon_open();
2784d8b441a3SJan Beulich  xc = xc_interface_open(0, 0, 0);
2785d8b441a3SJan Beulich  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2786d8b441a3SJan Beulich  xc_gnttab_open(NULL, 0);
2787d8b441a3SJan Beulich  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2788d8b441a3SJan Beulich  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
27893996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
27903996e85cSPaul Durrant  return 0;
27913996e85cSPaul Durrant}
27923996e85cSPaul DurrantEOF
27933996e85cSPaul Durrant        compile_prog "" "$xen_libs"
27943996e85cSPaul Durrant      then
2795f1167ee6SJuergen Gross      xen_ctrl_version=40500
27961badb709SPaolo Bonzini      xen=enabled
27973996e85cSPaul Durrant
27983996e85cSPaul Durrant    elif
27993996e85cSPaul Durrant        cat > $TMPC <<EOF &&
28003996e85cSPaul Durrant#include <xenctrl.h>
28013996e85cSPaul Durrant#include <xenstore.h>
28023996e85cSPaul Durrant#include <stdint.h>
28033996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
28043996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
28053996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
28063996e85cSPaul Durrant#endif
28073996e85cSPaul Durrantint main(void) {
28083996e85cSPaul Durrant  xc_interface *xc;
28093996e85cSPaul Durrant  xs_daemon_open();
28103996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
28113996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
28123996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
28133996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
28143996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
28158688e065SStefano Stabellini  return 0;
28168688e065SStefano Stabellini}
28178688e065SStefano StabelliniEOF
28188688e065SStefano Stabellini        compile_prog "" "$xen_libs"
281969deef08SPeter Maydell      then
2820f1167ee6SJuergen Gross      xen_ctrl_version=40200
28211badb709SPaolo Bonzini      xen=enabled
28228688e065SStefano Stabellini
2823e37630caSaliguori    else
28241badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
2825edfb07edSIan Campbell        feature_not_found "xen (unsupported version)" \
2826edfb07edSIan Campbell                          "Install a supported xen (xen 4.2 or newer)"
2827fc321b4bSJuan Quintela      fi
28281badb709SPaolo Bonzini      xen=disabled
2829e37630caSaliguori    fi
2830d5b93ddfSAnthony PERARD
28311badb709SPaolo Bonzini    if test "$xen" = enabled; then
2832f1167ee6SJuergen Gross      if test $xen_ctrl_version -ge 40701  ; then
2833582ea95fSMarc-André Lureau        xen_libs="$xen_libs $xen_stable_libs "
28345eeb39c2SIan Campbell      fi
2835d5b93ddfSAnthony PERARD    fi
2836e37630caSaliguori  fi
2837c1cdd9d5SJuergen Grossfi
2838e37630caSaliguori
28391badb709SPaolo Bonziniif test "$xen_pci_passthrough" != "disabled"; then
28401badb709SPaolo Bonzini  if test "$xen" = "enabled" && test "$linux" = "yes"; then
28411badb709SPaolo Bonzini    xen_pci_passthrough=enabled
2842eb6fda0fSAnthony PERARD  else
28431badb709SPaolo Bonzini    if test "$xen_pci_passthrough" = "enabled"; then
284476ad07a4SPeter Maydell      error_exit "User requested feature Xen PCI Passthrough" \
284576ad07a4SPeter Maydell          " but this feature requires /sys from Linux"
2846eb6fda0fSAnthony PERARD    fi
28471badb709SPaolo Bonzini    xen_pci_passthrough=disabled
2848d661d9a4SJustin Terry (VM)  fi
2849d661d9a4SJustin Terry (VM)fi
2850d661d9a4SJustin Terry (VM)
2851d661d9a4SJustin Terry (VM)##########################################
2852f676c67eSJeremy White# X11 probe
2853f676c67eSJeremy Whiteif $pkg_config --exists "x11"; then
28548781595bSGerd Hoffmann    have_x11=yes
285589138857SStefan Weil    x11_cflags=$($pkg_config --cflags x11)
285689138857SStefan Weil    x11_libs=$($pkg_config --libs x11)
2857f676c67eSJeremy Whitefi
2858f676c67eSJeremy White
2859f676c67eSJeremy White##########################################
2860a4ccabcfSAnthony Liguori# GTK probe
2861a4ccabcfSAnthony Liguori
28625a464e6cSPeter Xuif test "$gtk" != "no"; then
286389d85cdeSDaniel P. Berrangé    gtkpackage="gtk+-3.0"
286489d85cdeSDaniel P. Berrangé    gtkx11package="gtk+-x11-3.0"
28657b23d121SVolker Rümelin    gtkversion="3.22.0"
2866bbbf9bfbSStefan Weil    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
286789138857SStefan Weil        gtk_cflags=$($pkg_config --cflags $gtkpackage)
286889138857SStefan Weil        gtk_libs=$($pkg_config --libs $gtkpackage)
286989138857SStefan Weil        gtk_version=$($pkg_config --modversion $gtkpackage)
28700a337ed0SGerd Hoffmann        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
28718781595bSGerd Hoffmann            need_x11=yes
2872f676c67eSJeremy White            gtk_cflags="$gtk_cflags $x11_cflags"
2873f676c67eSJeremy White            gtk_libs="$gtk_libs $x11_libs"
28740a337ed0SGerd Hoffmann        fi
2875bbbf9bfbSStefan Weil        gtk="yes"
2876bbbf9bfbSStefan Weil    elif test "$gtk" = "yes"; then
28775fe309ffSGerd Hoffmann        feature_not_found "gtk" "Install gtk3-devel"
2878bbbf9bfbSStefan Weil    else
2879bbbf9bfbSStefan Weil        gtk="no"
2880bbbf9bfbSStefan Weil    fi
2881bbbf9bfbSStefan Weilfi
2882bbbf9bfbSStefan Weil
2883ddbb0d09SDaniel P. Berrange
2884ddbb0d09SDaniel P. Berrange##########################################
2885ddbb0d09SDaniel P. Berrange# GNUTLS probe
2886ddbb0d09SDaniel P. Berrange
2887ddbb0d09SDaniel P. Berrangeif test "$gnutls" != "no"; then
2888a73e82efSRichard Henderson    pass="no"
2889a0722409SDaniel P. Berrangé    if $pkg_config --exists "gnutls >= 3.1.18"; then
289089138857SStefan Weil        gnutls_cflags=$($pkg_config --cflags gnutls)
289189138857SStefan Weil        gnutls_libs=$($pkg_config --libs gnutls)
2892a73e82efSRichard Henderson        # Packaging for the static libraries is not always correct.
2893a73e82efSRichard Henderson        # At least ubuntu 18.04 ships only shared libraries.
2894a73e82efSRichard Henderson        write_c_skeleton
2895a73e82efSRichard Henderson        if compile_prog "" "$gnutls_libs" ; then
2896a73e82efSRichard Henderson            pass="yes"
2897a73e82efSRichard Henderson        fi
2898a73e82efSRichard Henderson    fi
2899a73e82efSRichard Henderson    if test "$pass" = "no" && test "$gnutls" = "yes"; then
2900a0722409SDaniel P. Berrangé	feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2901ddbb0d09SDaniel P. Berrange    else
2902a73e82efSRichard Henderson        gnutls="$pass"
2903ddbb0d09SDaniel P. Berrange    fi
2904ddbb0d09SDaniel P. Berrangefi
2905ddbb0d09SDaniel P. Berrange
290691bfcdb0SDaniel P. Berrange
290791bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-gcrypt flag,
290891bfcdb0SDaniel P. Berrange# then mark as disabled if user requested nettle
2909a0722409SDaniel P. Berrangé# explicitly
291091bfcdb0SDaniel P. Berrangeif test -z "$gcrypt"
291191bfcdb0SDaniel P. Berrangethen
2912a0722409SDaniel P. Berrangé    if test "$nettle" = "yes"
291391bfcdb0SDaniel P. Berrange    then
291491bfcdb0SDaniel P. Berrange        gcrypt="no"
291591bfcdb0SDaniel P. Berrange    fi
291691bfcdb0SDaniel P. Berrangefi
291791bfcdb0SDaniel P. Berrange
291891bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-nettle flag,
291991bfcdb0SDaniel P. Berrange# then mark as disabled if user requested gcrypt
2920a0722409SDaniel P. Berrangé# explicitly
292191bfcdb0SDaniel P. Berrangeif test -z "$nettle"
292291bfcdb0SDaniel P. Berrangethen
2923a0722409SDaniel P. Berrangé    if test "$gcrypt" = "yes"
292491bfcdb0SDaniel P. Berrange    then
292591bfcdb0SDaniel P. Berrange        nettle="no"
292691bfcdb0SDaniel P. Berrange    fi
292791bfcdb0SDaniel P. Berrangefi
292891bfcdb0SDaniel P. Berrange
2929dea7a64eSDaniel P. Berrangéhas_libgcrypt() {
293091bfcdb0SDaniel P. Berrange    if ! has "libgcrypt-config"
293191bfcdb0SDaniel P. Berrange    then
293291bfcdb0SDaniel P. Berrange	return 1
293391bfcdb0SDaniel P. Berrange    fi
293491bfcdb0SDaniel P. Berrange
293591bfcdb0SDaniel P. Berrange    if test -n "$cross_prefix"
293691bfcdb0SDaniel P. Berrange    then
293789138857SStefan Weil	host=$(libgcrypt-config --host)
293891bfcdb0SDaniel P. Berrange	if test "$host-" != $cross_prefix
293991bfcdb0SDaniel P. Berrange	then
294091bfcdb0SDaniel P. Berrange	    return 1
294191bfcdb0SDaniel P. Berrange	fi
294291bfcdb0SDaniel P. Berrange    fi
294391bfcdb0SDaniel P. Berrange
2944dea7a64eSDaniel P. Berrangé    maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2945dea7a64eSDaniel P. Berrangé    min=`libgcrypt-config --version | awk -F . '{print $2}'`
2946dea7a64eSDaniel P. Berrangé
2947dea7a64eSDaniel P. Berrangé    if test $maj != 1 || test $min -lt 5
2948dea7a64eSDaniel P. Berrangé    then
2949dea7a64eSDaniel P. Berrangé       return 1
2950dea7a64eSDaniel P. Berrangé    fi
2951dea7a64eSDaniel P. Berrangé
295291bfcdb0SDaniel P. Berrange    return 0
295391bfcdb0SDaniel P. Berrange}
295491bfcdb0SDaniel P. Berrange
2955a0722409SDaniel P. Berrangé
2956a0722409SDaniel P. Berrangéif test "$nettle" != "no"; then
2957a73e82efSRichard Henderson    pass="no"
295864dd2f3bSDaniel P. Berrangé    if $pkg_config --exists "nettle >= 2.7.1"; then
2959a0722409SDaniel P. Berrangé        nettle_cflags=$($pkg_config --cflags nettle)
2960a0722409SDaniel P. Berrangé        nettle_libs=$($pkg_config --libs nettle)
2961a0722409SDaniel P. Berrangé        nettle_version=$($pkg_config --modversion nettle)
2962a73e82efSRichard Henderson        # Link test to make sure the given libraries work (e.g for static).
2963a73e82efSRichard Henderson        write_c_skeleton
2964a73e82efSRichard Henderson        if compile_prog "" "$nettle_libs" ; then
2965a0722409SDaniel P. Berrangé            if test -z "$gcrypt"; then
2966a0722409SDaniel P. Berrangé               gcrypt="no"
2967a0722409SDaniel P. Berrangé            fi
2968a73e82efSRichard Henderson            pass="yes"
2969a73e82efSRichard Henderson        fi
2970a73e82efSRichard Henderson    fi
2971dc2207afSDaniel P. Berrangé    if test "$pass" = "yes"
2972dc2207afSDaniel P. Berrangé    then
2973dc2207afSDaniel P. Berrangé        cat > $TMPC << EOF
2974dc2207afSDaniel P. Berrangé#include <nettle/xts.h>
2975dc2207afSDaniel P. Berrangéint main(void) {
2976dc2207afSDaniel P. Berrangé  return 0;
2977dc2207afSDaniel P. Berrangé}
2978dc2207afSDaniel P. BerrangéEOF
2979dc2207afSDaniel P. Berrangé        if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2980dc2207afSDaniel P. Berrangé            nettle_xts=yes
2981dc2207afSDaniel P. Berrangé            qemu_private_xts=no
2982dc2207afSDaniel P. Berrangé        fi
2983dc2207afSDaniel P. Berrangé    fi
2984a73e82efSRichard Henderson    if test "$pass" = "no" && test "$nettle" = "yes"; then
298564dd2f3bSDaniel P. Berrangé        feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2986a0722409SDaniel P. Berrangé    else
2987a73e82efSRichard Henderson        nettle="$pass"
2988a0722409SDaniel P. Berrangé    fi
2989a0722409SDaniel P. Berrangéfi
2990a0722409SDaniel P. Berrangé
299191bfcdb0SDaniel P. Berrangeif test "$gcrypt" != "no"; then
2992a73e82efSRichard Henderson    pass="no"
2993dea7a64eSDaniel P. Berrangé    if has_libgcrypt; then
299489138857SStefan Weil        gcrypt_cflags=$(libgcrypt-config --cflags)
299589138857SStefan Weil        gcrypt_libs=$(libgcrypt-config --libs)
2996a73e82efSRichard Henderson        # Debian has removed -lgpg-error from libgcrypt-config
299791bfcdb0SDaniel P. Berrange        # as it "spreads unnecessary dependencies" which in
299891bfcdb0SDaniel P. Berrange        # turn breaks static builds...
299991bfcdb0SDaniel P. Berrange        if test "$static" = "yes"
300091bfcdb0SDaniel P. Berrange        then
300191bfcdb0SDaniel P. Berrange            gcrypt_libs="$gcrypt_libs -lgpg-error"
300291bfcdb0SDaniel P. Berrange        fi
30031f923c70SLongpeng(Mike)
3004a73e82efSRichard Henderson        # Link test to make sure the given libraries work (e.g for static).
3005a73e82efSRichard Henderson        write_c_skeleton
3006a73e82efSRichard Henderson        if compile_prog "" "$gcrypt_libs" ; then
3007a73e82efSRichard Henderson            pass="yes"
3008a73e82efSRichard Henderson        fi
3009a73e82efSRichard Henderson    fi
3010a73e82efSRichard Henderson    if test "$pass" = "yes"; then
301137788f25SDaniel P. Berrange        gcrypt="yes"
30121f923c70SLongpeng(Mike)        cat > $TMPC << EOF
30131f923c70SLongpeng(Mike)#include <gcrypt.h>
30141f923c70SLongpeng(Mike)int main(void) {
30151f923c70SLongpeng(Mike)  gcry_mac_hd_t handle;
30161f923c70SLongpeng(Mike)  gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
30171f923c70SLongpeng(Mike)                GCRY_MAC_FLAG_SECURE, NULL);
30181f923c70SLongpeng(Mike)  return 0;
30191f923c70SLongpeng(Mike)}
30201f923c70SLongpeng(Mike)EOF
30211f923c70SLongpeng(Mike)        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
30221f923c70SLongpeng(Mike)            gcrypt_hmac=yes
30231f923c70SLongpeng(Mike)        fi
3024e0576942SDaniel P. Berrangé        cat > $TMPC << EOF
3025e0576942SDaniel P. Berrangé#include <gcrypt.h>
3026e0576942SDaniel P. Berrangéint main(void) {
3027e0576942SDaniel P. Berrangé  gcry_cipher_hd_t handle;
3028e0576942SDaniel P. Berrangé  gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3029e0576942SDaniel P. Berrangé  return 0;
3030e0576942SDaniel P. Berrangé}
3031e0576942SDaniel P. BerrangéEOF
3032e0576942SDaniel P. Berrangé        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3033e0576942SDaniel P. Berrangé            gcrypt_xts=yes
3034e0576942SDaniel P. Berrangé            qemu_private_xts=no
3035e0576942SDaniel P. Berrangé        fi
3036a73e82efSRichard Henderson    elif test "$gcrypt" = "yes"; then
3037dea7a64eSDaniel P. Berrangé        feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
303891bfcdb0SDaniel P. Berrange    else
303991bfcdb0SDaniel P. Berrange        gcrypt="no"
304091bfcdb0SDaniel P. Berrange    fi
304162893b67SDaniel P. Berrangefi
304262893b67SDaniel P. Berrange
3043ddbb0d09SDaniel P. Berrange
304491bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" && test "$nettle" = "yes"
304591bfcdb0SDaniel P. Berrangethen
304691bfcdb0SDaniel P. Berrange    error_exit "Only one of gcrypt & nettle can be enabled"
304791bfcdb0SDaniel P. Berrangefi
3048ed754746SDaniel P. Berrange
30499a2fd434SDaniel P. Berrange##########################################
30509a2fd434SDaniel P. Berrange# libtasn1 - only for the TLS creds/session test suite
30519a2fd434SDaniel P. Berrange
30529a2fd434SDaniel P. Berrangetasn1=yes
305390246037SDaniel P. Berrangetasn1_cflags=""
305490246037SDaniel P. Berrangetasn1_libs=""
30559a2fd434SDaniel P. Berrangeif $pkg_config --exists "libtasn1"; then
305689138857SStefan Weil    tasn1_cflags=$($pkg_config --cflags libtasn1)
305789138857SStefan Weil    tasn1_libs=$($pkg_config --libs libtasn1)
30589a2fd434SDaniel P. Berrangeelse
30599a2fd434SDaniel P. Berrange    tasn1=no
30609a2fd434SDaniel P. Berrangefi
30619a2fd434SDaniel P. Berrange
3062ed754746SDaniel P. Berrange
3063bbbf9bfbSStefan Weil##########################################
30648953caf3SDaniel P. Berrange# PAM probe
30658953caf3SDaniel P. Berrange
30668953caf3SDaniel P. Berrangeif test "$auth_pam" != "no"; then
30678953caf3SDaniel P. Berrange    cat > $TMPC <<EOF
30688953caf3SDaniel P. Berrange#include <security/pam_appl.h>
30698953caf3SDaniel P. Berrange#include <stdio.h>
30708953caf3SDaniel P. Berrangeint main(void) {
30718953caf3SDaniel P. Berrange   const char *service_name = "qemu";
30728953caf3SDaniel P. Berrange   const char *user = "frank";
30739c9642d0SDr. David Alan Gilbert   const struct pam_conv pam_conv = { 0 };
30748953caf3SDaniel P. Berrange   pam_handle_t *pamh = NULL;
30759c9642d0SDr. David Alan Gilbert   pam_start(service_name, user, &pam_conv, &pamh);
30768953caf3SDaniel P. Berrange   return 0;
30778953caf3SDaniel P. Berrange}
30788953caf3SDaniel P. BerrangeEOF
30798953caf3SDaniel P. Berrange    if compile_prog "" "-lpam" ; then
30808953caf3SDaniel P. Berrange        auth_pam=yes
30818953caf3SDaniel P. Berrange    else
30828953caf3SDaniel P. Berrange        if test "$auth_pam" = "yes"; then
30838953caf3SDaniel P. Berrange            feature_not_found "PAM" "Install PAM development package"
30848953caf3SDaniel P. Berrange        else
30858953caf3SDaniel P. Berrange            auth_pam=no
30868953caf3SDaniel P. Berrange        fi
30878953caf3SDaniel P. Berrange    fi
30888953caf3SDaniel P. Berrangefi
30898953caf3SDaniel P. Berrange
3090559607eaSDaniel P. Berrange##########################################
3091bbbf9bfbSStefan Weil# VTE probe
3092bbbf9bfbSStefan Weil
3093bbbf9bfbSStefan Weilif test "$vte" != "no"; then
3094c6feff9eSCole Robinson    vteminversion="0.32.0"
3095c6feff9eSCole Robinson    if $pkg_config --exists "vte-2.91"; then
3096c6feff9eSCole Robinson      vtepackage="vte-2.91"
3097c6feff9eSCole Robinson    else
3098528de90aSDaniel P. Berrange      vtepackage="vte-2.90"
3099c6feff9eSCole Robinson    fi
3100c6feff9eSCole Robinson    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
310189138857SStefan Weil        vte_cflags=$($pkg_config --cflags $vtepackage)
310289138857SStefan Weil        vte_libs=$($pkg_config --libs $vtepackage)
310389138857SStefan Weil        vteversion=$($pkg_config --modversion $vtepackage)
3104bbbf9bfbSStefan Weil        vte="yes"
3105bbbf9bfbSStefan Weil    elif test "$vte" = "yes"; then
3106c6feff9eSCole Robinson        feature_not_found "vte" "Install libvte-2.90/2.91 devel"
31079e04c683SStefan Weil    else
3108bbbf9bfbSStefan Weil        vte="no"
3109a4ccabcfSAnthony Liguori    fi
3110a4ccabcfSAnthony Liguorifi
3111a4ccabcfSAnthony Liguori
3112a4ccabcfSAnthony Liguori##########################################
31132da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
31142da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
31152da776dbSMichael R. Hines  cat > $TMPC <<EOF
31162da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
31172da776dbSMichael R. Hinesint main(void) { return 0; }
31182da776dbSMichael R. HinesEOF
3119ef6d4ccdSYuval Shaia  rdma_libs="-lrdmacm -libverbs -libumad"
31202da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
31212da776dbSMichael R. Hines    rdma="yes"
31222da776dbSMichael R. Hines  else
31232da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
31242da776dbSMichael R. Hines        error_exit \
3125ef6d4ccdSYuval Shaia            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
31262da776dbSMichael R. Hines            " Your options:" \
3127ef6d4ccdSYuval Shaia            "  (1) Fast: Install infiniband packages (devel) from your distro." \
31282da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
31292da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
31302da776dbSMichael R. Hines    fi
31312da776dbSMichael R. Hines    rdma="no"
31322da776dbSMichael R. Hines  fi
31332da776dbSMichael R. Hinesfi
31342da776dbSMichael R. Hines
313521ab34c9SMarcel Apfelbaum##########################################
313621ab34c9SMarcel Apfelbaum# PVRDMA detection
313721ab34c9SMarcel Apfelbaum
313821ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF &&
313921ab34c9SMarcel Apfelbaum#include <sys/mman.h>
314021ab34c9SMarcel Apfelbaum
314121ab34c9SMarcel Apfelbaumint
314221ab34c9SMarcel Apfelbaummain(void)
314321ab34c9SMarcel Apfelbaum{
314421ab34c9SMarcel Apfelbaum    char buf = 0;
314521ab34c9SMarcel Apfelbaum    void *addr = &buf;
314621ab34c9SMarcel Apfelbaum    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
314721ab34c9SMarcel Apfelbaum
314821ab34c9SMarcel Apfelbaum    return 0;
314921ab34c9SMarcel Apfelbaum}
315021ab34c9SMarcel ApfelbaumEOF
315121ab34c9SMarcel Apfelbaum
315221ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then
315321ab34c9SMarcel Apfelbaum    case "$pvrdma" in
315421ab34c9SMarcel Apfelbaum    "")
315521ab34c9SMarcel Apfelbaum        if compile_prog "" ""; then
315621ab34c9SMarcel Apfelbaum            pvrdma="yes"
315721ab34c9SMarcel Apfelbaum        else
315821ab34c9SMarcel Apfelbaum            pvrdma="no"
315921ab34c9SMarcel Apfelbaum        fi
316021ab34c9SMarcel Apfelbaum        ;;
316121ab34c9SMarcel Apfelbaum    "yes")
316221ab34c9SMarcel Apfelbaum        if ! compile_prog "" ""; then
316321ab34c9SMarcel Apfelbaum            error_exit "PVRDMA is not supported since mremap is not implemented"
316421ab34c9SMarcel Apfelbaum        fi
316521ab34c9SMarcel Apfelbaum        pvrdma="yes"
316621ab34c9SMarcel Apfelbaum        ;;
316721ab34c9SMarcel Apfelbaum    "no")
316821ab34c9SMarcel Apfelbaum        pvrdma="no"
316921ab34c9SMarcel Apfelbaum        ;;
317021ab34c9SMarcel Apfelbaum    esac
317121ab34c9SMarcel Apfelbaumelse
317221ab34c9SMarcel Apfelbaum    if test "$pvrdma" = "yes" ; then
317321ab34c9SMarcel Apfelbaum        error_exit "PVRDMA requires rdma suppport"
317421ab34c9SMarcel Apfelbaum    fi
317521ab34c9SMarcel Apfelbaum    pvrdma="no"
317621ab34c9SMarcel Apfelbaumfi
317795c6bff3SBenoît Canet
3178ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported
3179ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then
3180ee108585SYuval Shaia
3181ee108585SYuval Shaiacat > $TMPC <<EOF &&
3182ee108585SYuval Shaia#include <infiniband/verbs.h>
3183ee108585SYuval Shaia
3184ee108585SYuval Shaiaint
3185ee108585SYuval Shaiamain(void)
3186ee108585SYuval Shaia{
3187ee108585SYuval Shaia    struct ibv_mr *mr;
3188ee108585SYuval Shaia    struct ibv_pd *pd = NULL;
3189ee108585SYuval Shaia    size_t length = 10;
3190ee108585SYuval Shaia    uint64_t iova = 0;
3191ee108585SYuval Shaia    int access = 0;
3192ee108585SYuval Shaia    void *addr = NULL;
3193ee108585SYuval Shaia
3194ee108585SYuval Shaia    mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3195ee108585SYuval Shaia
3196ee108585SYuval Shaia    ibv_dereg_mr(mr);
3197ee108585SYuval Shaia
3198ee108585SYuval Shaia    return 0;
3199ee108585SYuval Shaia}
3200ee108585SYuval ShaiaEOF
3201ee108585SYuval Shaia    if ! compile_prog "" "-libverbs"; then
3202ee108585SYuval Shaia        QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3203ee108585SYuval Shaia    fi
3204ee108585SYuval Shaiafi
3205ee108585SYuval Shaia
320695c6bff3SBenoît Canet##########################################
3207c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c
3208dce512deSChristoph Hellwigif test "$xfs" != "no" ; then
3209dce512deSChristoph Hellwig  cat > $TMPC << EOF
3210ffc41d10SStefan Weil#include <stddef.h>  /* NULL */
3211dce512deSChristoph Hellwig#include <xfs/xfs.h>
3212dce512deSChristoph Hellwigint main(void)
3213dce512deSChristoph Hellwig{
3214dce512deSChristoph Hellwig    xfsctl(NULL, 0, 0, NULL);
3215dce512deSChristoph Hellwig    return 0;
3216dce512deSChristoph Hellwig}
3217dce512deSChristoph HellwigEOF
3218dce512deSChristoph Hellwig  if compile_prog "" "" ; then
3219dce512deSChristoph Hellwig    xfs="yes"
3220dce512deSChristoph Hellwig  else
3221dce512deSChristoph Hellwig    if test "$xfs" = "yes" ; then
3222e3a6e0daSzhaolichang      feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3223dce512deSChristoph Hellwig    fi
3224dce512deSChristoph Hellwig    xfs=no
3225dce512deSChristoph Hellwig  fi
3226dce512deSChristoph Hellwigfi
3227dce512deSChristoph Hellwig
3228dce512deSChristoph Hellwig##########################################
32298a16d273Sths# vde libraries probe
3230dfb278bdSJuan Quintelaif test "$vde" != "no" ; then
32314baae0acSJuan Quintela  vde_libs="-lvdeplug"
32328a16d273Sths  cat > $TMPC << EOF
32338a16d273Sths#include <libvdeplug.h>
32344a7f0e06Spbrookint main(void)
32354a7f0e06Spbrook{
32364a7f0e06Spbrook    struct vde_open_args a = {0, 0, 0};
3237fea08e08SPeter Maydell    char s[] = "";
3238fea08e08SPeter Maydell    vde_open(s, s, &a);
32394a7f0e06Spbrook    return 0;
32404a7f0e06Spbrook}
32418a16d273SthsEOF
324252166aa0SJuan Quintela  if compile_prog "" "$vde_libs" ; then
32434baae0acSJuan Quintela    vde=yes
3244dfb278bdSJuan Quintela  else
3245dfb278bdSJuan Quintela    if test "$vde" = "yes" ; then
324621684af0SStewart Smith      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3247dfb278bdSJuan Quintela    fi
3248dfb278bdSJuan Quintela    vde=no
32498a16d273Sths  fi
32508a16d273Sthsfi
32518a16d273Sths
32528a16d273Sths##########################################
32530a985b37SVincenzo Maffione# netmap support probe
32540a985b37SVincenzo Maffione# Apart from looking for netmap headers, we make sure that the host API version
32550a985b37SVincenzo Maffione# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
32560a985b37SVincenzo Maffione# a minor/major version number. Minor new features will be marked with values up
32570a985b37SVincenzo Maffione# to 15, and if something happens that requires a change to the backend we will
32580a985b37SVincenzo Maffione# move above 15, submit the backend fixes and modify this two bounds.
325958952137SVincenzo Maffioneif test "$netmap" != "no" ; then
326058952137SVincenzo Maffione  cat > $TMPC << EOF
326158952137SVincenzo Maffione#include <inttypes.h>
326258952137SVincenzo Maffione#include <net/if.h>
326358952137SVincenzo Maffione#include <net/netmap.h>
326458952137SVincenzo Maffione#include <net/netmap_user.h>
32650a985b37SVincenzo Maffione#if (NETMAP_API < 11) || (NETMAP_API > 15)
32660a985b37SVincenzo Maffione#error
32670a985b37SVincenzo Maffione#endif
326858952137SVincenzo Maffioneint main(void) { return 0; }
326958952137SVincenzo MaffioneEOF
327058952137SVincenzo Maffione  if compile_prog "" "" ; then
327158952137SVincenzo Maffione    netmap=yes
327258952137SVincenzo Maffione  else
327358952137SVincenzo Maffione    if test "$netmap" = "yes" ; then
327458952137SVincenzo Maffione      feature_not_found "netmap"
327558952137SVincenzo Maffione    fi
327658952137SVincenzo Maffione    netmap=no
327758952137SVincenzo Maffione  fi
327858952137SVincenzo Maffionefi
327958952137SVincenzo Maffione
328058952137SVincenzo Maffione##########################################
328147e98658SCorey Bryant# libcap-ng library probe
328247e98658SCorey Bryantif test "$cap_ng" != "no" ; then
328347e98658SCorey Bryant  cap_libs="-lcap-ng"
328447e98658SCorey Bryant  cat > $TMPC << EOF
328547e98658SCorey Bryant#include <cap-ng.h>
328647e98658SCorey Bryantint main(void)
328747e98658SCorey Bryant{
328847e98658SCorey Bryant    capng_capability_to_name(CAPNG_EFFECTIVE);
328947e98658SCorey Bryant    return 0;
329047e98658SCorey Bryant}
329147e98658SCorey BryantEOF
329247e98658SCorey Bryant  if compile_prog "" "$cap_libs" ; then
329347e98658SCorey Bryant    cap_ng=yes
329447e98658SCorey Bryant  else
329547e98658SCorey Bryant    if test "$cap_ng" = "yes" ; then
329621684af0SStewart Smith      feature_not_found "cap_ng" "Install libcap-ng devel"
329747e98658SCorey Bryant    fi
329847e98658SCorey Bryant    cap_ng=no
329947e98658SCorey Bryant  fi
330047e98658SCorey Bryantfi
330147e98658SCorey Bryant
330247e98658SCorey Bryant##########################################
3303c2de5c91Smalc# Sound support libraries probe
33048f28f3fbSths
330589138857SStefan Weilaudio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3306c2de5c91Smalcfor drv in $audio_drv_list; do
3307c2de5c91Smalc    case $drv in
3308e42975a1SGerd Hoffmann    alsa | try-alsa)
3309c80a867fSGerd Hoffmann    if $pkg_config alsa --exists; then
3310c80a867fSGerd Hoffmann        alsa_libs=$($pkg_config alsa --libs)
3311478e943fSPaolo Bonzini        alsa_cflags=$($pkg_config alsa --cflags)
3312478e943fSPaolo Bonzini        alsa=yes
3313e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3314e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3315e42975a1SGerd Hoffmann        fi
3316e42975a1SGerd Hoffmann    else
3317e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3318e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3319c80a867fSGerd Hoffmann        else
3320c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3321c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3322c80a867fSGerd Hoffmann        fi
3323e42975a1SGerd Hoffmann    fi
3324c2de5c91Smalc    ;;
3325c2de5c91Smalc
3326e42975a1SGerd Hoffmann    pa | try-pa)
3327c80a867fSGerd Hoffmann    if $pkg_config libpulse --exists; then
3328478e943fSPaolo Bonzini        libpulse=yes
3329c80a867fSGerd Hoffmann        pulse_libs=$($pkg_config libpulse --libs)
3330478e943fSPaolo Bonzini        pulse_cflags=$($pkg_config libpulse --cflags)
3331e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3332e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3333e42975a1SGerd Hoffmann        fi
3334e42975a1SGerd Hoffmann    else
3335e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3336e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3337c80a867fSGerd Hoffmann        else
3338c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3339c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3340c80a867fSGerd Hoffmann        fi
3341e42975a1SGerd Hoffmann    fi
3342b8e59f18Smalc    ;;
3343b8e59f18Smalc
3344373967b2SGerd Hoffmann    sdl)
3345373967b2SGerd Hoffmann    if test "$sdl" = "no"; then
3346373967b2SGerd Hoffmann        error_exit "sdl not found or disabled, can not use sdl audio driver"
3347373967b2SGerd Hoffmann    fi
3348373967b2SGerd Hoffmann    ;;
3349373967b2SGerd Hoffmann
3350e42975a1SGerd Hoffmann    try-sdl)
3351e42975a1SGerd Hoffmann    if test "$sdl" = "no"; then
3352e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3353e42975a1SGerd Hoffmann    else
3354e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3355e42975a1SGerd Hoffmann    fi
3356e42975a1SGerd Hoffmann    ;;
3357e42975a1SGerd Hoffmann
3358997e690aSJuan Quintela    coreaudio)
3359b1149911SFam Zheng      coreaudio_libs="-framework CoreAudio"
3360997e690aSJuan Quintela    ;;
3361997e690aSJuan Quintela
3362a4bf6780SJuan Quintela    dsound)
3363b1149911SFam Zheng      dsound_libs="-lole32 -ldxguid"
3364d5631638Smalc      audio_win_int="yes"
3365a4bf6780SJuan Quintela    ;;
3366a4bf6780SJuan Quintela
3367a4bf6780SJuan Quintela    oss)
3368b1149911SFam Zheng      oss_libs="$oss_lib"
3369a4bf6780SJuan Quintela    ;;
3370a4bf6780SJuan Quintela
33712e445703SGeoffrey McRae    jack | try-jack)
33722e445703SGeoffrey McRae    if $pkg_config jack --exists; then
3373478e943fSPaolo Bonzini        libjack=yes
33742e445703SGeoffrey McRae        jack_libs=$($pkg_config jack --libs)
33752e445703SGeoffrey McRae        if test "$drv" = "try-jack"; then
33762e445703SGeoffrey McRae            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
33772e445703SGeoffrey McRae        fi
33782e445703SGeoffrey McRae    else
33792e445703SGeoffrey McRae        if test "$drv" = "try-jack"; then
33802e445703SGeoffrey McRae            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
33812e445703SGeoffrey McRae        else
33822e445703SGeoffrey McRae            error_exit "$drv check failed" \
33832e445703SGeoffrey McRae                "Make sure to have the $drv libs and headers installed."
33842e445703SGeoffrey McRae        fi
33852e445703SGeoffrey McRae    fi
33862e445703SGeoffrey McRae    ;;
33872e445703SGeoffrey McRae
3388e4c63a6aSmalc    *)
33891c9b2a52Smalc    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
339076ad07a4SPeter Maydell        error_exit "Unknown driver '$drv' selected" \
339176ad07a4SPeter Maydell            "Possible drivers are: $audio_possible_drivers"
3392e4c63a6aSmalc    }
3393e4c63a6aSmalc    ;;
3394c2de5c91Smalc    esac
3395c2de5c91Smalcdone
33968f28f3fbSths
33974d3b6f6eSbalrog##########################################
33982e4d9fb1Saurel32# BrlAPI probe
33992e4d9fb1Saurel32
34004ffcedb6SJuan Quintelaif test "$brlapi" != "no" ; then
3401eb82284fSJuan Quintela  brlapi_libs="-lbrlapi"
34022e4d9fb1Saurel32  cat > $TMPC << EOF
34032e4d9fb1Saurel32#include <brlapi.h>
3404832ce9c2SScott Wood#include <stddef.h>
34052e4d9fb1Saurel32int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
34062e4d9fb1Saurel32EOF
340752166aa0SJuan Quintela  if compile_prog "" "$brlapi_libs" ; then
34082e4d9fb1Saurel32    brlapi=yes
34094ffcedb6SJuan Quintela  else
34104ffcedb6SJuan Quintela    if test "$brlapi" = "yes" ; then
341121684af0SStewart Smith      feature_not_found "brlapi" "Install brlapi devel"
34124ffcedb6SJuan Quintela    fi
34134ffcedb6SJuan Quintela    brlapi=no
3414eb82284fSJuan Quintela  fi
3415eb82284fSJuan Quintelafi
34162e4d9fb1Saurel32
34172e4d9fb1Saurel32##########################################
3418769ce76dSAlexander Graf# curl probe
3419a3605bf6SMichael Tokarevif test "$curl" != "no" ; then
342065d5d3f9SStefan Weil  if $pkg_config libcurl --exists; then
3421a8bd70adSPaolo Bonzini    curlconfig="$pkg_config libcurl"
34224e2b0658SPaolo Bonzini  else
34234e2b0658SPaolo Bonzini    curlconfig=curl-config
34244e2b0658SPaolo Bonzini  fi
3425769ce76dSAlexander Graf  cat > $TMPC << EOF
3426769ce76dSAlexander Graf#include <curl/curl.h>
34270b862cedSPeter Maydellint main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3428769ce76dSAlexander GrafEOF
342989138857SStefan Weil  curl_cflags=$($curlconfig --cflags 2>/dev/null)
343089138857SStefan Weil  curl_libs=$($curlconfig --libs 2>/dev/null)
3431b1d5a277SJuan Quintela  if compile_prog "$curl_cflags" "$curl_libs" ; then
3432769ce76dSAlexander Graf    curl=yes
3433788c8196SJuan Quintela  else
3434788c8196SJuan Quintela    if test "$curl" = "yes" ; then
343521684af0SStewart Smith      feature_not_found "curl" "Install libcurl devel"
3436788c8196SJuan Quintela    fi
3437788c8196SJuan Quintela    curl=no
3438769ce76dSAlexander Graf  fi
3439769ce76dSAlexander Graffi # test "$curl"
3440769ce76dSAlexander Graf
3441769ce76dSAlexander Graf##########################################
3442e18df141SAnthony Liguori# glib support probe
3443a52d28afSPaolo Bonzini
344400f2cfbbSDaniel P. Berrangéglib_req_ver=2.48
3445aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
3446aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
3447a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
3448aa0d1f44SPaolo Bonzinifi
344954cb65d8SEmilio G. Cotaif test "$plugins" = yes; then
345054cb65d8SEmilio G. Cota    glib_modules="$glib_modules gmodule-2.0"
345154cb65d8SEmilio G. Cotafi
3452e26110cfSFam Zheng
3453aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
3454e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
345589138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
345689138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
3457e18df141SAnthony Liguori    else
3458e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3459e26110cfSFam Zheng    fi
3460e26110cfSFam Zhengdone
3461e26110cfSFam Zheng
3462215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it
3463215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3464215b0c2fSPaolo Bonzini
3465215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then
3466215b0c2fSPaolo Bonzini    glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3467215b0c2fSPaolo Bonzinifi
3468215b0c2fSPaolo Bonzini
3469f876b765SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3470f876b765SMarc-André Lureau    gio_cflags=$($pkg_config --cflags gio-2.0)
3471f876b765SMarc-André Lureau    gio_libs=$($pkg_config --libs gio-2.0)
347225a97a56SMarc-André Lureau    gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
34730dba4897SMarc-André Lureau    if [ ! -x "$gdbus_codegen" ]; then
34740dba4897SMarc-André Lureau        gdbus_codegen=
34750dba4897SMarc-André Lureau    fi
347676346b62SPeter Maydell    # Check that the libraries actually work -- Ubuntu 18.04 ships
347776346b62SPeter Maydell    # with pkg-config --static --libs data for gio-2.0 that is missing
347876346b62SPeter Maydell    # -lblkid and will give a link error.
347913ceae66SPeter Maydell    cat > $TMPC <<EOF
348013ceae66SPeter Maydell#include <gio/gio.h>
348113ceae66SPeter Maydellint main(void)
348213ceae66SPeter Maydell{
348313ceae66SPeter Maydell    g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
348413ceae66SPeter Maydell    return 0;
348513ceae66SPeter Maydell}
348613ceae66SPeter MaydellEOF
348713ceae66SPeter Maydell    if compile_prog "$gio_cflags" "$gio_libs" ; then
348876346b62SPeter Maydell        gio=yes
348976346b62SPeter Maydell    else
349076346b62SPeter Maydell        gio=no
349176346b62SPeter Maydell    fi
3492f876b765SMarc-André Lureauelse
3493f876b765SMarc-André Lureau    gio=no
3494f876b765SMarc-André Lureaufi
3495f876b765SMarc-André Lureau
349625a97a56SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
349725a97a56SMarc-André Lureau    gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
349825a97a56SMarc-André Lureau    gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
349925a97a56SMarc-André Lureaufi
350025a97a56SMarc-André Lureau
3501977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
3502977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
3503977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
3504977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
3505977a82abSDaniel P. Berrangecat > $TMPC <<EOF
3506977a82abSDaniel P. Berrange#include <glib.h>
3507977a82abSDaniel P. Berrange#include <unistd.h>
3508977a82abSDaniel P. Berrange
3509977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
3510977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3511977a82abSDaniel P. Berrange
3512977a82abSDaniel P. Berrangeint main(void) {
3513977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3514977a82abSDaniel P. Berrange   return 0;
3515977a82abSDaniel P. Berrange}
3516977a82abSDaniel P. BerrangeEOF
3517977a82abSDaniel P. Berrange
3518215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then
3519977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3520977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
3521977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
3522977a82abSDaniel P. Berrange	       "build target"
3523977a82abSDaniel P. Berrangefi
3524977a82abSDaniel P. Berrange
3525bbbf2e04SJohn Snow# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3526bbbf2e04SJohn Snowcat > $TMPC << EOF
3527bbbf2e04SJohn Snow#include <glib.h>
3528bbbf2e04SJohn Snowint main(void) { return 0; }
3529bbbf2e04SJohn SnowEOF
3530bbbf2e04SJohn Snowif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3531bbbf2e04SJohn Snow    if cc_has_warning_flag "-Wno-unknown-attributes"; then
3532bbbf2e04SJohn Snow        glib_cflags="-Wno-unknown-attributes $glib_cflags"
35335770e8afSPaolo Bonzini        CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3534bbbf2e04SJohn Snow    fi
3535bbbf2e04SJohn Snowfi
3536bbbf2e04SJohn Snow
35379bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2
35389bda600bSEric Blakecat > $TMPC << EOF
35399bda600bSEric Blake#include <glib.h>
35409bda600bSEric Blaketypedef struct Foo {
35419bda600bSEric Blake    int i;
35429bda600bSEric Blake} Foo;
35439bda600bSEric Blakestatic void foo_free(Foo *f)
35449bda600bSEric Blake{
35459bda600bSEric Blake    g_free(f);
35469bda600bSEric Blake}
35479bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
35489bda600bSEric Blakeint main(void) { return 0; }
35499bda600bSEric BlakeEOF
35509bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
35519bda600bSEric Blake    if cc_has_warning_flag "-Wno-unused-function"; then
35529bda600bSEric Blake        glib_cflags="$glib_cflags -Wno-unused-function"
35535770e8afSPaolo Bonzini        CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
35549bda600bSEric Blake    fi
35559bda600bSEric Blakefi
35569bda600bSEric Blake
3557e26110cfSFam Zheng##########################################
3558e26110cfSFam Zheng# SHA command probe for modules
3559e26110cfSFam Zhengif test "$modules" = yes; then
3560e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
3561e26110cfSFam Zheng    for c in $shacmd_probe; do
35628ccefb91SFam Zheng        if has $c; then
3563e26110cfSFam Zheng            shacmd="$c"
3564e26110cfSFam Zheng            break
3565e26110cfSFam Zheng        fi
3566e26110cfSFam Zheng    done
3567e26110cfSFam Zheng    if test "$shacmd" = ""; then
3568e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3569e26110cfSFam Zheng    fi
3570e18df141SAnthony Liguorifi
3571e18df141SAnthony Liguori
3572e18df141SAnthony Liguori##########################################
3573e5d355d1Saliguori# pthread probe
35744b29ec41SBradPTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
35753c529d93Saliguori
3576e5d355d1Saliguoripthread=no
3577414f0dabSblueswir1cat > $TMPC << EOF
35783c529d93Saliguori#include <pthread.h>
35797a42bbe4SStefan Weilstatic void *f(void *p) { return NULL; }
35807a42bbe4SStefan Weilint main(void) {
35817a42bbe4SStefan Weil  pthread_t thread;
35827a42bbe4SStefan Weil  pthread_create(&thread, 0, f, 0);
35837a42bbe4SStefan Weil  return 0;
35847a42bbe4SStefan Weil}
3585414f0dabSblueswir1EOF
3586bd00d539SAndreas Färberif compile_prog "" "" ; then
3587bd00d539SAndreas Färber  pthread=yes
3588bd00d539SAndreas Färberelse
3589de65fe0fSSebastian Herbszt  for pthread_lib in $PTHREADLIBS_LIST; do
359052166aa0SJuan Quintela    if compile_prog "" "$pthread_lib" ; then
3591e5d355d1Saliguori      pthread=yes
3592e3c56761SPeter Portante      found=no
3593e3c56761SPeter Portante      for lib_entry in $LIBS; do
3594e3c56761SPeter Portante        if test "$lib_entry" = "$pthread_lib"; then
3595e3c56761SPeter Portante          found=yes
3596e3c56761SPeter Portante          break
3597e3c56761SPeter Portante        fi
3598e3c56761SPeter Portante      done
3599e3c56761SPeter Portante      if test "$found" = "no"; then
36005572b539SJuan Quintela        LIBS="$pthread_lib $LIBS"
3601e3c56761SPeter Portante      fi
3602de65fe0fSSebastian Herbszt      break
3603414f0dabSblueswir1    fi
3604de65fe0fSSebastian Herbszt  done
3605bd00d539SAndreas Färberfi
3606414f0dabSblueswir1
3607e633a5c6SEric Blakeif test "$mingw32" != yes && test "$pthread" = no; then
360876ad07a4SPeter Maydell  error_exit "pthread check failed" \
360976ad07a4SPeter Maydell      "Make sure to have the pthread libs and headers installed."
3610e5d355d1Saliguorifi
3611e5d355d1Saliguori
3612479a5747SRoman Bolshakov# check for pthread_setname_np with thread id
3613479a5747SRoman Bolshakovpthread_setname_np_w_tid=no
36145c312079SDr. David Alan Gilbertcat > $TMPC << EOF
36155c312079SDr. David Alan Gilbert#include <pthread.h>
36165c312079SDr. David Alan Gilbert
36175c312079SDr. David Alan Gilbertstatic void *f(void *p) { return NULL; }
36185c312079SDr. David Alan Gilbertint main(void)
36195c312079SDr. David Alan Gilbert{
36205c312079SDr. David Alan Gilbert    pthread_t thread;
36215c312079SDr. David Alan Gilbert    pthread_create(&thread, 0, f, 0);
36225c312079SDr. David Alan Gilbert    pthread_setname_np(thread, "QEMU");
36235c312079SDr. David Alan Gilbert    return 0;
36245c312079SDr. David Alan Gilbert}
36255c312079SDr. David Alan GilbertEOF
36265c312079SDr. David Alan Gilbertif compile_prog "" "$pthread_lib" ; then
3627479a5747SRoman Bolshakov  pthread_setname_np_w_tid=yes
3628479a5747SRoman Bolshakovfi
3629479a5747SRoman Bolshakov
3630479a5747SRoman Bolshakov# check for pthread_setname_np without thread id
3631479a5747SRoman Bolshakovpthread_setname_np_wo_tid=no
3632479a5747SRoman Bolshakovcat > $TMPC << EOF
3633479a5747SRoman Bolshakov#include <pthread.h>
3634479a5747SRoman Bolshakov
363512a9b8d8SThomas Huthstatic void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3636479a5747SRoman Bolshakovint main(void)
3637479a5747SRoman Bolshakov{
3638479a5747SRoman Bolshakov    pthread_t thread;
3639479a5747SRoman Bolshakov    pthread_create(&thread, 0, f, 0);
3640479a5747SRoman Bolshakov    return 0;
3641479a5747SRoman Bolshakov}
3642479a5747SRoman BolshakovEOF
3643479a5747SRoman Bolshakovif compile_prog "" "$pthread_lib" ; then
3644479a5747SRoman Bolshakov  pthread_setname_np_wo_tid=yes
36455c312079SDr. David Alan Gilbertfi
36465c312079SDr. David Alan Gilbert
3647bf9298b9Saliguori##########################################
3648f27aaf4bSChristian Brunner# rbd probe
3649f27aaf4bSChristian Brunnerif test "$rbd" != "no" ; then
3650f27aaf4bSChristian Brunner  cat > $TMPC <<EOF
3651f27aaf4bSChristian Brunner#include <stdio.h>
3652ad32e9c0SJosh Durgin#include <rbd/librbd.h>
3653f27aaf4bSChristian Brunnerint main(void) {
3654ad32e9c0SJosh Durgin    rados_t cluster;
3655ad32e9c0SJosh Durgin    rados_create(&cluster, NULL);
3656f27aaf4bSChristian Brunner    return 0;
3657f27aaf4bSChristian Brunner}
3658f27aaf4bSChristian BrunnerEOF
3659ad32e9c0SJosh Durgin  rbd_libs="-lrbd -lrados"
3660f27aaf4bSChristian Brunner  if compile_prog "" "$rbd_libs" ; then
3661f27aaf4bSChristian Brunner    rbd=yes
3662f27aaf4bSChristian Brunner  else
3663f27aaf4bSChristian Brunner    if test "$rbd" = "yes" ; then
366421684af0SStewart Smith      feature_not_found "rados block device" "Install librbd/ceph devel"
3665f27aaf4bSChristian Brunner    fi
3666f27aaf4bSChristian Brunner    rbd=no
3667f27aaf4bSChristian Brunner  fi
3668f27aaf4bSChristian Brunnerfi
3669f27aaf4bSChristian Brunner
3670f27aaf4bSChristian Brunner##########################################
3671b10d49d7SPino Toscano# libssh probe
3672b10d49d7SPino Toscanoif test "$libssh" != "no" ; then
3673b10d49d7SPino Toscano  if $pkg_config --exists libssh; then
3674b10d49d7SPino Toscano    libssh_cflags=$($pkg_config libssh --cflags)
3675b10d49d7SPino Toscano    libssh_libs=$($pkg_config libssh --libs)
3676b10d49d7SPino Toscano    libssh=yes
36770a12ec87SRichard W.M. Jones  else
3678b10d49d7SPino Toscano    if test "$libssh" = "yes" ; then
3679b10d49d7SPino Toscano      error_exit "libssh required for --enable-libssh"
36800a12ec87SRichard W.M. Jones    fi
3681b10d49d7SPino Toscano    libssh=no
36820a12ec87SRichard W.M. Jones  fi
36830a12ec87SRichard W.M. Jonesfi
36840a12ec87SRichard W.M. Jones
36850a12ec87SRichard W.M. Jones##########################################
3686b10d49d7SPino Toscano# Check for libssh 0.8
3687b10d49d7SPino Toscano# This is done like this instead of using the LIBSSH_VERSION_* and
3688b10d49d7SPino Toscano# SSH_VERSION_* macros because some distributions in the past shipped
3689b10d49d7SPino Toscano# snapshots of the future 0.8 from Git, and those snapshots did not
3690b10d49d7SPino Toscano# have updated version numbers (still referring to 0.7.0).
36919a2d462eSRichard W.M. Jones
3692b10d49d7SPino Toscanoif test "$libssh" = "yes"; then
36939a2d462eSRichard W.M. Jones  cat > $TMPC <<EOF
3694b10d49d7SPino Toscano#include <libssh/libssh.h>
3695b10d49d7SPino Toscanoint main(void) { return ssh_get_server_publickey(NULL, NULL); }
36969a2d462eSRichard W.M. JonesEOF
3697b10d49d7SPino Toscano  if compile_prog "$libssh_cflags" "$libssh_libs"; then
3698b10d49d7SPino Toscano    libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
36999a2d462eSRichard W.M. Jones  fi
37009a2d462eSRichard W.M. Jonesfi
37019a2d462eSRichard W.M. Jones
37029a2d462eSRichard W.M. Jones##########################################
37035c6c3a6cSChristoph Hellwig# linux-aio probe
37045c6c3a6cSChristoph Hellwig
37055c6c3a6cSChristoph Hellwigif test "$linux_aio" != "no" ; then
37065c6c3a6cSChristoph Hellwig  cat > $TMPC <<EOF
37075c6c3a6cSChristoph Hellwig#include <libaio.h>
37085c6c3a6cSChristoph Hellwig#include <sys/eventfd.h>
3709832ce9c2SScott Wood#include <stddef.h>
37105c6c3a6cSChristoph Hellwigint main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
37115c6c3a6cSChristoph HellwigEOF
37125c6c3a6cSChristoph Hellwig  if compile_prog "" "-laio" ; then
37135c6c3a6cSChristoph Hellwig    linux_aio=yes
37145c6c3a6cSChristoph Hellwig  else
37155c6c3a6cSChristoph Hellwig    if test "$linux_aio" = "yes" ; then
371621684af0SStewart Smith      feature_not_found "linux AIO" "Install libaio devel"
37175c6c3a6cSChristoph Hellwig    fi
37183cfcae3cSLuiz Capitulino    linux_aio=no
37195c6c3a6cSChristoph Hellwig  fi
37205c6c3a6cSChristoph Hellwigfi
3721c10dd856SAarushi Mehta##########################################
3722c10dd856SAarushi Mehta# linux-io-uring probe
3723c10dd856SAarushi Mehta
3724c10dd856SAarushi Mehtaif test "$linux_io_uring" != "no" ; then
3725c10dd856SAarushi Mehta  if $pkg_config liburing; then
3726c10dd856SAarushi Mehta    linux_io_uring_cflags=$($pkg_config --cflags liburing)
3727c10dd856SAarushi Mehta    linux_io_uring_libs=$($pkg_config --libs liburing)
3728c10dd856SAarushi Mehta    linux_io_uring=yes
3729c10dd856SAarushi Mehta  else
3730c10dd856SAarushi Mehta    if test "$linux_io_uring" = "yes" ; then
3731c10dd856SAarushi Mehta      feature_not_found "linux io_uring" "Install liburing devel"
3732c10dd856SAarushi Mehta    fi
3733c10dd856SAarushi Mehta    linux_io_uring=no
3734c10dd856SAarushi Mehta  fi
3735c10dd856SAarushi Mehtafi
37365c6c3a6cSChristoph Hellwig
37375c6c3a6cSChristoph Hellwig##########################################
37387aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX
37393b8acc11SPaolo Bonzini
37407aaa6a16SPaolo Bonziniif test "$tpm" = ""; then
37417aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes"; then
37427aaa6a16SPaolo Bonzini    tpm=no
37433b8acc11SPaolo Bonzini  else
37447aaa6a16SPaolo Bonzini    tpm=yes
37457aaa6a16SPaolo Bonzini  fi
37467aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then
37477aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes" ; then
37487aaa6a16SPaolo Bonzini    error_exit "TPM emulation only available on POSIX systems"
37497aaa6a16SPaolo Bonzini  fi
37503b8acc11SPaolo Bonzinifi
37513b8acc11SPaolo Bonzini
37523b8acc11SPaolo Bonzini##########################################
3753758e8e38SVenkateswararao Jujjuri (JV)# attr probe
3754758e8e38SVenkateswararao Jujjuri (JV)
3755ec0d5893SMarc-André Lureaulibattr_libs=
3756758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" != "no" ; then
3757758e8e38SVenkateswararao Jujjuri (JV)  cat > $TMPC <<EOF
3758758e8e38SVenkateswararao Jujjuri (JV)#include <stdio.h>
3759758e8e38SVenkateswararao Jujjuri (JV)#include <sys/types.h>
3760f2338fb4SPavel Borzenkov#ifdef CONFIG_LIBATTR
3761f2338fb4SPavel Borzenkov#include <attr/xattr.h>
3762f2338fb4SPavel Borzenkov#else
37634f26f2b6SAvi Kivity#include <sys/xattr.h>
3764f2338fb4SPavel Borzenkov#endif
3765758e8e38SVenkateswararao Jujjuri (JV)int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3766758e8e38SVenkateswararao Jujjuri (JV)EOF
37674f26f2b6SAvi Kivity  if compile_prog "" "" ; then
37684f26f2b6SAvi Kivity    attr=yes
37694f26f2b6SAvi Kivity  # Older distros have <attr/xattr.h>, and need -lattr:
3770f2338fb4SPavel Borzenkov  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3771758e8e38SVenkateswararao Jujjuri (JV)    attr=yes
3772ec0d5893SMarc-André Lureau    libattr_libs="-lattr"
37734f26f2b6SAvi Kivity    libattr=yes
3774758e8e38SVenkateswararao Jujjuri (JV)  else
3775758e8e38SVenkateswararao Jujjuri (JV)    if test "$attr" = "yes" ; then
377621684af0SStewart Smith      feature_not_found "ATTR" "Install libc6 or libattr devel"
3777758e8e38SVenkateswararao Jujjuri (JV)    fi
3778758e8e38SVenkateswararao Jujjuri (JV)    attr=no
3779758e8e38SVenkateswararao Jujjuri (JV)  fi
3780758e8e38SVenkateswararao Jujjuri (JV)fi
3781758e8e38SVenkateswararao Jujjuri (JV)
3782758e8e38SVenkateswararao Jujjuri (JV)##########################################
3783bf9298b9Saliguori# iovec probe
3784bf9298b9Saliguoricat > $TMPC <<EOF
3785db34f0b3Sblueswir1#include <sys/types.h>
3786bf9298b9Saliguori#include <sys/uio.h>
3787db34f0b3Sblueswir1#include <unistd.h>
3788f91f9beeSStefan Weilint main(void) { return sizeof(struct iovec); }
3789bf9298b9SaliguoriEOF
3790bf9298b9Saliguoriiovec=no
379152166aa0SJuan Quintelaif compile_prog "" "" ; then
3792bf9298b9Saliguori  iovec=yes
3793bf9298b9Saliguorifi
3794bf9298b9Saliguori
3795f652e6afSaurel32##########################################
3796ceb42de8Saliguori# preadv probe
3797ceb42de8Saliguoricat > $TMPC <<EOF
3798ceb42de8Saliguori#include <sys/types.h>
3799ceb42de8Saliguori#include <sys/uio.h>
3800ceb42de8Saliguori#include <unistd.h>
3801c075a723SBlue Swirlint main(void) { return preadv(0, 0, 0, 0); }
3802ceb42de8SaliguoriEOF
3803ceb42de8Saliguoripreadv=no
380452166aa0SJuan Quintelaif compile_prog "" "" ; then
3805ceb42de8Saliguori  preadv=yes
3806ceb42de8Saliguorifi
3807ceb42de8Saliguori
3808ceb42de8Saliguori##########################################
3809f652e6afSaurel32# fdt probe
3810e169e1e1SPeter Maydell
3811fbb4121dSPaolo Bonzinicase "$fdt" in
3812fbb4121dSPaolo Bonzini  auto | enabled | internal)
3813fbb4121dSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
3814fbb4121dSPaolo Bonzini    if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
3815aef45d51SDaniel P. Berrange      git_submodules="${git_submodules} dtc"
3816aef45d51SDaniel P. Berrange    fi
3817fbb4121dSPaolo Bonzini    ;;
3818fbb4121dSPaolo Bonziniesac
3819f652e6afSaurel32
382020ff075bSMichael Walle##########################################
3821fb719563SOGAWA Hirofumi# opengl probe (for sdl2, gtk, milkymist-tmu2)
3822b1546f32SGerd Hoffmann
3823d52c454aSMarc-André Lureaugbm="no"
3824d52c454aSMarc-André Lureauif $pkg_config gbm; then
3825d52c454aSMarc-André Lureau    gbm_cflags="$($pkg_config --cflags gbm)"
3826d52c454aSMarc-André Lureau    gbm_libs="$($pkg_config --libs gbm)"
3827d52c454aSMarc-André Lureau    gbm="yes"
3828d52c454aSMarc-André Lureaufi
3829d52c454aSMarc-André Lureau
3830da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
38314939a1dfSMichael Tokarev  opengl_pkgs="epoxy gbm"
38325f9b1e35SGerd Hoffmann  if $pkg_config $opengl_pkgs; then
38335f9b1e35SGerd Hoffmann    opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
38345f9b1e35SGerd Hoffmann    opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3835da076ffeSGerd Hoffmann    opengl=yes
3836925a0400SGerd Hoffmann    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3837925a0400SGerd Hoffmann        gtk_gl="yes"
3838925a0400SGerd Hoffmann    fi
383920ff075bSMichael Walle  else
3840da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
3841dcf30025SGerd Hoffmann      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
384220ff075bSMichael Walle    fi
3843f676c67eSJeremy White    opengl_cflags=""
3844da076ffeSGerd Hoffmann    opengl_libs=""
3845da076ffeSGerd Hoffmann    opengl=no
384620ff075bSMichael Walle  fi
384720ff075bSMichael Wallefi
384820ff075bSMichael Walle
3849014cb152SGerd Hoffmannif test "$opengl" = "yes"; then
3850014cb152SGerd Hoffmann  cat > $TMPC << EOF
3851014cb152SGerd Hoffmann#include <epoxy/egl.h>
3852014cb152SGerd Hoffmann#ifndef EGL_MESA_image_dma_buf_export
3853014cb152SGerd Hoffmann# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3854014cb152SGerd Hoffmann#endif
3855014cb152SGerd Hoffmannint main(void) { return 0; }
3856014cb152SGerd HoffmannEOF
3857014cb152SGerd Hoffmann  if compile_prog "" "" ; then
3858014cb152SGerd Hoffmann    opengl_dmabuf=yes
3859014cb152SGerd Hoffmann  fi
3860014cb152SGerd Hoffmannfi
3861c9a12e75SChrysostomos Nanakos
3862e633a5c6SEric Blakeif test "$opengl" = "yes" && test "$have_x11" = "yes"; then
386399e1a93bSPhilippe Mathieu-Daudé  for target in $target_list; do
386499e1a93bSPhilippe Mathieu-Daudé    case $target in
386599e1a93bSPhilippe Mathieu-Daudé      lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
386699e1a93bSPhilippe Mathieu-Daudé        need_x11=yes
386799e1a93bSPhilippe Mathieu-Daudé      ;;
386899e1a93bSPhilippe Mathieu-Daudé    esac
386999e1a93bSPhilippe Mathieu-Daudé  done
387099e1a93bSPhilippe Mathieu-Daudéfi
387199e1a93bSPhilippe Mathieu-Daudé
3872ed279a06SKlim Kireev##########################################
3873ed279a06SKlim Kireev# libxml2 probe
3874ed279a06SKlim Kireevif test "$libxml2" != "no" ; then
3875ed279a06SKlim Kireev    if $pkg_config --exists libxml-2.0; then
3876ed279a06SKlim Kireev        libxml2="yes"
3877ed279a06SKlim Kireev        libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3878ed279a06SKlim Kireev        libxml2_libs=$($pkg_config --libs libxml-2.0)
3879ed279a06SKlim Kireev    else
3880ed279a06SKlim Kireev        if test "$libxml2" = "yes"; then
3881ed279a06SKlim Kireev            feature_not_found "libxml2" "Install libxml2 devel"
3882ed279a06SKlim Kireev        fi
3883ed279a06SKlim Kireev        libxml2="no"
3884ed279a06SKlim Kireev    fi
3885ed279a06SKlim Kireevfi
3886c9a12e75SChrysostomos Nanakos
3887eb100396SBharata B Rao##########################################
3888eb100396SBharata B Rao# glusterfs probe
3889eb100396SBharata B Raoif test "$glusterfs" != "no" ; then
389065d5d3f9SStefan Weil  if $pkg_config --atleast-version=3 glusterfs-api; then
3891e01bee08SBharata B Rao    glusterfs="yes"
389289138857SStefan Weil    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
389389138857SStefan Weil    glusterfs_libs=$($pkg_config --libs glusterfs-api)
3894d85fa9ebSJeff Cody    if $pkg_config --atleast-version=4 glusterfs-api; then
3895d85fa9ebSJeff Cody      glusterfs_xlator_opt="yes"
3896d85fa9ebSJeff Cody    fi
389765d5d3f9SStefan Weil    if $pkg_config --atleast-version=5 glusterfs-api; then
38980c14fb47SBharata B Rao      glusterfs_discard="yes"
38990c14fb47SBharata B Rao    fi
39007c815372SBharata B Rao    if $pkg_config --atleast-version=6 glusterfs-api; then
3901df3a429aSNiels de Vos      glusterfs_fallocate="yes"
39027c815372SBharata B Rao      glusterfs_zerofill="yes"
39037c815372SBharata B Rao    fi
3904e014dbe7SPrasanna Kumar Kalever    cat > $TMPC << EOF
3905e014dbe7SPrasanna Kumar Kalever#include <glusterfs/api/glfs.h>
3906e014dbe7SPrasanna Kumar Kalever
3907e014dbe7SPrasanna Kumar Kaleverint
3908e014dbe7SPrasanna Kumar Kalevermain(void)
3909e014dbe7SPrasanna Kumar Kalever{
3910e014dbe7SPrasanna Kumar Kalever	/* new glfs_ftruncate() passes two additional args */
3911e014dbe7SPrasanna Kumar Kalever	return glfs_ftruncate(NULL, 0, NULL, NULL);
3912e014dbe7SPrasanna Kumar Kalever}
3913e014dbe7SPrasanna Kumar KaleverEOF
3914e014dbe7SPrasanna Kumar Kalever    if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3915e014dbe7SPrasanna Kumar Kalever      glusterfs_ftruncate_has_stat="yes"
3916e014dbe7SPrasanna Kumar Kalever    fi
39170e3b891fSNiels de Vos    cat > $TMPC << EOF
39180e3b891fSNiels de Vos#include <glusterfs/api/glfs.h>
39190e3b891fSNiels de Vos
39200e3b891fSNiels de Vos/* new glfs_io_cbk() passes two additional glfs_stat structs */
39210e3b891fSNiels de Vosstatic void
39220e3b891fSNiels de Vosglusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
39230e3b891fSNiels de Vos{}
39240e3b891fSNiels de Vos
39250e3b891fSNiels de Vosint
39260e3b891fSNiels de Vosmain(void)
39270e3b891fSNiels de Vos{
39280e3b891fSNiels de Vos	glfs_io_cbk iocb = &glusterfs_iocb;
39290e3b891fSNiels de Vos	iocb(NULL, 0 , NULL, NULL, NULL);
39300e3b891fSNiels de Vos	return 0;
39310e3b891fSNiels de Vos}
39320e3b891fSNiels de VosEOF
39330e3b891fSNiels de Vos    if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
39340e3b891fSNiels de Vos      glusterfs_iocb_has_stat="yes"
39350e3b891fSNiels de Vos    fi
3936eb100396SBharata B Rao  else
3937eb100396SBharata B Rao    if test "$glusterfs" = "yes" ; then
39388efc9363SHu Tao      feature_not_found "GlusterFS backend support" \
39398efc9363SHu Tao          "Install glusterfs-api devel >= 3"
3940eb100396SBharata B Rao    fi
3941e01bee08SBharata B Rao    glusterfs="no"
3942eb100396SBharata B Rao  fi
3943eb100396SBharata B Raofi
3944eb100396SBharata B Rao
394539386ac7Saurel32# Check for inotify functions when we are building linux-user
39463b3f24adSaurel32# emulator.  This is done because older glibc versions don't
39473b3f24adSaurel32# have syscall stubs for these implemented.  In that case we
39483b3f24adSaurel32# don't provide them even if kernel supports them.
39493b3f24adSaurel32#
39503b3f24adSaurel32inotify=no
39513b3f24adSaurel32cat > $TMPC << EOF
39523b3f24adSaurel32#include <sys/inotify.h>
39533b3f24adSaurel32
39543b3f24adSaurel32int
39553b3f24adSaurel32main(void)
39563b3f24adSaurel32{
39573b3f24adSaurel32	/* try to start inotify */
39588690e420Saurel32	return inotify_init();
39593b3f24adSaurel32}
39603b3f24adSaurel32EOF
396152166aa0SJuan Quintelaif compile_prog "" "" ; then
39623b3f24adSaurel32  inotify=yes
39633b3f24adSaurel32fi
39643b3f24adSaurel32
3965c05c7a73SRiku Voipioinotify1=no
3966c05c7a73SRiku Voipiocat > $TMPC << EOF
3967c05c7a73SRiku Voipio#include <sys/inotify.h>
3968c05c7a73SRiku Voipio
3969c05c7a73SRiku Voipioint
3970c05c7a73SRiku Voipiomain(void)
3971c05c7a73SRiku Voipio{
3972c05c7a73SRiku Voipio    /* try to start inotify */
3973c05c7a73SRiku Voipio    return inotify_init1(0);
3974c05c7a73SRiku Voipio}
3975c05c7a73SRiku VoipioEOF
3976c05c7a73SRiku Voipioif compile_prog "" "" ; then
3977c05c7a73SRiku Voipio  inotify1=yes
3978c05c7a73SRiku Voipiofi
3979c05c7a73SRiku Voipio
3980099d6b0fSRiku Voipio# check if pipe2 is there
3981099d6b0fSRiku Voipiopipe2=no
3982099d6b0fSRiku Voipiocat > $TMPC << EOF
3983099d6b0fSRiku Voipio#include <unistd.h>
3984099d6b0fSRiku Voipio#include <fcntl.h>
3985099d6b0fSRiku Voipio
3986099d6b0fSRiku Voipioint main(void)
3987099d6b0fSRiku Voipio{
3988099d6b0fSRiku Voipio    int pipefd[2];
39899bca8162SBruce Rogers    return pipe2(pipefd, O_CLOEXEC);
3990099d6b0fSRiku Voipio}
3991099d6b0fSRiku VoipioEOF
399252166aa0SJuan Quintelaif compile_prog "" "" ; then
3993099d6b0fSRiku Voipio  pipe2=yes
3994099d6b0fSRiku Voipiofi
3995099d6b0fSRiku Voipio
399640ff6d7eSKevin Wolf# check if accept4 is there
399740ff6d7eSKevin Wolfaccept4=no
399840ff6d7eSKevin Wolfcat > $TMPC << EOF
399940ff6d7eSKevin Wolf#include <sys/socket.h>
400040ff6d7eSKevin Wolf#include <stddef.h>
400140ff6d7eSKevin Wolf
400240ff6d7eSKevin Wolfint main(void)
400340ff6d7eSKevin Wolf{
400440ff6d7eSKevin Wolf    accept4(0, NULL, NULL, SOCK_CLOEXEC);
400540ff6d7eSKevin Wolf    return 0;
400640ff6d7eSKevin Wolf}
400740ff6d7eSKevin WolfEOF
400840ff6d7eSKevin Wolfif compile_prog "" "" ; then
400940ff6d7eSKevin Wolf  accept4=yes
401040ff6d7eSKevin Wolffi
401140ff6d7eSKevin Wolf
40123ce34dfbSvibisreenivasan# check if tee/splice is there. vmsplice was added same time.
40133ce34dfbSvibisreenivasansplice=no
40143ce34dfbSvibisreenivasancat > $TMPC << EOF
40153ce34dfbSvibisreenivasan#include <unistd.h>
40163ce34dfbSvibisreenivasan#include <fcntl.h>
40173ce34dfbSvibisreenivasan#include <limits.h>
40183ce34dfbSvibisreenivasan
40193ce34dfbSvibisreenivasanint main(void)
40203ce34dfbSvibisreenivasan{
402166ea0f22SStefan Weil    int len, fd = 0;
40223ce34dfbSvibisreenivasan    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
40233ce34dfbSvibisreenivasan    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
40243ce34dfbSvibisreenivasan    return 0;
40253ce34dfbSvibisreenivasan}
40263ce34dfbSvibisreenivasanEOF
402752166aa0SJuan Quintelaif compile_prog "" "" ; then
40283ce34dfbSvibisreenivasan  splice=yes
40293ce34dfbSvibisreenivasanfi
40303ce34dfbSvibisreenivasan
4031dcc38d1cSMarcelo Tosatti##########################################
4032a99d57bbSWanlong Gao# libnuma probe
4033a99d57bbSWanlong Gao
4034a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
4035a99d57bbSWanlong Gao  cat > $TMPC << EOF
4036a99d57bbSWanlong Gao#include <numa.h>
4037a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
4038a99d57bbSWanlong GaoEOF
4039a99d57bbSWanlong Gao
4040a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
4041a99d57bbSWanlong Gao    numa=yes
4042ab318051SMarc-André Lureau    numa_libs="-lnuma"
4043a99d57bbSWanlong Gao  else
4044a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
4045a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
4046a99d57bbSWanlong Gao    fi
4047a99d57bbSWanlong Gao    numa=no
4048a99d57bbSWanlong Gao  fi
4049a99d57bbSWanlong Gaofi
4050a99d57bbSWanlong Gao
4051aa087962SPaolo Bonzinimalloc=system
40527b01cb97SAlexandre Derumierif test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
40537b01cb97SAlexandre Derumier    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
40547b01cb97SAlexandre Derumier    exit 1
4055aa087962SPaolo Bonzinielif test "$tcmalloc" = "yes" ; then
4056aa087962SPaolo Bonzini    malloc=tcmalloc
4057aa087962SPaolo Bonzinielif test "$jemalloc" = "yes" ; then
4058aa087962SPaolo Bonzini    malloc=jemalloc
40597b01cb97SAlexandre Derumierfi
40607b01cb97SAlexandre Derumier
40617b01cb97SAlexandre Derumier##########################################
4062dcc38d1cSMarcelo Tosatti# signalfd probe
4063dcc38d1cSMarcelo Tosattisignalfd="no"
4064dcc38d1cSMarcelo Tosatticat > $TMPC << EOF
4065dcc38d1cSMarcelo Tosatti#include <unistd.h>
4066dcc38d1cSMarcelo Tosatti#include <sys/syscall.h>
4067dcc38d1cSMarcelo Tosatti#include <signal.h>
4068dcc38d1cSMarcelo Tosattiint main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4069dcc38d1cSMarcelo TosattiEOF
4070dcc38d1cSMarcelo Tosatti
4071dcc38d1cSMarcelo Tosattiif compile_prog "" "" ; then
4072dcc38d1cSMarcelo Tosatti  signalfd=yes
4073dcc38d1cSMarcelo Tosattifi
4074dcc38d1cSMarcelo Tosatti
4075d339d766SRichard W.M. Jones# check if optreset global is declared by <getopt.h>
4076d339d766SRichard W.M. Jonesoptreset="no"
4077d339d766SRichard W.M. Jonescat > $TMPC << EOF
4078d339d766SRichard W.M. Jones#include <getopt.h>
4079d339d766SRichard W.M. Jonesint main(void) { return optreset; }
4080d339d766SRichard W.M. JonesEOF
4081d339d766SRichard W.M. Jones
4082d339d766SRichard W.M. Jonesif compile_prog "" "" ; then
4083d339d766SRichard W.M. Jones  optreset=yes
4084d339d766SRichard W.M. Jonesfi
4085d339d766SRichard W.M. Jones
4086c2882b96SRiku Voipio# check if eventfd is supported
4087c2882b96SRiku Voipioeventfd=no
4088c2882b96SRiku Voipiocat > $TMPC << EOF
4089c2882b96SRiku Voipio#include <sys/eventfd.h>
4090c2882b96SRiku Voipio
4091c2882b96SRiku Voipioint main(void)
4092c2882b96SRiku Voipio{
409355cc7f3eSStefan Weil    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4094c2882b96SRiku Voipio}
4095c2882b96SRiku VoipioEOF
4096c2882b96SRiku Voipioif compile_prog "" "" ; then
4097c2882b96SRiku Voipio  eventfd=yes
4098c2882b96SRiku Voipiofi
4099c2882b96SRiku Voipio
4100751bcc39SMarc-André Lureau# check if memfd is supported
4101751bcc39SMarc-André Lureaumemfd=no
4102751bcc39SMarc-André Lureaucat > $TMPC << EOF
410375e5b70eSPaolo Bonzini#include <sys/mman.h>
4104751bcc39SMarc-André Lureau
4105751bcc39SMarc-André Lureauint main(void)
4106751bcc39SMarc-André Lureau{
4107751bcc39SMarc-André Lureau    return memfd_create("foo", MFD_ALLOW_SEALING);
4108751bcc39SMarc-André Lureau}
4109751bcc39SMarc-André LureauEOF
4110751bcc39SMarc-André Lureauif compile_prog "" "" ; then
4111751bcc39SMarc-André Lureau  memfd=yes
4112751bcc39SMarc-André Lureaufi
4113751bcc39SMarc-André Lureau
4114955727d2SCortland Tölva# check for usbfs
4115955727d2SCortland Tölvahave_usbfs=no
4116955727d2SCortland Tölvaif test "$linux_user" = "yes"; then
411796566d09SThomas Petazzoni  cat > $TMPC << EOF
411896566d09SThomas Petazzoni#include <linux/usbdevice_fs.h>
411996566d09SThomas Petazzoni
412096566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES
412196566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined"
412296566d09SThomas Petazzoni#endif
412396566d09SThomas Petazzoni
412496566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM
412596566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined"
412696566d09SThomas Petazzoni#endif
412796566d09SThomas Petazzoni
412896566d09SThomas Petazzoniint main(void)
412996566d09SThomas Petazzoni{
413096566d09SThomas Petazzoni    return 0;
413196566d09SThomas Petazzoni}
413296566d09SThomas PetazzoniEOF
413396566d09SThomas Petazzoni  if compile_prog "" ""; then
4134955727d2SCortland Tölva    have_usbfs=yes
4135955727d2SCortland Tölva  fi
4136955727d2SCortland Tölvafi
4137751bcc39SMarc-André Lureau
4138d0927938SUlrich Hecht# check for fallocate
4139d0927938SUlrich Hechtfallocate=no
4140d0927938SUlrich Hechtcat > $TMPC << EOF
4141d0927938SUlrich Hecht#include <fcntl.h>
4142d0927938SUlrich Hecht
4143d0927938SUlrich Hechtint main(void)
4144d0927938SUlrich Hecht{
4145d0927938SUlrich Hecht    fallocate(0, 0, 0, 0);
4146d0927938SUlrich Hecht    return 0;
4147d0927938SUlrich Hecht}
4148d0927938SUlrich HechtEOF
41498fb03151SPeter Maydellif compile_prog "" "" ; then
4150d0927938SUlrich Hecht  fallocate=yes
4151d0927938SUlrich Hechtfi
4152d0927938SUlrich Hecht
41533d4fa43eSKusanagi Kouichi# check for fallocate hole punching
41543d4fa43eSKusanagi Kouichifallocate_punch_hole=no
41553d4fa43eSKusanagi Kouichicat > $TMPC << EOF
41563d4fa43eSKusanagi Kouichi#include <fcntl.h>
41573d4fa43eSKusanagi Kouichi#include <linux/falloc.h>
41583d4fa43eSKusanagi Kouichi
41593d4fa43eSKusanagi Kouichiint main(void)
41603d4fa43eSKusanagi Kouichi{
41613d4fa43eSKusanagi Kouichi    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
41623d4fa43eSKusanagi Kouichi    return 0;
41633d4fa43eSKusanagi Kouichi}
41643d4fa43eSKusanagi KouichiEOF
41653d4fa43eSKusanagi Kouichiif compile_prog "" "" ; then
41663d4fa43eSKusanagi Kouichi  fallocate_punch_hole=yes
41673d4fa43eSKusanagi Kouichifi
41683d4fa43eSKusanagi Kouichi
4169b953f075SDenis V. Lunev# check that fallocate supports range zeroing inside the file
4170b953f075SDenis V. Lunevfallocate_zero_range=no
4171b953f075SDenis V. Lunevcat > $TMPC << EOF
4172b953f075SDenis V. Lunev#include <fcntl.h>
4173b953f075SDenis V. Lunev#include <linux/falloc.h>
4174b953f075SDenis V. Lunev
4175b953f075SDenis V. Lunevint main(void)
4176b953f075SDenis V. Lunev{
4177b953f075SDenis V. Lunev    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4178b953f075SDenis V. Lunev    return 0;
4179b953f075SDenis V. Lunev}
4180b953f075SDenis V. LunevEOF
4181b953f075SDenis V. Lunevif compile_prog "" "" ; then
4182b953f075SDenis V. Lunev  fallocate_zero_range=yes
4183b953f075SDenis V. Lunevfi
4184b953f075SDenis V. Lunev
4185ed911435SKevin Wolf# check for posix_fallocate
4186ed911435SKevin Wolfposix_fallocate=no
4187ed911435SKevin Wolfcat > $TMPC << EOF
4188ed911435SKevin Wolf#include <fcntl.h>
4189ed911435SKevin Wolf
4190ed911435SKevin Wolfint main(void)
4191ed911435SKevin Wolf{
4192ed911435SKevin Wolf    posix_fallocate(0, 0, 0);
4193ed911435SKevin Wolf    return 0;
4194ed911435SKevin Wolf}
4195ed911435SKevin WolfEOF
4196ed911435SKevin Wolfif compile_prog "" "" ; then
4197ed911435SKevin Wolf    posix_fallocate=yes
4198ed911435SKevin Wolffi
4199ed911435SKevin Wolf
4200c727f47dSPeter Maydell# check for sync_file_range
4201c727f47dSPeter Maydellsync_file_range=no
4202c727f47dSPeter Maydellcat > $TMPC << EOF
4203c727f47dSPeter Maydell#include <fcntl.h>
4204c727f47dSPeter Maydell
4205c727f47dSPeter Maydellint main(void)
4206c727f47dSPeter Maydell{
4207c727f47dSPeter Maydell    sync_file_range(0, 0, 0, 0);
4208c727f47dSPeter Maydell    return 0;
4209c727f47dSPeter Maydell}
4210c727f47dSPeter MaydellEOF
42118fb03151SPeter Maydellif compile_prog "" "" ; then
4212c727f47dSPeter Maydell  sync_file_range=yes
4213c727f47dSPeter Maydellfi
4214c727f47dSPeter Maydell
4215dace20dcSPeter Maydell# check for linux/fiemap.h and FS_IOC_FIEMAP
4216dace20dcSPeter Maydellfiemap=no
4217dace20dcSPeter Maydellcat > $TMPC << EOF
4218dace20dcSPeter Maydell#include <sys/ioctl.h>
4219dace20dcSPeter Maydell#include <linux/fs.h>
4220dace20dcSPeter Maydell#include <linux/fiemap.h>
4221dace20dcSPeter Maydell
4222dace20dcSPeter Maydellint main(void)
4223dace20dcSPeter Maydell{
4224dace20dcSPeter Maydell    ioctl(0, FS_IOC_FIEMAP, 0);
4225dace20dcSPeter Maydell    return 0;
4226dace20dcSPeter Maydell}
4227dace20dcSPeter MaydellEOF
42288fb03151SPeter Maydellif compile_prog "" "" ; then
4229dace20dcSPeter Maydell  fiemap=yes
4230dace20dcSPeter Maydellfi
4231dace20dcSPeter Maydell
4232d0927938SUlrich Hecht# check for dup3
4233d0927938SUlrich Hechtdup3=no
4234d0927938SUlrich Hechtcat > $TMPC << EOF
4235d0927938SUlrich Hecht#include <unistd.h>
4236d0927938SUlrich Hecht
4237d0927938SUlrich Hechtint main(void)
4238d0927938SUlrich Hecht{
4239d0927938SUlrich Hecht    dup3(0, 0, 0);
4240d0927938SUlrich Hecht    return 0;
4241d0927938SUlrich Hecht}
4242d0927938SUlrich HechtEOF
424378f5d726SJan Kiszkaif compile_prog "" "" ; then
4244d0927938SUlrich Hecht  dup3=yes
4245d0927938SUlrich Hechtfi
4246d0927938SUlrich Hecht
42474e0c6529SAlex Bligh# check for ppoll support
42484e0c6529SAlex Blighppoll=no
42494e0c6529SAlex Blighcat > $TMPC << EOF
42504e0c6529SAlex Bligh#include <poll.h>
42514e0c6529SAlex Bligh
42524e0c6529SAlex Blighint main(void)
42534e0c6529SAlex Bligh{
42544e0c6529SAlex Bligh    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
42554e0c6529SAlex Bligh    ppoll(&pfd, 1, 0, 0);
42564e0c6529SAlex Bligh    return 0;
42574e0c6529SAlex Bligh}
42584e0c6529SAlex BlighEOF
42594e0c6529SAlex Blighif compile_prog "" "" ; then
42604e0c6529SAlex Bligh  ppoll=yes
42614e0c6529SAlex Blighfi
42624e0c6529SAlex Bligh
4263cd758dd0SAlex Bligh# check for prctl(PR_SET_TIMERSLACK , ... ) support
4264cd758dd0SAlex Blighprctl_pr_set_timerslack=no
4265cd758dd0SAlex Blighcat > $TMPC << EOF
4266cd758dd0SAlex Bligh#include <sys/prctl.h>
4267cd758dd0SAlex Bligh
4268cd758dd0SAlex Blighint main(void)
4269cd758dd0SAlex Bligh{
4270cd758dd0SAlex Bligh    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4271cd758dd0SAlex Bligh    return 0;
4272cd758dd0SAlex Bligh}
4273cd758dd0SAlex BlighEOF
4274cd758dd0SAlex Blighif compile_prog "" "" ; then
4275cd758dd0SAlex Bligh  prctl_pr_set_timerslack=yes
4276cd758dd0SAlex Blighfi
4277cd758dd0SAlex Bligh
42783b6edd16SPeter Maydell# check for epoll support
42793b6edd16SPeter Maydellepoll=no
42803b6edd16SPeter Maydellcat > $TMPC << EOF
42813b6edd16SPeter Maydell#include <sys/epoll.h>
42823b6edd16SPeter Maydell
42833b6edd16SPeter Maydellint main(void)
42843b6edd16SPeter Maydell{
42853b6edd16SPeter Maydell    epoll_create(0);
42863b6edd16SPeter Maydell    return 0;
42873b6edd16SPeter Maydell}
42883b6edd16SPeter MaydellEOF
42898fb03151SPeter Maydellif compile_prog "" "" ; then
42903b6edd16SPeter Maydell  epoll=yes
42913b6edd16SPeter Maydellfi
42923b6edd16SPeter Maydell
4293227f0214SPeter Maydell# epoll_create1 is a later addition
4294227f0214SPeter Maydell# so we must check separately for its presence
42953b6edd16SPeter Maydellepoll_create1=no
42963b6edd16SPeter Maydellcat > $TMPC << EOF
42973b6edd16SPeter Maydell#include <sys/epoll.h>
42983b6edd16SPeter Maydell
42993b6edd16SPeter Maydellint main(void)
43003b6edd16SPeter Maydell{
430119e83f6bSPeter Maydell    /* Note that we use epoll_create1 as a value, not as
430219e83f6bSPeter Maydell     * a function being called. This is necessary so that on
430319e83f6bSPeter Maydell     * old SPARC glibc versions where the function was present in
430419e83f6bSPeter Maydell     * the library but not declared in the header file we will
430519e83f6bSPeter Maydell     * fail the configure check. (Otherwise we will get a compiler
430619e83f6bSPeter Maydell     * warning but not an error, and will proceed to fail the
430719e83f6bSPeter Maydell     * qemu compile where we compile with -Werror.)
430819e83f6bSPeter Maydell     */
4309c075a723SBlue Swirl    return (int)(uintptr_t)&epoll_create1;
43103b6edd16SPeter Maydell}
43113b6edd16SPeter MaydellEOF
43128fb03151SPeter Maydellif compile_prog "" "" ; then
43133b6edd16SPeter Maydell  epoll_create1=yes
43143b6edd16SPeter Maydellfi
43153b6edd16SPeter Maydell
4316a8fd1abaSPeter Maydell# check for sendfile support
4317a8fd1abaSPeter Maydellsendfile=no
4318a8fd1abaSPeter Maydellcat > $TMPC << EOF
4319a8fd1abaSPeter Maydell#include <sys/sendfile.h>
4320a8fd1abaSPeter Maydell
4321a8fd1abaSPeter Maydellint main(void)
4322a8fd1abaSPeter Maydell{
4323a8fd1abaSPeter Maydell    return sendfile(0, 0, 0, 0);
4324a8fd1abaSPeter Maydell}
4325a8fd1abaSPeter MaydellEOF
4326a8fd1abaSPeter Maydellif compile_prog "" "" ; then
4327a8fd1abaSPeter Maydell  sendfile=yes
4328a8fd1abaSPeter Maydellfi
4329a8fd1abaSPeter Maydell
433051834341SRiku Voipio# check for timerfd support (glibc 2.8 and newer)
433151834341SRiku Voipiotimerfd=no
433251834341SRiku Voipiocat > $TMPC << EOF
433351834341SRiku Voipio#include <sys/timerfd.h>
433451834341SRiku Voipio
433551834341SRiku Voipioint main(void)
433651834341SRiku Voipio{
433751834341SRiku Voipio    return(timerfd_create(CLOCK_REALTIME, 0));
433851834341SRiku Voipio}
433951834341SRiku VoipioEOF
434051834341SRiku Voipioif compile_prog "" "" ; then
434151834341SRiku Voipio  timerfd=yes
434251834341SRiku Voipiofi
434351834341SRiku Voipio
43449af5c906SRiku Voipio# check for setns and unshare support
43459af5c906SRiku Voipiosetns=no
43469af5c906SRiku Voipiocat > $TMPC << EOF
43479af5c906SRiku Voipio#include <sched.h>
43489af5c906SRiku Voipio
43499af5c906SRiku Voipioint main(void)
43509af5c906SRiku Voipio{
43519af5c906SRiku Voipio    int ret;
43529af5c906SRiku Voipio    ret = setns(0, 0);
43539af5c906SRiku Voipio    ret = unshare(0);
43549af5c906SRiku Voipio    return ret;
43559af5c906SRiku Voipio}
43569af5c906SRiku VoipioEOF
43579af5c906SRiku Voipioif compile_prog "" "" ; then
43589af5c906SRiku Voipio  setns=yes
43599af5c906SRiku Voipiofi
43609af5c906SRiku Voipio
436138860a03SAleksandar Markovic# clock_adjtime probe
436238860a03SAleksandar Markovicclock_adjtime=no
436338860a03SAleksandar Markoviccat > $TMPC <<EOF
436438860a03SAleksandar Markovic#include <time.h>
436538860a03SAleksandar Markovic
436638860a03SAleksandar Markovicint main(void)
436738860a03SAleksandar Markovic{
436838860a03SAleksandar Markovic    return clock_adjtime(0, 0);
436938860a03SAleksandar Markovic}
437038860a03SAleksandar MarkovicEOF
437138860a03SAleksandar Markovicclock_adjtime=no
437238860a03SAleksandar Markovicif compile_prog "" "" ; then
437338860a03SAleksandar Markovic  clock_adjtime=yes
437438860a03SAleksandar Markovicfi
437538860a03SAleksandar Markovic
43765a03cd00SAleksandar Markovic# syncfs probe
43775a03cd00SAleksandar Markovicsyncfs=no
43785a03cd00SAleksandar Markoviccat > $TMPC <<EOF
43795a03cd00SAleksandar Markovic#include <unistd.h>
43805a03cd00SAleksandar Markovic
43815a03cd00SAleksandar Markovicint main(void)
43825a03cd00SAleksandar Markovic{
43835a03cd00SAleksandar Markovic    return syncfs(0);
43845a03cd00SAleksandar Markovic}
43855a03cd00SAleksandar MarkovicEOF
43865a03cd00SAleksandar Markovicsyncfs=no
43875a03cd00SAleksandar Markovicif compile_prog "" "" ; then
43885a03cd00SAleksandar Markovic  syncfs=yes
43895a03cd00SAleksandar Markovicfi
43905a03cd00SAleksandar Markovic
4391f514f41cSStefan Weil# Search for bswap_32 function
43926ae9a1f4SJuan Quintelabyteswap_h=no
43936ae9a1f4SJuan Quintelacat > $TMPC << EOF
43946ae9a1f4SJuan Quintela#include <byteswap.h>
43956ae9a1f4SJuan Quintelaint main(void) { return bswap_32(0); }
43966ae9a1f4SJuan QuintelaEOF
439752166aa0SJuan Quintelaif compile_prog "" "" ; then
43986ae9a1f4SJuan Quintela  byteswap_h=yes
43996ae9a1f4SJuan Quintelafi
44006ae9a1f4SJuan Quintela
440175f13596SStefan Weil# Search for bswap32 function
44026ae9a1f4SJuan Quintelabswap_h=no
44036ae9a1f4SJuan Quintelacat > $TMPC << EOF
44046ae9a1f4SJuan Quintela#include <sys/endian.h>
44056ae9a1f4SJuan Quintela#include <sys/types.h>
44066ae9a1f4SJuan Quintela#include <machine/bswap.h>
44076ae9a1f4SJuan Quintelaint main(void) { return bswap32(0); }
44086ae9a1f4SJuan QuintelaEOF
440952166aa0SJuan Quintelaif compile_prog "" "" ; then
44106ae9a1f4SJuan Quintela  bswap_h=yes
44116ae9a1f4SJuan Quintelafi
44126ae9a1f4SJuan Quintela
4413da93a1fdSaliguori##########################################
4414e49ab19fSPeter Lieven# Do we have libiscsi >= 1.9.0
4415c589b249SRonnie Sahlbergif test "$libiscsi" != "no" ; then
4416e49ab19fSPeter Lieven  if $pkg_config --atleast-version=1.9.0 libiscsi; then
44173c33ea96SPaolo Bonzini    libiscsi="yes"
4418ca871ec8SStefan Weil    libiscsi_cflags=$($pkg_config --cflags libiscsi)
4419ca871ec8SStefan Weil    libiscsi_libs=$($pkg_config --libs libiscsi)
4420c589b249SRonnie Sahlberg  else
4421c589b249SRonnie Sahlberg    if test "$libiscsi" = "yes" ; then
4422e49ab19fSPeter Lieven      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4423c589b249SRonnie Sahlberg    fi
4424c589b249SRonnie Sahlberg    libiscsi="no"
4425c589b249SRonnie Sahlberg  fi
4426c589b249SRonnie Sahlbergfi
4427c589b249SRonnie Sahlberg
4428c589b249SRonnie Sahlberg##########################################
4429da93a1fdSaliguori# Do we need librt
44308bacde8dSNatanael Copa# uClibc provides 2 versions of clock_gettime(), one with realtime
44318bacde8dSNatanael Copa# support and one without. This means that the clock_gettime() don't
44328bacde8dSNatanael Copa# need -lrt. We still need it for timer_create() so we check for this
44338bacde8dSNatanael Copa# function in addition.
4434da93a1fdSaliguoricat > $TMPC <<EOF
4435da93a1fdSaliguori#include <signal.h>
4436da93a1fdSaliguori#include <time.h>
44378bacde8dSNatanael Copaint main(void) {
44388bacde8dSNatanael Copa  timer_create(CLOCK_REALTIME, NULL, NULL);
44398bacde8dSNatanael Copa  return clock_gettime(CLOCK_REALTIME, NULL);
44408bacde8dSNatanael Copa}
4441da93a1fdSaliguoriEOF
4442da93a1fdSaliguori
444352166aa0SJuan Quintelaif compile_prog "" "" ; then
444407ffa4bdSJuan Quintela  :
44458bacde8dSNatanael Copa# we need pthread for static linking. use previous pthread test result
444618e588b1SRick Liuelif compile_prog "" "$pthread_lib -lrt" ; then
444718e588b1SRick Liu  LIBS="$LIBS -lrt"
4448da93a1fdSaliguorifi
4449da93a1fdSaliguori
4450f2995ee4SPaolo Bonzini# Check whether we have openpty() in either libc or libutil
4451d99e97e6SThomas Huthcat > $TMPC << EOF
4452d99e97e6SThomas Huthextern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4453d99e97e6SThomas Huthint main(void) { return openpty(0, 0, 0, 0, 0); }
4454d99e97e6SThomas HuthEOF
4455d99e97e6SThomas Huth
44569df8b20dSThomas Huthhave_openpty="no"
44579df8b20dSThomas Huthif compile_prog "" "" ; then
44589df8b20dSThomas Huth  have_openpty="yes"
44599df8b20dSThomas Huthelse
4460d99e97e6SThomas Huth  if compile_prog "" "-lutil" ; then
44619df8b20dSThomas Huth    have_openpty="yes"
4462d99e97e6SThomas Huth  fi
44636362a53fSJuan Quintelafi
44646362a53fSJuan Quintela
4465de5071c5SBlue Swirl##########################################
4466cd4ec0b4SGerd Hoffmann# spice probe
4467cd4ec0b4SGerd Hoffmannif test "$spice" != "no" ; then
4468cd4ec0b4SGerd Hoffmann  cat > $TMPC << EOF
4469cd4ec0b4SGerd Hoffmann#include <spice.h>
4470cd4ec0b4SGerd Hoffmannint main(void) { spice_server_new(); return 0; }
4471cd4ec0b4SGerd HoffmannEOF
4472710fc4f5SJiri Denemark  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4473710fc4f5SJiri Denemark  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
44741b63665cSMarc-André Lureau  if $pkg_config --atleast-version=0.12.5 spice-server && \
447565d5d3f9SStefan Weil     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4476cd4ec0b4SGerd Hoffmann     compile_prog "$spice_cflags" "$spice_libs" ; then
4477cd4ec0b4SGerd Hoffmann    spice="yes"
4478cd4ec0b4SGerd Hoffmann  else
4479cd4ec0b4SGerd Hoffmann    if test "$spice" = "yes" ; then
44808efc9363SHu Tao      feature_not_found "spice" \
44811b63665cSMarc-André Lureau          "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4482cd4ec0b4SGerd Hoffmann    fi
4483cd4ec0b4SGerd Hoffmann    spice="no"
4484cd4ec0b4SGerd Hoffmann  fi
4485cd4ec0b4SGerd Hoffmannfi
4486cd4ec0b4SGerd Hoffmann
44877b02f544SMarc-André Lureau# check for smartcard support
44887b02f544SMarc-André Lureauif test "$smartcard" != "no"; then
44890f5c642dSMichal Privoznik    if $pkg_config --atleast-version=2.5.1 libcacard; then
44907b02f544SMarc-André Lureau        libcacard_cflags=$($pkg_config --cflags libcacard)
44917b02f544SMarc-André Lureau        libcacard_libs=$($pkg_config --libs libcacard)
44927b02f544SMarc-André Lureau        smartcard="yes"
4493111a38b0SRobert Relyea    else
44947b02f544SMarc-André Lureau        if test "$smartcard" = "yes"; then
44957b02f544SMarc-André Lureau            feature_not_found "smartcard" "Install libcacard devel"
4496111a38b0SRobert Relyea        fi
44977b02f544SMarc-André Lureau        smartcard="no"
4498111a38b0SRobert Relyea    fi
4499111a38b0SRobert Relyeafi
4500111a38b0SRobert Relyea
45012b2325ffSGerd Hoffmann# check for libusb
45022b2325ffSGerd Hoffmannif test "$libusb" != "no" ; then
450365d5d3f9SStefan Weil    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
45042b2325ffSGerd Hoffmann        libusb="yes"
4505ca871ec8SStefan Weil        libusb_cflags=$($pkg_config --cflags libusb-1.0)
4506ca871ec8SStefan Weil        libusb_libs=$($pkg_config --libs libusb-1.0)
45072b2325ffSGerd Hoffmann    else
45082b2325ffSGerd Hoffmann        if test "$libusb" = "yes"; then
45098efc9363SHu Tao            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
45102b2325ffSGerd Hoffmann        fi
45112b2325ffSGerd Hoffmann        libusb="no"
45122b2325ffSGerd Hoffmann    fi
45132b2325ffSGerd Hoffmannfi
45142b2325ffSGerd Hoffmann
451569354a83SHans de Goede# check for usbredirparser for usb network redirection support
451669354a83SHans de Goedeif test "$usb_redir" != "no" ; then
451765d5d3f9SStefan Weil    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
451869354a83SHans de Goede        usb_redir="yes"
4519ca871ec8SStefan Weil        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4520ca871ec8SStefan Weil        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
452169354a83SHans de Goede    else
452269354a83SHans de Goede        if test "$usb_redir" = "yes"; then
452321684af0SStewart Smith            feature_not_found "usb-redir" "Install usbredir devel"
452469354a83SHans de Goede        fi
452569354a83SHans de Goede        usb_redir="no"
452669354a83SHans de Goede    fi
452769354a83SHans de Goedefi
452869354a83SHans de Goede
4529cd4ec0b4SGerd Hoffmann##########################################
4530d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
4531d9840e25STomoki Sekiyama
4532e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4533e633a5c6SEric Blake        test "$vss_win32_sdk" != "no" ; then
4534d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
4535690604f6SMichael Roth    "")   vss_win32_include="-isystem $source_path" ;;
4536d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4537d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4538690604f6SMichael Roth          vss_win32_include="-isystem $source_path/.sdk/vss"
4539d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4540d9840e25STomoki Sekiyama	  ;;
4541690604f6SMichael Roth    *)    vss_win32_include="-isystem $vss_win32_sdk"
4542d9840e25STomoki Sekiyama  esac
4543d9840e25STomoki Sekiyama  cat > $TMPC << EOF
4544d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
4545d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
4546d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
4547d9840e25STomoki SekiyamaEOF
4548d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
4549d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
4550d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4551315d3184SFam Zheng    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4552f33ca81fSMichael Roth    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4553d9840e25STomoki Sekiyama  else
4554d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
4555d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
4556d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4557d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4558d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4559d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
4560d9840e25STomoki Sekiyama      feature_not_found "VSS support"
4561d9840e25STomoki Sekiyama    fi
4562d9840e25STomoki Sekiyama    guest_agent_with_vss="no"
4563d9840e25STomoki Sekiyama  fi
4564d9840e25STomoki Sekiyamafi
4565d9840e25STomoki Sekiyama
4566d9840e25STomoki Sekiyama##########################################
4567d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
4568d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
4569d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
4570d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
4571d9840e25STomoki Sekiyama
4572e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4573e633a5c6SEric Blake        test "$guest_agent_with_vss" = "yes" ; then
4574d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
4575d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
4576d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4577d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
4578d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4579d9840e25STomoki Sekiyama    else
4580d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
4581d9840e25STomoki Sekiyama    fi
4582d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
4583d9840e25STomoki Sekiyama    win_sdk=""
4584d9840e25STomoki Sekiyama  fi
4585d9840e25STomoki Sekiyamafi
4586d9840e25STomoki Sekiyama
4587d9840e25STomoki Sekiyama##########################################
458850cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h
4589e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
459050cbebb9SMichael Roth  cat > $TMPC << EOF
459150cbebb9SMichael Roth#include <windows.h>
459250cbebb9SMichael Roth#include <ntddscsi.h>
459350cbebb9SMichael Rothint main(void) {
459450cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS)
459550cbebb9SMichael Roth#error Missing required ioctl definitions
459650cbebb9SMichael Roth#endif
459750cbebb9SMichael Roth  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
459850cbebb9SMichael Roth  return addr.Lun;
459950cbebb9SMichael Roth}
460050cbebb9SMichael RothEOF
460150cbebb9SMichael Roth  if compile_prog "" "" ; then
460250cbebb9SMichael Roth    guest_agent_ntddscsi=yes
4603996b9cdcSMatt Hines    libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
460450cbebb9SMichael Roth  fi
460550cbebb9SMichael Rothfi
460650cbebb9SMichael Roth
460750cbebb9SMichael Roth##########################################
46089d9e1521SGerd Hoffmann# virgl renderer probe
46099d9e1521SGerd Hoffmann
46109d9e1521SGerd Hoffmannif test "$virglrenderer" != "no" ; then
46119d9e1521SGerd Hoffmann  cat > $TMPC << EOF
46129d9e1521SGerd Hoffmann#include <virglrenderer.h>
46139d9e1521SGerd Hoffmannint main(void) { virgl_renderer_poll(); return 0; }
46149d9e1521SGerd HoffmannEOF
46159d9e1521SGerd Hoffmann  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
46169d9e1521SGerd Hoffmann  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
461747479c55SMarc-André Lureau  virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
46189d9e1521SGerd Hoffmann  if $pkg_config virglrenderer >/dev/null 2>&1 && \
46199d9e1521SGerd Hoffmann     compile_prog "$virgl_cflags" "$virgl_libs" ; then
46209d9e1521SGerd Hoffmann    virglrenderer="yes"
46219d9e1521SGerd Hoffmann  else
46229d9e1521SGerd Hoffmann    if test "$virglrenderer" = "yes" ; then
46239d9e1521SGerd Hoffmann      feature_not_found "virglrenderer"
46249d9e1521SGerd Hoffmann    fi
46259d9e1521SGerd Hoffmann    virglrenderer="no"
46269d9e1521SGerd Hoffmann  fi
46279d9e1521SGerd Hoffmannfi
46289d9e1521SGerd Hoffmann
46299d9e1521SGerd Hoffmann##########################################
46308ca80760SRichard Henderson# capstone
46318ca80760SRichard Henderson
4632e219c499SRichard Hendersoncase "$capstone" in
46338b18cdbfSRichard Henderson  auto | enabled | internal)
46348b18cdbfSRichard Henderson    # Simpler to always update submodule, even if not needed.
46358b18cdbfSRichard Henderson    if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4636e219c499SRichard Henderson      git_submodules="${git_submodules} capstone"
4637e219c499SRichard Henderson    fi
4638e219c499SRichard Henderson    ;;
4639e219c499SRichard Hendersonesac
46408ca80760SRichard Henderson
46418ca80760SRichard Henderson##########################################
46425f6b9e8fSBlue Swirl# check if we have fdatasync
46435f6b9e8fSBlue Swirl
46445f6b9e8fSBlue Swirlfdatasync=no
46455f6b9e8fSBlue Swirlcat > $TMPC << EOF
46465f6b9e8fSBlue Swirl#include <unistd.h>
4647d1722a27SAlexandre Raymondint main(void) {
4648d1722a27SAlexandre Raymond#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4649d1722a27SAlexandre Raymondreturn fdatasync(0);
4650d1722a27SAlexandre Raymond#else
4651e172fe11SStefan Weil#error Not supported
4652d1722a27SAlexandre Raymond#endif
4653d1722a27SAlexandre Raymond}
46545f6b9e8fSBlue SwirlEOF
46555f6b9e8fSBlue Swirlif compile_prog "" "" ; then
46565f6b9e8fSBlue Swirl    fdatasync=yes
46575f6b9e8fSBlue Swirlfi
46585f6b9e8fSBlue Swirl
465994a420b1SStefan Hajnoczi##########################################
4660e78815a5SAndreas Färber# check if we have madvise
4661e78815a5SAndreas Färber
4662e78815a5SAndreas Färbermadvise=no
4663e78815a5SAndreas Färbercat > $TMPC << EOF
4664e78815a5SAndreas Färber#include <sys/types.h>
4665e78815a5SAndreas Färber#include <sys/mman.h>
4666832ce9c2SScott Wood#include <stddef.h>
4667e78815a5SAndreas Färberint main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4668e78815a5SAndreas FärberEOF
4669e78815a5SAndreas Färberif compile_prog "" "" ; then
4670e78815a5SAndreas Färber    madvise=yes
4671e78815a5SAndreas Färberfi
4672e78815a5SAndreas Färber
4673e78815a5SAndreas Färber##########################################
4674e78815a5SAndreas Färber# check if we have posix_madvise
4675e78815a5SAndreas Färber
4676e78815a5SAndreas Färberposix_madvise=no
4677e78815a5SAndreas Färbercat > $TMPC << EOF
4678e78815a5SAndreas Färber#include <sys/mman.h>
4679832ce9c2SScott Wood#include <stddef.h>
4680e78815a5SAndreas Färberint main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4681e78815a5SAndreas FärberEOF
4682e78815a5SAndreas Färberif compile_prog "" "" ; then
4683e78815a5SAndreas Färber    posix_madvise=yes
4684e78815a5SAndreas Färberfi
4685e78815a5SAndreas Färber
4686e78815a5SAndreas Färber##########################################
46879bc5a719SAndreas Gustafsson# check if we have posix_memalign()
46889bc5a719SAndreas Gustafsson
46899bc5a719SAndreas Gustafssonposix_memalign=no
46909bc5a719SAndreas Gustafssoncat > $TMPC << EOF
46919bc5a719SAndreas Gustafsson#include <stdlib.h>
46929bc5a719SAndreas Gustafssonint main(void) {
46939bc5a719SAndreas Gustafsson    void *p;
46949bc5a719SAndreas Gustafsson    return posix_memalign(&p, 8, 8);
46959bc5a719SAndreas Gustafsson}
46969bc5a719SAndreas GustafssonEOF
46979bc5a719SAndreas Gustafssonif compile_prog "" "" ; then
46989bc5a719SAndreas Gustafsson    posix_memalign=yes
46999bc5a719SAndreas Gustafssonfi
47009bc5a719SAndreas Gustafsson
47019bc5a719SAndreas Gustafsson##########################################
47020a852417SPaul Durrant# check if we have posix_syslog
47030a852417SPaul Durrant
47040a852417SPaul Durrantposix_syslog=no
47050a852417SPaul Durrantcat > $TMPC << EOF
47060a852417SPaul Durrant#include <syslog.h>
47070a852417SPaul Durrantint main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
47080a852417SPaul DurrantEOF
47090a852417SPaul Durrantif compile_prog "" "" ; then
47100a852417SPaul Durrant    posix_syslog=yes
47110a852417SPaul Durrantfi
47120a852417SPaul Durrant
47130a852417SPaul Durrant##########################################
4714401bc051SPeter Maydell# check if we have sem_timedwait
4715401bc051SPeter Maydell
4716401bc051SPeter Maydellsem_timedwait=no
4717401bc051SPeter Maydellcat > $TMPC << EOF
4718401bc051SPeter Maydell#include <semaphore.h>
4719811294b7SDaniel P. Berrangéint main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4720401bc051SPeter MaydellEOF
4721401bc051SPeter Maydellif compile_prog "" "" ; then
4722401bc051SPeter Maydell    sem_timedwait=yes
4723401bc051SPeter Maydellfi
4724401bc051SPeter Maydell
4725401bc051SPeter Maydell##########################################
47265c99fa37SKeno Fischer# check if we have strchrnul
47275c99fa37SKeno Fischer
47285c99fa37SKeno Fischerstrchrnul=no
47295c99fa37SKeno Fischercat > $TMPC << EOF
47305c99fa37SKeno Fischer#include <string.h>
47315c99fa37SKeno Fischerint main(void);
47325c99fa37SKeno Fischer// Use a haystack that the compiler shouldn't be able to constant fold
47335c99fa37SKeno Fischerchar *haystack = (char*)&main;
47345c99fa37SKeno Fischerint main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
47355c99fa37SKeno FischerEOF
47365c99fa37SKeno Fischerif compile_prog "" "" ; then
47375c99fa37SKeno Fischer    strchrnul=yes
47385c99fa37SKeno Fischerfi
47395c99fa37SKeno Fischer
47408a792b03SJiufei Xue#########################################
47418a792b03SJiufei Xue# check if we have st_atim
47428a792b03SJiufei Xue
47438a792b03SJiufei Xuest_atim=no
47448a792b03SJiufei Xuecat > $TMPC << EOF
47458a792b03SJiufei Xue#include <sys/stat.h>
47468a792b03SJiufei Xue#include <stddef.h>
47478a792b03SJiufei Xueint main(void) { return offsetof(struct stat, st_atim); }
47488a792b03SJiufei XueEOF
47498a792b03SJiufei Xueif compile_prog "" "" ; then
47508a792b03SJiufei Xue    st_atim=yes
47518a792b03SJiufei Xuefi
47528a792b03SJiufei Xue
47535c99fa37SKeno Fischer##########################################
475494a420b1SStefan Hajnoczi# check if trace backend exists
475594a420b1SStefan Hajnoczi
47565b808275SLluís Vilanova$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
475794a420b1SStefan Hajnocziif test "$?" -ne 0 ; then
47585b808275SLluís Vilanova  error_exit "invalid trace backends" \
47595b808275SLluís Vilanova      "Please choose supported trace backends."
476094a420b1SStefan Hajnoczifi
476194a420b1SStefan Hajnoczi
47627e24e92aSStefan Hajnoczi##########################################
47637e24e92aSStefan Hajnoczi# For 'ust' backend, test if ust headers are present
47645b808275SLluís Vilanovaif have_backend "ust"; then
47657e24e92aSStefan Hajnoczi  cat > $TMPC << EOF
4766bf15f63cSMohamad Gebai#include <lttng/tracepoint.h>
47677e24e92aSStefan Hajnocziint main(void) { return 0; }
47687e24e92aSStefan HajnocziEOF
4769c79ed23dSFrancis Deslauriers  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4770bf15f63cSMohamad Gebai    if $pkg_config lttng-ust --exists; then
477189138857SStefan Weil      lttng_ust_libs=$($pkg_config --libs lttng-ust)
47727e24e92aSStefan Hajnoczi    else
4773c79ed23dSFrancis Deslauriers      lttng_ust_libs="-llttng-ust -ldl"
4774bf15f63cSMohamad Gebai    fi
4775bf15f63cSMohamad Gebai    if $pkg_config liburcu-bp --exists; then
477689138857SStefan Weil      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4777bf15f63cSMohamad Gebai    else
4778bf15f63cSMohamad Gebai      urcu_bp_libs="-lurcu-bp"
4779bf15f63cSMohamad Gebai    fi
4780bf15f63cSMohamad Gebai  else
4781bf15f63cSMohamad Gebai    error_exit "Trace backend 'ust' missing lttng-ust header files"
47827e24e92aSStefan Hajnoczi  fi
47837e24e92aSStefan Hajnoczifi
4784b3d08c02SDaniel P. Berrange
4785b3d08c02SDaniel P. Berrange##########################################
4786b3d08c02SDaniel P. Berrange# For 'dtrace' backend, test if 'dtrace' command is present
47875b808275SLluís Vilanovaif have_backend "dtrace"; then
4788b3d08c02SDaniel P. Berrange  if ! has 'dtrace' ; then
478976ad07a4SPeter Maydell    error_exit "dtrace command is not found in PATH $PATH"
4790b3d08c02SDaniel P. Berrange  fi
4791c276b17dSDaniel P. Berrange  trace_backend_stap="no"
4792c276b17dSDaniel P. Berrange  if has 'stap' ; then
4793c276b17dSDaniel P. Berrange    trace_backend_stap="yes"
47944b265c79SStefan Hajnoczi
47954b265c79SStefan Hajnoczi    # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
47964b265c79SStefan Hajnoczi    # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
47974b265c79SStefan Hajnoczi    # instead. QEMU --enable-modules depends on this because the SystemTap
47984b265c79SStefan Hajnoczi    # semaphores are linked into the main binary and not the module's shared
47994b265c79SStefan Hajnoczi    # object.
48004b265c79SStefan Hajnoczi    QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
4801c276b17dSDaniel P. Berrange  fi
4802b3d08c02SDaniel P. Berrangefi
4803b3d08c02SDaniel P. Berrange
48047e24e92aSStefan Hajnoczi##########################################
4805519175a2SAlex Barcelo# check and set a backend for coroutine
4806d0e2fce5SAneesh Kumar K.V
48077c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
480833c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows
480933c53c54SDaniel P. Berrange# specific one.
48107c2acc70SPeter Maydell
48117c2acc70SPeter Maydellucontext_works=no
4812d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
4813d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
4814d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
4815cdf84806SPeter Maydell#ifdef __stub_makecontext
4816cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
4817cdf84806SPeter Maydell#endif
481875cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
4819d0e2fce5SAneesh Kumar K.VEOF
4820d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
48217c2acc70SPeter Maydell    ucontext_works=yes
4822d0e2fce5SAneesh Kumar K.V  fi
4823519175a2SAlex Barcelofi
48247c2acc70SPeter Maydell
48257c2acc70SPeter Maydellif test "$coroutine" = ""; then
48267c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
48277c2acc70SPeter Maydell    coroutine=win32
48287c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
48297c2acc70SPeter Maydell    coroutine=ucontext
4830519175a2SAlex Barcelo  else
48317c2acc70SPeter Maydell    coroutine=sigaltstack
48327c2acc70SPeter Maydell  fi
48337c2acc70SPeter Maydellelse
48347c2acc70SPeter Maydell  case $coroutine in
48357c2acc70SPeter Maydell  windows)
48367c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
48377c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
48387c2acc70SPeter Maydell    fi
48397c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
48407c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
48417c2acc70SPeter Maydell    coroutine=win32
48427c2acc70SPeter Maydell    ;;
48437c2acc70SPeter Maydell  ucontext)
48447c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
48457c2acc70SPeter Maydell      feature_not_found "ucontext"
48467c2acc70SPeter Maydell    fi
48477c2acc70SPeter Maydell    ;;
484833c53c54SDaniel P. Berrange  sigaltstack)
48497c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
48507c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
48517c2acc70SPeter Maydell    fi
48527c2acc70SPeter Maydell    ;;
48537c2acc70SPeter Maydell  *)
485476ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
48557c2acc70SPeter Maydell    ;;
48567c2acc70SPeter Maydell  esac
4857d0e2fce5SAneesh Kumar K.Vfi
4858d0e2fce5SAneesh Kumar K.V
485970c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then
486070c60c08SStefan Hajnoczi  coroutine_pool=yes
486170c60c08SStefan Hajnoczifi
486270c60c08SStefan Hajnoczi
48637d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then
48647d992e4dSPeter Lieven  if test "$coroutine_pool" = "yes"; then
48657d992e4dSPeter Lieven    echo "WARN: disabling coroutine pool for stack usage debugging"
48667d992e4dSPeter Lieven    coroutine_pool=no
48677d992e4dSPeter Lieven  fi
48687d992e4dSPeter Lievenfi
48697d992e4dSPeter Lieven
48701e4f6065SDaniele Buono##################################################
48711e4f6065SDaniele Buono# SafeStack
48721e4f6065SDaniele Buono
48731e4f6065SDaniele Buono
48741e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
48751e4f6065SDaniele Buonocat > $TMPC << EOF
48761e4f6065SDaniele Buonoint main(int argc, char *argv[])
48771e4f6065SDaniele Buono{
48781e4f6065SDaniele Buono#if ! __has_feature(safe_stack)
48791e4f6065SDaniele Buono#error SafeStack Disabled
48801e4f6065SDaniele Buono#endif
48811e4f6065SDaniele Buono    return 0;
48821e4f6065SDaniele Buono}
48831e4f6065SDaniele BuonoEOF
48841e4f6065SDaniele Buono  flag="-fsanitize=safe-stack"
48851e4f6065SDaniele Buono  # Check that safe-stack is supported and enabled.
48861e4f6065SDaniele Buono  if compile_prog "-Werror $flag" "$flag"; then
48871e4f6065SDaniele Buono    # Flag needed both at compilation and at linking
48881e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
48891e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
48901e4f6065SDaniele Buono  else
48911e4f6065SDaniele Buono    error_exit "SafeStack not supported by your compiler"
48921e4f6065SDaniele Buono  fi
48931e4f6065SDaniele Buono  if test "$coroutine" != "ucontext"; then
48941e4f6065SDaniele Buono    error_exit "SafeStack is only supported by the coroutine backend ucontext"
48951e4f6065SDaniele Buono  fi
48961e4f6065SDaniele Buonoelse
48971e4f6065SDaniele Buonocat > $TMPC << EOF
48981e4f6065SDaniele Buonoint main(int argc, char *argv[])
48991e4f6065SDaniele Buono{
49001e4f6065SDaniele Buono#if defined(__has_feature)
49011e4f6065SDaniele Buono#if __has_feature(safe_stack)
49021e4f6065SDaniele Buono#error SafeStack Enabled
49031e4f6065SDaniele Buono#endif
49041e4f6065SDaniele Buono#endif
49051e4f6065SDaniele Buono    return 0;
49061e4f6065SDaniele Buono}
49071e4f6065SDaniele BuonoEOF
49081e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then
49091e4f6065SDaniele Buono  # Make sure that safe-stack is disabled
49101e4f6065SDaniele Buono  if ! compile_prog "-Werror" ""; then
49111e4f6065SDaniele Buono    # SafeStack was already enabled, try to explicitly remove the feature
49121e4f6065SDaniele Buono    flag="-fno-sanitize=safe-stack"
49131e4f6065SDaniele Buono    if ! compile_prog "-Werror $flag" "$flag"; then
49141e4f6065SDaniele Buono      error_exit "Configure cannot disable SafeStack"
49151e4f6065SDaniele Buono    fi
49161e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
49171e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
49181e4f6065SDaniele Buono  fi
49191e4f6065SDaniele Buonoelse # "$safe_stack" = ""
49201e4f6065SDaniele Buono  # Set safe_stack to yes or no based on pre-existing flags
49211e4f6065SDaniele Buono  if compile_prog "-Werror" ""; then
49221e4f6065SDaniele Buono    safe_stack="no"
49231e4f6065SDaniele Buono  else
49241e4f6065SDaniele Buono    safe_stack="yes"
49251e4f6065SDaniele Buono    if test "$coroutine" != "ucontext"; then
49261e4f6065SDaniele Buono      error_exit "SafeStack is only supported by the coroutine backend ucontext"
49271e4f6065SDaniele Buono    fi
49281e4f6065SDaniele Buono  fi
49291e4f6065SDaniele Buonofi
49301e4f6065SDaniele Buonofi
49317d992e4dSPeter Lieven
4932d0e2fce5SAneesh Kumar K.V##########################################
4933d2042378SAneesh Kumar K.V# check if we have open_by_handle_at
4934d2042378SAneesh Kumar K.V
49354e1797f9SStefan Weilopen_by_handle_at=no
4936d2042378SAneesh Kumar K.Vcat > $TMPC << EOF
4937d2042378SAneesh Kumar K.V#include <fcntl.h>
4938acc55ba8SStefan Weil#if !defined(AT_EMPTY_PATH)
4939acc55ba8SStefan Weil# error missing definition
4940acc55ba8SStefan Weil#else
494175cafad7SStefan Weilint main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4942acc55ba8SStefan Weil#endif
4943d2042378SAneesh Kumar K.VEOF
4944d2042378SAneesh Kumar K.Vif compile_prog "" "" ; then
4945d2042378SAneesh Kumar K.V    open_by_handle_at=yes
4946d2042378SAneesh Kumar K.Vfi
4947d2042378SAneesh Kumar K.V
4948e06a765eSHarsh Prateek Bora########################################
4949e06a765eSHarsh Prateek Bora# check if we have linux/magic.h
4950e06a765eSHarsh Prateek Bora
4951e06a765eSHarsh Prateek Boralinux_magic_h=no
4952e06a765eSHarsh Prateek Boracat > $TMPC << EOF
4953e06a765eSHarsh Prateek Bora#include <linux/magic.h>
4954e06a765eSHarsh Prateek Boraint main(void) {
495575cafad7SStefan Weil  return 0;
4956e06a765eSHarsh Prateek Bora}
4957e06a765eSHarsh Prateek BoraEOF
4958e06a765eSHarsh Prateek Boraif compile_prog "" "" ; then
4959e06a765eSHarsh Prateek Bora    linux_magic_h=yes
4960e06a765eSHarsh Prateek Borafi
4961e06a765eSHarsh Prateek Bora
49628ab1bf12SLuiz Capitulino########################################
4963541be927SChristian Borntraeger# check if we have valgrind/valgrind.h
49643f4349dcSKevin Wolf
49653f4349dcSKevin Wolfvalgrind_h=no
49663f4349dcSKevin Wolfcat > $TMPC << EOF
49673f4349dcSKevin Wolf#include <valgrind/valgrind.h>
49683f4349dcSKevin Wolfint main(void) {
49693f4349dcSKevin Wolf  return 0;
49703f4349dcSKevin Wolf}
49713f4349dcSKevin WolfEOF
49723f4349dcSKevin Wolfif compile_prog "" "" ; then
49733f4349dcSKevin Wolf    valgrind_h=yes
49743f4349dcSKevin Wolffi
49753f4349dcSKevin Wolf
49763f4349dcSKevin Wolf########################################
49778ab1bf12SLuiz Capitulino# check if environ is declared
49788ab1bf12SLuiz Capitulino
49798ab1bf12SLuiz Capitulinohas_environ=no
49808ab1bf12SLuiz Capitulinocat > $TMPC << EOF
49818ab1bf12SLuiz Capitulino#include <unistd.h>
49828ab1bf12SLuiz Capitulinoint main(void) {
4983c075a723SBlue Swirl    environ = 0;
49848ab1bf12SLuiz Capitulino    return 0;
49858ab1bf12SLuiz Capitulino}
49868ab1bf12SLuiz CapitulinoEOF
49878ab1bf12SLuiz Capitulinoif compile_prog "" "" ; then
49888ab1bf12SLuiz Capitulino    has_environ=yes
49898ab1bf12SLuiz Capitulinofi
49908ab1bf12SLuiz Capitulino
499176a347e1SRichard Henderson########################################
499276a347e1SRichard Henderson# check if cpuid.h is usable.
499376a347e1SRichard Henderson
499476a347e1SRichard Hendersoncat > $TMPC << EOF
499576a347e1SRichard Henderson#include <cpuid.h>
499676a347e1SRichard Hendersonint main(void) {
4997774d566cSPeter Maydell    unsigned a, b, c, d;
4998774d566cSPeter Maydell    int max = __get_cpuid_max(0, 0);
4999774d566cSPeter Maydell
5000774d566cSPeter Maydell    if (max >= 1) {
5001774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
5002774d566cSPeter Maydell    }
5003774d566cSPeter Maydell
5004774d566cSPeter Maydell    if (max >= 7) {
5005774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
5006774d566cSPeter Maydell    }
5007774d566cSPeter Maydell
500876a347e1SRichard Henderson    return 0;
500976a347e1SRichard Henderson}
501076a347e1SRichard HendersonEOF
501176a347e1SRichard Hendersonif compile_prog "" "" ; then
501276a347e1SRichard Henderson    cpuid_h=yes
501376a347e1SRichard Hendersonfi
501476a347e1SRichard Henderson
50155dd89908SRichard Henderson##########################################
50165dd89908SRichard Henderson# avx2 optimization requirement check
50175dd89908SRichard Henderson#
50185dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable,
50195dd89908SRichard Henderson# since we won't be able to select the new routines.
50205dd89908SRichard Henderson
5021e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
50225dd89908SRichard Henderson  cat > $TMPC << EOF
50235dd89908SRichard Henderson#pragma GCC push_options
50245dd89908SRichard Henderson#pragma GCC target("avx2")
50255dd89908SRichard Henderson#include <cpuid.h>
50265dd89908SRichard Henderson#include <immintrin.h>
50275dd89908SRichard Hendersonstatic int bar(void *a) {
50285dd89908SRichard Henderson    __m256i x = *(__m256i *)a;
50295dd89908SRichard Henderson    return _mm256_testz_si256(x, x);
50305dd89908SRichard Henderson}
50315dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); }
50325dd89908SRichard HendersonEOF
50335dd89908SRichard Henderson  if compile_object "" ; then
50345dd89908SRichard Henderson    avx2_opt="yes"
503586583a07SLiam Merwick  else
503686583a07SLiam Merwick    avx2_opt="no"
50375dd89908SRichard Henderson  fi
50385dd89908SRichard Hendersonfi
50395dd89908SRichard Henderson
50406b8cd447SRobert Hoo##########################################
50416b8cd447SRobert Hoo# avx512f optimization requirement check
50426b8cd447SRobert Hoo#
50436b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable,
50446b8cd447SRobert Hoo# since we won't be able to select the new routines.
50456b8cd447SRobert Hoo# by default, it is turned off.
50466b8cd447SRobert Hoo# if user explicitly want to enable it, check environment
50476b8cd447SRobert Hoo
50486b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
50496b8cd447SRobert Hoo  cat > $TMPC << EOF
50506b8cd447SRobert Hoo#pragma GCC push_options
50516b8cd447SRobert Hoo#pragma GCC target("avx512f")
50526b8cd447SRobert Hoo#include <cpuid.h>
50536b8cd447SRobert Hoo#include <immintrin.h>
50546b8cd447SRobert Hoostatic int bar(void *a) {
50556b8cd447SRobert Hoo    __m512i x = *(__m512i *)a;
50566b8cd447SRobert Hoo    return _mm512_test_epi64_mask(x, x);
50576b8cd447SRobert Hoo}
50586b8cd447SRobert Hooint main(int argc, char *argv[])
50596b8cd447SRobert Hoo{
50606b8cd447SRobert Hoo	return bar(argv[0]);
50616b8cd447SRobert Hoo}
50626b8cd447SRobert HooEOF
50636b8cd447SRobert Hoo  if ! compile_object "" ; then
50646b8cd447SRobert Hoo    avx512f_opt="no"
50656b8cd447SRobert Hoo  fi
50666b8cd447SRobert Hooelse
50676b8cd447SRobert Hoo  avx512f_opt="no"
50686b8cd447SRobert Hoofi
50696b8cd447SRobert Hoo
5070f540166bSRichard Henderson########################################
5071f540166bSRichard Henderson# check if __[u]int128_t is usable.
5072f540166bSRichard Henderson
5073f540166bSRichard Hendersonint128=no
5074f540166bSRichard Hendersoncat > $TMPC << EOF
5075f540166bSRichard Henderson__int128_t a;
5076f540166bSRichard Henderson__uint128_t b;
5077f540166bSRichard Hendersonint main (void) {
5078f540166bSRichard Henderson  a = a + b;
5079f540166bSRichard Henderson  b = a * b;
5080464e3671SPeter Maydell  a = a * a;
5081f540166bSRichard Henderson  return 0;
5082f540166bSRichard Henderson}
5083f540166bSRichard HendersonEOF
5084f540166bSRichard Hendersonif compile_prog "" "" ; then
5085f540166bSRichard Henderson    int128=yes
5086f540166bSRichard Hendersonfi
508776a347e1SRichard Henderson
50887ebee43eSRichard Henderson#########################################
50897ebee43eSRichard Henderson# See if 128-bit atomic operations are supported.
50907ebee43eSRichard Henderson
50917ebee43eSRichard Hendersonatomic128=no
50927ebee43eSRichard Hendersonif test "$int128" = "yes"; then
50937ebee43eSRichard Henderson  cat > $TMPC << EOF
50947ebee43eSRichard Hendersonint main(void)
50957ebee43eSRichard Henderson{
50967ebee43eSRichard Henderson  unsigned __int128 x = 0, y = 0;
50977ebee43eSRichard Henderson  y = __atomic_load_16(&x, 0);
50987ebee43eSRichard Henderson  __atomic_store_16(&x, y, 0);
50997ebee43eSRichard Henderson  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
51007ebee43eSRichard Henderson  return 0;
51017ebee43eSRichard Henderson}
51027ebee43eSRichard HendersonEOF
51037ebee43eSRichard Henderson  if compile_prog "" "" ; then
51047ebee43eSRichard Henderson    atomic128=yes
51057ebee43eSRichard Henderson  fi
51067ebee43eSRichard Hendersonfi
51077ebee43eSRichard Henderson
5108e6cd4bb5SRichard Hendersoncmpxchg128=no
5109e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then
5110e6cd4bb5SRichard Henderson  cat > $TMPC << EOF
5111e6cd4bb5SRichard Hendersonint main(void)
5112e6cd4bb5SRichard Henderson{
5113e6cd4bb5SRichard Henderson  unsigned __int128 x = 0, y = 0;
5114e6cd4bb5SRichard Henderson  __sync_val_compare_and_swap_16(&x, y, x);
5115e6cd4bb5SRichard Henderson  return 0;
5116e6cd4bb5SRichard Henderson}
5117e6cd4bb5SRichard HendersonEOF
5118e6cd4bb5SRichard Henderson  if compile_prog "" "" ; then
5119e6cd4bb5SRichard Henderson    cmpxchg128=yes
5120e6cd4bb5SRichard Henderson  fi
5121e6cd4bb5SRichard Hendersonfi
5122e6cd4bb5SRichard Henderson
5123df79b996SRichard Henderson#########################################
5124df79b996SRichard Henderson# See if 64-bit atomic operations are supported.
5125df79b996SRichard Henderson# Note that without __atomic builtins, we can only
5126df79b996SRichard Henderson# assume atomic loads/stores max at pointer size.
5127df79b996SRichard Henderson
5128df79b996SRichard Hendersoncat > $TMPC << EOF
5129df79b996SRichard Henderson#include <stdint.h>
5130df79b996SRichard Hendersonint main(void)
5131df79b996SRichard Henderson{
5132df79b996SRichard Henderson  uint64_t x = 0, y = 0;
5133df79b996SRichard Henderson#ifdef __ATOMIC_RELAXED
51345fe40765SThomas Huth  y = __atomic_load_n(&x, __ATOMIC_RELAXED);
51355fe40765SThomas Huth  __atomic_store_n(&x, y, __ATOMIC_RELAXED);
51365fe40765SThomas Huth  __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
51375fe40765SThomas Huth  __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
51385fe40765SThomas Huth  __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
5139df79b996SRichard Henderson#else
5140df79b996SRichard Henderson  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5141df79b996SRichard Henderson  __sync_lock_test_and_set(&x, y);
5142df79b996SRichard Henderson  __sync_val_compare_and_swap(&x, y, 0);
5143df79b996SRichard Henderson  __sync_fetch_and_add(&x, y);
5144df79b996SRichard Henderson#endif
5145df79b996SRichard Henderson  return 0;
5146df79b996SRichard Henderson}
5147df79b996SRichard HendersonEOF
5148df79b996SRichard Hendersonif compile_prog "" "" ; then
5149df79b996SRichard Henderson  atomic64=yes
5150df79b996SRichard Hendersonfi
5151df79b996SRichard Henderson
515226fffe29SEmilio G. Cota#########################################
515326fffe29SEmilio G. Cota# See if --dynamic-list is supported by the linker
515426fffe29SEmilio G. Cotald_dynamic_list="no"
515526fffe29SEmilio G. Cotaif test "$static" = "no" ; then
515626fffe29SEmilio G. Cota    cat > $TMPTXT <<EOF
515726fffe29SEmilio G. Cota{
515826fffe29SEmilio G. Cota  foo;
515926fffe29SEmilio G. Cota};
516026fffe29SEmilio G. CotaEOF
516126fffe29SEmilio G. Cota
516226fffe29SEmilio G. Cota    cat > $TMPC <<EOF
516326fffe29SEmilio G. Cota#include <stdio.h>
516426fffe29SEmilio G. Cotavoid foo(void);
516526fffe29SEmilio G. Cota
516626fffe29SEmilio G. Cotavoid foo(void)
516726fffe29SEmilio G. Cota{
516826fffe29SEmilio G. Cota  printf("foo\n");
516926fffe29SEmilio G. Cota}
517026fffe29SEmilio G. Cota
517126fffe29SEmilio G. Cotaint main(void)
517226fffe29SEmilio G. Cota{
517326fffe29SEmilio G. Cota  foo();
517426fffe29SEmilio G. Cota  return 0;
517526fffe29SEmilio G. Cota}
517626fffe29SEmilio G. CotaEOF
517726fffe29SEmilio G. Cota
517826fffe29SEmilio G. Cota    if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
517926fffe29SEmilio G. Cota        ld_dynamic_list="yes"
518026fffe29SEmilio G. Cota    fi
518126fffe29SEmilio G. Cotafi
518226fffe29SEmilio G. Cota
518326fffe29SEmilio G. Cota#########################################
518426fffe29SEmilio G. Cota# See if -exported_symbols_list is supported by the linker
518526fffe29SEmilio G. Cota
518626fffe29SEmilio G. Cotald_exported_symbols_list="no"
518726fffe29SEmilio G. Cotaif test "$static" = "no" ; then
518826fffe29SEmilio G. Cota    cat > $TMPTXT <<EOF
518926fffe29SEmilio G. Cota  _foo
519026fffe29SEmilio G. CotaEOF
519126fffe29SEmilio G. Cota
519226fffe29SEmilio G. Cota    if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
519326fffe29SEmilio G. Cota        ld_exported_symbols_list="yes"
519426fffe29SEmilio G. Cota    fi
519526fffe29SEmilio G. Cotafi
519626fffe29SEmilio G. Cota
519726fffe29SEmilio G. Cotaif  test "$plugins" = "yes" &&
519826fffe29SEmilio G. Cota    test "$ld_dynamic_list" = "no" &&
519926fffe29SEmilio G. Cota    test "$ld_exported_symbols_list" = "no" ; then
520026fffe29SEmilio G. Cota  error_exit \
520126fffe29SEmilio G. Cota      "Plugin support requires dynamic linking and specifying a set of symbols " \
520226fffe29SEmilio G. Cota      "that are exported to plugins. Unfortunately your linker doesn't " \
520326fffe29SEmilio G. Cota      "support the flag (--dynamic-list or -exported_symbols_list) used " \
520426fffe29SEmilio G. Cota      "for this purpose. You can't build with --static."
520526fffe29SEmilio G. Cotafi
520626fffe29SEmilio G. Cota
52071e6e9acaSRichard Henderson########################################
5208db8aaae8SRichard Henderson# See if __attribute__((alias)) is supported.
5209db8aaae8SRichard Henderson# This false for Xcode 9, but has been remedied for Xcode 10.
5210db8aaae8SRichard Henderson# Unfortunately, travis uses Xcode 9 by default.
5211db8aaae8SRichard Henderson
5212db8aaae8SRichard Hendersonattralias=no
5213db8aaae8SRichard Hendersoncat > $TMPC << EOF
5214db8aaae8SRichard Hendersonint x = 1;
5215db8aaae8SRichard Hendersonextern const int y __attribute__((alias("x")));
5216db8aaae8SRichard Hendersonint main(void) { return 0; }
5217db8aaae8SRichard HendersonEOF
5218db8aaae8SRichard Hendersonif compile_prog "" "" ; then
5219db8aaae8SRichard Henderson    attralias=yes
5220db8aaae8SRichard Hendersonfi
5221db8aaae8SRichard Henderson
5222db8aaae8SRichard Henderson########################################
52231e6e9acaSRichard Henderson# check if getauxval is available.
52241e6e9acaSRichard Henderson
52251e6e9acaSRichard Hendersongetauxval=no
52261e6e9acaSRichard Hendersoncat > $TMPC << EOF
52271e6e9acaSRichard Henderson#include <sys/auxv.h>
52281e6e9acaSRichard Hendersonint main(void) {
52291e6e9acaSRichard Henderson  return getauxval(AT_HWCAP) == 0;
52301e6e9acaSRichard Henderson}
52311e6e9acaSRichard HendersonEOF
52321e6e9acaSRichard Hendersonif compile_prog "" "" ; then
52331e6e9acaSRichard Henderson    getauxval=yes
52341e6e9acaSRichard Hendersonfi
52351e6e9acaSRichard Henderson
5236fd0e6053SJohn Snow########################################
5237fd0e6053SJohn Snow# check if ccache is interfering with
5238fd0e6053SJohn Snow# semantic analysis of macros
5239fd0e6053SJohn Snow
52405e4dfd3dSJohn Snowunset CCACHE_CPP2
5241fd0e6053SJohn Snowccache_cpp2=no
5242fd0e6053SJohn Snowcat > $TMPC << EOF
5243fd0e6053SJohn Snowstatic const int Z = 1;
5244fd0e6053SJohn Snow#define fn() ({ Z; })
5245fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
5246fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
5247fd0e6053SJohn Snow#define ID(X) (X)
5248fd0e6053SJohn Snowint main(int argc, char *argv[])
5249fd0e6053SJohn Snow{
5250fd0e6053SJohn Snow    int x = 0, y = 0;
5251fd0e6053SJohn Snow    x = ID(x);
5252fd0e6053SJohn Snow    x = fn();
5253fd0e6053SJohn Snow    fn();
5254fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
5255fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
5256fd0e6053SJohn Snow    return 0;
5257fd0e6053SJohn Snow}
5258fd0e6053SJohn SnowEOF
5259fd0e6053SJohn Snow
5260fd0e6053SJohn Snowif ! compile_object "-Werror"; then
5261fd0e6053SJohn Snow    ccache_cpp2=yes
5262fd0e6053SJohn Snowfi
5263fd0e6053SJohn Snow
5264b553a042SJohn Snow#################################################
5265b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
5266b553a042SJohn Snow
5267b553a042SJohn Snowif test "$fortify_source" != "no"; then
5268b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5269b553a042SJohn Snow    fortify_source="no";
5270e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
5271cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5272b553a042SJohn Snow    fortify_source="no";
5273b553a042SJohn Snow  else
5274b553a042SJohn Snow    fortify_source="yes"
5275b553a042SJohn Snow  fi
5276b553a042SJohn Snowfi
5277b553a042SJohn Snow
52781efad060SFam Zheng###############################################
52791efad060SFam Zheng# Check if copy_file_range is provided by glibc
52801efad060SFam Zhenghave_copy_file_range=no
52811efad060SFam Zhengcat > $TMPC << EOF
52821efad060SFam Zheng#include <unistd.h>
52831efad060SFam Zhengint main(void) {
52841efad060SFam Zheng  copy_file_range(0, NULL, 0, NULL, 0, 0);
52851efad060SFam Zheng  return 0;
52861efad060SFam Zheng}
52871efad060SFam ZhengEOF
52881efad060SFam Zhengif compile_prog "" "" ; then
52891efad060SFam Zheng    have_copy_file_range=yes
52901efad060SFam Zhengfi
52911efad060SFam Zheng
5292d2042378SAneesh Kumar K.V##########################################
5293277abf15SJan Vesely# check if struct fsxattr is available via linux/fs.h
5294277abf15SJan Vesely
5295277abf15SJan Veselyhave_fsxattr=no
5296277abf15SJan Veselycat > $TMPC << EOF
5297277abf15SJan Vesely#include <linux/fs.h>
5298277abf15SJan Veselystruct fsxattr foo;
5299277abf15SJan Veselyint main(void) {
5300277abf15SJan Vesely  return 0;
5301277abf15SJan Vesely}
5302277abf15SJan VeselyEOF
5303277abf15SJan Veselyif compile_prog "" "" ; then
5304277abf15SJan Vesely    have_fsxattr=yes
5305277abf15SJan Veselyfi
5306277abf15SJan Vesely
5307b66e10e4SPeter Maydell##########################################
5308a40161cbSPaolo Bonzini# check for usable membarrier system call
5309a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then
5310a40161cbSPaolo Bonzini    have_membarrier=no
5311a40161cbSPaolo Bonzini    if test "$mingw32" = "yes" ; then
5312a40161cbSPaolo Bonzini        have_membarrier=yes
5313a40161cbSPaolo Bonzini    elif test "$linux" = "yes" ; then
5314a40161cbSPaolo Bonzini        cat > $TMPC << EOF
5315a40161cbSPaolo Bonzini    #include <linux/membarrier.h>
5316a40161cbSPaolo Bonzini    #include <sys/syscall.h>
5317a40161cbSPaolo Bonzini    #include <unistd.h>
5318a40161cbSPaolo Bonzini    #include <stdlib.h>
5319a40161cbSPaolo Bonzini    int main(void) {
5320a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5321a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5322a40161cbSPaolo Bonzini	exit(0);
5323a40161cbSPaolo Bonzini    }
5324a40161cbSPaolo BonziniEOF
5325a40161cbSPaolo Bonzini        if compile_prog "" "" ; then
5326a40161cbSPaolo Bonzini            have_membarrier=yes
5327a40161cbSPaolo Bonzini        fi
5328a40161cbSPaolo Bonzini    fi
5329a40161cbSPaolo Bonzini    if test "$have_membarrier" = "no"; then
5330a40161cbSPaolo Bonzini      feature_not_found "membarrier" "membarrier system call not available"
5331a40161cbSPaolo Bonzini    fi
5332a40161cbSPaolo Bonzinielse
5333a40161cbSPaolo Bonzini    # Do not enable it by default even for Mingw32, because it doesn't
5334a40161cbSPaolo Bonzini    # work on Wine.
5335a40161cbSPaolo Bonzini    membarrier=no
5336a40161cbSPaolo Bonzinifi
5337a40161cbSPaolo Bonzini
5338a40161cbSPaolo Bonzini##########################################
5339b66e10e4SPeter Maydell# check if rtnetlink.h exists and is useful
5340575b22b1SLaurent Vivierhave_rtnetlink=no
5341575b22b1SLaurent Viviercat > $TMPC << EOF
5342575b22b1SLaurent Vivier#include <linux/rtnetlink.h>
5343575b22b1SLaurent Vivierint main(void) {
5344575b22b1SLaurent Vivier  return IFLA_PROTO_DOWN;
5345575b22b1SLaurent Vivier}
5346575b22b1SLaurent VivierEOF
5347575b22b1SLaurent Vivierif compile_prog "" "" ; then
5348575b22b1SLaurent Vivier    have_rtnetlink=yes
5349575b22b1SLaurent Vivierfi
5350575b22b1SLaurent Vivier
53516a02c806SStefan Hajnoczi##########################################
53526a02c806SStefan Hajnoczi# check for usable AF_VSOCK environment
53536a02c806SStefan Hajnoczihave_af_vsock=no
53546a02c806SStefan Hajnoczicat > $TMPC << EOF
53556a02c806SStefan Hajnoczi#include <errno.h>
53566a02c806SStefan Hajnoczi#include <sys/types.h>
53576a02c806SStefan Hajnoczi#include <sys/socket.h>
53586a02c806SStefan Hajnoczi#if !defined(AF_VSOCK)
53596a02c806SStefan Hajnoczi# error missing AF_VSOCK flag
53606a02c806SStefan Hajnoczi#endif
53616a02c806SStefan Hajnoczi#include <linux/vm_sockets.h>
53626a02c806SStefan Hajnocziint main(void) {
53636a02c806SStefan Hajnoczi    int sock, ret;
53646a02c806SStefan Hajnoczi    struct sockaddr_vm svm;
53656a02c806SStefan Hajnoczi    socklen_t len = sizeof(svm);
53666a02c806SStefan Hajnoczi    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
53676a02c806SStefan Hajnoczi    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
53686a02c806SStefan Hajnoczi    if ((ret == -1) && (errno == ENOTCONN)) {
53696a02c806SStefan Hajnoczi        return 0;
53706a02c806SStefan Hajnoczi    }
53716a02c806SStefan Hajnoczi    return -1;
53726a02c806SStefan Hajnoczi}
53736a02c806SStefan HajnocziEOF
53746a02c806SStefan Hajnocziif compile_prog "" "" ; then
53756a02c806SStefan Hajnoczi    have_af_vsock=yes
53766a02c806SStefan Hajnoczifi
53776a02c806SStefan Hajnoczi
5378f0d92b56SLongpeng(Mike)##########################################
5379f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment
53804f67366eSThomas Huthhave_afalg=no
5381f0d92b56SLongpeng(Mike)cat > $TMPC << EOF
5382f0d92b56SLongpeng(Mike)#include <errno.h>
5383f0d92b56SLongpeng(Mike)#include <sys/types.h>
5384f0d92b56SLongpeng(Mike)#include <sys/socket.h>
5385f0d92b56SLongpeng(Mike)#include <linux/if_alg.h>
5386f0d92b56SLongpeng(Mike)int main(void) {
5387f0d92b56SLongpeng(Mike)    int sock;
5388f0d92b56SLongpeng(Mike)    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5389f0d92b56SLongpeng(Mike)    return sock;
5390f0d92b56SLongpeng(Mike)}
5391f0d92b56SLongpeng(Mike)EOF
5392f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then
5393f0d92b56SLongpeng(Mike)    have_afalg=yes
5394f0d92b56SLongpeng(Mike)fi
5395f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes"
5396f0d92b56SLongpeng(Mike)then
5397f0d92b56SLongpeng(Mike)    if test "$have_afalg" != "yes"
5398f0d92b56SLongpeng(Mike)    then
5399f0d92b56SLongpeng(Mike)	error_exit "AF_ALG requested but could not be detected"
5400f0d92b56SLongpeng(Mike)    fi
5401f0d92b56SLongpeng(Mike)fi
5402f0d92b56SLongpeng(Mike)
5403f0d92b56SLongpeng(Mike)
54046969ec6cSJames Clarke#################################################
54054d04351fSChristopher Covington# check for sysmacros.h
54064d04351fSChristopher Covington
54074d04351fSChristopher Covingtonhave_sysmacros=no
54084d04351fSChristopher Covingtoncat > $TMPC << EOF
54094d04351fSChristopher Covington#include <sys/sysmacros.h>
54104d04351fSChristopher Covingtonint main(void) {
54114d04351fSChristopher Covington    return makedev(0, 0);
54124d04351fSChristopher Covington}
54134d04351fSChristopher CovingtonEOF
54144d04351fSChristopher Covingtonif compile_prog "" "" ; then
54154d04351fSChristopher Covington    have_sysmacros=yes
54164d04351fSChristopher Covingtonfi
54174d04351fSChristopher Covington
54184d04351fSChristopher Covington##########################################
541949e00a18SAndreas Grapentin# check for _Static_assert()
542049e00a18SAndreas Grapentin
542149e00a18SAndreas Grapentinhave_static_assert=no
542249e00a18SAndreas Grapentincat > $TMPC << EOF
542349e00a18SAndreas Grapentin_Static_assert(1, "success");
542449e00a18SAndreas Grapentinint main(void) {
542549e00a18SAndreas Grapentin    return 0;
542649e00a18SAndreas Grapentin}
542749e00a18SAndreas GrapentinEOF
542849e00a18SAndreas Grapentinif compile_prog "" "" ; then
542949e00a18SAndreas Grapentin    have_static_assert=yes
543049e00a18SAndreas Grapentinfi
543149e00a18SAndreas Grapentin
543249e00a18SAndreas Grapentin##########################################
5433e674605fSTomáš Golembiovský# check for utmpx.h, it is missing e.g. on OpenBSD
5434e674605fSTomáš Golembiovský
5435e674605fSTomáš Golembiovskýhave_utmpx=no
5436e674605fSTomáš Golembiovskýcat > $TMPC << EOF
5437e674605fSTomáš Golembiovský#include <utmpx.h>
5438e674605fSTomáš Golembiovskýstruct utmpx user_info;
5439e674605fSTomáš Golembiovskýint main(void) {
5440e674605fSTomáš Golembiovský    return 0;
5441e674605fSTomáš Golembiovský}
5442e674605fSTomáš GolembiovskýEOF
5443e674605fSTomáš Golembiovskýif compile_prog "" "" ; then
5444e674605fSTomáš Golembiovský    have_utmpx=yes
5445e674605fSTomáš Golembiovskýfi
5446e674605fSTomáš Golembiovský
5447e674605fSTomáš Golembiovský##########################################
5448db1ed1abSRichard Henderson# check for getrandom()
5449db1ed1abSRichard Henderson
5450db1ed1abSRichard Hendersonhave_getrandom=no
5451db1ed1abSRichard Hendersoncat > $TMPC << EOF
5452db1ed1abSRichard Henderson#include <sys/random.h>
5453db1ed1abSRichard Hendersonint main(void) {
5454db1ed1abSRichard Henderson    return getrandom(0, 0, GRND_NONBLOCK);
5455db1ed1abSRichard Henderson}
5456db1ed1abSRichard HendersonEOF
5457db1ed1abSRichard Hendersonif compile_prog "" "" ; then
5458db1ed1abSRichard Henderson    have_getrandom=yes
5459db1ed1abSRichard Hendersonfi
5460db1ed1abSRichard Henderson
5461db1ed1abSRichard Henderson##########################################
5462247724cbSMarc-André Lureau# checks for sanitizers
5463247724cbSMarc-André Lureau
5464247724cbSMarc-André Lureauhave_asan=no
5465247724cbSMarc-André Lureauhave_ubsan=no
5466d83414e1SMarc-André Lureauhave_asan_iface_h=no
5467d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
5468247724cbSMarc-André Lureau
5469247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
5470b9f44da2SMarc-André Lureau  write_c_skeleton
5471247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5472247724cbSMarc-André Lureau      have_asan=yes
5473247724cbSMarc-André Lureau  fi
5474b9f44da2SMarc-André Lureau
5475b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
5476b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
5477b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5478b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
5479b9f44da2SMarc-André Lureau#include <stdlib.h>
5480b9f44da2SMarc-André Lureauint main(void) {
5481b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
5482f2dfe54cSLeonid Bloch    if (tmp != NULL) {
5483b9f44da2SMarc-André Lureau        return *(int *)(tmp + 2);
5484b9f44da2SMarc-André Lureau    }
5485d1abf3fcSOlaf Hering    return 1;
5486f2dfe54cSLeonid Bloch}
5487b9f44da2SMarc-André LureauEOF
5488247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5489247724cbSMarc-André Lureau      have_ubsan=yes
5490247724cbSMarc-André Lureau  fi
5491d83414e1SMarc-André Lureau
5492d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
5493d83414e1SMarc-André Lureau      have_asan_iface_h=yes
5494d83414e1SMarc-André Lureau  fi
5495d83414e1SMarc-André Lureau
5496d83414e1SMarc-André Lureau  cat > $TMPC << EOF
5497d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
5498d83414e1SMarc-André Lureauint main(void) {
5499d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
5500d83414e1SMarc-André Lureau  return 0;
5501d83414e1SMarc-André Lureau}
5502d83414e1SMarc-André LureauEOF
5503d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5504d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
5505d83414e1SMarc-André Lureau  fi
5506247724cbSMarc-André Lureaufi
5507247724cbSMarc-André Lureau
5508247724cbSMarc-André Lureau##########################################
5509adc28027SAlexander Bulekov# checks for fuzzer
551054c9e41dSAlexander Bulekovif test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5511adc28027SAlexander Bulekov  write_c_fuzzer_skeleton
5512dd016265SAlexander Bulekov  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5513adc28027SAlexander Bulekov    have_fuzzer=yes
551464ed6f92SPaolo Bonzini  else
551564ed6f92SPaolo Bonzini    error_exit "Your compiler doesn't support -fsanitize=fuzzer"
551664ed6f92SPaolo Bonzini    exit 1
5517adc28027SAlexander Bulekov  fi
5518adc28027SAlexander Bulekovfi
5519adc28027SAlexander Bulekov
55200aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers;
55210aebab04SLingfeng Yang# keep it separate until that is not the case.
55220aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
55230aebab04SLingfeng Yang  error_exit "TSAN is not supported with other sanitiziers."
55240aebab04SLingfeng Yangfi
55250aebab04SLingfeng Yanghave_tsan=no
55260aebab04SLingfeng Yanghave_tsan_iface_fiber=no
55270aebab04SLingfeng Yangif test "$tsan" = "yes" ; then
55280aebab04SLingfeng Yang  write_c_skeleton
55290aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
55300aebab04SLingfeng Yang      have_tsan=yes
55310aebab04SLingfeng Yang  fi
55320aebab04SLingfeng Yang  cat > $TMPC << EOF
55330aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h>
55340aebab04SLingfeng Yangint main(void) {
55350aebab04SLingfeng Yang  __tsan_create_fiber(0);
55360aebab04SLingfeng Yang  return 0;
55370aebab04SLingfeng Yang}
55380aebab04SLingfeng YangEOF
55390aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
55400aebab04SLingfeng Yang      have_tsan_iface_fiber=yes
55410aebab04SLingfeng Yang  fi
55420aebab04SLingfeng Yangfi
55430aebab04SLingfeng Yang
5544adc28027SAlexander Bulekov##########################################
554517824406SJunyan He# check for libpmem
554617824406SJunyan He
554717824406SJunyan Heif test "$libpmem" != "no"; then
554817824406SJunyan He	if $pkg_config --exists "libpmem"; then
554917824406SJunyan He		libpmem="yes"
555017824406SJunyan He		libpmem_libs=$($pkg_config --libs libpmem)
555117824406SJunyan He		libpmem_cflags=$($pkg_config --cflags libpmem)
555217824406SJunyan He	else
555317824406SJunyan He		if test "$libpmem" = "yes" ; then
555417824406SJunyan He			feature_not_found "libpmem" "Install nvml or pmdk"
555517824406SJunyan He		fi
555617824406SJunyan He		libpmem="no"
555717824406SJunyan He	fi
555817824406SJunyan Hefi
555917824406SJunyan He
556017824406SJunyan He##########################################
556121b2eca6SJingqi Liu# check for libdaxctl
556221b2eca6SJingqi Liu
556321b2eca6SJingqi Liuif test "$libdaxctl" != "no"; then
556421b2eca6SJingqi Liu	if $pkg_config --atleast-version=57 "libdaxctl"; then
556521b2eca6SJingqi Liu		libdaxctl="yes"
556621b2eca6SJingqi Liu		libdaxctl_libs=$($pkg_config --libs libdaxctl)
556721b2eca6SJingqi Liu		libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
556821b2eca6SJingqi Liu	else
556921b2eca6SJingqi Liu		if test "$libdaxctl" = "yes" ; then
557021b2eca6SJingqi Liu			feature_not_found "libdaxctl" "Install libdaxctl"
557121b2eca6SJingqi Liu		fi
557221b2eca6SJingqi Liu		libdaxctl="no"
557321b2eca6SJingqi Liu	fi
557421b2eca6SJingqi Liufi
557521b2eca6SJingqi Liu
557621b2eca6SJingqi Liu##########################################
5577675b9b53SMarc-André Lureau# check for slirp
5578675b9b53SMarc-André Lureau
5579675b9b53SMarc-André Lureaucase "$slirp" in
55804d34a86bSPaolo Bonzini  auto | enabled | internal)
55814d34a86bSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
55824d34a86bSPaolo Bonzini    if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
55837c57bdd8SMarc-André Lureau      git_submodules="${git_submodules} slirp"
55847c57bdd8SMarc-André Lureau    fi
5585675b9b53SMarc-André Lureau    ;;
5586675b9b53SMarc-André Lureauesac
5587675b9b53SMarc-André Lureau
558854e7aac0SAlexey Krasikov##########################################
558954e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall
559054e7aac0SAlexey Krasikov
559154e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then
559254e7aac0SAlexey Krasikov
559354e7aac0SAlexey Krasikov    have_keyring=no
559454e7aac0SAlexey Krasikov    cat > $TMPC << EOF
559554e7aac0SAlexey Krasikov#include <errno.h>
559654e7aac0SAlexey Krasikov#include <asm/unistd.h>
559754e7aac0SAlexey Krasikov#include <linux/keyctl.h>
559854e7aac0SAlexey Krasikov#include <unistd.h>
559954e7aac0SAlexey Krasikovint main(void) {
560054e7aac0SAlexey Krasikov    return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
560154e7aac0SAlexey Krasikov}
560254e7aac0SAlexey KrasikovEOF
560354e7aac0SAlexey Krasikov    if compile_prog "" "" ; then
560454e7aac0SAlexey Krasikov        have_keyring=yes
560554e7aac0SAlexey Krasikov    fi
560654e7aac0SAlexey Krasikovfi
560754e7aac0SAlexey Krasikovif test "$secret_keyring" != "no"
560854e7aac0SAlexey Krasikovthen
5609b418d265SDavid Edmondson    if test "$have_keyring" = "yes"
561054e7aac0SAlexey Krasikov    then
561154e7aac0SAlexey Krasikov	secret_keyring=yes
561254e7aac0SAlexey Krasikov    else
561354e7aac0SAlexey Krasikov	if test "$secret_keyring" = "yes"
561454e7aac0SAlexey Krasikov	then
561554e7aac0SAlexey Krasikov	    error_exit "syscall __NR_keyctl requested, \
561654e7aac0SAlexey Krasikovbut not implemented on your system"
561754e7aac0SAlexey Krasikov	else
561854e7aac0SAlexey Krasikov	    secret_keyring=no
561954e7aac0SAlexey Krasikov	fi
562054e7aac0SAlexey Krasikov    fi
562154e7aac0SAlexey Krasikovfi
562254e7aac0SAlexey Krasikov
562392500362SAlexey Krasikov##########################################
5624e86ecd4bSJuan Quintela# End of CC checks
5625e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
5626e86ecd4bSJuan Quintela
5627d83414e1SMarc-André Lureauwrite_c_skeleton
5628d83414e1SMarc-André Lureau
56291d728c39SBlue Swirlif test "$gcov" = "yes" ; then
5630bf0e56a3SMarc-André Lureau  :
5631b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then
5632086d5f75SPaolo Bonzini  QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5633086d5f75SPaolo Bonzini  debug=no
5634086d5f75SPaolo Bonzinifi
5635086d5f75SPaolo Bonzini
5636086d5f75SPaolo Bonzinicase "$ARCH" in
5637086d5f75SPaolo Bonzinialpha)
5638086d5f75SPaolo Bonzini  # Ensure there's only a single GP
5639086d5f75SPaolo Bonzini  QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5640086d5f75SPaolo Bonzini;;
5641086d5f75SPaolo Bonziniesac
5642086d5f75SPaolo Bonzini
5643086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then
5644086d5f75SPaolo Bonzini  QEMU_CFLAGS="-p $QEMU_CFLAGS"
5645086d5f75SPaolo Bonzini  QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5646086d5f75SPaolo Bonzinifi
5647a316e378SJuan Quintela
5648247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
5649db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5650db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5651d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
5652d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
5653d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
5654d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
5655d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
5656d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
5657d83414e1SMarc-André Lureau  fi
5658247724cbSMarc-André Lureaufi
56590aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then
56600aebab04SLingfeng Yang  if test "$have_tsan_iface_fiber" = "yes" ; then
56610aebab04SLingfeng Yang    QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
56620aebab04SLingfeng Yang    QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
56630aebab04SLingfeng Yang  else
56640aebab04SLingfeng Yang    error_exit "Cannot enable TSAN due to missing fiber annotation interface."
56650aebab04SLingfeng Yang  fi
56660aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then
56670aebab04SLingfeng Yang  error_exit "Cannot enable TSAN due to missing sanitize thread interface."
56680aebab04SLingfeng Yangfi
5669247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
5670db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5671db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
5672247724cbSMarc-André Lureaufi
5673247724cbSMarc-André Lureau
56746542aa9cSPeter Lieven##########################################
56756542aa9cSPeter Lieven# Do we have libnfs
56766542aa9cSPeter Lievenif test "$libnfs" != "no" ; then
5677b7d769c9SPeter Lieven  if $pkg_config --atleast-version=1.9.3 libnfs; then
56786542aa9cSPeter Lieven    libnfs="yes"
56796542aa9cSPeter Lieven    libnfs_libs=$($pkg_config --libs libnfs)
56806542aa9cSPeter Lieven  else
56816542aa9cSPeter Lieven    if test "$libnfs" = "yes" ; then
56828efc9363SHu Tao      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
56836542aa9cSPeter Lieven    fi
56846542aa9cSPeter Lieven    libnfs="no"
56856542aa9cSPeter Lieven  fi
56866542aa9cSPeter Lievenfi
56871d728c39SBlue Swirl
56883efac6ebSTomáš Golembiovský##########################################
56893efac6ebSTomáš Golembiovský
56900aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
56910aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then
5692e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5693db5adeaaSPaolo Bonzini        QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
5694e86ecd4bSJuan Quintela    fi
5695e86ecd4bSJuan Quintelafi
5696e86ecd4bSJuan Quintela
5697952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
5698952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
5699cb8baa77SMark Cave-Ayland    flags="--no-seh --nxcompat"
5700cb8baa77SMark Cave-Ayland
5701cb8baa77SMark Cave-Ayland    # Disable ASLR for debug builds to allow debugging with gdb
5702cb8baa77SMark Cave-Ayland    if test "$debug" = "no" ; then
5703cb8baa77SMark Cave-Ayland        flags="--dynamicbase $flags"
5704cb8baa77SMark Cave-Ayland    fi
5705cb8baa77SMark Cave-Ayland
5706cb8baa77SMark Cave-Ayland    for flag in $flags; do
5707e9a3591fSChristian Borntraeger        if ld_has $flag ; then
5708db5adeaaSPaolo Bonzini            QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
5709952afb71SBlue Swirl        fi
5710952afb71SBlue Swirl    done
5711952afb71SBlue Swirlfi
5712952afb71SBlue Swirl
5713e0580342SKamil Rytarowski# We can only support ivshmem if we have eventfd
5714e0580342SKamil Rytarowskiif [ "$eventfd" = "yes" ]; then
5715e0580342SKamil Rytarowski  ivshmem=yes
5716e0580342SKamil Rytarowskifi
5717e0580342SKamil Rytarowski
57184b1c11fdSDaniel P. Berrangeif test "$softmmu" = yes ; then
5719b855f8d1SPaolo Bonzini  if test "$linux" = yes; then
57207e462613SPaolo Bonzini    if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
5721983eef5aSMeador Inge      virtfs=yes
5722983eef5aSMeador Inge    else
5723983eef5aSMeador Inge      if test "$virtfs" = yes; then
57247e462613SPaolo Bonzini        error_exit "VirtFS requires libcap-ng devel and libattr devel"
5725983eef5aSMeador Inge      fi
572617500370SAndreas Färber      virtfs=no
5727983eef5aSMeador Inge    fi
5728b855f8d1SPaolo Bonzini  else
5729b855f8d1SPaolo Bonzini    if test "$virtfs" = yes; then
5730b855f8d1SPaolo Bonzini      error_exit "VirtFS is supported only on Linux"
5731b855f8d1SPaolo Bonzini    fi
5732b855f8d1SPaolo Bonzini    virtfs=no
573317bff52bSM. Mohan Kumar  fi
5734ff69fd8cSLaurent Vivierfi
57359d6bc27bSMichael Roth
57369d6bc27bSMichael Roth# Probe for guest agent support/options
57379d6bc27bSMichael Roth
5738e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
5739a5125905SLaurent Vivier  if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5740a5125905SLaurent Vivier      guest_agent=no
5741a5125905SLaurent Vivier  elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5742e8ef31a3SMichael Tokarev      guest_agent=yes
5743e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
5744e8ef31a3SMichael Tokarev      guest_agent=no
5745e8ef31a3SMichael Tokarev  else
5746e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
5747ca35f780SPaolo Bonzini  fi
57484b1c11fdSDaniel P. Berrangefi
5749ca35f780SPaolo Bonzini
57509d6bc27bSMichael Roth# Guest agent Window MSI  package
57519d6bc27bSMichael Roth
57529d6bc27bSMichael Rothif test "$guest_agent" != yes; then
57539d6bc27bSMichael Roth  if test "$guest_agent_msi" = yes; then
57549d6bc27bSMichael Roth    error_exit "MSI guest agent package requires guest agent enabled"
57559d6bc27bSMichael Roth  fi
57569d6bc27bSMichael Roth  guest_agent_msi=no
57579d6bc27bSMichael Rothelif test "$mingw32" != "yes"; then
57589d6bc27bSMichael Roth  if test "$guest_agent_msi" = "yes"; then
57599d6bc27bSMichael Roth    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
57609d6bc27bSMichael Roth  fi
57619d6bc27bSMichael Roth  guest_agent_msi=no
57629d6bc27bSMichael Rothelif ! has wixl; then
57639d6bc27bSMichael Roth  if test "$guest_agent_msi" = "yes"; then
57649d6bc27bSMichael Roth    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
57659d6bc27bSMichael Roth  fi
57669d6bc27bSMichael Roth  guest_agent_msi=no
57671a34904eSMichael Rothelse
57681a34904eSMichael Roth  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
57691a34904eSMichael Roth  # disabled explicitly
57701a34904eSMichael Roth  if test "$guest_agent_msi" != "no"; then
57711a34904eSMichael Roth    guest_agent_msi=yes
57721a34904eSMichael Roth  fi
57739d6bc27bSMichael Rothfi
57749d6bc27bSMichael Roth
57751a34904eSMichael Rothif test "$guest_agent_msi" = "yes"; then
57769d6bc27bSMichael Roth  if test "$guest_agent_with_vss" = "yes"; then
57779d6bc27bSMichael Roth    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
57789d6bc27bSMichael Roth  fi
57799d6bc27bSMichael Roth
57809d6bc27bSMichael Roth  if test "$QEMU_GA_MANUFACTURER" = ""; then
57819d6bc27bSMichael Roth    QEMU_GA_MANUFACTURER=QEMU
57829d6bc27bSMichael Roth  fi
57839d6bc27bSMichael Roth
57849d6bc27bSMichael Roth  if test "$QEMU_GA_DISTRO" = ""; then
57859d6bc27bSMichael Roth    QEMU_GA_DISTRO=Linux
57869d6bc27bSMichael Roth  fi
57879d6bc27bSMichael Roth
57889d6bc27bSMichael Roth  if test "$QEMU_GA_VERSION" = ""; then
578989138857SStefan Weil      QEMU_GA_VERSION=$(cat $source_path/VERSION)
57909d6bc27bSMichael Roth  fi
57919d6bc27bSMichael Roth
579289138857SStefan Weil  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
57939d6bc27bSMichael Roth
57949d6bc27bSMichael Roth  case "$cpu" in
57959d6bc27bSMichael Roth  x86_64)
57969d6bc27bSMichael Roth    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
57979d6bc27bSMichael Roth    ;;
57989d6bc27bSMichael Roth  i386)
57999d6bc27bSMichael Roth    QEMU_GA_MSI_ARCH="-D Arch=32"
58009d6bc27bSMichael Roth    ;;
58019d6bc27bSMichael Roth  *)
58029d6bc27bSMichael Roth    error_exit "CPU $cpu not supported for building installation package"
58039d6bc27bSMichael Roth    ;;
58049d6bc27bSMichael Roth  esac
58059d6bc27bSMichael Rothfi
58069d6bc27bSMichael Roth
5807ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
5808ca35f780SPaolo Bonziniroms=
5809e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5810e633a5c6SEric Blake        test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
58117000a12eSThomas Huth        test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5812e57218b6SPeter Maydell    # Different host OS linkers have different ideas about the name of the ELF
5813c65d5e4eSBrad Smith    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5814c65d5e4eSBrad Smith    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5815c65d5e4eSBrad Smith    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5816e57218b6SPeter Maydell        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5817e57218b6SPeter Maydell            ld_i386_emulation="$emu"
5818ca35f780SPaolo Bonzini            roms="optionrom"
5819e57218b6SPeter Maydell            break
5820e57218b6SPeter Maydell        fi
5821e57218b6SPeter Maydell    done
5822ca35f780SPaolo Bonzinifi
5823ca35f780SPaolo Bonzini
58242e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
58259933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
58262e33c3f8SThomas Huth  write_c_skeleton
58272e33c3f8SThomas Huth  if compile_prog "-march=z900" ""; then
58289933c305SChristian Borntraeger    roms="$roms s390-ccw"
58291ef6bfc2SPhilippe Mathieu-Daudé    # SLOF is required for building the s390-ccw firmware on s390x,
58301ef6bfc2SPhilippe Mathieu-Daudé    # since it is using the libnet code from SLOF for network booting.
58311ef6bfc2SPhilippe Mathieu-Daudé    if test -e "${source_path}/.git" ; then
58321ef6bfc2SPhilippe Mathieu-Daudé      git_submodules="${git_submodules} roms/SLOF"
58331ef6bfc2SPhilippe Mathieu-Daudé    fi
58349933c305SChristian Borntraeger  fi
58352e33c3f8SThomas Huthfi
58369933c305SChristian Borntraeger
583711cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler.
583811cde1c8SBruno 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.
583911cde1c8SBruno Dominguezif has $cxx; then
584011cde1c8SBruno Dominguez    cat > $TMPC <<EOF
584111cde1c8SBruno Dominguezint c_function(void);
584211cde1c8SBruno Dominguezint main(void) { return c_function(); }
584311cde1c8SBruno DominguezEOF
584411cde1c8SBruno Dominguez
584511cde1c8SBruno Dominguez    compile_object
584611cde1c8SBruno Dominguez
584711cde1c8SBruno Dominguez    cat > $TMPCXX <<EOF
584811cde1c8SBruno Dominguezextern "C" {
584911cde1c8SBruno Dominguez   int c_function(void);
585011cde1c8SBruno Dominguez}
585111cde1c8SBruno Dominguezint c_function(void) { return 42; }
585211cde1c8SBruno DominguezEOF
585311cde1c8SBruno Dominguez
585411cde1c8SBruno Dominguez    update_cxxflags
585511cde1c8SBruno Dominguez
58565770e8afSPaolo Bonzini    if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
585711cde1c8SBruno Dominguez        # C++ compiler $cxx works ok with C compiler $cc
585811cde1c8SBruno Dominguez        :
585911cde1c8SBruno Dominguez    else
586011cde1c8SBruno Dominguez        echo "C++ compiler $cxx does not work with C compiler $cc"
586111cde1c8SBruno Dominguez        echo "Disabling C++ specific optional code"
586211cde1c8SBruno Dominguez        cxx=
586311cde1c8SBruno Dominguez    fi
586411cde1c8SBruno Dominguezelse
586511cde1c8SBruno Dominguez    echo "No C++ compiler available; disabling C++ specific optional code"
586611cde1c8SBruno Dominguez    cxx=
586711cde1c8SBruno Dominguezfi
586811cde1c8SBruno Dominguez
58695d91a2edSYonggang Luoif test $git_update = 'yes' ; then
58705d91a2edSYonggang Luo    (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
58715d91a2edSYonggang Luofi
58725d91a2edSYonggang Luo
587398ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
587497a847bcSbellard
587598ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
587698ec69acSJuan Quintelaecho >> $config_host_mak
587798ec69acSJuan Quintela
5878e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
5879cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
5880aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5881f62bbee5SDaniel P. Berrangeecho "GIT_UPDATE=$git_update" >> $config_host_mak
5882804edf29SJuan Quintela
588398ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak
5884727e5283SPaolo Bonzini
5885f3494749SPaolo Bonziniif test "$default_devices" = "yes" ; then
5886f3494749SPaolo Bonzini  echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
5887f3494749SPaolo Bonzinielse
5888f3494749SPaolo Bonzini  echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
5889f3494749SPaolo Bonzinifi
5890f8393946Saurel32if test "$debug_tcg" = "yes" ; then
58912358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5892f8393946Saurel32fi
58931625af87Saliguoriif test "$strip_opt" = "yes" ; then
589452ba784dSHollis Blanchard  echo "STRIP=${strip}" >> $config_host_mak
58951625af87Saliguorifi
58967d13299dSbellardif test "$bigendian" = "yes" ; then
5897e2542fe2SJuan Quintela  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
589897a847bcSbellardfi
589967b915a5Sbellardif test "$mingw32" = "yes" ; then
590098ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
590189138857SStefan Weil  rc_version=$(cat $source_path/VERSION)
59029fe6de94SBlue Swirl  version_major=${rc_version%%.*}
59039fe6de94SBlue Swirl  rc_version=${rc_version#*.}
59049fe6de94SBlue Swirl  version_minor=${rc_version%%.*}
59059fe6de94SBlue Swirl  rc_version=${rc_version#*.}
59069fe6de94SBlue Swirl  version_subminor=${rc_version%%.*}
59079fe6de94SBlue Swirl  version_micro=0
59089fe6de94SBlue Swirl  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
59099fe6de94SBlue Swirl  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5910d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
5911d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5912f33ca81fSMichael Roth    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5913d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5914d9840e25STomoki Sekiyama  fi
591550cbebb9SMichael Roth  if test "$guest_agent_ntddscsi" = "yes" ; then
591676dc75caSTomáš Golembiovský    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
591750cbebb9SMichael Roth  fi
59181a34904eSMichael Roth  if test "$guest_agent_msi" = "yes"; then
59194bad7c3bSStefan Hajnoczi    echo "CONFIG_QGA_MSI=y" >> $config_host_mak
59209dacf32dSYossi Hindin    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
59219dacf32dSYossi Hindin    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
59229dacf32dSYossi Hindin    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
59239dacf32dSYossi Hindin    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
59249dacf32dSYossi Hindin    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
59259dacf32dSYossi Hindin    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
59269dacf32dSYossi Hindin  fi
5927210fa556Spbrookelse
592835f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
5929210fa556Spbrookfi
5930128ab2ffSblueswir1
5931dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
5932dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
5933dffcb71cSMark McLoughlinfi
5934dffcb71cSMark McLoughlin
593583fb7adfSbellardif test "$darwin" = "yes" ; then
593698ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
593783fb7adfSbellardfi
5938b29fe3edSmalc
5939ec530c81Sbellardif test "$solaris" = "yes" ; then
594098ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
5941ec530c81Sbellardfi
5942179cf400SAndreas Färberif test "$haiku" = "yes" ; then
5943179cf400SAndreas Färber  echo "CONFIG_HAIKU=y" >> $config_host_mak
5944179cf400SAndreas Färberfi
594597a847bcSbellardif test "$static" = "yes" ; then
594698ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
594797a847bcSbellardfi
59481ba16968SStefan Weilif test "$profiler" = "yes" ; then
59492358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
595005c2a3e7Sbellardfi
5951c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then
5952c932ce31SPaolo Bonzini  echo "CONFIG_TOOLS=y" >> $config_host_mak
5953c932ce31SPaolo Bonzinifi
5954f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then
5955f15bff25SPaolo Bonzini  echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5956f15bff25SPaolo Bonzinifi
5957e2d8830eSBradecho "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
59588a16d273Sthsif test "$vde" = "yes" ; then
595998ec69acSJuan Quintela  echo "CONFIG_VDE=y" >> $config_host_mak
5960e2ad6f16SFam Zheng  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
59618a16d273Sthsfi
596258952137SVincenzo Maffioneif test "$netmap" = "yes" ; then
596358952137SVincenzo Maffione  echo "CONFIG_NETMAP=y" >> $config_host_mak
596458952137SVincenzo Maffionefi
5965015a33bdSGongleiif test "$l2tpv3" = "yes" ; then
5966015a33bdSGonglei  echo "CONFIG_L2TPV3=y" >> $config_host_mak
5967015a33bdSGongleifi
59684cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then
59694cc600d2SPaolo Bonzini  echo "CONFIG_GPROF=y" >> $config_host_mak
59704cc600d2SPaolo Bonzinifi
597147e98658SCorey Bryantif test "$cap_ng" = "yes" ; then
5972a358bca2SPaolo Bonzini  echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
59733f99cf57SPaolo Bonzini  echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
597447e98658SCorey Bryantfi
59752358a494SJuan Quintelaecho "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
59760c58ac1cSmalcfor drv in $audio_drv_list; do
59771ef1ec2aSGerd Hoffmann    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5978484e2cc7SPaolo Bonzini    echo "$def=y" >> $config_host_mak
59790c58ac1cSmalcdone
5980478e943fSPaolo Bonziniif test "$alsa" = "yes" ; then
5981478e943fSPaolo Bonzini    echo "CONFIG_ALSA=y" >> $config_host_mak
5982478e943fSPaolo Bonzinifi
5983b1149911SFam Zhengecho "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5984478e943fSPaolo Bonziniecho "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
5985478e943fSPaolo Bonziniif test "$libpulse" = "yes" ; then
5986478e943fSPaolo Bonzini    echo "CONFIG_LIBPULSE=y" >> $config_host_mak
5987478e943fSPaolo Bonzinifi
5988b1149911SFam Zhengecho "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5989478e943fSPaolo Bonziniecho "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
5990b1149911SFam Zhengecho "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5991b1149911SFam Zhengecho "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5992b1149911SFam Zhengecho "OSS_LIBS=$oss_libs" >> $config_host_mak
5993478e943fSPaolo Bonziniif test "$libjack" = "yes" ; then
5994478e943fSPaolo Bonzini    echo "CONFIG_LIBJACK=y" >> $config_host_mak
5995478e943fSPaolo Bonzinifi
59962e445703SGeoffrey McRaeecho "JACK_LIBS=$jack_libs" >> $config_host_mak
5997d5631638Smalcif test "$audio_win_int" = "yes" ; then
5998d5631638Smalc  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5999d5631638Smalcfi
6000b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6001b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6002dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then
6003dce512deSChristoph Hellwig  echo "CONFIG_XFS=y" >> $config_host_mak
6004dce512deSChristoph Hellwigfi
600589138857SStefan Weilqemu_version=$(head $source_path/VERSION)
60062358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
600798ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
60082b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
600917969268SFam Zhengif test "$modules" = "yes"; then
6010e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
6011e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
601289138857SStefan Weil  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
601317969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
601417969268SFam Zhengfi
6015bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then
6016bd83c861SChristian Ehrhardt  echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6017bd83c861SChristian Ehrhardtfi
6018e633a5c6SEric Blakeif test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
60198781595bSGerd Hoffmann  echo "CONFIG_X11=y" >> $config_host_mak
60208781595bSGerd Hoffmann  echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
60218781595bSGerd Hoffmann  echo "X11_LIBS=$x11_libs" >> $config_host_mak
60228781595bSGerd Hoffmannfi
6023099d6b0fSRiku Voipioif test "$pipe2" = "yes" ; then
60242358a494SJuan Quintela  echo "CONFIG_PIPE2=y" >> $config_host_mak
6025099d6b0fSRiku Voipiofi
602640ff6d7eSKevin Wolfif test "$accept4" = "yes" ; then
602740ff6d7eSKevin Wolf  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
602840ff6d7eSKevin Wolffi
60293ce34dfbSvibisreenivasanif test "$splice" = "yes" ; then
60302358a494SJuan Quintela  echo "CONFIG_SPLICE=y" >> $config_host_mak
60313ce34dfbSvibisreenivasanfi
6032c2882b96SRiku Voipioif test "$eventfd" = "yes" ; then
6033c2882b96SRiku Voipio  echo "CONFIG_EVENTFD=y" >> $config_host_mak
6034c2882b96SRiku Voipiofi
6035751bcc39SMarc-André Lureauif test "$memfd" = "yes" ; then
6036751bcc39SMarc-André Lureau  echo "CONFIG_MEMFD=y" >> $config_host_mak
6037751bcc39SMarc-André Lureaufi
6038955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then
6039955727d2SCortland Tölva  echo "CONFIG_USBFS=y" >> $config_host_mak
6040955727d2SCortland Tölvafi
6041d0927938SUlrich Hechtif test "$fallocate" = "yes" ; then
6042d0927938SUlrich Hecht  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6043d0927938SUlrich Hechtfi
60443d4fa43eSKusanagi Kouichiif test "$fallocate_punch_hole" = "yes" ; then
60453d4fa43eSKusanagi Kouichi  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
60463d4fa43eSKusanagi Kouichifi
6047b953f075SDenis V. Lunevif test "$fallocate_zero_range" = "yes" ; then
6048b953f075SDenis V. Lunev  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6049b953f075SDenis V. Lunevfi
6050ed911435SKevin Wolfif test "$posix_fallocate" = "yes" ; then
6051ed911435SKevin Wolf  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6052ed911435SKevin Wolffi
6053c727f47dSPeter Maydellif test "$sync_file_range" = "yes" ; then
6054c727f47dSPeter Maydell  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6055c727f47dSPeter Maydellfi
6056dace20dcSPeter Maydellif test "$fiemap" = "yes" ; then
6057dace20dcSPeter Maydell  echo "CONFIG_FIEMAP=y" >> $config_host_mak
6058dace20dcSPeter Maydellfi
6059d0927938SUlrich Hechtif test "$dup3" = "yes" ; then
6060d0927938SUlrich Hecht  echo "CONFIG_DUP3=y" >> $config_host_mak
6061d0927938SUlrich Hechtfi
60624e0c6529SAlex Blighif test "$ppoll" = "yes" ; then
60634e0c6529SAlex Bligh  echo "CONFIG_PPOLL=y" >> $config_host_mak
60644e0c6529SAlex Blighfi
6065cd758dd0SAlex Blighif test "$prctl_pr_set_timerslack" = "yes" ; then
6066cd758dd0SAlex Bligh  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6067cd758dd0SAlex Blighfi
60683b6edd16SPeter Maydellif test "$epoll" = "yes" ; then
60693b6edd16SPeter Maydell  echo "CONFIG_EPOLL=y" >> $config_host_mak
60703b6edd16SPeter Maydellfi
60713b6edd16SPeter Maydellif test "$epoll_create1" = "yes" ; then
60723b6edd16SPeter Maydell  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
60733b6edd16SPeter Maydellfi
6074a8fd1abaSPeter Maydellif test "$sendfile" = "yes" ; then
6075a8fd1abaSPeter Maydell  echo "CONFIG_SENDFILE=y" >> $config_host_mak
6076a8fd1abaSPeter Maydellfi
607751834341SRiku Voipioif test "$timerfd" = "yes" ; then
607851834341SRiku Voipio  echo "CONFIG_TIMERFD=y" >> $config_host_mak
607951834341SRiku Voipiofi
60809af5c906SRiku Voipioif test "$setns" = "yes" ; then
60819af5c906SRiku Voipio  echo "CONFIG_SETNS=y" >> $config_host_mak
60829af5c906SRiku Voipiofi
608338860a03SAleksandar Markovicif test "$clock_adjtime" = "yes" ; then
608438860a03SAleksandar Markovic  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
608538860a03SAleksandar Markovicfi
60865a03cd00SAleksandar Markovicif test "$syncfs" = "yes" ; then
60875a03cd00SAleksandar Markovic  echo "CONFIG_SYNCFS=y" >> $config_host_mak
60885a03cd00SAleksandar Markovicfi
60893b3f24adSaurel32if test "$inotify" = "yes" ; then
60902358a494SJuan Quintela  echo "CONFIG_INOTIFY=y" >> $config_host_mak
60913b3f24adSaurel32fi
6092c05c7a73SRiku Voipioif test "$inotify1" = "yes" ; then
6093c05c7a73SRiku Voipio  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6094c05c7a73SRiku Voipiofi
6095401bc051SPeter Maydellif test "$sem_timedwait" = "yes" ; then
6096401bc051SPeter Maydell  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6097401bc051SPeter Maydellfi
60985c99fa37SKeno Fischerif test "$strchrnul" = "yes" ; then
60995c99fa37SKeno Fischer  echo "HAVE_STRCHRNUL=y" >> $config_host_mak
61005c99fa37SKeno Fischerfi
61018a792b03SJiufei Xueif test "$st_atim" = "yes" ; then
61028a792b03SJiufei Xue  echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
61038a792b03SJiufei Xuefi
61046ae9a1f4SJuan Quintelaif test "$byteswap_h" = "yes" ; then
61056ae9a1f4SJuan Quintela  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
61066ae9a1f4SJuan Quintelafi
61076ae9a1f4SJuan Quintelaif test "$bswap_h" = "yes" ; then
61086ae9a1f4SJuan Quintela  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
61096ae9a1f4SJuan Quintelafi
6110769ce76dSAlexander Grafif test "$curl" = "yes" ; then
6111484e2cc7SPaolo Bonzini  echo "CONFIG_CURL=y" >> $config_host_mak
6112b1d5a277SJuan Quintela  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
61136ebc91e5SFam Zheng  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6114769ce76dSAlexander Graffi
61152e4d9fb1Saurel32if test "$brlapi" = "yes" ; then
611698ec69acSJuan Quintela  echo "CONFIG_BRLAPI=y" >> $config_host_mak
61178eca2889SFam Zheng  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
61182e4d9fb1Saurel32fi
6119a4ccabcfSAnthony Liguoriif test "$gtk" = "yes" ; then
6120484e2cc7SPaolo Bonzini  echo "CONFIG_GTK=y" >> $config_host_mak
6121a4ccabcfSAnthony Liguori  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6122014cb152SGerd Hoffmann  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6123925a0400SGerd Hoffmann  if test "$gtk_gl" = "yes" ; then
6124925a0400SGerd Hoffmann    echo "CONFIG_GTK_GL=y" >> $config_host_mak
6125925a0400SGerd Hoffmann  fi
6126bbbf9bfbSStefan Weilfi
6127f876b765SMarc-André Lureauif test "$gio" = "yes" ; then
6128f876b765SMarc-André Lureau    echo "CONFIG_GIO=y" >> $config_host_mak
6129f876b765SMarc-André Lureau    echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6130f876b765SMarc-André Lureau    echo "GIO_LIBS=$gio_libs" >> $config_host_mak
613125a97a56SMarc-André Lureau    echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
6132f876b765SMarc-André Lureaufi
6133a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6134ddbb0d09SDaniel P. Berrangeif test "$gnutls" = "yes" ; then
6135ddbb0d09SDaniel P. Berrange  echo "CONFIG_GNUTLS=y" >> $config_host_mak
6136a81df1b6SPaolo Bonzini  echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
6137a81df1b6SPaolo Bonzini  echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
6138ddbb0d09SDaniel P. Berrangefi
613991bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" ; then
614091bfcdb0SDaniel P. Berrange  echo "CONFIG_GCRYPT=y" >> $config_host_mak
61411f923c70SLongpeng(Mike)  if test "$gcrypt_hmac" = "yes" ; then
61421f923c70SLongpeng(Mike)    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
61431f923c70SLongpeng(Mike)  fi
614446859d93SDaniel P. Berrangé  echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
614546859d93SDaniel P. Berrangé  echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
614662893b67SDaniel P. Berrangefi
614791bfcdb0SDaniel P. Berrangeif test "$nettle" = "yes" ; then
614891bfcdb0SDaniel P. Berrange  echo "CONFIG_NETTLE=y" >> $config_host_mak
6149becaeb72SRadim Krčmář  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6150a81df1b6SPaolo Bonzini  echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
6151a81df1b6SPaolo Bonzini  echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
6152ed754746SDaniel P. Berrangefi
6153e0576942SDaniel P. Berrangéif test "$qemu_private_xts" = "yes" ; then
6154e0576942SDaniel P. Berrangé  echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6155e0576942SDaniel P. Berrangéfi
61569a2fd434SDaniel P. Berrangeif test "$tasn1" = "yes" ; then
61579a2fd434SDaniel P. Berrange  echo "CONFIG_TASN1=y" >> $config_host_mak
61589a2fd434SDaniel P. Berrangefi
61598953caf3SDaniel P. Berrangeif test "$auth_pam" = "yes" ; then
61608953caf3SDaniel P. Berrange    echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
61618953caf3SDaniel P. Berrangefi
61626b39b063SEric Blakeif test "$have_broken_size_max" = "yes" ; then
61636b39b063SEric Blake    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
61646b39b063SEric Blakefi
61659df8b20dSThomas Huthif test "$have_openpty" = "yes" ; then
61669df8b20dSThomas Huth    echo "HAVE_OPENPTY=y" >> $config_host_mak
61679df8b20dSThomas Huthfi
6168277abf15SJan Vesely
6169277abf15SJan Vesely# Work around a system header bug with some kernel/XFS header
6170277abf15SJan Vesely# versions where they both try to define 'struct fsxattr':
6171277abf15SJan Vesely# xfs headers will not try to redefine structs from linux headers
6172277abf15SJan Vesely# if this macro is set.
6173277abf15SJan Veselyif test "$have_fsxattr" = "yes" ; then
6174277abf15SJan Vesely    echo "HAVE_FSXATTR=y" >> $config_host_mak
6175277abf15SJan Veselyfi
61761efad060SFam Zhengif test "$have_copy_file_range" = "yes" ; then
61771efad060SFam Zheng    echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
61781efad060SFam Zhengfi
6179bbbf9bfbSStefan Weilif test "$vte" = "yes" ; then
6180bbbf9bfbSStefan Weil  echo "CONFIG_VTE=y" >> $config_host_mak
6181a4ccabcfSAnthony Liguori  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6182e0fb129cSGerd Hoffmann  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6183a4ccabcfSAnthony Liguorifi
61849d9e1521SGerd Hoffmannif test "$virglrenderer" = "yes" ; then
61859d9e1521SGerd Hoffmann  echo "CONFIG_VIRGL=y" >> $config_host_mak
61869d9e1521SGerd Hoffmann  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
61879d9e1521SGerd Hoffmann  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
61889d9e1521SGerd Hoffmannfi
61891badb709SPaolo Bonziniif test "$xen" = "enabled" ; then
61906dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6191d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6192582ea95fSMarc-André Lureau  echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
6193582ea95fSMarc-André Lureau  echo "XEN_LIBS=$xen_libs" >> $config_host_mak
6194e37630caSaliguorifi
61955c6c3a6cSChristoph Hellwigif test "$linux_aio" = "yes" ; then
61965c6c3a6cSChristoph Hellwig  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
61975c6c3a6cSChristoph Hellwigfi
6198c10dd856SAarushi Mehtaif test "$linux_io_uring" = "yes" ; then
6199c10dd856SAarushi Mehta  echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
6200c10dd856SAarushi Mehta  echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
6201c10dd856SAarushi Mehta  echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
6202c10dd856SAarushi Mehtafi
6203758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" = "yes" ; then
6204758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_ATTR=y" >> $config_host_mak
6205ec0d5893SMarc-André Lureau  echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
6206758e8e38SVenkateswararao Jujjuri (JV)fi
62074f26f2b6SAvi Kivityif test "$libattr" = "yes" ; then
62084f26f2b6SAvi Kivity  echo "CONFIG_LIBATTR=y" >> $config_host_mak
62094f26f2b6SAvi Kivityfi
6210983eef5aSMeador Ingeif test "$virtfs" = "yes" ; then
6211758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_VIRTFS=y" >> $config_host_mak
6212758e8e38SVenkateswararao Jujjuri (JV)fi
62135e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
62145e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
62155e9be92dSNicholas Bellingerfi
6216af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then
6217af3bba76SPaolo Bonzini  echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6218af3bba76SPaolo Bonzinifi
6219af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then
622056f41de7SPaolo Bonzini  echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
622103ce5744SNikolay Nikolaevfi
6222108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then
6223108a6481SCindy Lu  echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
6224108a6481SCindy Lufi
6225042cea27SGongleiif test "$vhost_crypto" = "yes" ; then
6226042cea27SGonglei  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6227042cea27SGongleifi
6228fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then
6229fc0b9b0eSStefan Hajnoczi  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
62305fe97d88SStefano Garzarella  if test "$vhost_user" = "yes" ; then
62315fe97d88SStefano Garzarella    echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
62325fe97d88SStefano Garzarella  fi
6233fc0b9b0eSStefan Hajnoczifi
6234299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then
6235299e6f19SPaolo Bonzini  echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6236299e6f19SPaolo Bonzinifi
6237e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then
6238e6a74868SMarc-André Lureau  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6239e6a74868SMarc-André Lureaufi
6240108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then
6241108a6481SCindy Lu  echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
6242108a6481SCindy Lufi
624398fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then
624498fc1adaSDr. David Alan Gilbert  echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
624598fc1adaSDr. David Alan Gilbertfi
6246bf9298b9Saliguoriif test "$iovec" = "yes" ; then
62472358a494SJuan Quintela  echo "CONFIG_IOVEC=y" >> $config_host_mak
6248bf9298b9Saliguorifi
6249ceb42de8Saliguoriif test "$preadv" = "yes" ; then
62502358a494SJuan Quintela  echo "CONFIG_PREADV=y" >> $config_host_mak
6251ceb42de8Saliguorifi
6252a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then
6253a40161cbSPaolo Bonzini  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6254a40161cbSPaolo Bonzinifi
6255dcc38d1cSMarcelo Tosattiif test "$signalfd" = "yes" ; then
6256dcc38d1cSMarcelo Tosatti  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6257dcc38d1cSMarcelo Tosattifi
6258d339d766SRichard W.M. Jonesif test "$optreset" = "yes" ; then
6259d339d766SRichard W.M. Jones  echo "HAVE_OPTRESET=y" >> $config_host_mak
6260d339d766SRichard W.M. Jonesfi
62611badb709SPaolo Bonziniif test "$tcg" = "enabled"; then
62629195b2c2SStefan Weil  if test "$tcg_interpreter" = "yes" ; then
62639195b2c2SStefan Weil    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
62649195b2c2SStefan Weil  fi
6265b3f6ea7eSPaolo Bonzinifi
62665f6b9e8fSBlue Swirlif test "$fdatasync" = "yes" ; then
62675f6b9e8fSBlue Swirl  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
62685f6b9e8fSBlue Swirlfi
6269e78815a5SAndreas Färberif test "$madvise" = "yes" ; then
6270e78815a5SAndreas Färber  echo "CONFIG_MADVISE=y" >> $config_host_mak
6271e78815a5SAndreas Färberfi
6272e78815a5SAndreas Färberif test "$posix_madvise" = "yes" ; then
6273e78815a5SAndreas Färber  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6274e78815a5SAndreas Färberfi
62759bc5a719SAndreas Gustafssonif test "$posix_memalign" = "yes" ; then
62769bc5a719SAndreas Gustafsson  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
62779bc5a719SAndreas Gustafssonfi
6278cd4ec0b4SGerd Hoffmannif test "$spice" = "yes" ; then
6279cd4ec0b4SGerd Hoffmann  echo "CONFIG_SPICE=y" >> $config_host_mak
62802634733cSPaolo Bonzini  echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
62812634733cSPaolo Bonzini  echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
6282cd4ec0b4SGerd Hoffmannfi
6283cd4ec0b4SGerd Hoffmann
62847b02f544SMarc-André Lureauif test "$smartcard" = "yes" ; then
62857b02f544SMarc-André Lureau  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
62867b62bf5aSFam Zheng  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
62877b62bf5aSFam Zheng  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6288111a38b0SRobert Relyeafi
6289111a38b0SRobert Relyea
62902b2325ffSGerd Hoffmannif test "$libusb" = "yes" ; then
62912b2325ffSGerd Hoffmann  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6292b878b652SFam Zheng  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6293b878b652SFam Zheng  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
62942b2325ffSGerd Hoffmannfi
62952b2325ffSGerd Hoffmann
629669354a83SHans de Goedeif test "$usb_redir" = "yes" ; then
629769354a83SHans de Goede  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6298cc7923fcSFam Zheng  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6299cc7923fcSFam Zheng  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
630069354a83SHans de Goedefi
630169354a83SHans de Goede
6302da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
6303da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
6304de2d3005SPaolo Bonzini  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
6305da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6306014cb152SGerd Hoffmann  if test "$opengl_dmabuf" = "yes" ; then
6307014cb152SGerd Hoffmann    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6308014cb152SGerd Hoffmann  fi
630920ff075bSMichael Wallefi
631020ff075bSMichael Walle
6311d52c454aSMarc-André Lureauif test "$gbm" = "yes" ; then
6312d52c454aSMarc-André Lureau    echo "CONFIG_GBM=y" >> $config_host_mak
6313d52c454aSMarc-André Lureau    echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6314d52c454aSMarc-André Lureau    echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6315d52c454aSMarc-André Lureaufi
6316d52c454aSMarc-André Lureau
6317d52c454aSMarc-André Lureau
631899f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then
631999f2dbd3SLiang Li  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
632099f2dbd3SLiang Lifi
632199f2dbd3SLiang Li
63226b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then
63236b8cd447SRobert Hoo  echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
63246b8cd447SRobert Hoofi
63256b8cd447SRobert Hoo
6326607dacd0Sqiaonuohanif test "$lzo" = "yes" ; then
6327607dacd0Sqiaonuohan  echo "CONFIG_LZO=y" >> $config_host_mak
6328708eab42SMarc-André Lureau  echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
6329607dacd0Sqiaonuohanfi
6330607dacd0Sqiaonuohan
6331607dacd0Sqiaonuohanif test "$snappy" = "yes" ; then
6332607dacd0Sqiaonuohan  echo "CONFIG_SNAPPY=y" >> $config_host_mak
6333708eab42SMarc-André Lureau  echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
6334607dacd0Sqiaonuohanfi
6335607dacd0Sqiaonuohan
63366b383c08SPeter Wuif test "$bzip2" = "yes" ; then
63376b383c08SPeter Wu  echo "CONFIG_BZIP2=y" >> $config_host_mak
63386b383c08SPeter Wu  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
63396b383c08SPeter Wufi
63406b383c08SPeter Wu
634183bc1f97SJulio Faraccoif test "$lzfse" = "yes" ; then
634283bc1f97SJulio Faracco  echo "CONFIG_LZFSE=y" >> $config_host_mak
634383bc1f97SJulio Faracco  echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
634483bc1f97SJulio Faraccofi
634583bc1f97SJulio Faracco
63463a678481SJuan Quintelaif test "$zstd" = "yes" ; then
63473a678481SJuan Quintela  echo "CONFIG_ZSTD=y" >> $config_host_mak
63485e5733e5SMarc-André Lureau  echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
63495e5733e5SMarc-André Lureau  echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
63503a678481SJuan Quintelafi
63513a678481SJuan Quintela
6352c589b249SRonnie Sahlbergif test "$libiscsi" = "yes" ; then
6353484e2cc7SPaolo Bonzini  echo "CONFIG_LIBISCSI=y" >> $config_host_mak
63546ebc91e5SFam Zheng  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
63556ebc91e5SFam Zheng  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6356c589b249SRonnie Sahlbergfi
6357c589b249SRonnie Sahlberg
63586542aa9cSPeter Lievenif test "$libnfs" = "yes" ; then
6359484e2cc7SPaolo Bonzini  echo "CONFIG_LIBNFS=y" >> $config_host_mak
63604be4879fSColin Lord  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
63616542aa9cSPeter Lievenfi
63626542aa9cSPeter Lieven
6363f794573eSEduardo Otuboif test "$seccomp" = "yes"; then
6364f794573eSEduardo Otubo  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6365c3883e1fSFam Zheng  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6366c3883e1fSFam Zheng  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6367f794573eSEduardo Otubofi
6368f794573eSEduardo Otubo
636983fb7adfSbellard# XXX: suppress that
63707d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
63712358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
63727d3505c5Sbellardfi
63737d3505c5Sbellard
63743556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
63753556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
63763556c233SPaolo Bonzinifi
6377f27aaf4bSChristian Brunnerif test "$rbd" = "yes" ; then
6378484e2cc7SPaolo Bonzini  echo "CONFIG_RBD=y" >> $config_host_mak
63796ebc91e5SFam Zheng  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6380f27aaf4bSChristian Brunnerfi
638120ff6c80SAnthony Liguori
63827c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
638370c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
638470c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
638570c60c08SStefan Hajnoczielse
638670c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
638770c60c08SStefan Hajnoczifi
6388d0e2fce5SAneesh Kumar K.V
63897d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then
63907d992e4dSPeter Lieven  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
63917d992e4dSPeter Lievenfi
63927d992e4dSPeter Lieven
6393f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then
6394f0d92b56SLongpeng(Mike)  echo "CONFIG_AF_ALG=y" >> $config_host_mak
6395f0d92b56SLongpeng(Mike)fi
6396f0d92b56SLongpeng(Mike)
6397d2042378SAneesh Kumar K.Vif test "$open_by_handle_at" = "yes" ; then
6398d2042378SAneesh Kumar K.V  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6399d2042378SAneesh Kumar K.Vfi
6400d2042378SAneesh Kumar K.V
6401e06a765eSHarsh Prateek Boraif test "$linux_magic_h" = "yes" ; then
6402e06a765eSHarsh Prateek Bora  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6403e06a765eSHarsh Prateek Borafi
6404e06a765eSHarsh Prateek Bora
64053f4349dcSKevin Wolfif test "$valgrind_h" = "yes" ; then
64063f4349dcSKevin Wolf  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
64073f4349dcSKevin Wolffi
64083f4349dcSKevin Wolf
6409d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
6410d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6411d83414e1SMarc-André Lureaufi
6412d83414e1SMarc-André Lureau
64130aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
64140aebab04SLingfeng Yang    echo "CONFIG_TSAN=y" >> $config_host_mak
64150aebab04SLingfeng Yangfi
64160aebab04SLingfeng Yang
64178ab1bf12SLuiz Capitulinoif test "$has_environ" = "yes" ; then
64188ab1bf12SLuiz Capitulino  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
64198ab1bf12SLuiz Capitulinofi
64208ab1bf12SLuiz Capitulino
642176a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
642276a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
642376a347e1SRichard Hendersonfi
642476a347e1SRichard Henderson
6425f540166bSRichard Hendersonif test "$int128" = "yes" ; then
6426f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
6427f540166bSRichard Hendersonfi
6428f540166bSRichard Henderson
64297ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then
64307ebee43eSRichard Henderson  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
64317ebee43eSRichard Hendersonfi
64327ebee43eSRichard Henderson
6433e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then
6434e6cd4bb5SRichard Henderson  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6435e6cd4bb5SRichard Hendersonfi
6436e6cd4bb5SRichard Henderson
6437df79b996SRichard Hendersonif test "$atomic64" = "yes" ; then
6438df79b996SRichard Henderson  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6439df79b996SRichard Hendersonfi
6440df79b996SRichard Henderson
6441db8aaae8SRichard Hendersonif test "$attralias" = "yes" ; then
6442db8aaae8SRichard Henderson  echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
6443db8aaae8SRichard Hendersonfi
6444db8aaae8SRichard Henderson
64451e6e9acaSRichard Hendersonif test "$getauxval" = "yes" ; then
64461e6e9acaSRichard Henderson  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
64471e6e9acaSRichard Hendersonfi
64481e6e9acaSRichard Henderson
6449eb100396SBharata B Raoif test "$glusterfs" = "yes" ; then
6450484e2cc7SPaolo Bonzini  echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
64516ebc91e5SFam Zheng  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
64526ebc91e5SFam Zheng  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6453eb100396SBharata B Raofi
6454eb100396SBharata B Rao
6455d85fa9ebSJeff Codyif test "$glusterfs_xlator_opt" = "yes" ; then
6456d85fa9ebSJeff Cody  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6457d85fa9ebSJeff Codyfi
6458d85fa9ebSJeff Cody
64590c14fb47SBharata B Raoif test "$glusterfs_discard" = "yes" ; then
64600c14fb47SBharata B Rao  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
64610c14fb47SBharata B Raofi
64620c14fb47SBharata B Rao
6463df3a429aSNiels de Vosif test "$glusterfs_fallocate" = "yes" ; then
6464df3a429aSNiels de Vos  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6465df3a429aSNiels de Vosfi
6466df3a429aSNiels de Vos
64677c815372SBharata B Raoif test "$glusterfs_zerofill" = "yes" ; then
64687c815372SBharata B Rao  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
64697c815372SBharata B Raofi
64707c815372SBharata B Rao
6471e014dbe7SPrasanna Kumar Kaleverif test "$glusterfs_ftruncate_has_stat" = "yes" ; then
6472e014dbe7SPrasanna Kumar Kalever  echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
6473e014dbe7SPrasanna Kumar Kaleverfi
6474e014dbe7SPrasanna Kumar Kalever
64750e3b891fSNiels de Vosif test "$glusterfs_iocb_has_stat" = "yes" ; then
64760e3b891fSNiels de Vos  echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
64770e3b891fSNiels de Vosfi
64780e3b891fSNiels de Vos
6479b10d49d7SPino Toscanoif test "$libssh" = "yes" ; then
6480484e2cc7SPaolo Bonzini  echo "CONFIG_LIBSSH=y" >> $config_host_mak
6481b10d49d7SPino Toscano  echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
6482b10d49d7SPino Toscano  echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
64830a12ec87SRichard W.M. Jonesfi
64840a12ec87SRichard W.M. Jones
6485ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then
6486ed1701c6SDr. David Alan Gilbert  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6487ed1701c6SDr. David Alan Gilbertfi
6488ed1701c6SDr. David Alan Gilbert
64893b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
64903cae16dbSPaolo Bonzini  echo 'CONFIG_TPM=y' >> $config_host_mak
64913b8acc11SPaolo Bonzinifi
64923b8acc11SPaolo Bonzini
64935b808275SLluís Vilanovaecho "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
64945b808275SLluís Vilanovaif have_backend "nop"; then
64956d8a764eSLluís  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
649622890ab5SPrerna Saxenafi
64975b808275SLluís Vilanovaif have_backend "simple"; then
64986d8a764eSLluís  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
64996d8a764eSLluís  # Set the appropriate trace file.
6500953ffe0fSAndreas Färber  trace_file="\"$trace_file-\" FMT_pid"
65019410b56cSPrerna Saxenafi
6502ed7f5f1dSPaolo Bonziniif have_backend "log"; then
6503ed7f5f1dSPaolo Bonzini  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
65046d8a764eSLluísfi
65055b808275SLluís Vilanovaif have_backend "ust"; then
65066d8a764eSLluís  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6507a81df1b6SPaolo Bonzini  echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6508a81df1b6SPaolo Bonzini  echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
65096d8a764eSLluísfi
65105b808275SLluís Vilanovaif have_backend "dtrace"; then
65116d8a764eSLluís  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
65126d8a764eSLluís  if test "$trace_backend_stap" = "yes" ; then
65136d8a764eSLluís    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
65146d8a764eSLluís  fi
6515c276b17dSDaniel P. Berrangefi
65165b808275SLluís Vilanovaif have_backend "ftrace"; then
6517781e9545SEiichi Tsukata  if test "$linux" = "yes" ; then
6518781e9545SEiichi Tsukata    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6519781e9545SEiichi Tsukata  else
652021684af0SStewart Smith    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6521781e9545SEiichi Tsukata  fi
6522781e9545SEiichi Tsukatafi
65230a852417SPaul Durrantif have_backend "syslog"; then
65240a852417SPaul Durrant  if test "$posix_syslog" = "yes" ; then
65250a852417SPaul Durrant    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
65260a852417SPaul Durrant  else
65270a852417SPaul Durrant    feature_not_found "syslog(trace backend)" "syslog not available"
65280a852417SPaul Durrant  fi
65290a852417SPaul Durrantfi
65309410b56cSPrerna Saxenaecho "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
65319410b56cSPrerna Saxena
65322da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
65332da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
6534392fb643SFam Zheng  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
65352da776dbSMichael R. Hinesfi
65362da776dbSMichael R. Hines
653721ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then
653821ab34c9SMarcel Apfelbaum  echo "CONFIG_PVRDMA=y" >> $config_host_mak
653921ab34c9SMarcel Apfelbaumfi
654021ab34c9SMarcel Apfelbaum
6541575b22b1SLaurent Vivierif test "$have_rtnetlink" = "yes" ; then
6542575b22b1SLaurent Vivier  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6543575b22b1SLaurent Vivierfi
6544575b22b1SLaurent Vivier
6545ed279a06SKlim Kireevif test "$libxml2" = "yes" ; then
6546ed279a06SKlim Kireev  echo "CONFIG_LIBXML2=y" >> $config_host_mak
6547ed279a06SKlim Kireev  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6548ed279a06SKlim Kireev  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6549ed279a06SKlim Kireevfi
6550ed279a06SKlim Kireev
6551a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then
6552a6b1d4c0SChanglong Xie  echo "CONFIG_REPLICATION=y" >> $config_host_mak
6553a6b1d4c0SChanglong Xiefi
6554a6b1d4c0SChanglong Xie
65556a02c806SStefan Hajnocziif test "$have_af_vsock" = "yes" ; then
65566a02c806SStefan Hajnoczi  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
65576a02c806SStefan Hajnoczifi
65586a02c806SStefan Hajnoczi
65594d04351fSChristopher Covingtonif test "$have_sysmacros" = "yes" ; then
65604d04351fSChristopher Covington  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
65614d04351fSChristopher Covingtonfi
65624d04351fSChristopher Covington
656349e00a18SAndreas Grapentinif test "$have_static_assert" = "yes" ; then
656449e00a18SAndreas Grapentin  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
656549e00a18SAndreas Grapentinfi
656649e00a18SAndreas Grapentin
6567e674605fSTomáš Golembiovskýif test "$have_utmpx" = "yes" ; then
6568e674605fSTomáš Golembiovský  echo "HAVE_UTMPX=y" >> $config_host_mak
6569e674605fSTomáš Golembiovskýfi
6570db1ed1abSRichard Hendersonif test "$have_getrandom" = "yes" ; then
6571db1ed1abSRichard Henderson  echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6572db1ed1abSRichard Hendersonfi
6573e0580342SKamil Rytarowskiif test "$ivshmem" = "yes" ; then
6574e0580342SKamil Rytarowski  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6575e0580342SKamil Rytarowskifi
6576ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then
6577ba59fb77SPaolo Bonzini  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6578ba59fb77SPaolo Bonzinifi
6579e0580342SKamil Rytarowski
65805c312079SDr. David Alan Gilbert# Hold two types of flag:
65815c312079SDr. David Alan Gilbert#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
65825c312079SDr. David Alan Gilbert#                                     a thread we have a handle to
6583479a5747SRoman Bolshakov#   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
65845c312079SDr. David Alan Gilbert#                                     platform
6585479a5747SRoman Bolshakovif test "$pthread_setname_np_w_tid" = "yes" ; then
65865c312079SDr. David Alan Gilbert  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6587479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6588479a5747SRoman Bolshakovelif test "$pthread_setname_np_wo_tid" = "yes" ; then
6589479a5747SRoman Bolshakov  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6590479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
65915c312079SDr. David Alan Gilbertfi
65925c312079SDr. David Alan Gilbert
659317824406SJunyan Heif test "$libpmem" = "yes" ; then
659417824406SJunyan He  echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6595c9322ab5SMarc-André Lureau  echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6596c9322ab5SMarc-André Lureau  echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
659717824406SJunyan Hefi
659817824406SJunyan He
659921b2eca6SJingqi Liuif test "$libdaxctl" = "yes" ; then
660021b2eca6SJingqi Liu  echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6601c7c91a74SBruce Rogers  echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
660221b2eca6SJingqi Liufi
660321b2eca6SJingqi Liu
66042f740136SJeff Codyif test "$bochs" = "yes" ; then
66052f740136SJeff Cody  echo "CONFIG_BOCHS=y" >> $config_host_mak
66062f740136SJeff Codyfi
66072f740136SJeff Codyif test "$cloop" = "yes" ; then
66082f740136SJeff Cody  echo "CONFIG_CLOOP=y" >> $config_host_mak
66092f740136SJeff Codyfi
66102f740136SJeff Codyif test "$dmg" = "yes" ; then
66112f740136SJeff Cody  echo "CONFIG_DMG=y" >> $config_host_mak
66122f740136SJeff Codyfi
66132f740136SJeff Codyif test "$qcow1" = "yes" ; then
66142f740136SJeff Cody  echo "CONFIG_QCOW1=y" >> $config_host_mak
66152f740136SJeff Codyfi
66162f740136SJeff Codyif test "$vdi" = "yes" ; then
66172f740136SJeff Cody  echo "CONFIG_VDI=y" >> $config_host_mak
66182f740136SJeff Codyfi
66192f740136SJeff Codyif test "$vvfat" = "yes" ; then
66202f740136SJeff Cody  echo "CONFIG_VVFAT=y" >> $config_host_mak
66212f740136SJeff Codyfi
66222f740136SJeff Codyif test "$qed" = "yes" ; then
66232f740136SJeff Cody  echo "CONFIG_QED=y" >> $config_host_mak
66242f740136SJeff Codyfi
66252f740136SJeff Codyif test "$parallels" = "yes" ; then
66262f740136SJeff Cody  echo "CONFIG_PARALLELS=y" >> $config_host_mak
66272f740136SJeff Codyfi
66282f740136SJeff Codyif test "$sheepdog" = "yes" ; then
6629e1c42697SDaniel P. Berrangé  add_to deprecated_features "sheepdog"
66302f740136SJeff Cody  echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
66312f740136SJeff Codyfi
6632195588ccSDavid CARLIERif test "$have_mlockall" = "yes" ; then
6633195588ccSDavid CARLIER  echo "HAVE_MLOCKALL=y" >> $config_host_mak
6634195588ccSDavid CARLIERfi
6635adc28027SAlexander Bulekovif test "$fuzzing" = "yes" ; then
663654c9e41dSAlexander Bulekov  # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
663754c9e41dSAlexander Bulekov  # needed CFLAGS have already been provided
663854c9e41dSAlexander Bulekov  if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6639086d5f75SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
664054c9e41dSAlexander Bulekov    FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
664154c9e41dSAlexander Bulekov  else
664254c9e41dSAlexander Bulekov    FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
664354c9e41dSAlexander Bulekov  fi
6644adc28027SAlexander Bulekovfi
66452f740136SJeff Cody
664640e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
664740e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
664826fffe29SEmilio G. Cota    # Copy the export object list to the build dir
664926fffe29SEmilio G. Cota    if test "$ld_dynamic_list" = "yes" ; then
665026fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
665126fffe29SEmilio G. Cota	ld_symbols=qemu-plugins-ld.symbols
665226fffe29SEmilio G. Cota	cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
665326fffe29SEmilio G. Cota    elif test "$ld_exported_symbols_list" = "yes" ; then
665426fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
665526fffe29SEmilio G. Cota	ld64_symbols=qemu-plugins-ld64.symbols
665626fffe29SEmilio G. Cota	echo "# Automatically generated by configure - do not modify" > $ld64_symbols
665726fffe29SEmilio G. Cota	grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
665826fffe29SEmilio G. Cota	    sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
665926fffe29SEmilio G. Cota    else
666026fffe29SEmilio G. Cota	error_exit \
666126fffe29SEmilio G. Cota	    "If \$plugins=yes, either \$ld_dynamic_list or " \
666226fffe29SEmilio G. Cota	    "\$ld_exported_symbols_list should have been set to 'yes'."
666326fffe29SEmilio G. Cota    fi
666440e8c6f4SAlex Bennéefi
666540e8c6f4SAlex Bennée
6666f48e590aSAlex Bennéeif test -n "$gdb_bin" ; then
6667f48e590aSAlex Bennée    echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6668f48e590aSAlex Bennéefi
6669f48e590aSAlex Bennée
667054e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then
667154e7aac0SAlexey Krasikov  echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
667254e7aac0SAlexey Krasikovfi
667354e7aac0SAlexey Krasikov
667498ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
6675804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
6676c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
667739d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
6678a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
667909e93326SPaolo Bonziniecho "NINJA=$ninja" >> $config_host_mak
6680804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
6681a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
6682859aef02SPaolo Bonzini  echo "CONFIG_IASL=$iasl" >> $config_host_mak
6683a31a8642SMichael S. Tsirkinfi
668483f73fceSTomoki Sekiyamaecho "CXX=$cxx" >> $config_host_mak
66853c4a4d0dSPeter Maydellecho "OBJCC=$objcc" >> $config_host_mak
6686804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
668745d285abSPeter Maydellecho "ARFLAGS=$ARFLAGS" >> $config_host_mak
6688cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak
66895f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak
66903dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
6691804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
6692804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
66939f81aeb5SAlistair Francisecho "RANLIB=$ranlib" >> $config_host_mak
66944852ee95SStefan Weilecho "NM=$nm" >> $config_host_mak
6695daa79d9aSAlex Bennéeecho "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
66969fe6de94SBlue Swirlecho "WINDRES=$windres" >> $config_host_mak
669746eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6698a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
669911cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6700a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6701a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak
67028a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6703e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6704804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
6705484e2cc7SPaolo Bonziniecho "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6706f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak
670790246037SDaniel P. Berrangeecho "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
670890246037SDaniel P. Berrangeecho "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
67091d728c39SBlue Swirlif test "$gcov" = "yes" ; then
67101d728c39SBlue Swirl  echo "CONFIG_GCOV=y" >> $config_host_mak
67111d728c39SBlue Swirlfi
6712804edf29SJuan Quintela
6713adc28027SAlexander Bulekovif test "$fuzzing" != "no"; then
6714adc28027SAlexander Bulekov    echo "CONFIG_FUZZ=y" >> $config_host_mak
6715adc28027SAlexander Bulekovfi
671654c9e41dSAlexander Bulekovecho "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
67173efac6ebSTomáš Golembiovský
6718b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then
6719b767d257SMarek Marczykowski-Górecki  echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6720b767d257SMarek Marczykowski-Góreckifi
6721b767d257SMarek Marczykowski-Górecki
67226efd7517SPeter Maydell# use included Linux headers
67236efd7517SPeter Maydellif test "$linux" = "yes" ; then
6724a307beb6SAndreas Färber  mkdir -p linux-headers
67256efd7517SPeter Maydell  case "$cpu" in
6726c72b26ecSRichard Henderson  i386|x86_64|x32)
672708312a63SPeter Maydell    linux_arch=x86
67286efd7517SPeter Maydell    ;;
6729f8378accSRichard Henderson  ppc|ppc64|ppc64le)
673008312a63SPeter Maydell    linux_arch=powerpc
67316efd7517SPeter Maydell    ;;
67326efd7517SPeter Maydell  s390x)
673308312a63SPeter Maydell    linux_arch=s390
673408312a63SPeter Maydell    ;;
67351f080313SClaudio Fontana  aarch64)
67361f080313SClaudio Fontana    linux_arch=arm64
67371f080313SClaudio Fontana    ;;
6738222e7d11SSanjay Lal  mips64)
6739222e7d11SSanjay Lal    linux_arch=mips
6740222e7d11SSanjay Lal    ;;
674108312a63SPeter Maydell  *)
674208312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
674308312a63SPeter Maydell    linux_arch="$cpu"
67446efd7517SPeter Maydell    ;;
67456efd7517SPeter Maydell  esac
674608312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
674708312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
674808312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
674908312a63SPeter Maydell    fi
67506efd7517SPeter Maydellfi
67516efd7517SPeter Maydell
675297a847bcSbellardfor target in $target_list; do
675397a847bcSbellard    target_dir="$target"
675489138857SStefan Weil    target_name=$(echo $target | cut -d '-' -f 1)
675597a847bcSbellard    mkdir -p $target_dir
6756fdb75aefSPaolo Bonzini    case $target in
6757fdb75aefSPaolo Bonzini        *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6758fdb75aefSPaolo Bonzini        *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
67592408a527Saurel32    esac
676056aebc89Spbrookdone
67617d13299dSbellard
6762765686d6SPaolo Bonziniecho "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
6763fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then
6764fdb75aefSPaolo Bonzini  echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6765fdb75aefSPaolo Bonzinifi
6766a540f158SPeter Crosthwaite
6767a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
6768a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
6769ab318051SMarc-André Lureau  echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6770a99d57bbSWanlong Gaofi
6771a99d57bbSWanlong Gao
6772fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
6773fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
6774fd0e6053SJohn Snowfi
6775fd0e6053SJohn Snow
67761e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
67771e4f6065SDaniele Buono  echo "CONFIG_SAFESTACK=y" >> $config_host_mak
67781e4f6065SDaniele Buonofi
67791e4f6065SDaniele Buono
6780e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now.
6781e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree;
6782e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree
6783e29e5c6eSPeter Maydell# (these can be both files and directories).
6784e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This
6785e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is
6786e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun
6787e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and
6788e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own
6789e29e5c6eSPeter Maydell# directory and symlink the directory instead.
679009db9b9dSGerd Hoffmann# UNLINK is used to remove symlinks from older development versions
679109db9b9dSGerd Hoffmann# that might get into the way when doing "git update" without doing
679209db9b9dSGerd Hoffmann# a "make distclean" in between.
67931cf4323eSThomas HuthDIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
67941cf4323eSThomas HuthDIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6795b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi"
6796744a928cSAlexey KardashevskiyDIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
67978db2a4fdSGerd HoffmannDIRS="$DIRS roms/seabios"
6798c17a386bSAlex BennéeDIRS="$DIRS contrib/plugins/"
67992038f8c8SPaolo BonziniLINKS="Makefile"
6800e8f3bd71SMarc-André LureauLINKS="$LINKS tests/tcg/lm32/Makefile"
68013941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target"
6802ddcf607fSGerd HoffmannLINKS="$LINKS pc-bios/optionrom/Makefile"
6803e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile"
68048db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile"
6805e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp"
6806e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
680739950353SPeter MaydellLINKS="$LINKS tests/acceptance tests/data"
680839950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check"
68098f8fd9edSCleber RosaLINKS="$LINKS python"
6810c17a386bSAlex BennéeLINKS="$LINKS contrib/plugins/Makefile "
681109db9b9dSGerd HoffmannUNLINK="pc-bios/keymaps"
6812753d11f2SRichard Hendersonfor bios_file in \
6813753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
68143a631b8eSBin Meng    $source_path/pc-bios/*.elf \
6815225a9ab8SAlexey Kardashevskiy    $source_path/pc-bios/*.lid \
6816753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
6817753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
6818e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
6819753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
68204e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
682126ce90fdSLaszlo Ersek    $source_path/pc-bios/edk2-*.fd.bz2 \
6822753d11f2SRichard Henderson    $source_path/pc-bios/palcode-*
6823753d11f2SRichard Hendersondo
6824e29e5c6eSPeter Maydell    LINKS="$LINKS pc-bios/$(basename $bios_file)"
68257ea78b74SJan Kiszkadone
6826d1807a4fSPaolo Bonzinimkdir -p $DIRS
6827e29e5c6eSPeter Maydellfor f in $LINKS ; do
68280f4d8894SPaolo Bonzini    if [ -e "$source_path/$f" ]; then
6829f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
6830f9245e10SPeter Maydell    fi
68317d13299dSbellarddone
683209db9b9dSGerd Hoffmannfor f in $UNLINK ; do
683309db9b9dSGerd Hoffmann    if [ -L "$f" ]; then
683409db9b9dSGerd Hoffmann        rm -f "$f"
683509db9b9dSGerd Hoffmann    fi
683609db9b9dSGerd Hoffmanndone
68371ad2134fSPaul Brook
68382038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do
68392038f8c8SPaolo Bonzini  export $i
68402038f8c8SPaolo Bonzinidone
6841afc3a8f9SAlex Bennéeexport target_list source_path use_containers
68422038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh)
68432038f8c8SPaolo Bonzini
6844c34ebfdcSAnthony Liguori# temporary config to build submodules
68458db2a4fdSGerd Hoffmannfor rom in seabios; do
6846c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
684737116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
6848c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6849cdbd727cSRichard Henderson    echo "AS=$as" >> $config_mak
68505f6f0e27SRichard Henderson    echo "CCAS=$ccas" >> $config_mak
6851c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
6852c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
68533dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
6854c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
6855a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
6856c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
68579f81aeb5SAlistair Francis    echo "RANLIB=$ranlib" >> $config_mak
6858c34ebfdcSAnthony Liguoridone
6859c34ebfdcSAnthony Liguori
686076c7560aSMax Reitz# set up qemu-iotests in this build directory
686176c7560aSMax Reitziotests_common_env="tests/qemu-iotests/common.env"
686276c7560aSMax Reitz
686376c7560aSMax Reitzecho "# Automatically generated by configure - do not modify" > "$iotests_common_env"
686476c7560aSMax Reitzecho >> "$iotests_common_env"
686576c7560aSMax Reitzecho "export PYTHON='$python'" >> "$iotests_common_env"
686676c7560aSMax Reitz
6867a5665051SPaolo Bonziniif test "$skip_meson" = no; then
6868fc929892SMarc-André Lureaucross="config-meson.cross.new"
6869fc929892SMarc-André Lureaumeson_quote() {
687047b30835SPaolo Bonzini    echo "'$(echo $* | sed "s/ /','/g")'"
6871fc929892SMarc-André Lureau}
6872fc929892SMarc-André Lureau
6873fc929892SMarc-André Lureauecho "# Automatically generated by configure - do not modify" > $cross
6874fc929892SMarc-André Lureauecho "[properties]" >> $cross
6875fc929892SMarc-André Lureautest -z "$cxx" && echo "link_language = 'c'" >> $cross
687647b30835SPaolo Bonziniecho "[built-in options]" >> $cross
687747b30835SPaolo Bonziniecho "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
687847b30835SPaolo Bonziniecho "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
687947b30835SPaolo Bonziniecho "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
688047b30835SPaolo Bonziniecho "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6881fc929892SMarc-André Lureauecho "[binaries]" >> $cross
688247b30835SPaolo Bonziniecho "c = [$(meson_quote $cc)]" >> $cross
688347b30835SPaolo Bonzinitest -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
688447b30835SPaolo Bonziniecho "ar = [$(meson_quote $ar)]" >> $cross
688547b30835SPaolo Bonziniecho "nm = [$(meson_quote $nm)]" >> $cross
688647b30835SPaolo Bonziniecho "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
688747b30835SPaolo Bonziniecho "ranlib = [$(meson_quote $ranlib)]" >> $cross
6888e8178514SPaolo Bonziniif has $sdl2_config; then
688947b30835SPaolo Bonzini  echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6890e8178514SPaolo Bonzinifi
689147b30835SPaolo Bonziniecho "strip = [$(meson_quote $strip)]" >> $cross
689247b30835SPaolo Bonziniecho "windres = [$(meson_quote $windres)]" >> $cross
6893fc929892SMarc-André Lureauif test -n "$cross_prefix"; then
6894fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
6895fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
6896fc929892SMarc-André Lureau    if test "$mingw32" = "yes" ; then
6897fc929892SMarc-André Lureau        echo "system = 'windows'" >> $cross
6898fc929892SMarc-André Lureau    fi
6899853b4bafSThomas Huth    if test "$linux" = "yes" ; then
6900853b4bafSThomas Huth        echo "system = 'linux'" >> $cross
6901853b4bafSThomas Huth    fi
6902fc929892SMarc-André Lureau    case "$ARCH" in
6903fc929892SMarc-André Lureau        i386|x86_64)
6904fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
6905fc929892SMarc-André Lureau            ;;
6906fc929892SMarc-André Lureau        ppc64le)
6907fc929892SMarc-André Lureau            echo "cpu_family = 'ppc64'" >> $cross
6908fc929892SMarc-André Lureau            ;;
6909fc929892SMarc-André Lureau        *)
6910fc929892SMarc-André Lureau            echo "cpu_family = '$ARCH'" >> $cross
6911fc929892SMarc-André Lureau            ;;
6912fc929892SMarc-André Lureau    esac
6913fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
6914fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
6915fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
6916fc929892SMarc-André Lureau    else
6917fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
6918fc929892SMarc-André Lureau    fi
6919fc929892SMarc-André Lureauelse
6920fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
6921fc929892SMarc-André Lureaufi
6922fc929892SMarc-André Lureaumv $cross config-meson.cross
6923fc929892SMarc-André Lureau
6924a5665051SPaolo Bonzinirm -rf meson-private meson-info meson-logs
6925a5cb7c5aSPaolo Bonziniunset staticpic
6926a5cb7c5aSPaolo Bonziniif ! version_ge "$($meson --version)" 0.56.0; then
6927a5cb7c5aSPaolo Bonzini  staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
6928a5cb7c5aSPaolo Bonzinifi
692909e93326SPaolo BonziniNINJA=$ninja $meson setup \
6930d17f305aSPaolo Bonzini        --prefix "$prefix" \
6931d17f305aSPaolo Bonzini        --libdir "$libdir" \
6932d17f305aSPaolo Bonzini        --libexecdir "$libexecdir" \
6933d17f305aSPaolo Bonzini        --bindir "$bindir" \
6934d17f305aSPaolo Bonzini        --includedir "$includedir" \
6935d17f305aSPaolo Bonzini        --datadir "$datadir" \
6936d17f305aSPaolo Bonzini        --mandir "$mandir" \
6937d17f305aSPaolo Bonzini        --sysconfdir "$sysconfdir" \
693816bf7a33SPaolo Bonzini        --localedir "$localedir" \
6939d17f305aSPaolo Bonzini        --localstatedir "$local_statedir" \
6940d17f305aSPaolo Bonzini        -Ddocdir="$docdir" \
694116bf7a33SPaolo Bonzini        -Dqemu_firmwarepath="$firmwarepath" \
694273f3aa37SMarc-André Lureau        -Dqemu_suffix="$qemu_suffix" \
6943a5665051SPaolo Bonzini        -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
6944a5665051SPaolo Bonzini        -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
6945a5665051SPaolo Bonzini        -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
6946a5665051SPaolo Bonzini        -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
6947da6d48b9SMarc-André Lureau        -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
6948a5cb7c5aSPaolo Bonzini        ${staticpic:+-Db_staticpic=$staticpic} \
6949bf0e56a3SMarc-André Lureau        -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
6950deb62371SPaolo Bonzini        -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
69511badb709SPaolo Bonzini        -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
69521badb709SPaolo Bonzini        -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
6953b4e312e9SPaolo Bonzini        -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
6954a0b93237SPaolo Bonzini        -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
6955cece116cSMisono Tomohiro        -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
6956fbb4121dSPaolo Bonzini        -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
69575c53015aSPaolo Bonzini        -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
6958c8d5450bSPaolo Bonzini        -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
6959e5e856c1SStefan Hajnoczi        -Dvhost_user_blk_server=$vhost_user_blk_server \
6960df4ea709SMax Reitz        -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek \
6961fc929892SMarc-André Lureau        $cross_arg \
6962a5665051SPaolo Bonzini        "$PWD" "$source_path"
6963a5665051SPaolo Bonzini
6964a5665051SPaolo Bonziniif test "$?" -ne 0 ; then
6965a5665051SPaolo Bonzini    error_exit "meson setup failed"
6966a5665051SPaolo Bonzinifi
6967a5665051SPaolo Bonzinifi
6968a5665051SPaolo Bonzini
69692d838d9bSAlex Bennéeif test -n "${deprecated_features}"; then
69702d838d9bSAlex Bennée    echo "Warning, deprecated features enabled."
69712d838d9bSAlex Bennée    echo "Please see docs/system/deprecated.rst"
69722d838d9bSAlex Bennée    echo "  features: ${deprecated_features}"
69732d838d9bSAlex Bennéefi
69742d838d9bSAlex Bennée
6975dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
6976dc655404SMichael S. Tsirkincat <<EOD >config.status
6977dc655404SMichael S. Tsirkin#!/bin/sh
6978dc655404SMichael S. Tsirkin# Generated by configure.
6979dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
6980dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
6981dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
6982dc655404SMichael S. TsirkinEOD
6983e811da7fSDaniel P. Berrangé
6984e811da7fSDaniel P. Berrangépreserve_env() {
6985e811da7fSDaniel P. Berrangé    envname=$1
6986e811da7fSDaniel P. Berrangé
6987e811da7fSDaniel P. Berrangé    eval envval=\$$envname
6988e811da7fSDaniel P. Berrangé
6989e811da7fSDaniel P. Berrangé    if test -n "$envval"
6990e811da7fSDaniel P. Berrangé    then
6991e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
6992e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
6993e811da7fSDaniel P. Berrangé    else
6994e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
6995e811da7fSDaniel P. Berrangé    fi
6996e811da7fSDaniel P. Berrangé}
6997e811da7fSDaniel P. Berrangé
6998e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
6999e811da7fSDaniel P. Berrangé# features/build target configure will detect
7000e811da7fSDaniel P. Berrangépreserve_env AR
7001e811da7fSDaniel P. Berrangépreserve_env AS
7002e811da7fSDaniel P. Berrangépreserve_env CC
7003e811da7fSDaniel P. Berrangépreserve_env CPP
7004e811da7fSDaniel P. Berrangépreserve_env CXX
7005e811da7fSDaniel P. Berrangépreserve_env INSTALL
7006e811da7fSDaniel P. Berrangépreserve_env LD
7007e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
7008e811da7fSDaniel P. Berrangépreserve_env LIBTOOL
7009e811da7fSDaniel P. Berrangépreserve_env MAKE
7010e811da7fSDaniel P. Berrangépreserve_env NM
7011e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
7012e811da7fSDaniel P. Berrangépreserve_env PATH
7013e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
7014e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
7015e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
7016e811da7fSDaniel P. Berrangépreserve_env PYTHON
7017e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
7018e811da7fSDaniel P. Berrangépreserve_env SMBD
7019e811da7fSDaniel P. Berrangépreserve_env STRIP
7020e811da7fSDaniel P. Berrangépreserve_env WINDRES
7021e811da7fSDaniel P. Berrangé
7022dc655404SMichael S. Tsirkinprintf "exec" >>config.status
7023a5665051SPaolo Bonzinifor i in "$0" "$@"; do
7024a5665051SPaolo Bonzini  test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
7025a5665051SPaolo Bonzinidone
7026cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
7027dc655404SMichael S. Tsirkinchmod +x config.status
7028dc655404SMichael S. Tsirkin
70298cd05ab6SPeter Maydellrm -r "$TMPDIR1"
7030