xref: /openbmc/qemu/configure (revision c9322ab5bfe17e9db099646978f43a745816073e)
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"
816969ec6cSJames ClarkeTMPMO="${TMPDIR1}/${TMPB}.mo"
8226fffe29SEmilio G. CotaTMPTXT="${TMPDIR1}/${TMPB}.txt"
837d13299dSbellard
84da1d85e3SGerd Hoffmannrm -f config.log
859ac81bbbSmalc
86b48e3611SPeter Maydell# Print a helpful header at the top of config.log
87b48e3611SPeter Maydellecho "# QEMU configure log $(date)" >> config.log
88979ae168SPeter Maydellprintf "# Configured with:" >> config.log
89979ae168SPeter Maydellprintf " '%s'" "$0" "$@" >> config.log
90979ae168SPeter Maydellecho >> config.log
91b48e3611SPeter Maydellecho "#" >> config.log
92b48e3611SPeter Maydell
93d880a3baSPaolo Bonziniprint_error() {
94d880a3baSPaolo Bonzini    (echo
9576ad07a4SPeter Maydell    echo "ERROR: $1"
9676ad07a4SPeter Maydell    while test -n "$2"; do
9776ad07a4SPeter Maydell        echo "       $2"
9876ad07a4SPeter Maydell        shift
9976ad07a4SPeter Maydell    done
100d880a3baSPaolo Bonzini    echo) >&2
101d880a3baSPaolo Bonzini}
102d880a3baSPaolo Bonzini
103d880a3baSPaolo Bonzinierror_exit() {
104d880a3baSPaolo Bonzini    print_error "$@"
10576ad07a4SPeter Maydell    exit 1
10676ad07a4SPeter Maydell}
10776ad07a4SPeter Maydell
1089c83ffd8SPeter Maydelldo_compiler() {
1099c83ffd8SPeter Maydell    # Run the compiler, capturing its output to the log. First argument
1109c83ffd8SPeter Maydell    # is compiler binary to execute.
1119c83ffd8SPeter Maydell    local compiler="$1"
1129c83ffd8SPeter Maydell    shift
1138bbe05d7SIan Jackson    if test -n "$BASH_VERSION"; then eval '
1148bbe05d7SIan Jackson        echo >>config.log "
1158bbe05d7SIan Jacksonfuncs: ${FUNCNAME[*]}
1168bbe05d7SIan Jacksonlines: ${BASH_LINENO[*]}"
1178bbe05d7SIan Jackson    '; fi
1189c83ffd8SPeter Maydell    echo $compiler "$@" >> config.log
1199c83ffd8SPeter Maydell    $compiler "$@" >> config.log 2>&1 || return $?
1208dc38a78SPeter Maydell    # Test passed. If this is an --enable-werror build, rerun
1218dc38a78SPeter Maydell    # the test with -Werror and bail out if it fails. This
1228dc38a78SPeter Maydell    # makes warning-generating-errors in configure test code
1238dc38a78SPeter Maydell    # obvious to developers.
1248dc38a78SPeter Maydell    if test "$werror" != "yes"; then
1258dc38a78SPeter Maydell        return 0
1268dc38a78SPeter Maydell    fi
1278dc38a78SPeter Maydell    # Don't bother rerunning the compile if we were already using -Werror
1288dc38a78SPeter Maydell    case "$*" in
1298dc38a78SPeter Maydell        *-Werror*)
1308dc38a78SPeter Maydell           return 0
1318dc38a78SPeter Maydell        ;;
1328dc38a78SPeter Maydell    esac
1339c83ffd8SPeter Maydell    echo $compiler -Werror "$@" >> config.log
1349c83ffd8SPeter Maydell    $compiler -Werror "$@" >> config.log 2>&1 && return $?
13576ad07a4SPeter Maydell    error_exit "configure test passed without -Werror but failed with -Werror." \
13676ad07a4SPeter Maydell        "This is probably a bug in the configure script. The failing command" \
13776ad07a4SPeter Maydell        "will be at the bottom of config.log." \
13876ad07a4SPeter Maydell        "You can run configure with --disable-werror to bypass this check."
1398dc38a78SPeter Maydell}
1408dc38a78SPeter Maydell
1419c83ffd8SPeter Maydelldo_cc() {
1429c83ffd8SPeter Maydell    do_compiler "$cc" "$@"
1439c83ffd8SPeter Maydell}
1449c83ffd8SPeter Maydell
1459c83ffd8SPeter Maydelldo_cxx() {
1469c83ffd8SPeter Maydell    do_compiler "$cxx" "$@"
1479c83ffd8SPeter Maydell}
1489c83ffd8SPeter Maydell
14900849b92SRichard Henderson# Append $2 to the variable named $1, with space separation
15000849b92SRichard Hendersonadd_to() {
15100849b92SRichard Henderson    eval $1=\${$1:+\"\$$1 \"}\$2
15200849b92SRichard Henderson}
15300849b92SRichard Henderson
1549c83ffd8SPeter Maydellupdate_cxxflags() {
1559c83ffd8SPeter Maydell    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
1569c83ffd8SPeter Maydell    # options which some versions of GCC's C++ compiler complain about
1579c83ffd8SPeter Maydell    # because they only make sense for C programs.
15853422040SPaolo Bonzini    QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
159086d5f75SPaolo Bonzini    CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
1609c83ffd8SPeter Maydell    for arg in $QEMU_CFLAGS; do
1619c83ffd8SPeter Maydell        case $arg in
1629c83ffd8SPeter Maydell            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
1639c83ffd8SPeter Maydell            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
1649c83ffd8SPeter Maydell                ;;
1659c83ffd8SPeter Maydell            *)
1669c83ffd8SPeter Maydell                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
1679c83ffd8SPeter Maydell                ;;
1689c83ffd8SPeter Maydell        esac
1699c83ffd8SPeter Maydell    done
1709c83ffd8SPeter Maydell}
1719c83ffd8SPeter Maydell
17252166aa0SJuan Quintelacompile_object() {
173fd0e6053SJohn Snow  local_cflags="$1"
174086d5f75SPaolo Bonzini  do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
17552166aa0SJuan Quintela}
17652166aa0SJuan Quintela
17752166aa0SJuan Quintelacompile_prog() {
17852166aa0SJuan Quintela  local_cflags="$1"
17952166aa0SJuan Quintela  local_ldflags="$2"
180086d5f75SPaolo Bonzini  do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $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
1960dba6195SLoïc Minier# search for an executable in PATH
1970dba6195SLoïc Minierpath_of() {
1980dba6195SLoïc Minier    local_command="$1"
1990dba6195SLoïc Minier    local_ifs="$IFS"
2000dba6195SLoïc Minier    local_dir=""
2010dba6195SLoïc Minier
2020dba6195SLoïc Minier    # pathname has a dir component?
2030dba6195SLoïc Minier    if [ "${local_command#*/}" != "$local_command" ]; then
2040dba6195SLoïc Minier        if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
2050dba6195SLoïc Minier            echo "$local_command"
2060dba6195SLoïc Minier            return 0
2070dba6195SLoïc Minier        fi
2080dba6195SLoïc Minier    fi
2090dba6195SLoïc Minier    if [ -z "$local_command" ]; then
2100dba6195SLoïc Minier        return 1
2110dba6195SLoïc Minier    fi
2120dba6195SLoïc Minier
2130dba6195SLoïc Minier    IFS=:
2140dba6195SLoïc Minier    for local_dir in $PATH; do
2150dba6195SLoïc Minier        if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
2160dba6195SLoïc Minier            echo "$local_dir/$local_command"
2170dba6195SLoïc Minier            IFS="${local_ifs:-$(printf ' \t\n')}"
2180dba6195SLoïc Minier            return 0
2190dba6195SLoïc Minier        fi
2200dba6195SLoïc Minier    done
2210dba6195SLoïc Minier    # not found
2220dba6195SLoïc Minier    IFS="${local_ifs:-$(printf ' \t\n')}"
2230dba6195SLoïc Minier    return 1
2240dba6195SLoïc Minier}
2250dba6195SLoïc Minier
2260a01d76fSMarc-André Lureauversion_ge () {
2270a01d76fSMarc-André Lureau    local_ver1=`echo $1 | tr . ' '`
2280a01d76fSMarc-André Lureau    local_ver2=`echo $2 | tr . ' '`
2290a01d76fSMarc-André Lureau    while true; do
2300a01d76fSMarc-André Lureau        set x $local_ver1
2310a01d76fSMarc-André Lureau        local_first=${2-0}
2320a01d76fSMarc-André Lureau        # shift 2 does nothing if there are less than 2 arguments
2330a01d76fSMarc-André Lureau        shift; shift
2340a01d76fSMarc-André Lureau        local_ver1=$*
2350a01d76fSMarc-André Lureau        set x $local_ver2
2360a01d76fSMarc-André Lureau        # the second argument finished, the first must be greater or equal
2370a01d76fSMarc-André Lureau        test $# = 1 && return 0
2380a01d76fSMarc-André Lureau        test $local_first -lt $2 && return 1
2390a01d76fSMarc-André Lureau        test $local_first -gt $2 && return 0
2400a01d76fSMarc-André Lureau        shift; shift
2410a01d76fSMarc-André Lureau        local_ver2=$*
2420a01d76fSMarc-André Lureau    done
2430a01d76fSMarc-André Lureau}
2440a01d76fSMarc-André Lureau
2455b808275SLluís Vilanovahave_backend () {
2465b808275SLluís Vilanova    echo "$trace_backends" | grep "$1" >/dev/null
2475b808275SLluís Vilanova}
2485b808275SLluís Vilanova
2493b6b7550SPaolo Bonziniglob() {
2503b6b7550SPaolo Bonzini    eval test -z '"${1#'"$2"'}"'
2513b6b7550SPaolo Bonzini}
2523b6b7550SPaolo Bonzini
2533b6b7550SPaolo Bonzinisupported_hax_target() {
2543b6b7550SPaolo Bonzini    test "$hax" = "yes" || return 1
2553b6b7550SPaolo Bonzini    glob "$1" "*-softmmu" || return 1
2563b6b7550SPaolo Bonzini    case "${1%-softmmu}" in
2573b6b7550SPaolo Bonzini        i386|x86_64)
2583b6b7550SPaolo Bonzini            return 0
2593b6b7550SPaolo Bonzini        ;;
2603b6b7550SPaolo Bonzini    esac
2613b6b7550SPaolo Bonzini    return 1
2623b6b7550SPaolo Bonzini}
2633b6b7550SPaolo Bonzini
2643b6b7550SPaolo Bonzinisupported_kvm_target() {
2653b6b7550SPaolo Bonzini    test "$kvm" = "yes" || return 1
2663b6b7550SPaolo Bonzini    glob "$1" "*-softmmu" || return 1
2673b6b7550SPaolo Bonzini    case "${1%-softmmu}:$cpu" in
2683b6b7550SPaolo Bonzini        arm:arm | aarch64:aarch64 | \
2693b6b7550SPaolo Bonzini        i386:i386 | i386:x86_64 | i386:x32 | \
2703b6b7550SPaolo Bonzini        x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
271aa2953fdSHuacai Chen        mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
272f8378accSRichard Henderson        ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
2733b6b7550SPaolo Bonzini        s390x:s390x)
2743b6b7550SPaolo Bonzini            return 0
2753b6b7550SPaolo Bonzini        ;;
2763b6b7550SPaolo Bonzini    esac
2773b6b7550SPaolo Bonzini    return 1
2783b6b7550SPaolo Bonzini}
2793b6b7550SPaolo Bonzini
2803b6b7550SPaolo Bonzinisupported_xen_target() {
2813b6b7550SPaolo Bonzini    test "$xen" = "yes" || return 1
2823b6b7550SPaolo Bonzini    glob "$1" "*-softmmu" || return 1
283b5ed2e11SPaolo Bonzini    # Only i386 and x86_64 provide the xenpv machine.
284b5ed2e11SPaolo Bonzini    case "${1%-softmmu}" in
285b5ed2e11SPaolo Bonzini        i386|x86_64)
2863b6b7550SPaolo Bonzini            return 0
2873b6b7550SPaolo Bonzini        ;;
2883b6b7550SPaolo Bonzini    esac
2893b6b7550SPaolo Bonzini    return 1
2903b6b7550SPaolo Bonzini}
2913b6b7550SPaolo Bonzini
292c97d6d2cSSergio Andres Gomez Del Realsupported_hvf_target() {
293c97d6d2cSSergio Andres Gomez Del Real    test "$hvf" = "yes" || return 1
294c97d6d2cSSergio Andres Gomez Del Real    glob "$1" "*-softmmu" || return 1
295c97d6d2cSSergio Andres Gomez Del Real    case "${1%-softmmu}" in
296c97d6d2cSSergio Andres Gomez Del Real        x86_64)
297c97d6d2cSSergio Andres Gomez Del Real            return 0
298c97d6d2cSSergio Andres Gomez Del Real        ;;
299c97d6d2cSSergio Andres Gomez Del Real    esac
300c97d6d2cSSergio Andres Gomez Del Real    return 1
301c97d6d2cSSergio Andres Gomez Del Real}
302c97d6d2cSSergio Andres Gomez Del Real
303d661d9a4SJustin Terry (VM)supported_whpx_target() {
304d661d9a4SJustin Terry (VM)    test "$whpx" = "yes" || return 1
305d661d9a4SJustin Terry (VM)    glob "$1" "*-softmmu" || return 1
306d661d9a4SJustin Terry (VM)    case "${1%-softmmu}" in
307d661d9a4SJustin Terry (VM)        i386|x86_64)
308d661d9a4SJustin Terry (VM)            return 0
309d661d9a4SJustin Terry (VM)        ;;
310d661d9a4SJustin Terry (VM)    esac
311d661d9a4SJustin Terry (VM)    return 1
312d661d9a4SJustin Terry (VM)}
313d661d9a4SJustin Terry (VM)
314d880a3baSPaolo Bonzinisupported_target() {
315d880a3baSPaolo Bonzini    case "$1" in
316d880a3baSPaolo Bonzini        *-softmmu)
317d880a3baSPaolo Bonzini            ;;
318d880a3baSPaolo Bonzini        *-linux-user)
319d880a3baSPaolo Bonzini            if test "$linux" != "yes"; then
320d880a3baSPaolo Bonzini                print_error "Target '$target' is only available on a Linux host"
321d880a3baSPaolo Bonzini                return 1
322d880a3baSPaolo Bonzini            fi
323d880a3baSPaolo Bonzini            ;;
324d880a3baSPaolo Bonzini        *-bsd-user)
325d880a3baSPaolo Bonzini            if test "$bsd" != "yes"; then
326d880a3baSPaolo Bonzini                print_error "Target '$target' is only available on a BSD host"
327d880a3baSPaolo Bonzini                return 1
328d880a3baSPaolo Bonzini            fi
329d880a3baSPaolo Bonzini            ;;
330d880a3baSPaolo Bonzini        *)
331d880a3baSPaolo Bonzini            print_error "Invalid target name '$target'"
332d880a3baSPaolo Bonzini            return 1
333d880a3baSPaolo Bonzini            ;;
334d880a3baSPaolo Bonzini    esac
335b3f6ea7eSPaolo Bonzini    test "$tcg" = "yes" && return 0
336b3f6ea7eSPaolo Bonzini    supported_kvm_target "$1" && return 0
337b3f6ea7eSPaolo Bonzini    supported_xen_target "$1" && return 0
338b3f6ea7eSPaolo Bonzini    supported_hax_target "$1" && return 0
339c97d6d2cSSergio Andres Gomez Del Real    supported_hvf_target "$1" && return 0
340d661d9a4SJustin Terry (VM)    supported_whpx_target "$1" && return 0
341b3f6ea7eSPaolo Bonzini    print_error "TCG disabled, but hardware accelerator not available for '$target'"
342b3f6ea7eSPaolo Bonzini    return 1
343d880a3baSPaolo Bonzini}
344d880a3baSPaolo Bonzini
345e9a3591fSChristian Borntraeger
346e9a3591fSChristian Borntraegerld_has() {
347e9a3591fSChristian Borntraeger    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
348e9a3591fSChristian Borntraeger}
349e9a3591fSChristian Borntraeger
3504ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
3514ace32e2SAntonio Ospitethen
3524ace32e2SAntonio Ospite  error_exit "main directory cannot contain spaces nor colons"
3534ace32e2SAntonio Ospitefi
3544ace32e2SAntonio Ospite
35514211825SAntonio Ospite# default parameters
3562ff6b91eSJuan Quintelacpu=""
357a31a8642SMichael S. Tsirkiniasl="iasl"
3581e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M"
35943ce4dfeSbellardstatic="no"
3607d13299dSbellardcross_prefix=""
3610c58ac1cSmalcaudio_drv_list=""
362b64ec4e4SFam Zhengblock_drv_rw_whitelist=""
363b64ec4e4SFam Zhengblock_drv_ro_whitelist=""
364e49d021eSPeter Maydellhost_cc="cc"
36502f9135bSDaniel P. Berrangélibs_cpu=""
36673da375eSJuan Quintelalibs_softmmu=""
3673e2e0e6bSJuan Quintelalibs_tools=""
368d5631638Smalcaudio_win_int=""
369957f1f99SMichael Rothlibs_qga=""
3705bc62e01SGerd Hoffmanndebug_info="yes"
37163678e17SSteven Noonanstack_protector=""
3721e4f6065SDaniele Buonosafe_stack=""
373afc3a8f9SAlex Bennéeuse_containers="yes"
374f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
375ac0df51dSaliguori
37692712822SDaniel P. Berrangeif test -e "$source_path/.git"
37792712822SDaniel P. Berrangethen
378f62bbee5SDaniel P. Berrange    git_update=yes
37992712822SDaniel P. Berrange    git_submodules="ui/keycodemapdb"
3803ac1f813SEmilio G. Cota    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
3813ac1f813SEmilio G. Cota    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
38292712822SDaniel P. Berrangeelse
383f62bbee5SDaniel P. Berrange    git_update=no
384aef45d51SDaniel P. Berrange    git_submodules=""
3855c0ef67aSDaniel P. Berrangé
3865c0ef67aSDaniel P. Berrangé    if ! test -f "$source_path/ui/keycodemapdb/README"
3875c0ef67aSDaniel P. Berrangé    then
3885c0ef67aSDaniel P. Berrangé        echo
3895c0ef67aSDaniel P. Berrangé        echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
3905c0ef67aSDaniel P. Berrangé        echo
3915c0ef67aSDaniel P. Berrangé        echo "This is not a GIT checkout but module content appears to"
3925c0ef67aSDaniel P. Berrangé        echo "be missing. Do not use 'git archive' or GitHub download links"
3935c0ef67aSDaniel P. Berrangé        echo "to acquire QEMU source archives. Non-GIT builds are only"
3945c0ef67aSDaniel P. Berrangé        echo "supported with source archives linked from:"
3955c0ef67aSDaniel P. Berrangé        echo
396a3e3b521SPeter Maydell        echo "  https://www.qemu.org/download/#source"
3975c0ef67aSDaniel P. Berrangé        echo
3985c0ef67aSDaniel P. Berrangé        echo "Developers working with GIT can use scripts/archive-source.sh"
3995c0ef67aSDaniel P. Berrangé        echo "if they need to create valid source archives."
4005c0ef67aSDaniel P. Berrangé        echo
4015c0ef67aSDaniel P. Berrangé        exit 1
4025c0ef67aSDaniel P. Berrangé    fi
40392712822SDaniel P. Berrangefi
404cc84d63aSDaniel P. Berrangegit="git"
405ac0df51dSaliguori
406afb63ebdSStefan Weil# Don't accept a target_list environment variable.
407afb63ebdSStefan Weilunset target_list
408447e133fSAlex Bennéeunset target_list_exclude
409377529c0SPaolo Bonzini
410377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
411377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
412377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
413377529c0SPaolo Bonzini#              unless --disable-foo is given
414377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
415377529c0SPaolo Bonzini#              feature will searched for,
416377529c0SPaolo Bonzini#              if not found, configure exits with error
417377529c0SPaolo Bonzini#
418377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
419377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
420377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
421377529c0SPaolo Bonzini
422377529c0SPaolo Bonzinibrlapi=""
423377529c0SPaolo Bonzinicurl=""
424377529c0SPaolo Bonzinicurses=""
425377529c0SPaolo Bonzinidocs=""
426377529c0SPaolo Bonzinifdt=""
42758952137SVincenzo Maffionenetmap="no"
428377529c0SPaolo Bonzinisdl=""
429a442fe2fSDaniel P. Berrangésdl_image=""
430983eef5aSMeador Ingevirtfs=""
431fe8fc5aeSPaolo Bonzinimpath=""
432821601eaSJes Sorensenvnc="yes"
433377529c0SPaolo Bonzinisparse="no"
434377529c0SPaolo Bonzinivde=""
435377529c0SPaolo Bonzinivnc_sasl=""
436377529c0SPaolo Bonzinivnc_jpeg=""
437377529c0SPaolo Bonzinivnc_png=""
4386a021536SGerd Hoffmannxkbcommon=""
439377529c0SPaolo Bonzinixen=""
440d5b93ddfSAnthony PERARDxen_ctrl_version=""
441eb6fda0fSAnthony PERARDxen_pci_passthrough=""
442377529c0SPaolo Bonzinilinux_aio=""
443c10dd856SAarushi Mehtalinux_io_uring=""
44447e98658SCorey Bryantcap_ng=""
445377529c0SPaolo Bonziniattr=""
4464f26f2b6SAvi Kivitylibattr=""
447377529c0SPaolo Bonzinixfs=""
448b3f6ea7eSPaolo Bonzinitcg="yes"
449a40161cbSPaolo Bonzinimembarrier=""
450299e6f19SPaolo Bonzinivhost_net=""
451299e6f19SPaolo Bonzinivhost_crypto=""
452299e6f19SPaolo Bonzinivhost_scsi=""
453299e6f19SPaolo Bonzinivhost_vsock=""
454e6a74868SMarc-André Lureauvhost_user=""
45598fc1adaSDr. David Alan Gilbertvhost_user_fs=""
456d41a75a2SBradkvm="no"
457b0cb0a66SVincent Palatinhax="no"
458c97d6d2cSSergio Andres Gomez Del Realhvf="no"
459d661d9a4SJustin Terry (VM)whpx="no"
4602da776dbSMichael R. Hinesrdma=""
46121ab34c9SMarcel Apfelbaumpvrdma=""
462377529c0SPaolo Bonzinigprof="no"
463377529c0SPaolo Bonzinidebug_tcg="no"
464377529c0SPaolo Bonzinidebug="no"
465247724cbSMarc-André Lureausanitizers="no"
4660aebab04SLingfeng Yangtsan="no"
467b553a042SJohn Snowfortify_source=""
468377529c0SPaolo Bonzinistrip_opt="yes"
4699195b2c2SStefan Weiltcg_interpreter="no"
470377529c0SPaolo Bonzinibigendian="no"
471377529c0SPaolo Bonzinimingw32="no"
4721d728c39SBlue Swirlgcov="no"
473377529c0SPaolo BonziniEXESUF=""
47417969268SFam ZhengDSOSUF=".so"
47517969268SFam ZhengLDFLAGS_SHARED="-shared"
47617969268SFam Zhengmodules="no"
477bd83c861SChristian Ehrhardtmodule_upgrades="no"
478377529c0SPaolo Bonziniprefix="/usr/local"
4793d5eecabSGerd Hoffmannfirmwarepath="\${prefix}/share/qemu-firmware"
480377529c0SPaolo Bonziniconfsuffix="/qemu"
481675b9b53SMarc-André Lureauslirp=""
482377529c0SPaolo Bonzinioss_lib=""
483377529c0SPaolo Bonzinibsd="no"
484377529c0SPaolo Bonzinilinux="no"
485377529c0SPaolo Bonzinisolaris="no"
486377529c0SPaolo Bonziniprofiler="no"
487377529c0SPaolo Bonzinicocoa="no"
488377529c0SPaolo Bonzinisoftmmu="yes"
489377529c0SPaolo Bonzinilinux_user="no"
490377529c0SPaolo Bonzinibsd_user="no"
491377529c0SPaolo Bonziniblobs="yes"
49205dfa22bSPhilippe Mathieu-Daudéedk2_blobs="no"
493377529c0SPaolo Bonzinipkgversion=""
49440d6444eSAvi Kivitypie=""
4953556c233SPaolo Bonziniqom_cast_debug="yes"
496baf86d6bSPaolo Bonzinitrace_backends="log"
497377529c0SPaolo Bonzinitrace_file="trace"
498377529c0SPaolo Bonzinispice=""
499377529c0SPaolo Bonzinirbd=""
5007b02f544SMarc-André Lureausmartcard=""
5012b2325ffSGerd Hoffmannlibusb=""
50269354a83SHans de Goedeusb_redir=""
503da076ffeSGerd Hoffmannopengl=""
504014cb152SGerd Hoffmannopengl_dmabuf="no"
5055dd89908SRichard Hendersoncpuid_h="no"
50686583a07SLiam Merwickavx2_opt=""
5071ece9905SAlon Levyzlib="yes"
5088ca80760SRichard Hendersoncapstone=""
509b25c9dffSStefan Weillzo=""
510b25c9dffSStefan Weilsnappy=""
5116b383c08SPeter Wubzip2=""
51283bc1f97SJulio Faraccolzfse=""
5133a678481SJuan Quintelazstd=""
514e8ef31a3SMichael Tokarevguest_agent=""
515d9840e25STomoki Sekiyamaguest_agent_with_vss="no"
51650cbebb9SMichael Rothguest_agent_ntddscsi="no"
5179dacf32dSYossi Hindinguest_agent_msi=""
518d9840e25STomoki Sekiyamavss_win32_sdk=""
519d9840e25STomoki Sekiyamawin_sdk="no"
520e10ee3f5SPhilippe Mathieu-Daudéwant_tools=""
521c589b249SRonnie Sahlberglibiscsi=""
5226542aa9cSPeter Lievenlibnfs=""
523519175a2SAlex Barcelocoroutine=""
52470c60c08SStefan Hajnoczicoroutine_pool=""
5257d992e4dSPeter Lievendebug_stack_usage="no"
526f0d92b56SLongpeng(Mike)crypto_afalg="no"
527f794573eSEduardo Otuboseccomp=""
528eb100396SBharata B Raoglusterfs=""
529d85fa9ebSJeff Codyglusterfs_xlator_opt="no"
5300c14fb47SBharata B Raoglusterfs_discard="no"
531df3a429aSNiels de Vosglusterfs_fallocate="no"
5327c815372SBharata B Raoglusterfs_zerofill="no"
533e014dbe7SPrasanna Kumar Kaleverglusterfs_ftruncate_has_stat="no"
5340e3b891fSNiels de Vosglusterfs_iocb_has_stat="no"
535a4ccabcfSAnthony Liguorigtk=""
536925a0400SGerd Hoffmanngtk_gl="no"
537a1c5e949SDaniel P. Berrangetls_priority="NORMAL"
538ddbb0d09SDaniel P. Berrangegnutls=""
53991bfcdb0SDaniel P. Berrangenettle=""
540dc2207afSDaniel P. Berrangénettle_xts="no"
54191bfcdb0SDaniel P. Berrangegcrypt=""
5421f923c70SLongpeng(Mike)gcrypt_hmac="no"
543e0576942SDaniel P. Berrangégcrypt_xts="no"
544e0576942SDaniel P. Berrangéqemu_private_xts="yes"
5458953caf3SDaniel P. Berrangeauth_pam=""
546bbbf9bfbSStefan Weilvte=""
5479d9e1521SGerd Hoffmannvirglrenderer=""
5487aaa6a16SPaolo Bonzinitpm=""
549b10d49d7SPino Toscanolibssh=""
550ed1701c6SDr. David Alan Gilbertlive_block_migration="yes"
551a99d57bbSWanlong Gaonuma=""
5522847b469SFam Zhengtcmalloc="no"
5537b01cb97SAlexandre Derumierjemalloc="no"
554a6b1d4c0SChanglong Xiereplication="yes"
5552f740136SJeff Codybochs="yes"
5562f740136SJeff Codycloop="yes"
5572f740136SJeff Codydmg="yes"
5582f740136SJeff Codyqcow1="yes"
5592f740136SJeff Codyvdi="yes"
5602f740136SJeff Codyvvfat="yes"
5612f740136SJeff Codyqed="yes"
5622f740136SJeff Codyparallels="yes"
5632f740136SJeff Codysheepdog="yes"
564ed279a06SKlim Kireevlibxml2=""
565ba59fb77SPaolo Bonzinidebug_mutex="no"
56617824406SJunyan Helibpmem=""
567f3494749SPaolo Bonzinidefault_devices="yes"
56840e8c6f4SAlex Bennéeplugins="no"
569adc28027SAlexander Bulekovfuzzing="no"
570b767d257SMarek Marczykowski-Góreckirng_none="no"
57154e7aac0SAlexey Krasikovsecret_keyring=""
57221b2eca6SJingqi Liulibdaxctl=""
573a5665051SPaolo Bonzinimeson=""
574a5665051SPaolo Bonziniskip_meson=no
575377529c0SPaolo Bonzini
576fb59dabdSPeter Maydellbogus_os="no"
5775a22ab71SYang Zhongmalloc_trim=""
578898be3e0SPeter Maydell
579ac0df51dSaliguori# parse CC options first
580ac0df51dSaliguorifor opt do
58189138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
582ac0df51dSaliguori  case "$opt" in
583ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
584ac0df51dSaliguori  ;;
5853d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
586ac0df51dSaliguori  ;;
58783f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
58883f73fceSTomoki Sekiyama  ;;
5892ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
5902ff6b91eSJuan Quintela  ;;
591de385287SAlex Bennée  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
592db5adeaaSPaolo Bonzini                    QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
593e2a2ed06SJuan Quintela  ;;
59411cde1c8SBruno Dominguez  --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
59511cde1c8SBruno Dominguez  ;;
596db5adeaaSPaolo Bonzini  --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
597f9943cd5SGerd Hoffmann                     EXTRA_LDFLAGS="$optarg"
598e2a2ed06SJuan Quintela  ;;
5995bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
6005bc62e01SGerd Hoffmann  ;;
6015bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
6025bc62e01SGerd Hoffmann  ;;
603d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
604d75402b5SAlex Bennée  ;;
605d422b2bcSAlex Bennée  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
606d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
6072038f8c8SPaolo Bonzini                      cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
608d422b2bcSAlex Bennée  ;;
609d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
6102038f8c8SPaolo Bonzini                cc_archs="$cc_archs $cc_arch"
611d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
6122038f8c8SPaolo Bonzini                cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
613d75402b5SAlex Bennée  ;;
614ac0df51dSaliguori  esac
615ac0df51dSaliguoridone
616ac0df51dSaliguori# OS specific
617ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
61893148aa5SStefan Weil# we can eliminate its usage altogether.
619ac0df51dSaliguori
620e49d021eSPeter Maydell# Preferred compiler:
621e49d021eSPeter Maydell#  ${CC} (if set)
622e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
623e49d021eSPeter Maydell#  system compiler
624e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
625e49d021eSPeter Maydell  cc="$host_cc"
626e49d021eSPeter Maydellelse
627b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
628e49d021eSPeter Maydellfi
629e49d021eSPeter Maydell
63083f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
63183f73fceSTomoki Sekiyama  cxx="c++"
63283f73fceSTomoki Sekiyamaelse
63383f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
63483f73fceSTomoki Sekiyamafi
63583f73fceSTomoki Sekiyama
636b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
637cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
6385f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
6393dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
640b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
641b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
6429f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
6434852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
644b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
645b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
64617884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
64717884d7bSSergei Trofimovichquery_pkg_config() {
64817884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
64917884d7bSSergei Trofimovich}
65017884d7bSSergei Trofimovichpkg_config=query_pkg_config
65147c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
652ac0df51dSaliguori
65345d285abSPeter Maydell# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
65445d285abSPeter MaydellARFLAGS="${ARFLAGS-rv}"
65545d285abSPeter Maydell
656be17dc90SMichael S. Tsirkin# default flags for all hosts
6572d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
6582d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
6592d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
6602d31515bSPeter Maydell# provides these semantics.)
661086d5f75SPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
662086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
663c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
664be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
66525211446SPaolo BonziniQEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
66625211446SPaolo BonziniQEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
667086d5f75SPaolo BonziniCFLAGS="-std=gnu99 -Wall"
668086d5f75SPaolo Bonzini
669be17dc90SMichael S. Tsirkin
670cab00a5aSMichael S. Tsirkin# running configure in the source tree?
671cab00a5aSMichael S. Tsirkin# we know that's the case if configure is there.
672cab00a5aSMichael S. Tsirkinif test -f "./configure"; then
673cab00a5aSMichael S. Tsirkin    pwd_is_source_path="y"
674cab00a5aSMichael S. Tsirkinelse
675cab00a5aSMichael S. Tsirkin    pwd_is_source_path="n"
676cab00a5aSMichael S. Tsirkinfi
677cab00a5aSMichael S. Tsirkin
678ac0df51dSaliguoricheck_define() {
679ac0df51dSaliguoricat > $TMPC <<EOF
680ac0df51dSaliguori#if !defined($1)
681fd786e1aSPeter Maydell#error $1 not defined
682ac0df51dSaliguori#endif
683ac0df51dSaliguoriint main(void) { return 0; }
684ac0df51dSaliguoriEOF
68552166aa0SJuan Quintela  compile_object
686ac0df51dSaliguori}
687ac0df51dSaliguori
688307119e7SGerd Hoffmanncheck_include() {
689307119e7SGerd Hoffmanncat > $TMPC <<EOF
690307119e7SGerd Hoffmann#include <$1>
691307119e7SGerd Hoffmannint main(void) { return 0; }
692307119e7SGerd HoffmannEOF
693307119e7SGerd Hoffmann  compile_object
694307119e7SGerd Hoffmann}
695307119e7SGerd Hoffmann
69693b25869SJohn Snowwrite_c_skeleton() {
69793b25869SJohn Snow    cat > $TMPC <<EOF
69893b25869SJohn Snowint main(void) { return 0; }
69993b25869SJohn SnowEOF
70093b25869SJohn Snow}
70193b25869SJohn Snow
702adc28027SAlexander Bulekovwrite_c_fuzzer_skeleton() {
703adc28027SAlexander Bulekov    cat > $TMPC <<EOF
704adc28027SAlexander Bulekov#include <stdint.h>
705adc28027SAlexander Bulekov#include <sys/types.h>
706adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
707adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
708adc28027SAlexander BulekovEOF
709adc28027SAlexander Bulekov}
710adc28027SAlexander Bulekov
711bbea4050SPeter Maydellif check_define __linux__ ; then
712bbea4050SPeter Maydell  targetos="Linux"
713bbea4050SPeter Maydellelif check_define _WIN32 ; then
714bbea4050SPeter Maydell  targetos='MINGW32'
715bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
716bbea4050SPeter Maydell  targetos='OpenBSD'
717bbea4050SPeter Maydellelif check_define __sun__ ; then
718bbea4050SPeter Maydell  targetos='SunOS'
719bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
720bbea4050SPeter Maydell  targetos='Haiku'
721951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
722951fedfcSPeter Maydell  targetos='FreeBSD'
723951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
724951fedfcSPeter Maydell  targetos='GNU/kFreeBSD'
725951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
726951fedfcSPeter Maydell  targetos='DragonFly'
727951fedfcSPeter Maydellelif check_define __NetBSD__; then
728951fedfcSPeter Maydell  targetos='NetBSD'
729951fedfcSPeter Maydellelif check_define __APPLE__; then
730951fedfcSPeter Maydell  targetos='Darwin'
731bbea4050SPeter Maydellelse
732951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
733951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
734951fedfcSPeter Maydell  # be the result of a missing compiler.
735951fedfcSPeter Maydell  targetos='bogus'
736951fedfcSPeter Maydell  bogus_os='yes'
737bbea4050SPeter Maydellfi
738bbea4050SPeter Maydell
739bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use.
740bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're
741bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify
742bbea4050SPeter Maydell# the correct CPU with the --cpu option.
743bbea4050SPeter Maydellcase $targetos in
744bbea4050SPeter MaydellDarwin)
745bbea4050SPeter Maydell  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
746bbea4050SPeter Maydell  # run 64-bit userspace code.
747bbea4050SPeter Maydell  # If the user didn't specify a CPU explicitly and the kernel says this is
748bbea4050SPeter Maydell  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
749bbea4050SPeter Maydell  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
750bbea4050SPeter Maydell    cpu="x86_64"
751bbea4050SPeter Maydell  fi
752bbea4050SPeter Maydell  ;;
753bbea4050SPeter MaydellSunOS)
75489138857SStefan Weil  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
755bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
756bbea4050SPeter Maydell    cpu="x86_64"
757bbea4050SPeter Maydell  fi
758bbea4050SPeter Maydellesac
759bbea4050SPeter Maydell
7602ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
7612ff6b91eSJuan Quintela  # command line argument
7622ff6b91eSJuan Quintela  :
7632ff6b91eSJuan Quintelaelif check_define __i386__ ; then
764ac0df51dSaliguori  cpu="i386"
765ac0df51dSaliguorielif check_define __x86_64__ ; then
766c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
767c72b26ecSRichard Henderson    cpu="x32"
768c72b26ecSRichard Henderson  else
769ac0df51dSaliguori    cpu="x86_64"
770c72b26ecSRichard Henderson  fi
7713aa9bd6cSblueswir1elif check_define __sparc__ ; then
7723aa9bd6cSblueswir1  if check_define __arch64__ ; then
7733aa9bd6cSblueswir1    cpu="sparc64"
7743aa9bd6cSblueswir1  else
7753aa9bd6cSblueswir1    cpu="sparc"
7763aa9bd6cSblueswir1  fi
777fdf7ed96Smalcelif check_define _ARCH_PPC ; then
778fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
779f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
780f8378accSRichard Henderson      cpu="ppc64le"
781f8378accSRichard Henderson    else
782fdf7ed96Smalc      cpu="ppc64"
783f8378accSRichard Henderson    fi
784ac0df51dSaliguori  else
785fdf7ed96Smalc    cpu="ppc"
786fdf7ed96Smalc  fi
787afa05235SAurelien Jarnoelif check_define __mips__ ; then
788afa05235SAurelien Jarno  cpu="mips"
789d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
790d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
791d66ed0eaSAurelien Jarno    cpu="s390x"
792d66ed0eaSAurelien Jarno  else
793d66ed0eaSAurelien Jarno    cpu="s390"
794d66ed0eaSAurelien Jarno  fi
795c4f80543SAlistair Franciselif check_define __riscv ; then
796c4f80543SAlistair Francis  if check_define _LP64 ; then
797c4f80543SAlistair Francis    cpu="riscv64"
798c4f80543SAlistair Francis  else
799c4f80543SAlistair Francis    cpu="riscv32"
800c4f80543SAlistair Francis  fi
80121d89f84SPeter Maydellelif check_define __arm__ ; then
80221d89f84SPeter Maydell  cpu="arm"
8031f080313SClaudio Fontanaelif check_define __aarch64__ ; then
8041f080313SClaudio Fontana  cpu="aarch64"
805fdf7ed96Smalcelse
80689138857SStefan Weil  cpu=$(uname -m)
807ac0df51dSaliguorifi
808ac0df51dSaliguori
809359bc95dSPeter MaydellARCH=
810359bc95dSPeter Maydell# Normalise host CPU name and set ARCH.
811359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
8127d13299dSbellardcase "$cpu" in
813ee35e968SThomas Huth  ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
814898be3e0SPeter Maydell  ;;
815f8378accSRichard Henderson  ppc64le)
816f8378accSRichard Henderson    ARCH="ppc64"
817f8378accSRichard Henderson  ;;
8187d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
81997a847bcSbellard    cpu="i386"
8207d13299dSbellard  ;;
821aaa5fa14Saurel32  x86_64|amd64)
822aaa5fa14Saurel32    cpu="x86_64"
823aaa5fa14Saurel32  ;;
82421d89f84SPeter Maydell  armv*b|armv*l|arm)
82521d89f84SPeter Maydell    cpu="arm"
8267d13299dSbellard  ;;
8271f080313SClaudio Fontana  aarch64)
8281f080313SClaudio Fontana    cpu="aarch64"
8291f080313SClaudio Fontana  ;;
830afa05235SAurelien Jarno  mips*)
831afa05235SAurelien Jarno    cpu="mips"
832afa05235SAurelien Jarno  ;;
8333142255cSblueswir1  sparc|sun4[cdmuv])
834ae228531Sbellard    cpu="sparc"
835ae228531Sbellard  ;;
8367d13299dSbellard  *)
837359bc95dSPeter Maydell    # This will result in either an error or falling back to TCI later
838359bc95dSPeter Maydell    ARCH=unknown
8397d13299dSbellard  ;;
8407d13299dSbellardesac
841359bc95dSPeter Maydellif test -z "$ARCH"; then
842359bc95dSPeter Maydell  ARCH="$cpu"
843359bc95dSPeter Maydellfi
844e2d52ad3SJuan Quintela
8457d13299dSbellard# OS specific
8460dbfc675SJuan Quintela
847adfc3e91SStacey Son# host *BSD for user mode
848adfc3e91SStacey SonHOST_VARIANT_DIR=""
849adfc3e91SStacey Son
8507d13299dSbellardcase $targetos in
85167b915a5SbellardMINGW32*)
85267b915a5Sbellard  mingw32="yes"
853b0cb0a66SVincent Palatin  hax="yes"
854299e6f19SPaolo Bonzini  vhost_user="no"
8553cec7cc2SKővágó, Zoltán  audio_possible_drivers="dsound sdl"
856307119e7SGerd Hoffmann  if check_include dsound.h; then
8573cec7cc2SKővágó, Zoltán    audio_drv_list="dsound"
858307119e7SGerd Hoffmann  else
859307119e7SGerd Hoffmann    audio_drv_list=""
860307119e7SGerd Hoffmann  fi
861898be3e0SPeter Maydell  supported_os="yes"
86267b915a5Sbellard;;
8635c40d2bdSthsGNU/kFreeBSD)
864a167ba50SAurelien Jarno  bsd="yes"
8656a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
8660bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
8675c40d2bdSths;;
8687d3505c5SbellardFreeBSD)
8697d3505c5Sbellard  bsd="yes"
8700db4a067SPaolo Bonzini  make="${MAKE-gmake}"
8716a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
8720bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
873f01576f1SJuergen Lock  # needed for kinfo_getvmmap(3) in libutil.h
874f01576f1SJuergen Lock  LIBS="-lutil $LIBS"
87558952137SVincenzo Maffione  netmap=""  # enable netmap autodetect
876adfc3e91SStacey Son  HOST_VARIANT_DIR="freebsd"
8777d3505c5Sbellard;;
878c5e97233Sblueswir1DragonFly)
879c5e97233Sblueswir1  bsd="yes"
8800db4a067SPaolo Bonzini  make="${MAKE-gmake}"
8816a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
8820bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
883adfc3e91SStacey Son  HOST_VARIANT_DIR="dragonfly"
884c5e97233Sblueswir1;;
8857d3505c5SbellardNetBSD)
8867d3505c5Sbellard  bsd="yes"
887604a5b99SKamil Rytarowski  hax="yes"
8880db4a067SPaolo Bonzini  make="${MAKE-gmake}"
8896a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
8900bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl"
8918ef92a88Sblueswir1  oss_lib="-lossaudio"
892adfc3e91SStacey Son  HOST_VARIANT_DIR="netbsd"
8937d3505c5Sbellard;;
8947d3505c5SbellardOpenBSD)
8957d3505c5Sbellard  bsd="yes"
8960db4a067SPaolo Bonzini  make="${MAKE-gmake}"
897f92c7168SGerd Hoffmann  audio_drv_list="try-sdl"
8980bac1111SKővágó, Zoltán  audio_possible_drivers="sdl"
899adfc3e91SStacey Son  HOST_VARIANT_DIR="openbsd"
9007d3505c5Sbellard;;
90183fb7adfSbellardDarwin)
90283fb7adfSbellard  bsd="yes"
90383fb7adfSbellard  darwin="yes"
904b0cb0a66SVincent Palatin  hax="yes"
905c97d6d2cSSergio Andres Gomez Del Real  hvf="yes"
90617969268SFam Zheng  LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
9071b0f9cc2Saliguori  if [ "$cpu" = "x86_64" ] ; then
908a558ee17SJuan Quintela    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
909db5adeaaSPaolo Bonzini    QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
9101b0f9cc2Saliguori  fi
911fd677642Sths  cocoa="yes"
9126a485418SGerd Hoffmann  audio_drv_list="coreaudio try-sdl"
91314382605SKővágó, Zoltán  audio_possible_drivers="coreaudio sdl"
914db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
9157973f21cSJuan Quintela  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
916a0b7cf6bSPeter Maydell  # Disable attempts to use ObjectiveC features in os/object.h since they
917a0b7cf6bSPeter Maydell  # won't work when we're compiling with gcc as a C compiler.
918a0b7cf6bSPeter Maydell  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
919adfc3e91SStacey Son  HOST_VARIANT_DIR="darwin"
92083fb7adfSbellard;;
921ec530c81SbellardSunOS)
922ec530c81Sbellard  solaris="yes"
9230db4a067SPaolo Bonzini  make="${MAKE-gmake}"
9240db4a067SPaolo Bonzini  install="${INSTALL-ginstall}"
925e2d8830eSBrad  smbd="${SMBD-/usr/sfw/sbin/smbd}"
9266b4d2ba1Sths  if test -f /usr/include/sys/soundcard.h ; then
9276a485418SGerd Hoffmann    audio_drv_list="oss try-sdl"
9286b4d2ba1Sths  fi
929c2de5c91Smalc  audio_possible_drivers="oss sdl"
930d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h
931d741429aSBlue Swirl  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
932d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h
933d741429aSBlue Swirl  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
934560d375fSAndreas Färber  solarisnetlibs="-lsocket -lnsl -lresolv"
935560d375fSAndreas Färber  LIBS="$solarisnetlibs $LIBS"
936ec530c81Sbellard;;
937179cf400SAndreas FärberHaiku)
938179cf400SAndreas Färber  haiku="yes"
939fc433430SDavid CARLIER  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
940fc433430SDavid CARLIER  LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS"
941179cf400SAndreas Färber;;
942898be3e0SPeter MaydellLinux)
9437183834aSGerd Hoffmann  audio_drv_list="try-pa oss"
9440bac1111SKővágó, Zoltán  audio_possible_drivers="oss alsa sdl pa"
9455327cf48Sbellard  linux="yes"
946831b7825Sths  linux_user="yes"
947af2be207SJan Kiszka  kvm="yes"
94825211446SPaolo Bonzini  QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
9493efac6ebSTomáš Golembiovský  libudev="yes"
950898be3e0SPeter Maydell;;
9517d13299dSbellardesac
9527d13299dSbellard
9537d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
954b1a550a0Spbrook  if [ "$darwin" != "yes" ] ; then
95584778508Sblueswir1    bsd_user="yes"
9567d3505c5Sbellard  fi
95708de3949SAndreas Färberfi
9587d3505c5Sbellard
9590db4a067SPaolo Bonzini: ${make=${MAKE-make}}
9600db4a067SPaolo Bonzini: ${install=${INSTALL-install}}
961faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally
962faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so
963ddf90699SEduardo Habkost# we check that too
964faf44142SDaniel P. Berrangépython=
9650a01d76fSMarc-André Lureauexplicit_python=no
966ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python
967faf44142SDaniel P. Berrangédo
968faf44142SDaniel P. Berrangé    if has "$binary"
969faf44142SDaniel P. Berrangé    then
97095c5f2deSPaolo Bonzini        python=$(command -v "$binary")
971faf44142SDaniel P. Berrangé        break
972faf44142SDaniel P. Berrangé    fi
973faf44142SDaniel P. Berrangédone
974903458c8SMarkus Armbruster
975903458c8SMarkus Armbrustersphinx_build=
976903458c8SMarkus Armbrusterfor binary in sphinx-build-3 sphinx-build
977903458c8SMarkus Armbrusterdo
978903458c8SMarkus Armbruster    if has "$binary"
979903458c8SMarkus Armbruster    then
980903458c8SMarkus Armbruster        sphinx_build=$(command -v "$binary")
981903458c8SMarkus Armbruster        break
982903458c8SMarkus Armbruster    fi
983903458c8SMarkus Armbrusterdone
984903458c8SMarkus Armbruster
98539d87c8cSAlex Bennée# Check for ancillary tools used in testing
98639d87c8cSAlex Bennéegenisoimage=
9873df437c7SAlex Bennéefor binary in genisoimage mkisofs
98839d87c8cSAlex Bennéedo
98939d87c8cSAlex Bennée    if has $binary
99039d87c8cSAlex Bennée    then
99139d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
99239d87c8cSAlex Bennée        break
99339d87c8cSAlex Bennée    fi
99439d87c8cSAlex Bennéedone
99539d87c8cSAlex Bennée
996e2d8830eSBrad: ${smbd=${SMBD-/usr/sbin/smbd}}
9970db4a067SPaolo Bonzini
9983c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
9993c4a4d0dSPeter Maydellif has clang; then
10003c4a4d0dSPeter Maydell  objcc=clang
10013c4a4d0dSPeter Maydellelse
10023c4a4d0dSPeter Maydell  objcc="$cc"
10033c4a4d0dSPeter Maydellfi
10043c4a4d0dSPeter Maydell
10053457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
10063457a3f8SJuan Quintela  EXESUF=".exe"
100717969268SFam Zheng  DSOSUF=".dll"
100878e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
1009086d5f75SPaolo Bonzini  CFLAGS="-mthreads $CFLAGS"
1010b965e8c5SPaolo Bonzini  LIBS="-lwinmm -lws2_32 $LIBS"
101193b25869SJohn Snow  write_c_skeleton;
1012f7cf5d5bSStefan Weil  if compile_prog "" "-liberty" ; then
1013f7cf5d5bSStefan Weil    LIBS="-liberty $LIBS"
1014f7cf5d5bSStefan Weil  fi
1015c5ec15eaSStefan Weil  prefix="c:/Program Files/QEMU"
1016683035deSPaolo Bonzini  confsuffix=""
1017105fad6bSBishara AbuHattoum  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
10183457a3f8SJuan Quintelafi
10193457a3f8SJuan Quintela
1020487fefdbSAnthony Liguoriwerror=""
102185aa5189Sbellard
10227d13299dSbellardfor opt do
102389138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
10247d13299dSbellard  case "$opt" in
10252efc3265Sbellard  --help|-h) show_help=yes
10262efc3265Sbellard  ;;
102799123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
102899123e13SMike Frysinger  ;;
1029b1a550a0Spbrook  --prefix=*) prefix="$optarg"
10307d13299dSbellard  ;;
1031b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
103232ce6337Sbellard  ;;
1033ac0df51dSaliguori  --cross-prefix=*)
10347d13299dSbellard  ;;
1035ac0df51dSaliguori  --cc=*)
10367d13299dSbellard  ;;
1037b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
103883469015Sbellard  ;;
103983f73fceSTomoki Sekiyama  --cxx=*)
104083f73fceSTomoki Sekiyama  ;;
1041e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
1042e007dbecSMichael S. Tsirkin  ;;
10433c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
10443c4a4d0dSPeter Maydell  ;;
1045b1a550a0Spbrook  --make=*) make="$optarg"
10467d13299dSbellard  ;;
10476a882643Spbrook  --install=*) install="$optarg"
10486a882643Spbrook  ;;
10490a01d76fSMarc-André Lureau  --python=*) python="$optarg" ; explicit_python=yes
1050c886edfbSBlue Swirl  ;;
10512eb054c2SPeter Maydell  --sphinx-build=*) sphinx_build="$optarg"
10522eb054c2SPeter Maydell  ;;
1053a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
1054a5665051SPaolo Bonzini  ;;
1055a5665051SPaolo Bonzini  --meson=*) meson="$optarg"
1056a5665051SPaolo Bonzini  ;;
1057e2d8830eSBrad  --smbd=*) smbd="$optarg"
1058e2d8830eSBrad  ;;
1059e2a2ed06SJuan Quintela  --extra-cflags=*)
10607d13299dSbellard  ;;
106111cde1c8SBruno Dominguez  --extra-cxxflags=*)
106211cde1c8SBruno Dominguez  ;;
1063e2a2ed06SJuan Quintela  --extra-ldflags=*)
10647d13299dSbellard  ;;
10655bc62e01SGerd Hoffmann  --enable-debug-info)
10665bc62e01SGerd Hoffmann  ;;
10675bc62e01SGerd Hoffmann  --disable-debug-info)
10685bc62e01SGerd Hoffmann  ;;
1069d75402b5SAlex Bennée  --cross-cc-*)
1070d75402b5SAlex Bennée  ;;
107117969268SFam Zheng  --enable-modules)
107217969268SFam Zheng      modules="yes"
107317969268SFam Zheng  ;;
10743aa88b31SStefan Hajnoczi  --disable-modules)
10753aa88b31SStefan Hajnoczi      modules="no"
10763aa88b31SStefan Hajnoczi  ;;
1077bd83c861SChristian Ehrhardt  --disable-module-upgrades) module_upgrades="no"
1078bd83c861SChristian Ehrhardt  ;;
1079bd83c861SChristian Ehrhardt  --enable-module-upgrades) module_upgrades="yes"
1080bd83c861SChristian Ehrhardt  ;;
10812ff6b91eSJuan Quintela  --cpu=*)
10827d13299dSbellard  ;;
1083b1a550a0Spbrook  --target-list=*) target_list="$optarg"
1084447e133fSAlex Bennée                   if test "$target_list_exclude"; then
1085447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
1086447e133fSAlex Bennée                   fi
1087447e133fSAlex Bennée  ;;
1088447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
1089447e133fSAlex Bennée                   if test "$target_list"; then
1090447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
1091447e133fSAlex Bennée                   fi
1092de83cd02Sbellard  ;;
10935b808275SLluís Vilanova  --enable-trace-backends=*) trace_backends="$optarg"
10945b808275SLluís Vilanova  ;;
10955b808275SLluís Vilanova  # XXX: backwards compatibility
10965b808275SLluís Vilanova  --enable-trace-backend=*) trace_backends="$optarg"
109794a420b1SStefan Hajnoczi  ;;
109874242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
10999410b56cSPrerna Saxena  ;;
1100f3494749SPaolo Bonzini  --with-default-devices) default_devices="yes"
1101f3494749SPaolo Bonzini  ;;
1102f3494749SPaolo Bonzini  --without-default-devices) default_devices="no"
1103f3494749SPaolo Bonzini  ;;
11047d13299dSbellard  --enable-gprof) gprof="yes"
11057d13299dSbellard  ;;
11061d728c39SBlue Swirl  --enable-gcov) gcov="yes"
11071d728c39SBlue Swirl  ;;
110879427693SLoïc Minier  --static)
110979427693SLoïc Minier    static="yes"
111017884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
111143ce4dfeSbellard  ;;
11120b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
11130b24e75fSPaolo Bonzini  ;;
11140b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
11150b24e75fSPaolo Bonzini  ;;
11163aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
11173aa5d2beSAlon Levy  ;;
11188bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
11198bf188aaSMichael Tokarev  ;;
11200f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
11210f94d6daSAlon Levy  ;;
1122528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
11230b24e75fSPaolo Bonzini  ;;
1124023d3d67SEduardo Habkost  --with-confsuffix=*) confsuffix="$optarg"
1125023d3d67SEduardo Habkost  ;;
1126850da188SEduardo Habkost  --docdir=*) qemu_docdir="$optarg"
11270b24e75fSPaolo Bonzini  ;;
1128ca2fb938SAndre Przywara  --sysconfdir=*) sysconfdir="$optarg"
112907381cc1SAnthony Liguori  ;;
1130785c23aeSLuiz Capitulino  --localstatedir=*) local_statedir="$optarg"
1131785c23aeSLuiz Capitulino  ;;
11323d5eecabSGerd Hoffmann  --firmwarepath=*) firmwarepath="$optarg"
11333d5eecabSGerd Hoffmann  ;;
1134181ce1d0SOlaf Hering  --host=*|--build=*|\
1135181ce1d0SOlaf Hering  --disable-dependency-tracking|\
1136785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
1137023ddd74SMax Filippov  --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1138023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1139023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
1140023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
1141023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
1142023ddd74SMax Filippov    # lots of directory switches by default.
1143023ddd74SMax Filippov  ;;
114497a847bcSbellard  --disable-sdl) sdl="no"
114597a847bcSbellard  ;;
1146c4198157SJuan Quintela  --enable-sdl) sdl="yes"
1147c4198157SJuan Quintela  ;;
1148a442fe2fSDaniel P. Berrangé  --disable-sdl-image) sdl_image="no"
1149a442fe2fSDaniel P. Berrangé  ;;
1150a442fe2fSDaniel P. Berrangé  --enable-sdl-image) sdl_image="yes"
1151a442fe2fSDaniel P. Berrangé  ;;
11523556c233SPaolo Bonzini  --disable-qom-cast-debug) qom_cast_debug="no"
11533556c233SPaolo Bonzini  ;;
11543556c233SPaolo Bonzini  --enable-qom-cast-debug) qom_cast_debug="yes"
11553556c233SPaolo Bonzini  ;;
1156983eef5aSMeador Inge  --disable-virtfs) virtfs="no"
1157983eef5aSMeador Inge  ;;
1158983eef5aSMeador Inge  --enable-virtfs) virtfs="yes"
1159983eef5aSMeador Inge  ;;
1160fe8fc5aeSPaolo Bonzini  --disable-mpath) mpath="no"
1161fe8fc5aeSPaolo Bonzini  ;;
1162fe8fc5aeSPaolo Bonzini  --enable-mpath) mpath="yes"
1163fe8fc5aeSPaolo Bonzini  ;;
1164821601eaSJes Sorensen  --disable-vnc) vnc="no"
1165821601eaSJes Sorensen  ;;
1166821601eaSJes Sorensen  --enable-vnc) vnc="yes"
1167821601eaSJes Sorensen  ;;
11682f6a1ab0Sblueswir1  --oss-lib=*) oss_lib="$optarg"
11692f6a1ab0Sblueswir1  ;;
11700c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
11710c58ac1cSmalc  ;;
117289138857SStefan Weil  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1173b64ec4e4SFam Zheng  ;;
117489138857SStefan Weil  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1175eb852011SMarkus Armbruster  ;;
1176f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
1177f8393946Saurel32  ;;
1178f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
1179f8393946Saurel32  ;;
1180f3d08ee6SPaul Brook  --enable-debug)
1181f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
1182f3d08ee6SPaul Brook      debug_tcg="yes"
11831fcc6d42SPeter Xu      debug_mutex="yes"
1184f3d08ee6SPaul Brook      debug="yes"
1185f3d08ee6SPaul Brook      strip_opt="no"
1186b553a042SJohn Snow      fortify_source="no"
1187f3d08ee6SPaul Brook  ;;
1188247724cbSMarc-André Lureau  --enable-sanitizers) sanitizers="yes"
1189247724cbSMarc-André Lureau  ;;
1190247724cbSMarc-André Lureau  --disable-sanitizers) sanitizers="no"
1191247724cbSMarc-André Lureau  ;;
11920aebab04SLingfeng Yang  --enable-tsan) tsan="yes"
11930aebab04SLingfeng Yang  ;;
11940aebab04SLingfeng Yang  --disable-tsan) tsan="no"
11950aebab04SLingfeng Yang  ;;
119603b4fe7dSaliguori  --enable-sparse) sparse="yes"
119703b4fe7dSaliguori  ;;
119803b4fe7dSaliguori  --disable-sparse) sparse="no"
119903b4fe7dSaliguori  ;;
12001625af87Saliguori  --disable-strip) strip_opt="no"
12011625af87Saliguori  ;;
12022f9606b3Saliguori  --disable-vnc-sasl) vnc_sasl="no"
12032f9606b3Saliguori  ;;
1204ea784e3bSJuan Quintela  --enable-vnc-sasl) vnc_sasl="yes"
1205ea784e3bSJuan Quintela  ;;
12062f6f5c7aSCorentin Chary  --disable-vnc-jpeg) vnc_jpeg="no"
12072f6f5c7aSCorentin Chary  ;;
12082f6f5c7aSCorentin Chary  --enable-vnc-jpeg) vnc_jpeg="yes"
12092f6f5c7aSCorentin Chary  ;;
1210efe556adSCorentin Chary  --disable-vnc-png) vnc_png="no"
1211efe556adSCorentin Chary  ;;
1212efe556adSCorentin Chary  --enable-vnc-png) vnc_png="yes"
1213efe556adSCorentin Chary  ;;
1214443f1376Sbellard  --disable-slirp) slirp="no"
1215c20709aaSbellard  ;;
12167c57bdd8SMarc-André Lureau  --enable-slirp=git) slirp="git"
12177c57bdd8SMarc-André Lureau  ;;
1218675b9b53SMarc-André Lureau  --enable-slirp=system) slirp="system"
1219675b9b53SMarc-André Lureau  ;;
1220e0e6c8c0Saliguori  --disable-vde) vde="no"
12218a16d273Sths  ;;
1222dfb278bdSJuan Quintela  --enable-vde) vde="yes"
1223dfb278bdSJuan Quintela  ;;
122458952137SVincenzo Maffione  --disable-netmap) netmap="no"
122558952137SVincenzo Maffione  ;;
122658952137SVincenzo Maffione  --enable-netmap) netmap="yes"
122758952137SVincenzo Maffione  ;;
1228e37630caSaliguori  --disable-xen) xen="no"
1229e37630caSaliguori  ;;
1230fc321b4bSJuan Quintela  --enable-xen) xen="yes"
1231fc321b4bSJuan Quintela  ;;
1232eb6fda0fSAnthony PERARD  --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1233eb6fda0fSAnthony PERARD  ;;
1234eb6fda0fSAnthony PERARD  --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1235eb6fda0fSAnthony PERARD  ;;
12362e4d9fb1Saurel32  --disable-brlapi) brlapi="no"
12372e4d9fb1Saurel32  ;;
12384ffcedb6SJuan Quintela  --enable-brlapi) brlapi="yes"
12394ffcedb6SJuan Quintela  ;;
12407ba1e619Saliguori  --disable-kvm) kvm="no"
12417ba1e619Saliguori  ;;
1242b31a0277SJuan Quintela  --enable-kvm) kvm="yes"
1243b31a0277SJuan Quintela  ;;
1244b0cb0a66SVincent Palatin  --disable-hax) hax="no"
1245180fb750Szhanghailiang  ;;
1246b0cb0a66SVincent Palatin  --enable-hax) hax="yes"
1247180fb750Szhanghailiang  ;;
1248c97d6d2cSSergio Andres Gomez Del Real  --disable-hvf) hvf="no"
1249c97d6d2cSSergio Andres Gomez Del Real  ;;
1250c97d6d2cSSergio Andres Gomez Del Real  --enable-hvf) hvf="yes"
1251c97d6d2cSSergio Andres Gomez Del Real  ;;
1252d661d9a4SJustin Terry (VM)  --disable-whpx) whpx="no"
1253d661d9a4SJustin Terry (VM)  ;;
1254d661d9a4SJustin Terry (VM)  --enable-whpx) whpx="yes"
1255d661d9a4SJustin Terry (VM)  ;;
12569195b2c2SStefan Weil  --disable-tcg-interpreter) tcg_interpreter="no"
12579195b2c2SStefan Weil  ;;
12589195b2c2SStefan Weil  --enable-tcg-interpreter) tcg_interpreter="yes"
12599195b2c2SStefan Weil  ;;
126047e98658SCorey Bryant  --disable-cap-ng)  cap_ng="no"
126147e98658SCorey Bryant  ;;
126247e98658SCorey Bryant  --enable-cap-ng) cap_ng="yes"
126347e98658SCorey Bryant  ;;
1264b3f6ea7eSPaolo Bonzini  --disable-tcg) tcg="no"
1265b3f6ea7eSPaolo Bonzini  ;;
1266b3f6ea7eSPaolo Bonzini  --enable-tcg) tcg="yes"
1267b3f6ea7eSPaolo Bonzini  ;;
12685a22ab71SYang Zhong  --disable-malloc-trim) malloc_trim="no"
12695a22ab71SYang Zhong  ;;
12705a22ab71SYang Zhong  --enable-malloc-trim) malloc_trim="yes"
12715a22ab71SYang Zhong  ;;
1272cd4ec0b4SGerd Hoffmann  --disable-spice) spice="no"
1273cd4ec0b4SGerd Hoffmann  ;;
1274cd4ec0b4SGerd Hoffmann  --enable-spice) spice="yes"
1275cd4ec0b4SGerd Hoffmann  ;;
1276c589b249SRonnie Sahlberg  --disable-libiscsi) libiscsi="no"
1277c589b249SRonnie Sahlberg  ;;
1278c589b249SRonnie Sahlberg  --enable-libiscsi) libiscsi="yes"
1279c589b249SRonnie Sahlberg  ;;
12806542aa9cSPeter Lieven  --disable-libnfs) libnfs="no"
12816542aa9cSPeter Lieven  ;;
12826542aa9cSPeter Lieven  --enable-libnfs) libnfs="yes"
12836542aa9cSPeter Lieven  ;;
128405c2a3e7Sbellard  --enable-profiler) profiler="yes"
128505c2a3e7Sbellard  ;;
128614821030SPavel Borzenkov  --disable-cocoa) cocoa="no"
128714821030SPavel Borzenkov  ;;
1288c2de5c91Smalc  --enable-cocoa)
1289c2de5c91Smalc      cocoa="yes" ;
129089138857SStefan Weil      audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
12915b0753e0Sbellard  ;;
1292cad25d69Spbrook  --disable-system) softmmu="no"
12930a8e90f4Spbrook  ;;
1294cad25d69Spbrook  --enable-system) softmmu="yes"
12950a8e90f4Spbrook  ;;
12960953a80fSZachary Amsden  --disable-user)
12970953a80fSZachary Amsden      linux_user="no" ;
12980953a80fSZachary Amsden      bsd_user="no" ;
12990953a80fSZachary Amsden  ;;
13000953a80fSZachary Amsden  --enable-user) ;;
1301831b7825Sths  --disable-linux-user) linux_user="no"
13020a8e90f4Spbrook  ;;
1303831b7825Sths  --enable-linux-user) linux_user="yes"
1304831b7825Sths  ;;
130584778508Sblueswir1  --disable-bsd-user) bsd_user="no"
130684778508Sblueswir1  ;;
130784778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
130884778508Sblueswir1  ;;
130940d6444eSAvi Kivity  --enable-pie) pie="yes"
131034005a00SKirill A. Shutemov  ;;
131140d6444eSAvi Kivity  --disable-pie) pie="no"
131234005a00SKirill A. Shutemov  ;;
131385aa5189Sbellard  --enable-werror) werror="yes"
131485aa5189Sbellard  ;;
131585aa5189Sbellard  --disable-werror) werror="no"
131685aa5189Sbellard  ;;
131763678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
131863678e17SSteven Noonan  ;;
131963678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
132063678e17SSteven Noonan  ;;
13211e4f6065SDaniele Buono  --enable-safe-stack) safe_stack="yes"
13221e4f6065SDaniele Buono  ;;
13231e4f6065SDaniele Buono  --disable-safe-stack) safe_stack="no"
13241e4f6065SDaniele Buono  ;;
13254d3b6f6eSbalrog  --disable-curses) curses="no"
13264d3b6f6eSbalrog  ;;
1327c584a6d0SJuan Quintela  --enable-curses) curses="yes"
1328c584a6d0SJuan Quintela  ;;
1329e08bb301SSamuel Thibault  --disable-iconv) iconv="no"
1330e08bb301SSamuel Thibault  ;;
1331e08bb301SSamuel Thibault  --enable-iconv) iconv="yes"
1332e08bb301SSamuel Thibault  ;;
1333769ce76dSAlexander Graf  --disable-curl) curl="no"
1334769ce76dSAlexander Graf  ;;
1335788c8196SJuan Quintela  --enable-curl) curl="yes"
1336788c8196SJuan Quintela  ;;
13372df87df7SJuan Quintela  --disable-fdt) fdt="no"
13382df87df7SJuan Quintela  ;;
13392df87df7SJuan Quintela  --enable-fdt) fdt="yes"
13402df87df7SJuan Quintela  ;;
13415c6c3a6cSChristoph Hellwig  --disable-linux-aio) linux_aio="no"
13425c6c3a6cSChristoph Hellwig  ;;
13435c6c3a6cSChristoph Hellwig  --enable-linux-aio) linux_aio="yes"
13445c6c3a6cSChristoph Hellwig  ;;
1345c10dd856SAarushi Mehta  --disable-linux-io-uring) linux_io_uring="no"
1346c10dd856SAarushi Mehta  ;;
1347c10dd856SAarushi Mehta  --enable-linux-io-uring) linux_io_uring="yes"
1348c10dd856SAarushi Mehta  ;;
1349758e8e38SVenkateswararao Jujjuri (JV)  --disable-attr) attr="no"
1350758e8e38SVenkateswararao Jujjuri (JV)  ;;
1351758e8e38SVenkateswararao Jujjuri (JV)  --enable-attr) attr="yes"
1352758e8e38SVenkateswararao Jujjuri (JV)  ;;
1353a40161cbSPaolo Bonzini  --disable-membarrier) membarrier="no"
1354a40161cbSPaolo Bonzini  ;;
1355a40161cbSPaolo Bonzini  --enable-membarrier) membarrier="yes"
1356a40161cbSPaolo Bonzini  ;;
135777755340Sths  --disable-blobs) blobs="no"
135877755340Sths  ;;
13597e563bfbSThomas Huth  --with-pkgversion=*) pkgversion="$optarg"
13604a19f1ecSpbrook  ;;
1361519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
1362519175a2SAlex Barcelo  ;;
136370c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
136470c60c08SStefan Hajnoczi  ;;
136570c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
136670c60c08SStefan Hajnoczi  ;;
13677d992e4dSPeter Lieven  --enable-debug-stack-usage) debug_stack_usage="yes"
13687d992e4dSPeter Lieven  ;;
1369f0d92b56SLongpeng(Mike)  --enable-crypto-afalg) crypto_afalg="yes"
1370f0d92b56SLongpeng(Mike)  ;;
1371f0d92b56SLongpeng(Mike)  --disable-crypto-afalg) crypto_afalg="no"
1372f0d92b56SLongpeng(Mike)  ;;
1373a25dba17SJuan Quintela  --disable-docs) docs="no"
137470ec5dc0SAnthony Liguori  ;;
1375a25dba17SJuan Quintela  --enable-docs) docs="yes"
137683a3ab8bSJuan Quintela  ;;
1377d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
1378d5970055SMichael S. Tsirkin  ;;
1379d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
1380d5970055SMichael S. Tsirkin  ;;
1381042cea27SGonglei  --disable-vhost-crypto) vhost_crypto="no"
1382042cea27SGonglei  ;;
1383299e6f19SPaolo Bonzini  --enable-vhost-crypto) vhost_crypto="yes"
1384042cea27SGonglei  ;;
13855e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
13865e9be92dSNicholas Bellinger  ;;
13875e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
13885e9be92dSNicholas Bellinger  ;;
1389fc0b9b0eSStefan Hajnoczi  --disable-vhost-vsock) vhost_vsock="no"
1390fc0b9b0eSStefan Hajnoczi  ;;
1391fc0b9b0eSStefan Hajnoczi  --enable-vhost-vsock) vhost_vsock="yes"
1392fc0b9b0eSStefan Hajnoczi  ;;
139398fc1adaSDr. David Alan Gilbert  --disable-vhost-user-fs) vhost_user_fs="no"
139498fc1adaSDr. David Alan Gilbert  ;;
139598fc1adaSDr. David Alan Gilbert  --enable-vhost-user-fs) vhost_user_fs="yes"
139698fc1adaSDr. David Alan Gilbert  ;;
1397da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
139820ff075bSMichael Walle  ;;
1399da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
140020ff075bSMichael Walle  ;;
1401f27aaf4bSChristian Brunner  --disable-rbd) rbd="no"
1402f27aaf4bSChristian Brunner  ;;
1403f27aaf4bSChristian Brunner  --enable-rbd) rbd="yes"
1404f27aaf4bSChristian Brunner  ;;
14058c84cf11SSergei Trofimovich  --disable-xfsctl) xfs="no"
14068c84cf11SSergei Trofimovich  ;;
14078c84cf11SSergei Trofimovich  --enable-xfsctl) xfs="yes"
14088c84cf11SSergei Trofimovich  ;;
14097b02f544SMarc-André Lureau  --disable-smartcard) smartcard="no"
1410111a38b0SRobert Relyea  ;;
14117b02f544SMarc-André Lureau  --enable-smartcard) smartcard="yes"
1412111a38b0SRobert Relyea  ;;
14132b2325ffSGerd Hoffmann  --disable-libusb) libusb="no"
14142b2325ffSGerd Hoffmann  ;;
14152b2325ffSGerd Hoffmann  --enable-libusb) libusb="yes"
14162b2325ffSGerd Hoffmann  ;;
141769354a83SHans de Goede  --disable-usb-redir) usb_redir="no"
141869354a83SHans de Goede  ;;
141969354a83SHans de Goede  --enable-usb-redir) usb_redir="yes"
142069354a83SHans de Goede  ;;
14211ece9905SAlon Levy  --disable-zlib-test) zlib="no"
14221ece9905SAlon Levy  ;;
1423b25c9dffSStefan Weil  --disable-lzo) lzo="no"
1424b25c9dffSStefan Weil  ;;
1425607dacd0Sqiaonuohan  --enable-lzo) lzo="yes"
1426607dacd0Sqiaonuohan  ;;
1427b25c9dffSStefan Weil  --disable-snappy) snappy="no"
1428b25c9dffSStefan Weil  ;;
1429607dacd0Sqiaonuohan  --enable-snappy) snappy="yes"
1430607dacd0Sqiaonuohan  ;;
14316b383c08SPeter Wu  --disable-bzip2) bzip2="no"
14326b383c08SPeter Wu  ;;
14336b383c08SPeter Wu  --enable-bzip2) bzip2="yes"
14346b383c08SPeter Wu  ;;
143583bc1f97SJulio Faracco  --enable-lzfse) lzfse="yes"
143683bc1f97SJulio Faracco  ;;
143783bc1f97SJulio Faracco  --disable-lzfse) lzfse="no"
143883bc1f97SJulio Faracco  ;;
14393a678481SJuan Quintela  --disable-zstd) zstd="no"
14403a678481SJuan Quintela  ;;
14413a678481SJuan Quintela  --enable-zstd) zstd="yes"
14423a678481SJuan Quintela  ;;
1443d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1444d138cee9SMichael Roth  ;;
1445d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1446d138cee9SMichael Roth  ;;
14479dacf32dSYossi Hindin  --enable-guest-agent-msi) guest_agent_msi="yes"
14489dacf32dSYossi Hindin  ;;
14499dacf32dSYossi Hindin  --disable-guest-agent-msi) guest_agent_msi="no"
14509dacf32dSYossi Hindin  ;;
1451d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1452d9840e25STomoki Sekiyama  ;;
1453d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1454d9840e25STomoki Sekiyama  ;;
1455d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1456d9840e25STomoki Sekiyama  ;;
1457d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1458d9840e25STomoki Sekiyama  ;;
1459d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1460d9840e25STomoki Sekiyama  ;;
1461d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1462d9840e25STomoki Sekiyama  ;;
14634b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
14644b1c11fdSDaniel P. Berrange  ;;
14654b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
14664b1c11fdSDaniel P. Berrange  ;;
1467f794573eSEduardo Otubo  --enable-seccomp) seccomp="yes"
1468f794573eSEduardo Otubo  ;;
1469f794573eSEduardo Otubo  --disable-seccomp) seccomp="no"
1470f794573eSEduardo Otubo  ;;
1471eb100396SBharata B Rao  --disable-glusterfs) glusterfs="no"
1472eb100396SBharata B Rao  ;;
147386583a07SLiam Merwick  --disable-avx2) avx2_opt="no"
147486583a07SLiam Merwick  ;;
147586583a07SLiam Merwick  --enable-avx2) avx2_opt="yes"
147686583a07SLiam Merwick  ;;
14776b8cd447SRobert Hoo  --disable-avx512f) avx512f_opt="no"
14786b8cd447SRobert Hoo  ;;
14796b8cd447SRobert Hoo  --enable-avx512f) avx512f_opt="yes"
14806b8cd447SRobert Hoo  ;;
14816b8cd447SRobert Hoo
1482eb100396SBharata B Rao  --enable-glusterfs) glusterfs="yes"
1483eb100396SBharata B Rao  ;;
148452b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
148552b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1486583f6e7bSStefan Hajnoczi  ;;
1487cb6414dfSFam Zheng  --enable-vhdx|--disable-vhdx)
1488cb6414dfSFam Zheng      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1489cb6414dfSFam Zheng  ;;
1490315d3184SFam Zheng  --enable-uuid|--disable-uuid)
1491315d3184SFam Zheng      echo "$0: $opt is obsolete, UUID support is always built" >&2
1492315d3184SFam Zheng  ;;
1493a4ccabcfSAnthony Liguori  --disable-gtk) gtk="no"
1494a4ccabcfSAnthony Liguori  ;;
1495a4ccabcfSAnthony Liguori  --enable-gtk) gtk="yes"
1496a4ccabcfSAnthony Liguori  ;;
1497a1c5e949SDaniel P. Berrange  --tls-priority=*) tls_priority="$optarg"
1498a1c5e949SDaniel P. Berrange  ;;
1499ddbb0d09SDaniel P. Berrange  --disable-gnutls) gnutls="no"
1500ddbb0d09SDaniel P. Berrange  ;;
1501ddbb0d09SDaniel P. Berrange  --enable-gnutls) gnutls="yes"
1502ddbb0d09SDaniel P. Berrange  ;;
150391bfcdb0SDaniel P. Berrange  --disable-nettle) nettle="no"
150491bfcdb0SDaniel P. Berrange  ;;
150591bfcdb0SDaniel P. Berrange  --enable-nettle) nettle="yes"
150691bfcdb0SDaniel P. Berrange  ;;
150791bfcdb0SDaniel P. Berrange  --disable-gcrypt) gcrypt="no"
150891bfcdb0SDaniel P. Berrange  ;;
150991bfcdb0SDaniel P. Berrange  --enable-gcrypt) gcrypt="yes"
151091bfcdb0SDaniel P. Berrange  ;;
15118953caf3SDaniel P. Berrange  --disable-auth-pam) auth_pam="no"
15128953caf3SDaniel P. Berrange  ;;
15138953caf3SDaniel P. Berrange  --enable-auth-pam) auth_pam="yes"
15148953caf3SDaniel P. Berrange  ;;
15152da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
15162da776dbSMichael R. Hines  ;;
15172da776dbSMichael R. Hines  --disable-rdma) rdma="no"
15182da776dbSMichael R. Hines  ;;
151921ab34c9SMarcel Apfelbaum  --enable-pvrdma) pvrdma="yes"
152021ab34c9SMarcel Apfelbaum  ;;
152121ab34c9SMarcel Apfelbaum  --disable-pvrdma) pvrdma="no"
152221ab34c9SMarcel Apfelbaum  ;;
1523bbbf9bfbSStefan Weil  --disable-vte) vte="no"
1524bbbf9bfbSStefan Weil  ;;
1525bbbf9bfbSStefan Weil  --enable-vte) vte="yes"
1526bbbf9bfbSStefan Weil  ;;
15279d9e1521SGerd Hoffmann  --disable-virglrenderer) virglrenderer="no"
15289d9e1521SGerd Hoffmann  ;;
15299d9e1521SGerd Hoffmann  --enable-virglrenderer) virglrenderer="yes"
15309d9e1521SGerd Hoffmann  ;;
1531e91c793cSCole Robinson  --disable-tpm) tpm="no"
1532e91c793cSCole Robinson  ;;
1533ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1534ab214c29SStefan Berger  ;;
1535b10d49d7SPino Toscano  --disable-libssh) libssh="no"
15360a12ec87SRichard W.M. Jones  ;;
1537b10d49d7SPino Toscano  --enable-libssh) libssh="yes"
15380a12ec87SRichard W.M. Jones  ;;
1539ed1701c6SDr. David Alan Gilbert  --disable-live-block-migration) live_block_migration="no"
1540ed1701c6SDr. David Alan Gilbert  ;;
1541ed1701c6SDr. David Alan Gilbert  --enable-live-block-migration) live_block_migration="yes"
1542ed1701c6SDr. David Alan Gilbert  ;;
1543a99d57bbSWanlong Gao  --disable-numa) numa="no"
1544a99d57bbSWanlong Gao  ;;
1545a99d57bbSWanlong Gao  --enable-numa) numa="yes"
1546a99d57bbSWanlong Gao  ;;
1547ed279a06SKlim Kireev  --disable-libxml2) libxml2="no"
1548ed279a06SKlim Kireev  ;;
1549ed279a06SKlim Kireev  --enable-libxml2) libxml2="yes"
1550ed279a06SKlim Kireev  ;;
15512847b469SFam Zheng  --disable-tcmalloc) tcmalloc="no"
15522847b469SFam Zheng  ;;
15532847b469SFam Zheng  --enable-tcmalloc) tcmalloc="yes"
15542847b469SFam Zheng  ;;
15557b01cb97SAlexandre Derumier  --disable-jemalloc) jemalloc="no"
15567b01cb97SAlexandre Derumier  ;;
15577b01cb97SAlexandre Derumier  --enable-jemalloc) jemalloc="yes"
15587b01cb97SAlexandre Derumier  ;;
1559a6b1d4c0SChanglong Xie  --disable-replication) replication="no"
1560a6b1d4c0SChanglong Xie  ;;
1561a6b1d4c0SChanglong Xie  --enable-replication) replication="yes"
1562a6b1d4c0SChanglong Xie  ;;
15632f740136SJeff Cody  --disable-bochs) bochs="no"
15642f740136SJeff Cody  ;;
15652f740136SJeff Cody  --enable-bochs) bochs="yes"
15662f740136SJeff Cody  ;;
15672f740136SJeff Cody  --disable-cloop) cloop="no"
15682f740136SJeff Cody  ;;
15692f740136SJeff Cody  --enable-cloop) cloop="yes"
15702f740136SJeff Cody  ;;
15712f740136SJeff Cody  --disable-dmg) dmg="no"
15722f740136SJeff Cody  ;;
15732f740136SJeff Cody  --enable-dmg) dmg="yes"
15742f740136SJeff Cody  ;;
15752f740136SJeff Cody  --disable-qcow1) qcow1="no"
15762f740136SJeff Cody  ;;
15772f740136SJeff Cody  --enable-qcow1) qcow1="yes"
15782f740136SJeff Cody  ;;
15792f740136SJeff Cody  --disable-vdi) vdi="no"
15802f740136SJeff Cody  ;;
15812f740136SJeff Cody  --enable-vdi) vdi="yes"
15822f740136SJeff Cody  ;;
15832f740136SJeff Cody  --disable-vvfat) vvfat="no"
15842f740136SJeff Cody  ;;
15852f740136SJeff Cody  --enable-vvfat) vvfat="yes"
15862f740136SJeff Cody  ;;
15872f740136SJeff Cody  --disable-qed) qed="no"
15882f740136SJeff Cody  ;;
15892f740136SJeff Cody  --enable-qed) qed="yes"
15902f740136SJeff Cody  ;;
15912f740136SJeff Cody  --disable-parallels) parallels="no"
15922f740136SJeff Cody  ;;
15932f740136SJeff Cody  --enable-parallels) parallels="yes"
15942f740136SJeff Cody  ;;
15952f740136SJeff Cody  --disable-sheepdog) sheepdog="no"
15962f740136SJeff Cody  ;;
15972f740136SJeff Cody  --enable-sheepdog) sheepdog="yes"
15982f740136SJeff Cody  ;;
1599e6a74868SMarc-André Lureau  --disable-vhost-user) vhost_user="no"
1600e6a74868SMarc-André Lureau  ;;
1601299e6f19SPaolo Bonzini  --enable-vhost-user) vhost_user="yes"
1602299e6f19SPaolo Bonzini  ;;
1603108a6481SCindy Lu  --disable-vhost-vdpa) vhost_vdpa="no"
1604108a6481SCindy Lu  ;;
1605108a6481SCindy Lu  --enable-vhost-vdpa) vhost_vdpa="yes"
1606108a6481SCindy Lu  ;;
1607299e6f19SPaolo Bonzini  --disable-vhost-kernel) vhost_kernel="no"
1608299e6f19SPaolo Bonzini  ;;
1609299e6f19SPaolo Bonzini  --enable-vhost-kernel) vhost_kernel="yes"
1610e6a74868SMarc-André Lureau  ;;
16118ca80760SRichard Henderson  --disable-capstone) capstone="no"
16128ca80760SRichard Henderson  ;;
16138ca80760SRichard Henderson  --enable-capstone) capstone="yes"
16148ca80760SRichard Henderson  ;;
1615e219c499SRichard Henderson  --enable-capstone=git) capstone="git"
1616e219c499SRichard Henderson  ;;
1617e219c499SRichard Henderson  --enable-capstone=system) capstone="system"
1618e219c499SRichard Henderson  ;;
1619cc84d63aSDaniel P. Berrange  --with-git=*) git="$optarg"
1620cc84d63aSDaniel P. Berrange  ;;
1621f62bbee5SDaniel P. Berrange  --enable-git-update) git_update=yes
1622f62bbee5SDaniel P. Berrange  ;;
1623f62bbee5SDaniel P. Berrange  --disable-git-update) git_update=no
1624f62bbee5SDaniel P. Berrange  ;;
1625ba59fb77SPaolo Bonzini  --enable-debug-mutex) debug_mutex=yes
1626ba59fb77SPaolo Bonzini  ;;
1627ba59fb77SPaolo Bonzini  --disable-debug-mutex) debug_mutex=no
1628ba59fb77SPaolo Bonzini  ;;
162917824406SJunyan He  --enable-libpmem) libpmem=yes
163017824406SJunyan He  ;;
163117824406SJunyan He  --disable-libpmem) libpmem=no
163217824406SJunyan He  ;;
163375411919SJames Le Cuirot  --enable-xkbcommon) xkbcommon=yes
163475411919SJames Le Cuirot  ;;
163575411919SJames Le Cuirot  --disable-xkbcommon) xkbcommon=no
163675411919SJames Le Cuirot  ;;
163740e8c6f4SAlex Bennée  --enable-plugins) plugins="yes"
163840e8c6f4SAlex Bennée  ;;
163940e8c6f4SAlex Bennée  --disable-plugins) plugins="no"
164040e8c6f4SAlex Bennée  ;;
1641afc3a8f9SAlex Bennée  --enable-containers) use_containers="yes"
1642afc3a8f9SAlex Bennée  ;;
1643afc3a8f9SAlex Bennée  --disable-containers) use_containers="no"
1644afc3a8f9SAlex Bennée  ;;
1645adc28027SAlexander Bulekov  --enable-fuzzing) fuzzing=yes
1646adc28027SAlexander Bulekov  ;;
1647adc28027SAlexander Bulekov  --disable-fuzzing) fuzzing=no
1648adc28027SAlexander Bulekov  ;;
1649f48e590aSAlex Bennée  --gdb=*) gdb_bin="$optarg"
1650f48e590aSAlex Bennée  ;;
1651b767d257SMarek Marczykowski-Górecki  --enable-rng-none) rng_none=yes
1652b767d257SMarek Marczykowski-Górecki  ;;
1653b767d257SMarek Marczykowski-Górecki  --disable-rng-none) rng_none=no
1654b767d257SMarek Marczykowski-Górecki  ;;
165554e7aac0SAlexey Krasikov  --enable-keyring) secret_keyring="yes"
165654e7aac0SAlexey Krasikov  ;;
165754e7aac0SAlexey Krasikov  --disable-keyring) secret_keyring="no"
165854e7aac0SAlexey Krasikov  ;;
165921b2eca6SJingqi Liu  --enable-libdaxctl) libdaxctl=yes
166021b2eca6SJingqi Liu  ;;
166121b2eca6SJingqi Liu  --disable-libdaxctl) libdaxctl=no
166221b2eca6SJingqi Liu  ;;
16632d2ad6d0SFam Zheng  *)
16642d2ad6d0SFam Zheng      echo "ERROR: unknown option $opt"
16652d2ad6d0SFam Zheng      echo "Try '$0 --help' for more information"
16662d2ad6d0SFam Zheng      exit 1
16677f1559c6Sbalrog  ;;
16687d13299dSbellard  esac
16697d13299dSbellarddone
16707d13299dSbellard
167122a87800SMarc-André Lureaulibdir="${libdir:-$prefix/lib}"
167222a87800SMarc-André Lureaulibexecdir="${libexecdir:-$prefix/libexec}"
167322a87800SMarc-André Lureauincludedir="${includedir:-$prefix/include}"
167422a87800SMarc-André Lureau
167522a87800SMarc-André Lureauif test "$mingw32" = "yes" ; then
167622a87800SMarc-André Lureau    mandir="$prefix"
167722a87800SMarc-André Lureau    datadir="$prefix"
167822a87800SMarc-André Lureau    qemu_docdir="$prefix"
167922a87800SMarc-André Lureau    bindir="$prefix"
168022a87800SMarc-André Lureau    sysconfdir="$prefix"
168122a87800SMarc-André Lureau    local_statedir=
168222a87800SMarc-André Lureauelse
168322a87800SMarc-André Lureau    mandir="${mandir:-$prefix/share/man}"
168422a87800SMarc-André Lureau    datadir="${datadir:-$prefix/share}"
168522a87800SMarc-André Lureau    qemu_docdir="${qemu_docdir:-$prefix/share/doc/qemu}"
168622a87800SMarc-André Lureau    bindir="${bindir:-$prefix/bin}"
168722a87800SMarc-André Lureau    sysconfdir="${sysconfdir:-$prefix/etc}"
168822a87800SMarc-André Lureau    local_statedir="${local_statedir:-$prefix/var}"
168922a87800SMarc-André Lureaufi
169022a87800SMarc-André Lureau
169140293e58Sbellardcase "$cpu" in
1692e3608d66SRichard Henderson    ppc)
1693e3608d66SRichard Henderson           CPU_CFLAGS="-m32"
1694db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1695e3608d66SRichard Henderson           ;;
1696e3608d66SRichard Henderson    ppc64)
1697e3608d66SRichard Henderson           CPU_CFLAGS="-m64"
1698db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1699e3608d66SRichard Henderson           ;;
17009b9c37c3SRichard Henderson    sparc)
1701f1079bb8SRichard Henderson           CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1702db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
17033142255cSblueswir1           ;;
1704ed968ff1SJuan Quintela    sparc64)
170579f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1706db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
17073142255cSblueswir1           ;;
170876d83bdeSths    s390)
1709061cdd81SRichard Henderson           CPU_CFLAGS="-m31"
1710db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
171128d7cc49SRichard Henderson           ;;
171228d7cc49SRichard Henderson    s390x)
1713061cdd81SRichard Henderson           CPU_CFLAGS="-m64"
1714db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
171576d83bdeSths           ;;
171640293e58Sbellard    i386)
171779f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m32"
1718db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
171940293e58Sbellard           ;;
172040293e58Sbellard    x86_64)
17217ebee43eSRichard Henderson           # ??? Only extremely old AMD cpus do not have cmpxchg16b.
17227ebee43eSRichard Henderson           # If we truly care, we should simply detect this case at
17237ebee43eSRichard Henderson           # runtime and generate the fallback to serial emulation.
17247ebee43eSRichard Henderson           CPU_CFLAGS="-m64 -mcx16"
1725db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1726379f6698SPaul Brook           ;;
1727c72b26ecSRichard Henderson    x32)
1728c72b26ecSRichard Henderson           CPU_CFLAGS="-mx32"
1729db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1730c72b26ecSRichard Henderson           ;;
173130163d89SPeter Maydell    # No special flags required for other host CPUs
17323142255cSblueswir1esac
17333142255cSblueswir1
17342038f8c8SPaolo Bonzinieval "cross_cc_${cpu}=\$host_cc"
17352038f8c8SPaolo Bonzinicross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
173679f3b12fSPeter CrosthwaiteQEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
173779f3b12fSPeter Crosthwaite
1738affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly
1739affc88ccSPeter Maydell# support, even if we're using TCI.
1740affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then
1741affc88ccSPeter Maydell  bsd_user="no"
1742affc88ccSPeter Maydell  linux_user="no"
1743affc88ccSPeter Maydellfi
1744affc88ccSPeter Maydell
17451cf295beSPhilippe Mathieu-Daudéif [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
17461cf295beSPhilippe Mathieu-Daudé  tcg="no"
17471cf295beSPhilippe Mathieu-Daudéfi
17481cf295beSPhilippe Mathieu-Daudé
174960e0df25SPeter Maydelldefault_target_list=""
175060e0df25SPeter Maydell
17516e92f823SPeter Maydellmak_wilds=""
17526e92f823SPeter Maydell
175360e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
17546e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
175560e0df25SPeter Maydellfi
175660e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
17576e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
175860e0df25SPeter Maydellfi
175960e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
17606e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
176160e0df25SPeter Maydellfi
176260e0df25SPeter Maydell
1763447e133fSAlex Bennéeif test -z "$target_list_exclude"; then
17646e92f823SPeter Maydell    for config in $mak_wilds; do
17656e92f823SPeter Maydell        default_target_list="${default_target_list} $(basename "$config" .mak)"
17666e92f823SPeter Maydell    done
1767447e133fSAlex Bennéeelse
1768447e133fSAlex Bennée    exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1769447e133fSAlex Bennée    for config in $mak_wilds; do
1770447e133fSAlex Bennée        target="$(basename "$config" .mak)"
1771447e133fSAlex Bennée        exclude="no"
1772447e133fSAlex Bennée        for excl in $exclude_list; do
1773447e133fSAlex Bennée            if test "$excl" = "$target"; then
1774447e133fSAlex Bennée                exclude="yes"
1775447e133fSAlex Bennée                break;
1776447e133fSAlex Bennée            fi
1777447e133fSAlex Bennée        done
1778447e133fSAlex Bennée        if test "$exclude" = "no"; then
1779447e133fSAlex Bennée            default_target_list="${default_target_list} $target"
1780447e133fSAlex Bennée        fi
1781447e133fSAlex Bennée    done
1782447e133fSAlex Bennéefi
17836e92f823SPeter Maydell
1784c53eeaf7SStefan Hajnoczi# Enumerate public trace backends for --help output
178564a6047dSGreg Kurztrace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1786c53eeaf7SStefan Hajnoczi
1787af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1788af5db58eSpbrookcat << EOF
1789af5db58eSpbrook
1790af5db58eSpbrookUsage: configure [options]
1791af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1792af5db58eSpbrook
179308fb77edSStefan WeilStandard options:
179408fb77edSStefan Weil  --help                   print this message
179508fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
179608fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
179708fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
179808fb77edSStefan Weil  --target-list=LIST       set target list (default: build everything)
179908fb77edSStefan Weil$(echo Available targets: $default_target_list | \
180008fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
1801447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
180208fb77edSStefan Weil
180308fb77edSStefan WeilAdvanced options (experts only):
180408fb77edSStefan Weil  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
180508fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
180608fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
180708fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
180808fb77edSStefan Weil                           build time
180908fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
181008fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
181108fb77edSStefan Weil  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
181211cde1c8SBruno Dominguez  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
181308fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1814d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1815d422b2bcSAlex Bennée  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
181608fb77edSStefan Weil  --make=MAKE              use specified make [$make]
181708fb77edSStefan Weil  --install=INSTALL        use specified install [$install]
181808fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
18192eb054c2SPeter Maydell  --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1820a5665051SPaolo Bonzini  --meson=MESON            use specified meson [$meson]
182108fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1822db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
182308fb77edSStefan Weil  --static                 enable static build [$static]
182408fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
182508fb77edSStefan Weil  --datadir=PATH           install firmware in PATH$confsuffix
182608fb77edSStefan Weil  --docdir=PATH            install documentation in PATH$confsuffix
182708fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
182808fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
1829db1b5f13SThomas Huth  --libexecdir=PATH        install helper binaries in PATH
183008fb77edSStefan Weil  --sysconfdir=PATH        install config in PATH$confsuffix
183108fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
18323d5eecabSGerd Hoffmann  --firmwarepath=PATH      search PATH for firmware files
183313336606SRobert Foley  --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1834e26110cfSFam Zheng  --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1835db1b5f13SThomas Huth  --with-pkgversion=VERS   use specified string as sub-version of the package
183608fb77edSStefan Weil  --enable-debug           enable common debug build options
1837247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
18380aebab04SLingfeng Yang  --enable-tsan            enable thread sanitizer
183908fb77edSStefan Weil  --disable-strip          disable stripping binaries
184008fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
184163678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
184208fb77edSStefan Weil  --audio-drv-list=LIST    set audio drivers list:
184308fb77edSStefan Weil                           Available drivers: $audio_possible_drivers
184408fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
184508fb77edSStefan Weil  --block-drv-rw-whitelist=L
184608fb77edSStefan Weil                           set block driver read-write whitelist
184708fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
184808fb77edSStefan Weil  --block-drv-ro-whitelist=L
184908fb77edSStefan Weil                           set block driver read-only whitelist
185008fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
18515b808275SLluís Vilanova  --enable-trace-backends=B Set trace backend
1852c53eeaf7SStefan Hajnoczi                           Available backends: $trace_backend_list
185308fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
185408fb77edSStefan Weil                           Default:trace-<pid>
1855c23f23b9SMichael Tokarev  --disable-slirp          disable SLIRP userspace network connectivity
1856c23f23b9SMichael Tokarev  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
18575a22ab71SYang Zhong  --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1858c23f23b9SMichael Tokarev  --oss-lib                path to OSS library
1859c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
186008fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
186133c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
186208fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
1863c23f23b9SMichael Tokarev  --disable-blobs          disable installing provided firmware blobs
1864c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1865c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1866a1c5e949SDaniel P. Berrange  --tls-priority           default TLS protocol/cipher priority string
1867c12d66aaSLin Ma  --enable-gprof           QEMU profiling with gprof
1868c12d66aaSLin Ma  --enable-profiler        profiler support
1869c12d66aaSLin Ma  --enable-debug-stack-usage
1870c12d66aaSLin Ma                           track the maximum stack usage of stacks created by qemu_alloc_stack
187140e8c6f4SAlex Bennée  --enable-plugins
187240e8c6f4SAlex Bennée                           enable plugins via shared library loading
1873afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
1874f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
1875c23f23b9SMichael Tokarev
1876c23f23b9SMichael TokarevOptional features, enabled with --enable-FEATURE and
1877c23f23b9SMichael Tokarevdisabled with --disable-FEATURE, default is enabled if available:
1878c23f23b9SMichael Tokarev
1879c23f23b9SMichael Tokarev  system          all system emulation targets
1880c23f23b9SMichael Tokarev  user            supported user emulation targets
1881c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1882c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1883c23f23b9SMichael Tokarev  docs            build documentation
1884c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1885c23f23b9SMichael Tokarev  guest-agent-msi build guest agent Windows MSI installation package
1886c23f23b9SMichael Tokarev  pie             Position Independent Executables
188721e709aaSMarc-André Lureau  modules         modules support (non-Windows)
1888bd83c861SChristian Ehrhardt  module-upgrades try to load modules from alternate paths for upgrades
1889c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1890c23f23b9SMichael Tokarev  debug-info      debugging information
1891c23f23b9SMichael Tokarev  sparse          sparse checker
18921e4f6065SDaniele Buono  safe-stack      SafeStack Stack Smash Protection. Depends on
18931e4f6065SDaniele Buono                  clang/llvm >= 3.7 and requires coroutine backend ucontext.
1894c23f23b9SMichael Tokarev
1895ddbb0d09SDaniel P. Berrange  gnutls          GNUTLS cryptography support
189691bfcdb0SDaniel P. Berrange  nettle          nettle cryptography support
189791bfcdb0SDaniel P. Berrange  gcrypt          libgcrypt cryptography support
18988953caf3SDaniel P. Berrange  auth-pam        PAM access control
1899c23f23b9SMichael Tokarev  sdl             SDL UI
190004c6e16fSMarkus Armbruster  sdl-image       SDL Image support for icons
1901c23f23b9SMichael Tokarev  gtk             gtk UI
1902c23f23b9SMichael Tokarev  vte             vte support for the gtk UI
1903c23f23b9SMichael Tokarev  curses          curses UI
1904e08bb301SSamuel Thibault  iconv           font glyph conversion support
1905c23f23b9SMichael Tokarev  vnc             VNC UI support
1906c23f23b9SMichael Tokarev  vnc-sasl        SASL encryption for VNC server
1907c23f23b9SMichael Tokarev  vnc-jpeg        JPEG lossy compression for VNC server
1908c23f23b9SMichael Tokarev  vnc-png         PNG compression for VNC server
1909c23f23b9SMichael Tokarev  cocoa           Cocoa UI (Mac OS X only)
1910c23f23b9SMichael Tokarev  virtfs          VirtFS
1911fe8fc5aeSPaolo Bonzini  mpath           Multipath persistent reservation passthrough
1912c23f23b9SMichael Tokarev  xen             xen backend driver support
191370c292afSAnthony PERARD  xen-pci-passthrough    PCI passthrough support for Xen
1914c23f23b9SMichael Tokarev  brlapi          BrlAPI (Braile)
1915c23f23b9SMichael Tokarev  curl            curl connectivity
1916a40161cbSPaolo Bonzini  membarrier      membarrier system call (for Linux 4.14+ or Windows)
1917c23f23b9SMichael Tokarev  fdt             fdt device tree
1918c23f23b9SMichael Tokarev  kvm             KVM acceleration support
1919b0cb0a66SVincent Palatin  hax             HAX acceleration support
1920c97d6d2cSSergio Andres Gomez Del Real  hvf             Hypervisor.framework acceleration support
1921d661d9a4SJustin Terry (VM)  whpx            Windows Hypervisor Platform acceleration support
192221ab34c9SMarcel Apfelbaum  rdma            Enable RDMA-based migration
192321ab34c9SMarcel Apfelbaum  pvrdma          Enable PVRDMA support
1924c23f23b9SMichael Tokarev  vde             support for vde network
1925c23f23b9SMichael Tokarev  netmap          support for netmap network
1926c23f23b9SMichael Tokarev  linux-aio       Linux AIO support
1927c10dd856SAarushi Mehta  linux-io-uring  Linux io_uring support
1928c23f23b9SMichael Tokarev  cap-ng          libcap-ng support
1929c23f23b9SMichael Tokarev  attr            attr and xattr support
1930299e6f19SPaolo Bonzini  vhost-net       vhost-net kernel acceleration support
1931299e6f19SPaolo Bonzini  vhost-vsock     virtio sockets device support
1932299e6f19SPaolo Bonzini  vhost-scsi      vhost-scsi kernel target support
1933299e6f19SPaolo Bonzini  vhost-crypto    vhost-user-crypto backend support
1934299e6f19SPaolo Bonzini  vhost-kernel    vhost kernel backend support
1935299e6f19SPaolo Bonzini  vhost-user      vhost-user backend support
1936108a6481SCindy Lu  vhost-vdpa      vhost-vdpa kernel backend support
1937c23f23b9SMichael Tokarev  spice           spice
1938c23f23b9SMichael Tokarev  rbd             rados block device (rbd)
1939c23f23b9SMichael Tokarev  libiscsi        iscsi support
1940c23f23b9SMichael Tokarev  libnfs          nfs support
19417b02f544SMarc-André Lureau  smartcard       smartcard support (libcacard)
1942c23f23b9SMichael Tokarev  libusb          libusb (for usb passthrough)
1943ed1701c6SDr. David Alan Gilbert  live-block-migration   Block migration in the main migration stream
1944c23f23b9SMichael Tokarev  usb-redir       usb network redirection support
1945c23f23b9SMichael Tokarev  lzo             support of lzo compression library
1946c23f23b9SMichael Tokarev  snappy          support of snappy compression library
1947c23f23b9SMichael Tokarev  bzip2           support of bzip2 compression library
1948c23f23b9SMichael Tokarev                  (for reading bzip2-compressed dmg images)
194983bc1f97SJulio Faracco  lzfse           support of lzfse compression library
195083bc1f97SJulio Faracco                  (for reading lzfse-compressed dmg images)
19513a678481SJuan Quintela  zstd            support for zstd compression library
1952d298ac10SDenis Plotnikov                  (for migration compression and qcow2 cluster compression)
1953c23f23b9SMichael Tokarev  seccomp         seccomp support
1954c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1955c23f23b9SMichael Tokarev  glusterfs       GlusterFS backend
1956c23f23b9SMichael Tokarev  tpm             TPM support
1957b10d49d7SPino Toscano  libssh          ssh block device support
1958c23f23b9SMichael Tokarev  numa            libnuma support
1959ed279a06SKlim Kireev  libxml2         for Parallels image format
1960c23f23b9SMichael Tokarev  tcmalloc        tcmalloc support
19617b01cb97SAlexandre Derumier  jemalloc        jemalloc support
196286583a07SLiam Merwick  avx2            AVX2 optimization support
19636b8cd447SRobert Hoo  avx512f         AVX512F optimization support
1964a6b1d4c0SChanglong Xie  replication     replication support
1965c12d66aaSLin Ma  opengl          opengl support
1966c12d66aaSLin Ma  virglrenderer   virgl rendering support
1967c12d66aaSLin Ma  xfsctl          xfsctl support
1968c12d66aaSLin Ma  qom-cast-debug  cast debugging support
19698de73fa8SCleber Rosa  tools           build qemu-io, qemu-nbd and qemu-img tools
19702f740136SJeff Cody  bochs           bochs image format support
19712f740136SJeff Cody  cloop           cloop image format support
19722f740136SJeff Cody  dmg             dmg image format support
19732f740136SJeff Cody  qcow1           qcow v1 image format support
19742f740136SJeff Cody  vdi             vdi image format support
19752f740136SJeff Cody  vvfat           vvfat image format support
19762f740136SJeff Cody  qed             qed image format support
19772f740136SJeff Cody  parallels       parallels image format support
19782f740136SJeff Cody  sheepdog        sheepdog block driver support
1979f0d92b56SLongpeng(Mike)  crypto-afalg    Linux AF_ALG crypto backend driver
19808ca80760SRichard Henderson  capstone        capstone disassembler support
1981ba59fb77SPaolo Bonzini  debug-mutex     mutex debugging support
198217824406SJunyan He  libpmem         libpmem support
198375411919SJames Le Cuirot  xkbcommon       xkbcommon support
1984b767d257SMarek Marczykowski-Górecki  rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
198521b2eca6SJingqi Liu  libdaxctl       libdaxctl support
198608fb77edSStefan Weil
198708fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1988af5db58eSpbrookEOF
19892d2ad6d0SFam Zhengexit 0
1990af5db58eSpbrookfi
1991af5db58eSpbrook
19929c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
1993bb768f71SThomas Huthrm -f */config-devices.mak.d
19949c790242SThomas Huth
1995faf44142SDaniel P. Berrangéif test -z "$python"
1996faf44142SDaniel P. Berrangéthen
1997c53eeaf7SStefan Hajnoczi    error_exit "Python not found. Use --python=/path/to/python"
1998c53eeaf7SStefan Hajnoczifi
1999c53eeaf7SStefan Hajnoczi
2000c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit
2001c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value.
2002ddf90699SEduardo Habkostif ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
2003ddf90699SEduardo Habkost  error_exit "Cannot use '$python', Python >= 3.5 is required." \
2004c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
2005c53eeaf7SStefan Hajnoczifi
2006c53eeaf7SStefan Hajnoczi
2007755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it
2008406ab2f3SCleber 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)
2009755ee70fSCleber Rosa
2010c53eeaf7SStefan Hajnoczi# Suppress writing compiled files
2011c53eeaf7SStefan Hajnoczipython="$python -B"
2012c53eeaf7SStefan Hajnoczi
20130a01d76fSMarc-André Lureauif test -z "$meson"; then
20140a01d76fSMarc-André Lureau    if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.0; then
20150a01d76fSMarc-André Lureau        meson=meson
20160a01d76fSMarc-André Lureau    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
20170a01d76fSMarc-André Lureau        meson=git
20180a01d76fSMarc-André Lureau    elif test -e "${source_path}/meson/meson.py" ; then
20190a01d76fSMarc-André Lureau        meson=internal
20200a01d76fSMarc-André Lureau    else
20210a01d76fSMarc-André Lureau        if test "$explicit_python" = yes; then
20220a01d76fSMarc-André Lureau            error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
20230a01d76fSMarc-André Lureau        else
2024a5665051SPaolo Bonzini            error_exit "Meson not found.  Use --meson=/path/to/meson"
2025a5665051SPaolo Bonzini        fi
20260a01d76fSMarc-André Lureau    fi
20270a01d76fSMarc-André Lureauelse
20280a01d76fSMarc-André Lureau    # Meson uses its own Python interpreter to invoke other Python scripts,
20290a01d76fSMarc-André Lureau    # but the user wants to use the one they specified with --python.
20300a01d76fSMarc-André Lureau    #
20310a01d76fSMarc-André Lureau    # We do not want to override the distro Python interpreter (and sometimes
20320a01d76fSMarc-André Lureau    # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
20330a01d76fSMarc-André Lureau    # just require --meson=git|internal together with --python.
20340a01d76fSMarc-André Lureau    if test "$explicit_python" = yes; then
20350a01d76fSMarc-André Lureau        case "$meson" in
20360a01d76fSMarc-André Lureau            git | internal) ;;
20370a01d76fSMarc-André Lureau            *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
20380a01d76fSMarc-André Lureau        esac
20390a01d76fSMarc-André Lureau    fi
20400a01d76fSMarc-André Lureaufi
2041a5665051SPaolo Bonzini
20420a01d76fSMarc-André Lureauif test "$meson" = git; then
20430a01d76fSMarc-André Lureau    git_submodules="${git_submodules} meson"
20440a01d76fSMarc-André Lureaufi
20450a01d76fSMarc-André Lureauif test "$git_update" = yes; then
20460a01d76fSMarc-André Lureau    (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
20470a01d76fSMarc-André Lureaufi
20480a01d76fSMarc-André Lureau
20490a01d76fSMarc-André Lureaucase "$meson" in
20500a01d76fSMarc-André Lureau    git | internal)
2051a5665051SPaolo Bonzini        if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then
2052a5665051SPaolo Bonzini            error_exit "Python setuptools not found"
2053a5665051SPaolo Bonzini        fi
20540a01d76fSMarc-André Lureau        meson="$python ${source_path}/meson/meson.py"
20550a01d76fSMarc-André Lureau        ;;
20560a01d76fSMarc-André Lureau    *) meson=$(command -v meson) ;;
20570a01d76fSMarc-André Lureauesac
20580a01d76fSMarc-André Lureau
2059a5665051SPaolo Bonzini
20609aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
20619aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
20629aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
20639aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
20649aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
20659aae6e54SDaniel Henrique Barbozaif compile_object ; then
20669aae6e54SDaniel Henrique Barboza  : C compiler works ok
20679aae6e54SDaniel Henrique Barbozaelse
20689aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
20699aae6e54SDaniel Henrique Barbozafi
20709aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
20719aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
20729aae6e54SDaniel Henrique Barbozafi
20739aae6e54SDaniel Henrique Barboza
2074359bc95dSPeter Maydell# Now we have handled --enable-tcg-interpreter and know we're not just
2075359bc95dSPeter Maydell# printing the help message, bail out if the host CPU isn't supported.
2076359bc95dSPeter Maydellif test "$ARCH" = "unknown"; then
2077359bc95dSPeter Maydell    if test "$tcg_interpreter" = "yes" ; then
2078359bc95dSPeter Maydell        echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2079359bc95dSPeter Maydell    else
208076ad07a4SPeter Maydell        error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2081359bc95dSPeter Maydell    fi
2082359bc95dSPeter Maydellfi
2083359bc95dSPeter Maydell
20849c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
20859c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
20869c83ffd8SPeter Maydellif test -z "$werror" ; then
2087fd73745dSAlexey Kardashevskiy    if test -e "$source_path/.git" && \
2088e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
20899c83ffd8SPeter Maydell        werror="yes"
20909c83ffd8SPeter Maydell    else
20919c83ffd8SPeter Maydell        werror="no"
20929c83ffd8SPeter Maydell    fi
20939c83ffd8SPeter Maydellfi
20949c83ffd8SPeter Maydell
2095fb59dabdSPeter Maydellif test "$bogus_os" = "yes"; then
2096fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
2097fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
2098fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
2099fb59dabdSPeter Maydell    # host OS we should stop now.
2100951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2101fb59dabdSPeter Maydellfi
2102fb59dabdSPeter Maydell
2103efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
2104efc6c070SThomas Huthcat > $TMPC << EOF
2105efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
2106efc6c070SThomas Huth# ifdef __apple_build_version__
2107efc6c070SThomas Huth#  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2108efc6c070SThomas Huth#   error You need at least XCode Clang v5.1 to compile QEMU
2109efc6c070SThomas Huth#  endif
2110efc6c070SThomas Huth# else
2111efc6c070SThomas Huth#  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2112efc6c070SThomas Huth#   error You need at least Clang v3.4 to compile QEMU
2113efc6c070SThomas Huth#  endif
2114efc6c070SThomas Huth# endif
2115efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2116efc6c070SThomas Huth# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2117efc6c070SThomas Huth#  error You need at least GCC v4.8 to compile QEMU
2118efc6c070SThomas Huth# endif
2119efc6c070SThomas Huth#else
2120efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
2121efc6c070SThomas Huth#endif
2122efc6c070SThomas Huthint main (void) { return 0; }
2123efc6c070SThomas HuthEOF
2124efc6c070SThomas Huthif ! compile_prog "" "" ; then
2125efc6c070SThomas Huth    error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2126efc6c070SThomas Huthfi
2127efc6c070SThomas Huth
212800849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately.
212900849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second.
213000849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all
213100849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would
213200849b92SRichard Henderson# just silently disable some features, so it's too error prone.
213300849b92SRichard Henderson
213400849b92SRichard Hendersonwarn_flags=
213500849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration
213600849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition
213700849b92SRichard Hendersonadd_to warn_flags -Wtype-limits
213800849b92SRichard Hendersonadd_to warn_flags -Wformat-security
213900849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k
214000849b92SRichard Hendersonadd_to warn_flags -Winit-self
214100849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers
214200849b92SRichard Hendersonadd_to warn_flags -Wempty-body
214300849b92SRichard Hendersonadd_to warn_flags -Wnested-externs
214400849b92SRichard Hendersonadd_to warn_flags -Wendif-labels
214500849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined
214600849b92SRichard Henderson
214700849b92SRichard Hendersonnowarn_flags=
214800849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides
214900849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs
215000849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value
215100849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int
215200849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition
2153aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare
2154bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi
215500849b92SRichard Henderson
215600849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags"
215793b25869SJohn Snow
215893b25869SJohn Snowcc_has_warning_flag() {
215993b25869SJohn Snow    write_c_skeleton;
216093b25869SJohn Snow
2161a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
2162a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
2163a1d29d6cSPeter Maydell    # warning options).
216493b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
216593b25869SJohn Snow    compile_prog "-Werror $optflag" ""
216693b25869SJohn Snow}
216793b25869SJohn Snow
216893b25869SJohn Snowfor flag in $gcc_flags; do
216993b25869SJohn Snow    if cc_has_warning_flag $flag ; then
21708d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
21718d05095cSPaolo Bonzini    fi
21728d05095cSPaolo Bonzinidone
21738d05095cSPaolo Bonzini
217463678e17SSteven Noonanif test "$stack_protector" != "no"; then
2175fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
2176fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
2177fccd35a0SRodrigo Rebello{
2178fccd35a0SRodrigo Rebello    char arr[64], *p = arr, *c = argv[0];
2179fccd35a0SRodrigo Rebello    while (*c) {
2180fccd35a0SRodrigo Rebello        *p++ = *c++;
2181fccd35a0SRodrigo Rebello    }
2182fccd35a0SRodrigo Rebello    return 0;
2183fccd35a0SRodrigo Rebello}
2184fccd35a0SRodrigo RebelloEOF
218563678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
21863b463a3fSMiroslav Rezanina  sp_on=0
218763678e17SSteven Noonan  for flag in $gcc_flags; do
2188590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
2189590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
2190086d5f75SPaolo Bonzini    if compile_object "-Werror $flag" &&
2191590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
219263678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2193db5adeaaSPaolo Bonzini      QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
21943b463a3fSMiroslav Rezanina      sp_on=1
219563678e17SSteven Noonan      break
219663678e17SSteven Noonan    fi
219763678e17SSteven Noonan  done
21983b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
21993b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
22003b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
22013b463a3fSMiroslav Rezanina    fi
22023b463a3fSMiroslav Rezanina  fi
220337746c5eSMarc-André Lureaufi
220437746c5eSMarc-André Lureau
220520bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for
220620bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}.
220720bc94a2SPaolo Bonzinicat > $TMPC << EOF
220820bc94a2SPaolo Bonzinistruct {
220920bc94a2SPaolo Bonzini  int a[2];
221020bc94a2SPaolo Bonzini} x = {0};
221120bc94a2SPaolo BonziniEOF
221220bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then
221320bc94a2SPaolo Bonzini  :
221420bc94a2SPaolo Bonzinielse
221520bc94a2SPaolo Bonzini  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
221620bc94a2SPaolo Bonzinifi
221720bc94a2SPaolo Bonzini
221821e709aaSMarc-André Lureau# Our module code doesn't support Windows
221921e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then
222021e709aaSMarc-André Lureau  error_exit "Modules are not available for Windows"
222121e709aaSMarc-André Lureaufi
222221e709aaSMarc-André Lureau
2223bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled
2224bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2225bd83c861SChristian Ehrhardt  error_exit "Can't enable module-upgrades as Modules are not enabled"
2226bd83c861SChristian Ehrhardtfi
2227bd83c861SChristian Ehrhardt
2228d376e9deSThomas Huth# Static linking is not possible with modules or PIE
222940d6444eSAvi Kivityif test "$static" = "yes" ; then
2230aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
2231aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
2232aa0d1f44SPaolo Bonzini  fi
223340d6444eSAvi Kivityfi
223440d6444eSAvi Kivity
2235768b7855SEmilio G. Cota# Unconditional check for compiler __thread support
2236768b7855SEmilio G. Cota  cat > $TMPC << EOF
2237768b7855SEmilio G. Cotastatic __thread int tls_var;
2238768b7855SEmilio G. Cotaint main(void) { return tls_var; }
2239768b7855SEmilio G. CotaEOF
2240768b7855SEmilio G. Cota
2241768b7855SEmilio G. Cotaif ! compile_prog "-Werror" "" ; then
2242768b7855SEmilio G. Cota    error_exit "Your compiler does not support the __thread specifier for " \
2243768b7855SEmilio G. Cota	"Thread-Local Storage (TLS). Please upgrade to a version that does."
2244768b7855SEmilio G. Cotafi
2245768b7855SEmilio G. Cota
224640d6444eSAvi Kivitycat > $TMPC << EOF
224721d4a791SAvi Kivity
224821d4a791SAvi Kivity#ifdef __linux__
224921d4a791SAvi Kivity#  define THREAD __thread
225021d4a791SAvi Kivity#else
225121d4a791SAvi Kivity#  define THREAD
225221d4a791SAvi Kivity#endif
225321d4a791SAvi Kivitystatic THREAD int tls_var;
225421d4a791SAvi Kivityint main(void) { return tls_var; }
225540d6444eSAvi KivityEOF
2256b2634124SRichard Henderson
2257b2634124SRichard Henderson# Check we support --no-pie first; we will need this for building ROMs.
2258412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then
2259412aeacdSAlex Bennée  CFLAGS_NOPIE="-fno-pie"
2260b2634124SRichard Henderson  LDFLAGS_NOPIE="-no-pie"
2261412aeacdSAlex Bennéefi
2262412aeacdSAlex Bennée
226312781462SRichard Hendersonif test "$static" = "yes"; then
2264eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2265086d5f75SPaolo Bonzini    CFLAGS="-fPIE -DPIE $CFLAGS"
226612781462SRichard Henderson    QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
226712781462SRichard Henderson    pie="yes"
226812781462SRichard Henderson  elif test "$pie" = "yes"; then
226912781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
227012781462SRichard Henderson  else
227112781462SRichard Henderson    QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
227212781462SRichard Henderson    pie="no"
227312781462SRichard Henderson  fi
227412781462SRichard Hendersonelif test "$pie" = "no"; then
2275086d5f75SPaolo Bonzini  CFLAGS="$CFLAGS_NOPIE $CFLAGS"
2276086d5f75SPaolo Bonzini  LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
2277eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2278086d5f75SPaolo Bonzini  CFLAGS="-fPIE -DPIE $CFLAGS"
2279086d5f75SPaolo Bonzini  LDFLAGS="-pie $LDFLAGS"
228040d6444eSAvi Kivity  pie="yes"
22812c674109SRichard Hendersonelif test "$pie" = "yes"; then
228276ad07a4SPeter Maydell  error_exit "PIE not available due to missing toolchain support"
228340d6444eSAvi Kivityelse
228440d6444eSAvi Kivity  echo "Disabling PIE due to missing toolchain support"
228540d6444eSAvi Kivity  pie="no"
228640d6444eSAvi Kivityfi
228740d6444eSAvi Kivity
2288e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2289e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too.
2290e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2291e6cbd751SRichard Henderson  QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2292e6cbd751SRichard Hendersonfi
2293e6cbd751SRichard Henderson
229409dada40SPaolo Bonzini##########################################
229509dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
229609dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
229709dada40SPaolo Bonzini# specification is necessary
229809dada40SPaolo Bonzini
229909dada40SPaolo Bonziniif test "$cpu" = "i386"; then
230009dada40SPaolo Bonzini  cat > $TMPC << EOF
230109dada40SPaolo Bonzinistatic int sfaa(int *ptr)
230209dada40SPaolo Bonzini{
230309dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
230409dada40SPaolo Bonzini}
230509dada40SPaolo Bonzini
230609dada40SPaolo Bonziniint main(void)
230709dada40SPaolo Bonzini{
230809dada40SPaolo Bonzini  int val = 42;
23091405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
231009dada40SPaolo Bonzini  sfaa(&val);
231109dada40SPaolo Bonzini  return val;
231209dada40SPaolo Bonzini}
231309dada40SPaolo BonziniEOF
231409dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
231509dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
231609dada40SPaolo Bonzini  fi
231709dada40SPaolo Bonzinifi
231809dada40SPaolo Bonzini
231909dada40SPaolo Bonzini#########################################
2320ec530c81Sbellard# Solaris specific configure tool chain decisions
232109dada40SPaolo Bonzini
2322ec530c81Sbellardif test "$solaris" = "yes" ; then
23236792aa11SLoïc Minier  if has $install; then
23246792aa11SLoïc Minier    :
23256792aa11SLoïc Minier  else
232676ad07a4SPeter Maydell    error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
232776ad07a4SPeter Maydell        "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
232876ad07a4SPeter Maydell        "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2329ec530c81Sbellard  fi
233089138857SStefan Weil  if test "$(path_of $install)" = "/usr/sbin/install" ; then
233176ad07a4SPeter Maydell    error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
233276ad07a4SPeter Maydell        "try ginstall from the GNU fileutils available from www.blastwave.org" \
233376ad07a4SPeter Maydell        "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2334ec530c81Sbellard  fi
23356792aa11SLoïc Minier  if has ar; then
23366792aa11SLoïc Minier    :
23376792aa11SLoïc Minier  else
2338ec530c81Sbellard    if test -f /usr/ccs/bin/ar ; then
233976ad07a4SPeter Maydell      error_exit "No path includes ar" \
234076ad07a4SPeter Maydell          "Add /usr/ccs/bin to your path and rerun configure"
2341ec530c81Sbellard    fi
234276ad07a4SPeter Maydell    error_exit "No path includes ar"
2343ec530c81Sbellard  fi
2344ec530c81Sbellardfi
2345ec530c81Sbellard
2346afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
2347d880a3baSPaolo Bonzini    for target in $default_target_list; do
2348d880a3baSPaolo Bonzini        supported_target $target 2>/dev/null && \
2349d880a3baSPaolo Bonzini            target_list="$target_list $target"
2350d880a3baSPaolo Bonzini    done
2351d880a3baSPaolo Bonzini    target_list="${target_list# }"
2352121afa9eSAnthony Liguorielse
235389138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2354d880a3baSPaolo Bonzini    for target in $target_list; do
235525b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
235625b48338SPeter Maydell        # friendly error message than if we let it fall through.
235725b48338SPeter Maydell        case " $default_target_list " in
235825b48338SPeter Maydell            *" $target "*)
235925b48338SPeter Maydell                ;;
236025b48338SPeter Maydell            *)
236125b48338SPeter Maydell                error_exit "Unknown target name '$target'"
236225b48338SPeter Maydell                ;;
236325b48338SPeter Maydell        esac
2364d880a3baSPaolo Bonzini        supported_target $target || exit 1
236525b48338SPeter Maydell    done
2366d880a3baSPaolo Bonzinifi
236725b48338SPeter Maydell
2368f55fe278SPaolo Bonzini# see if system emulation was really requested
2369f55fe278SPaolo Bonzinicase " $target_list " in
2370f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
2371f55fe278SPaolo Bonzini  ;;
2372f55fe278SPaolo Bonzini  *) softmmu=no
2373f55fe278SPaolo Bonzini  ;;
2374f55fe278SPaolo Bonziniesac
23755327cf48Sbellard
237605dfa22bSPhilippe Mathieu-Daudéfor target in $target_list; do
237705dfa22bSPhilippe Mathieu-Daudé  case "$target" in
237805dfa22bSPhilippe Mathieu-Daudé    arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
237905dfa22bSPhilippe Mathieu-Daudé      edk2_blobs="yes"
238005dfa22bSPhilippe Mathieu-Daudé      ;;
238105dfa22bSPhilippe Mathieu-Daudé  esac
238205dfa22bSPhilippe Mathieu-Daudédone
2383623ef637SPhilippe Mathieu-Daudé# The EDK2 binaries are compressed with bzip2
2384623ef637SPhilippe Mathieu-Daudéif test "$edk2_blobs" = "yes" && ! has bzip2; then
2385623ef637SPhilippe Mathieu-Daudé  error_exit "The bzip2 program is required for building QEMU"
2386623ef637SPhilippe Mathieu-Daudéfi
238705dfa22bSPhilippe Mathieu-Daudé
2388249247c9SJuan Quintelafeature_not_found() {
2389249247c9SJuan Quintela  feature=$1
239021684af0SStewart Smith  remedy=$2
2391249247c9SJuan Quintela
239276ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
239321684af0SStewart Smith      "configure was not able to find it." \
239421684af0SStewart Smith      "$remedy"
2395249247c9SJuan Quintela}
2396249247c9SJuan Quintela
23977d13299dSbellard# ---
23987d13299dSbellard# big/little endian test
23997d13299dSbellardcat > $TMPC << EOF
240061cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
240161cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
240261cc919fSMike Frysingerextern int foo(short *, short *);
240361cc919fSMike Frysingerint main(int argc, char *argv[]) {
240461cc919fSMike Frysinger    return foo(big_endian, little_endian);
24057d13299dSbellard}
24067d13299dSbellardEOF
24077d13299dSbellard
240861cc919fSMike Frysingerif compile_object ; then
240912f15c91SAlice Frosi    if strings -a $TMPO | grep -q BiGeNdIaN ; then
241061cc919fSMike Frysinger        bigendian="yes"
241112f15c91SAlice Frosi    elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
241261cc919fSMike Frysinger        bigendian="no"
24137d13299dSbellard    else
24147d13299dSbellard        echo big/little test failed
24157d13299dSbellard    fi
24167d13299dSbellardelse
241761cc919fSMike Frysinger    echo big/little test failed
24187d13299dSbellardfi
24197d13299dSbellard
2420b0a47e79SJuan Quintela##########################################
2421e10ee3f5SPhilippe Mathieu-Daudé# system tools
2422e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then
2423e10ee3f5SPhilippe Mathieu-Daudé    if test "$softmmu" = "no"; then
2424e10ee3f5SPhilippe Mathieu-Daudé        want_tools=no
2425e10ee3f5SPhilippe Mathieu-Daudé    else
2426e10ee3f5SPhilippe Mathieu-Daudé        want_tools=yes
2427e10ee3f5SPhilippe Mathieu-Daudé    fi
2428e10ee3f5SPhilippe Mathieu-Daudéfi
2429e10ee3f5SPhilippe Mathieu-Daudé
2430e10ee3f5SPhilippe Mathieu-Daudé##########################################
2431a30878e7SPeter Maydell# cocoa implies not SDL or GTK
2432a30878e7SPeter Maydell# (the cocoa UI code currently assumes it is always the active UI
2433a30878e7SPeter Maydell# and doesn't interact well with other UI frontend code)
2434a30878e7SPeter Maydellif test "$cocoa" = "yes"; then
2435a30878e7SPeter Maydell    if test "$sdl" = "yes"; then
2436a30878e7SPeter Maydell        error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2437a30878e7SPeter Maydell    fi
2438a30878e7SPeter Maydell    if test "$gtk" = "yes"; then
2439a30878e7SPeter Maydell        error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2440a30878e7SPeter Maydell    fi
2441a30878e7SPeter Maydell    gtk=no
2442a30878e7SPeter Maydell    sdl=no
2443a30878e7SPeter Maydellfi
2444a30878e7SPeter Maydell
24456b39b063SEric Blake# Some versions of Mac OS X incorrectly define SIZE_MAX
24466b39b063SEric Blakecat > $TMPC << EOF
24476b39b063SEric Blake#include <stdint.h>
24486b39b063SEric Blake#include <stdio.h>
24496b39b063SEric Blakeint main(int argc, char *argv[]) {
24506b39b063SEric Blake    return printf("%zu", SIZE_MAX);
24516b39b063SEric Blake}
24526b39b063SEric BlakeEOF
24536b39b063SEric Blakehave_broken_size_max=no
24546b39b063SEric Blakeif ! compile_object -Werror ; then
24556b39b063SEric Blake    have_broken_size_max=yes
24566b39b063SEric Blakefi
24576b39b063SEric Blake
2458a30878e7SPeter Maydell##########################################
2459015a33bdSGonglei# L2TPV3 probe
2460015a33bdSGonglei
2461015a33bdSGongleicat > $TMPC <<EOF
2462015a33bdSGonglei#include <sys/socket.h>
2463bff6cb72SMichael Tokarev#include <linux/ip.h>
2464015a33bdSGongleiint main(void) { return sizeof(struct mmsghdr); }
2465015a33bdSGongleiEOF
2466015a33bdSGongleiif compile_prog "" "" ; then
2467015a33bdSGonglei  l2tpv3=yes
2468015a33bdSGongleielse
2469015a33bdSGonglei  l2tpv3=no
2470015a33bdSGongleifi
2471015a33bdSGonglei
2472c9c8b88fSDavid CARLIERif check_include "pty.h" ; then
2473c9c8b88fSDavid CARLIER  pty_h=yes
2474c9c8b88fSDavid CARLIERelse
2475c9c8b88fSDavid CARLIER  pty_h=no
2476c9c8b88fSDavid CARLIERfi
2477c9c8b88fSDavid CARLIER
2478195588ccSDavid CARLIERcat > $TMPC <<EOF
2479195588ccSDavid CARLIER#include <sys/mman.h>
2480195588ccSDavid CARLIERint main(int argc, char *argv[]) {
2481195588ccSDavid CARLIER    return mlockall(MCL_FUTURE);
2482195588ccSDavid CARLIER}
2483195588ccSDavid CARLIEREOF
2484195588ccSDavid CARLIERif compile_prog "" "" ; then
2485195588ccSDavid CARLIER  have_mlockall=yes
2486195588ccSDavid CARLIERelse
2487195588ccSDavid CARLIER  have_mlockall=no
2488195588ccSDavid CARLIERfi
2489195588ccSDavid CARLIER
2490299e6f19SPaolo Bonzini#########################################
2491299e6f19SPaolo Bonzini# vhost interdependencies and host support
2492299e6f19SPaolo Bonzini
2493299e6f19SPaolo Bonzini# vhost backends
2494299e6f19SPaolo Bonzinitest "$vhost_user" = "" && vhost_user=yes
2495299e6f19SPaolo Bonziniif test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2496299e6f19SPaolo Bonzini  error_exit "vhost-user isn't available on win32"
2497299e6f19SPaolo Bonzinifi
2498108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux
2499108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2500108a6481SCindy Lu  error_exit "vhost-vdpa is only available on Linux"
2501108a6481SCindy Lufi
2502299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux
2503299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2504299e6f19SPaolo Bonzini  error_exit "vhost-kernel is only available on Linux"
2505299e6f19SPaolo Bonzinifi
2506299e6f19SPaolo Bonzini
2507299e6f19SPaolo Bonzini# vhost-kernel devices
2508299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2509299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2510299e6f19SPaolo Bonzini  error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2511299e6f19SPaolo Bonzinifi
2512299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2513299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2514299e6f19SPaolo Bonzini  error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2515299e6f19SPaolo Bonzinifi
2516299e6f19SPaolo Bonzini
2517299e6f19SPaolo Bonzini# vhost-user backends
2518299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2519299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2520299e6f19SPaolo Bonzini  error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2521299e6f19SPaolo Bonzinifi
2522299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2523299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2524299e6f19SPaolo Bonzini  error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2525299e6f19SPaolo Bonzinifi
252698fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
252798fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
252898fc1adaSDr. David Alan Gilbert  error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
252998fc1adaSDr. David Alan Gilbertfi
2530108a6481SCindy Lu#vhost-vdpa backends
2531108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2532108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2533108a6481SCindy Lu  error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2534108a6481SCindy Lufi
2535299e6f19SPaolo Bonzini
2536299e6f19SPaolo Bonzini# OR the vhost-kernel and vhost-user values for simplicity
2537299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then
2538299e6f19SPaolo Bonzini  test "$vhost_net_user" = "yes" && vhost_net=yes
2539299e6f19SPaolo Bonzini  test "$vhost_kernel" = "yes" && vhost_net=yes
2540299e6f19SPaolo Bonzinifi
2541299e6f19SPaolo Bonzini
2542015a33bdSGonglei##########################################
25434d9310f4SDaniel P. Berrange# MinGW / Mingw-w64 localtime_r/gmtime_r check
25444d9310f4SDaniel P. Berrange
25454d9310f4SDaniel P. Berrangeif test "$mingw32" = "yes"; then
25464d9310f4SDaniel P. Berrange    # Some versions of MinGW / Mingw-w64 lack localtime_r
25474d9310f4SDaniel P. Berrange    # and gmtime_r entirely.
25484d9310f4SDaniel P. Berrange    #
25494d9310f4SDaniel P. Berrange    # Some versions of Mingw-w64 define a macro for
25504d9310f4SDaniel P. Berrange    # localtime_r/gmtime_r.
25514d9310f4SDaniel P. Berrange    #
25524d9310f4SDaniel P. Berrange    # Some versions of Mingw-w64 will define functions
25534d9310f4SDaniel P. Berrange    # for localtime_r/gmtime_r, but only if you have
25544d9310f4SDaniel P. Berrange    # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
25554d9310f4SDaniel P. Berrange    # though, unistd.h and pthread.h both define
25564d9310f4SDaniel P. Berrange    # that for you.
25574d9310f4SDaniel P. Berrange    #
25584d9310f4SDaniel P. Berrange    # So this #undef localtime_r and #include <unistd.h>
25594d9310f4SDaniel P. Berrange    # are not in fact redundant.
25604d9310f4SDaniel P. Berrangecat > $TMPC << EOF
25614d9310f4SDaniel P. Berrange#include <unistd.h>
25624d9310f4SDaniel P. Berrange#include <time.h>
25634d9310f4SDaniel P. Berrange#undef localtime_r
25644d9310f4SDaniel P. Berrangeint main(void) { localtime_r(NULL, NULL); return 0; }
25654d9310f4SDaniel P. BerrangeEOF
25664d9310f4SDaniel P. Berrange    if compile_prog "" "" ; then
25674d9310f4SDaniel P. Berrange        localtime_r="yes"
25684d9310f4SDaniel P. Berrange    else
25694d9310f4SDaniel P. Berrange        localtime_r="no"
25704d9310f4SDaniel P. Berrange    fi
25714d9310f4SDaniel P. Berrangefi
25724d9310f4SDaniel P. Berrange
25734d9310f4SDaniel P. Berrange##########################################
2574779ab5e3SStefan Weil# pkg-config probe
2575779ab5e3SStefan Weil
2576779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
257776ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
2578779ab5e3SStefan Weilfi
2579779ab5e3SStefan Weil
2580779ab5e3SStefan Weil##########################################
2581b0a47e79SJuan Quintela# NPTL probe
2582b0a47e79SJuan Quintela
258324cb36a6SPeter Maydellif test "$linux_user" = "yes"; then
2584bd0c5661Spbrook  cat > $TMPC <<EOF
2585bd0c5661Spbrook#include <sched.h>
258630813ceaSpbrook#include <linux/futex.h>
2587182eacc0SStefan Weilint main(void) {
2588bd0c5661Spbrook#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2589bd0c5661Spbrook#error bork
2590bd0c5661Spbrook#endif
2591182eacc0SStefan Weil  return 0;
2592bd0c5661Spbrook}
2593bd0c5661SpbrookEOF
259424cb36a6SPeter Maydell  if ! compile_object ; then
259521684af0SStewart Smith    feature_not_found "nptl" "Install glibc and linux kernel headers."
2596b0a47e79SJuan Quintela  fi
2597bd0c5661Spbrookfi
2598bd0c5661Spbrook
2599ac62922eSbalrog##########################################
2600607dacd0Sqiaonuohan# lzo check
2601607dacd0Sqiaonuohan
2602607dacd0Sqiaonuohanif test "$lzo" != "no" ; then
2603607dacd0Sqiaonuohan    cat > $TMPC << EOF
2604607dacd0Sqiaonuohan#include <lzo/lzo1x.h>
2605607dacd0Sqiaonuohanint main(void) { lzo_version(); return 0; }
2606607dacd0SqiaonuohanEOF
2607607dacd0Sqiaonuohan    if compile_prog "" "-llzo2" ; then
2608607dacd0Sqiaonuohan        libs_softmmu="$libs_softmmu -llzo2"
2609708eab42SMarc-André Lureau        lzo_libs="-llzo2"
2610b25c9dffSStefan Weil        lzo="yes"
2611b25c9dffSStefan Weil    else
2612b25c9dffSStefan Weil        if test "$lzo" = "yes"; then
2613b25c9dffSStefan Weil            feature_not_found "liblzo2" "Install liblzo2 devel"
2614b25c9dffSStefan Weil        fi
2615b25c9dffSStefan Weil        lzo="no"
2616b25c9dffSStefan Weil    fi
2617607dacd0Sqiaonuohanfi
2618607dacd0Sqiaonuohan
2619607dacd0Sqiaonuohan##########################################
2620607dacd0Sqiaonuohan# snappy check
2621607dacd0Sqiaonuohan
2622607dacd0Sqiaonuohanif test "$snappy" != "no" ; then
2623607dacd0Sqiaonuohan    cat > $TMPC << EOF
2624607dacd0Sqiaonuohan#include <snappy-c.h>
2625607dacd0Sqiaonuohanint main(void) { snappy_max_compressed_length(4096); return 0; }
2626607dacd0SqiaonuohanEOF
2627607dacd0Sqiaonuohan    if compile_prog "" "-lsnappy" ; then
2628607dacd0Sqiaonuohan        libs_softmmu="$libs_softmmu -lsnappy"
2629708eab42SMarc-André Lureau        snappy_libs='-lsnappy'
2630b25c9dffSStefan Weil        snappy="yes"
2631b25c9dffSStefan Weil    else
2632b25c9dffSStefan Weil        if test "$snappy" = "yes"; then
2633b25c9dffSStefan Weil            feature_not_found "libsnappy" "Install libsnappy devel"
2634b25c9dffSStefan Weil        fi
2635b25c9dffSStefan Weil        snappy="no"
2636b25c9dffSStefan Weil    fi
2637607dacd0Sqiaonuohanfi
2638607dacd0Sqiaonuohan
2639607dacd0Sqiaonuohan##########################################
26406b383c08SPeter Wu# bzip2 check
26416b383c08SPeter Wu
26426b383c08SPeter Wuif test "$bzip2" != "no" ; then
26436b383c08SPeter Wu    cat > $TMPC << EOF
26446b383c08SPeter Wu#include <bzlib.h>
26456b383c08SPeter Wuint main(void) { BZ2_bzlibVersion(); return 0; }
26466b383c08SPeter WuEOF
26476b383c08SPeter Wu    if compile_prog "" "-lbz2" ; then
26486b383c08SPeter Wu        bzip2="yes"
26496b383c08SPeter Wu    else
26506b383c08SPeter Wu        if test "$bzip2" = "yes"; then
26516b383c08SPeter Wu            feature_not_found "libbzip2" "Install libbzip2 devel"
26526b383c08SPeter Wu        fi
26536b383c08SPeter Wu        bzip2="no"
26546b383c08SPeter Wu    fi
26556b383c08SPeter Wufi
26566b383c08SPeter Wu
26576b383c08SPeter Wu##########################################
265883bc1f97SJulio Faracco# lzfse check
265983bc1f97SJulio Faracco
266083bc1f97SJulio Faraccoif test "$lzfse" != "no" ; then
266183bc1f97SJulio Faracco    cat > $TMPC << EOF
266283bc1f97SJulio Faracco#include <lzfse.h>
266383bc1f97SJulio Faraccoint main(void) { lzfse_decode_scratch_size(); return 0; }
266483bc1f97SJulio FaraccoEOF
266583bc1f97SJulio Faracco    if compile_prog "" "-llzfse" ; then
266683bc1f97SJulio Faracco        lzfse="yes"
266783bc1f97SJulio Faracco    else
266883bc1f97SJulio Faracco        if test "$lzfse" = "yes"; then
266983bc1f97SJulio Faracco            feature_not_found "lzfse" "Install lzfse devel"
267083bc1f97SJulio Faracco        fi
267183bc1f97SJulio Faracco        lzfse="no"
267283bc1f97SJulio Faracco    fi
267383bc1f97SJulio Faraccofi
267483bc1f97SJulio Faracco
267583bc1f97SJulio Faracco##########################################
26763a678481SJuan Quintela# zstd check
26773a678481SJuan Quintela
26783a678481SJuan Quintelaif test "$zstd" != "no" ; then
2679297254c7SJuan Quintela    libzstd_minver="1.4.0"
2680297254c7SJuan Quintela    if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
26813a678481SJuan Quintela        zstd_cflags="$($pkg_config --cflags libzstd)"
26823a678481SJuan Quintela        zstd_libs="$($pkg_config --libs libzstd)"
26833a678481SJuan Quintela        zstd="yes"
26843a678481SJuan Quintela    else
26853a678481SJuan Quintela        if test "$zstd" = "yes" ; then
26863a678481SJuan Quintela            feature_not_found "libzstd" "Install libzstd devel"
26873a678481SJuan Quintela        fi
26883a678481SJuan Quintela        zstd="no"
26893a678481SJuan Quintela    fi
26903a678481SJuan Quintelafi
26913a678481SJuan Quintela
26923a678481SJuan Quintela##########################################
2693f794573eSEduardo Otubo# libseccomp check
2694f794573eSEduardo Otubo
2695f794573eSEduardo Otuboif test "$seccomp" != "no" ; then
26963e684455SMichael Strosaker    libseccomp_minver="2.3.0"
269725ed0eccSHelge Deller    if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2698c3883e1fSFam Zheng        seccomp_cflags="$($pkg_config --cflags libseccomp)"
2699c3883e1fSFam Zheng        seccomp_libs="$($pkg_config --libs libseccomp)"
2700f794573eSEduardo Otubo        seccomp="yes"
2701f794573eSEduardo Otubo    else
2702f794573eSEduardo Otubo        if test "$seccomp" = "yes" ; then
2703693e5910SAndrew Jones            feature_not_found "libseccomp" \
2704693e5910SAndrew Jones                 "Install libseccomp devel >= $libseccomp_minver"
2705896848f0SEduardo Otubo        fi
2706e84d5956SYann E. MORIN        seccomp="no"
2707f794573eSEduardo Otubo    fi
2708f794573eSEduardo Otubofi
2709f794573eSEduardo Otubo##########################################
2710e37630caSaliguori# xen probe
2711e37630caSaliguori
2712fc321b4bSJuan Quintelaif test "$xen" != "no" ; then
2713c1cdd9d5SJuergen Gross  # Check whether Xen library path is specified via --extra-ldflags to avoid
2714c1cdd9d5SJuergen Gross  # overriding this setting with pkg-config output. If not, try pkg-config
2715c1cdd9d5SJuergen Gross  # to obtain all needed flags.
2716c1cdd9d5SJuergen Gross
2717c1cdd9d5SJuergen Gross  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2718c1cdd9d5SJuergen Gross     $pkg_config --exists xencontrol ; then
2719c1cdd9d5SJuergen Gross    xen_ctrl_version="$(printf '%d%02d%02d' \
2720c1cdd9d5SJuergen Gross      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2721c1cdd9d5SJuergen Gross    xen=yes
2722c1cdd9d5SJuergen Gross    xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2723c1cdd9d5SJuergen Gross    xen_pc="$xen_pc xenevtchn xendevicemodel"
272458ea9a7aSAnthony PERARD    if $pkg_config --exists xentoolcore; then
272558ea9a7aSAnthony PERARD      xen_pc="$xen_pc xentoolcore"
272658ea9a7aSAnthony PERARD    fi
2727c1cdd9d5SJuergen Gross    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2728c1cdd9d5SJuergen Gross    libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2729582ea95fSMarc-André Lureau    xen_cflags="$($pkg_config --cflags $xen_pc)"
2730582ea95fSMarc-André Lureau    xen_libs="$($pkg_config --libs $xen_pc)"
2731c1cdd9d5SJuergen Gross  else
2732c1cdd9d5SJuergen Gross
2733b2266beeSJuan Quintela    xen_libs="-lxenstore -lxenctrl -lxenguest"
2734d9506cabSAnthony PERARD    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2735d5b93ddfSAnthony PERARD
273650ced5b3SStefan Weil    # First we test whether Xen headers and libraries are available.
273750ced5b3SStefan Weil    # If no, we are done and there is no Xen support.
273850ced5b3SStefan Weil    # If yes, more tests are run to detect the Xen version.
273950ced5b3SStefan Weil
274050ced5b3SStefan Weil    # Xen (any)
274150ced5b3SStefan Weil    cat > $TMPC <<EOF
274250ced5b3SStefan Weil#include <xenctrl.h>
274350ced5b3SStefan Weilint main(void) {
274450ced5b3SStefan Weil  return 0;
274550ced5b3SStefan Weil}
274650ced5b3SStefan WeilEOF
274750ced5b3SStefan Weil    if ! compile_prog "" "$xen_libs" ; then
274850ced5b3SStefan Weil      # Xen not found
274950ced5b3SStefan Weil      if test "$xen" = "yes" ; then
275021684af0SStewart Smith        feature_not_found "xen" "Install xen devel"
275150ced5b3SStefan Weil      fi
275250ced5b3SStefan Weil      xen=no
275350ced5b3SStefan Weil
2754d5b93ddfSAnthony PERARD    # Xen unstable
275569deef08SPeter Maydell    elif
275669deef08SPeter Maydell        cat > $TMPC <<EOF &&
27572cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API
27582cbf8903SRoss Lagerwall#define __XEN_TOOLS__
27592cbf8903SRoss Lagerwall#include <xendevicemodel.h>
2760d3c49ebbSPaul Durrant#include <xenforeignmemory.h>
27612cbf8903SRoss Lagerwallint main(void) {
27622cbf8903SRoss Lagerwall  xendevicemodel_handle *xd;
2763d3c49ebbSPaul Durrant  xenforeignmemory_handle *xfmem;
27642cbf8903SRoss Lagerwall
27652cbf8903SRoss Lagerwall  xd = xendevicemodel_open(0, 0);
27662cbf8903SRoss Lagerwall  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
27672cbf8903SRoss Lagerwall
2768d3c49ebbSPaul Durrant  xfmem = xenforeignmemory_open(0, 0);
2769d3c49ebbSPaul Durrant  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2770d3c49ebbSPaul Durrant
27712cbf8903SRoss Lagerwall  return 0;
27722cbf8903SRoss Lagerwall}
27732cbf8903SRoss LagerwallEOF
27742cbf8903SRoss Lagerwall        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
27752cbf8903SRoss Lagerwall      then
27762cbf8903SRoss Lagerwall      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
27772cbf8903SRoss Lagerwall      xen_ctrl_version=41100
27782cbf8903SRoss Lagerwall      xen=yes
27792cbf8903SRoss Lagerwall    elif
27802cbf8903SRoss Lagerwall        cat > $TMPC <<EOF &&
27815ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API
27825ba3d756SIgor Druzhinin#include <xenforeignmemory.h>
278358ea9a7aSAnthony PERARD#include <xentoolcore.h>
27845ba3d756SIgor Druzhininint main(void) {
27855ba3d756SIgor Druzhinin  xenforeignmemory_handle *xfmem;
27865ba3d756SIgor Druzhinin
27875ba3d756SIgor Druzhinin  xfmem = xenforeignmemory_open(0, 0);
27885ba3d756SIgor Druzhinin  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
278958ea9a7aSAnthony PERARD  xentoolcore_restrict_all(0);
27905ba3d756SIgor Druzhinin
27915ba3d756SIgor Druzhinin  return 0;
27925ba3d756SIgor Druzhinin}
27935ba3d756SIgor DruzhininEOF
279458ea9a7aSAnthony PERARD        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
27955ba3d756SIgor Druzhinin      then
279658ea9a7aSAnthony PERARD      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
27975ba3d756SIgor Druzhinin      xen_ctrl_version=41000
27985ba3d756SIgor Druzhinin      xen=yes
27995ba3d756SIgor Druzhinin    elif
28005ba3d756SIgor Druzhinin        cat > $TMPC <<EOF &&
2801da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API
2802da8090ccSPaul Durrant#define __XEN_TOOLS__
2803da8090ccSPaul Durrant#include <xendevicemodel.h>
2804da8090ccSPaul Durrantint main(void) {
2805da8090ccSPaul Durrant  xendevicemodel_handle *xd;
2806da8090ccSPaul Durrant
2807da8090ccSPaul Durrant  xd = xendevicemodel_open(0, 0);
2808da8090ccSPaul Durrant  xendevicemodel_close(xd);
2809da8090ccSPaul Durrant
2810da8090ccSPaul Durrant  return 0;
2811da8090ccSPaul Durrant}
2812da8090ccSPaul DurrantEOF
2813da8090ccSPaul Durrant        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2814da8090ccSPaul Durrant      then
2815da8090ccSPaul Durrant      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2816f1167ee6SJuergen Gross      xen_ctrl_version=40900
2817da8090ccSPaul Durrant      xen=yes
2818da8090ccSPaul Durrant    elif
2819da8090ccSPaul Durrant        cat > $TMPC <<EOF &&
28205eeb39c2SIan Campbell/*
28215eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat
28225eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given.
2823b6eb9b45SPaulina Szubarczyk *
2824b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and
2825b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented.
2826b6eb9b45SPaulina Szubarczyk */
2827b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API
2828b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API
2829b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2830b6eb9b45SPaulina Szubarczyk#include <xenctrl.h>
2831b6eb9b45SPaulina Szubarczyk#include <xenstore.h>
2832b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h>
2833b6eb9b45SPaulina Szubarczyk#include <xengnttab.h>
2834b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h>
2835b6eb9b45SPaulina Szubarczyk#include <stdint.h>
2836b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h>
2837b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS)
2838b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined
2839b6eb9b45SPaulina Szubarczyk#endif
2840b6eb9b45SPaulina Szubarczykint main(void) {
2841b6eb9b45SPaulina Szubarczyk  xc_interface *xc = NULL;
2842b6eb9b45SPaulina Szubarczyk  xenforeignmemory_handle *xfmem;
2843b6eb9b45SPaulina Szubarczyk  xenevtchn_handle *xe;
2844b6eb9b45SPaulina Szubarczyk  xengnttab_handle *xg;
2845b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy_segment_t* seg = NULL;
2846b6eb9b45SPaulina Szubarczyk
2847b6eb9b45SPaulina Szubarczyk  xs_daemon_open();
2848b6eb9b45SPaulina Szubarczyk
2849b6eb9b45SPaulina Szubarczyk  xc = xc_interface_open(0, 0, 0);
2850b6eb9b45SPaulina Szubarczyk  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2851b6eb9b45SPaulina Szubarczyk  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2852b6eb9b45SPaulina Szubarczyk  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2853b6eb9b45SPaulina Szubarczyk  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2854b6eb9b45SPaulina Szubarczyk
2855b6eb9b45SPaulina Szubarczyk  xfmem = xenforeignmemory_open(0, 0);
2856b6eb9b45SPaulina Szubarczyk  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2857b6eb9b45SPaulina Szubarczyk
2858b6eb9b45SPaulina Szubarczyk  xe = xenevtchn_open(0, 0);
2859b6eb9b45SPaulina Szubarczyk  xenevtchn_fd(xe);
2860b6eb9b45SPaulina Szubarczyk
2861b6eb9b45SPaulina Szubarczyk  xg = xengnttab_open(0, 0);
2862b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy(xg, 0, seg);
2863b6eb9b45SPaulina Szubarczyk
2864b6eb9b45SPaulina Szubarczyk  return 0;
2865b6eb9b45SPaulina Szubarczyk}
2866b6eb9b45SPaulina SzubarczykEOF
2867b6eb9b45SPaulina Szubarczyk        compile_prog "" "$xen_libs $xen_stable_libs"
2868b6eb9b45SPaulina Szubarczyk      then
2869f1167ee6SJuergen Gross      xen_ctrl_version=40800
2870b6eb9b45SPaulina Szubarczyk      xen=yes
2871b6eb9b45SPaulina Szubarczyk    elif
2872b6eb9b45SPaulina Szubarczyk        cat > $TMPC <<EOF &&
2873b6eb9b45SPaulina Szubarczyk/*
2874b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat
2875b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given.
28765eeb39c2SIan Campbell */
28775eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API
28785eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API
28795eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API
28805eeb39c2SIan Campbell#include <xenctrl.h>
28815eeb39c2SIan Campbell#include <xenstore.h>
28825eeb39c2SIan Campbell#include <xenevtchn.h>
28835eeb39c2SIan Campbell#include <xengnttab.h>
28845eeb39c2SIan Campbell#include <xenforeignmemory.h>
28855eeb39c2SIan Campbell#include <stdint.h>
28865eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h>
28875eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS)
28885eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined
28895eeb39c2SIan Campbell#endif
28905eeb39c2SIan Campbellint main(void) {
28915eeb39c2SIan Campbell  xc_interface *xc = NULL;
28925eeb39c2SIan Campbell  xenforeignmemory_handle *xfmem;
28935eeb39c2SIan Campbell  xenevtchn_handle *xe;
28945eeb39c2SIan Campbell  xengnttab_handle *xg;
28955eeb39c2SIan Campbell
28965eeb39c2SIan Campbell  xs_daemon_open();
28975eeb39c2SIan Campbell
28985eeb39c2SIan Campbell  xc = xc_interface_open(0, 0, 0);
28995eeb39c2SIan Campbell  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
29005eeb39c2SIan Campbell  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
29015eeb39c2SIan Campbell  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
29025eeb39c2SIan Campbell  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
29035eeb39c2SIan Campbell
29045eeb39c2SIan Campbell  xfmem = xenforeignmemory_open(0, 0);
29055eeb39c2SIan Campbell  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
29065eeb39c2SIan Campbell
29075eeb39c2SIan Campbell  xe = xenevtchn_open(0, 0);
29085eeb39c2SIan Campbell  xenevtchn_fd(xe);
29095eeb39c2SIan Campbell
29105eeb39c2SIan Campbell  xg = xengnttab_open(0, 0);
29115eeb39c2SIan Campbell  xengnttab_map_grant_ref(xg, 0, 0, 0);
29125eeb39c2SIan Campbell
29135eeb39c2SIan Campbell  return 0;
29145eeb39c2SIan Campbell}
29155eeb39c2SIan CampbellEOF
29165eeb39c2SIan Campbell        compile_prog "" "$xen_libs $xen_stable_libs"
29175eeb39c2SIan Campbell      then
2918f1167ee6SJuergen Gross      xen_ctrl_version=40701
29195eeb39c2SIan Campbell      xen=yes
2920cdadde39SRoger Pau Monne
2921cdadde39SRoger Pau Monne    # Xen 4.6
2922cdadde39SRoger Pau Monne    elif
2923cdadde39SRoger Pau Monne        cat > $TMPC <<EOF &&
2924cdadde39SRoger Pau Monne#include <xenctrl.h>
2925e108a3c1SAnthony PERARD#include <xenstore.h>
2926d5b93ddfSAnthony PERARD#include <stdint.h>
2927d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
2928d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
2929d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
2930d5b93ddfSAnthony PERARD#endif
2931d5b93ddfSAnthony PERARDint main(void) {
2932d5b93ddfSAnthony PERARD  xc_interface *xc;
2933d5b93ddfSAnthony PERARD  xs_daemon_open();
2934d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
2935d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2936d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
2937b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
29388688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2939d8b441a3SJan Beulich  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
294020a544c7SKonrad Rzeszutek Wilk  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2941d8b441a3SJan Beulich  return 0;
2942d8b441a3SJan Beulich}
2943d8b441a3SJan BeulichEOF
2944d8b441a3SJan Beulich        compile_prog "" "$xen_libs"
2945d8b441a3SJan Beulich      then
2946f1167ee6SJuergen Gross      xen_ctrl_version=40600
2947d8b441a3SJan Beulich      xen=yes
2948d8b441a3SJan Beulich
2949d8b441a3SJan Beulich    # Xen 4.5
2950d8b441a3SJan Beulich    elif
2951d8b441a3SJan Beulich        cat > $TMPC <<EOF &&
2952d8b441a3SJan Beulich#include <xenctrl.h>
2953d8b441a3SJan Beulich#include <xenstore.h>
2954d8b441a3SJan Beulich#include <stdint.h>
2955d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h>
2956d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS)
2957d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined
2958d8b441a3SJan Beulich#endif
2959d8b441a3SJan Beulichint main(void) {
2960d8b441a3SJan Beulich  xc_interface *xc;
2961d8b441a3SJan Beulich  xs_daemon_open();
2962d8b441a3SJan Beulich  xc = xc_interface_open(0, 0, 0);
2963d8b441a3SJan Beulich  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2964d8b441a3SJan Beulich  xc_gnttab_open(NULL, 0);
2965d8b441a3SJan Beulich  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2966d8b441a3SJan Beulich  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
29673996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
29683996e85cSPaul Durrant  return 0;
29693996e85cSPaul Durrant}
29703996e85cSPaul DurrantEOF
29713996e85cSPaul Durrant        compile_prog "" "$xen_libs"
29723996e85cSPaul Durrant      then
2973f1167ee6SJuergen Gross      xen_ctrl_version=40500
29743996e85cSPaul Durrant      xen=yes
29753996e85cSPaul Durrant
29763996e85cSPaul Durrant    elif
29773996e85cSPaul Durrant        cat > $TMPC <<EOF &&
29783996e85cSPaul Durrant#include <xenctrl.h>
29793996e85cSPaul Durrant#include <xenstore.h>
29803996e85cSPaul Durrant#include <stdint.h>
29813996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
29823996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
29833996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
29843996e85cSPaul Durrant#endif
29853996e85cSPaul Durrantint main(void) {
29863996e85cSPaul Durrant  xc_interface *xc;
29873996e85cSPaul Durrant  xs_daemon_open();
29883996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
29893996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
29903996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
29913996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
29923996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
29938688e065SStefano Stabellini  return 0;
29948688e065SStefano Stabellini}
29958688e065SStefano StabelliniEOF
29968688e065SStefano Stabellini        compile_prog "" "$xen_libs"
299769deef08SPeter Maydell      then
2998f1167ee6SJuergen Gross      xen_ctrl_version=40200
29998688e065SStefano Stabellini      xen=yes
30008688e065SStefano Stabellini
3001e37630caSaliguori    else
3002fc321b4bSJuan Quintela      if test "$xen" = "yes" ; then
3003edfb07edSIan Campbell        feature_not_found "xen (unsupported version)" \
3004edfb07edSIan Campbell                          "Install a supported xen (xen 4.2 or newer)"
3005fc321b4bSJuan Quintela      fi
3006fc321b4bSJuan Quintela      xen=no
3007e37630caSaliguori    fi
3008d5b93ddfSAnthony PERARD
3009d5b93ddfSAnthony PERARD    if test "$xen" = yes; then
3010f1167ee6SJuergen Gross      if test $xen_ctrl_version -ge 40701  ; then
3011582ea95fSMarc-André Lureau        xen_libs="$xen_libs $xen_stable_libs "
30125eeb39c2SIan Campbell      fi
3013d5b93ddfSAnthony PERARD    fi
3014e37630caSaliguori  fi
3015c1cdd9d5SJuergen Grossfi
3016e37630caSaliguori
3017eb6fda0fSAnthony PERARDif test "$xen_pci_passthrough" != "no"; then
3018edfb07edSIan Campbell  if test "$xen" = "yes" && test "$linux" = "yes"; then
3019eb6fda0fSAnthony PERARD    xen_pci_passthrough=yes
3020eb6fda0fSAnthony PERARD  else
3021eb6fda0fSAnthony PERARD    if test "$xen_pci_passthrough" = "yes"; then
302276ad07a4SPeter Maydell      error_exit "User requested feature Xen PCI Passthrough" \
302376ad07a4SPeter Maydell          " but this feature requires /sys from Linux"
3024eb6fda0fSAnthony PERARD    fi
3025eb6fda0fSAnthony PERARD    xen_pci_passthrough=no
3026eb6fda0fSAnthony PERARD  fi
3027eb6fda0fSAnthony PERARDfi
3028eb6fda0fSAnthony PERARD
3029e37630caSaliguori##########################################
3030d661d9a4SJustin Terry (VM)# Windows Hypervisor Platform accelerator (WHPX) check
3031d661d9a4SJustin Terry (VM)if test "$whpx" != "no" ; then
3032327fccb2SLucian Petrut    if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
3033d661d9a4SJustin Terry (VM)        whpx="yes"
3034d661d9a4SJustin Terry (VM)    else
3035d661d9a4SJustin Terry (VM)        if test "$whpx" = "yes"; then
303653537bb1SJustin Terry (VM) via Qemu-devel            feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
3037d661d9a4SJustin Terry (VM)        fi
3038d661d9a4SJustin Terry (VM)        whpx="no"
3039d661d9a4SJustin Terry (VM)    fi
3040d661d9a4SJustin Terry (VM)fi
3041d661d9a4SJustin Terry (VM)
3042d661d9a4SJustin Terry (VM)##########################################
3043dfffc653SJuan Quintela# Sparse probe
3044dfffc653SJuan Quintelaif test "$sparse" != "no" ; then
3045968b4db3SPaolo Bonzini  if has sparse; then
3046dfffc653SJuan Quintela    sparse=yes
3047dfffc653SJuan Quintela  else
3048dfffc653SJuan Quintela    if test "$sparse" = "yes" ; then
304921684af0SStewart Smith      feature_not_found "sparse" "Install sparse binary"
3050dfffc653SJuan Quintela    fi
3051dfffc653SJuan Quintela    sparse=no
3052dfffc653SJuan Quintela  fi
3053dfffc653SJuan Quintelafi
3054dfffc653SJuan Quintela
3055dfffc653SJuan Quintela##########################################
3056f676c67eSJeremy White# X11 probe
3057f676c67eSJeremy Whiteif $pkg_config --exists "x11"; then
30588781595bSGerd Hoffmann    have_x11=yes
305989138857SStefan Weil    x11_cflags=$($pkg_config --cflags x11)
306089138857SStefan Weil    x11_libs=$($pkg_config --libs x11)
3061f676c67eSJeremy Whitefi
3062f676c67eSJeremy White
3063f676c67eSJeremy White##########################################
3064a4ccabcfSAnthony Liguori# GTK probe
3065a4ccabcfSAnthony Liguori
30665a464e6cSPeter Xuif test "$gtk" != "no"; then
306789d85cdeSDaniel P. Berrangé    gtkpackage="gtk+-3.0"
306889d85cdeSDaniel P. Berrangé    gtkx11package="gtk+-x11-3.0"
30697b23d121SVolker Rümelin    gtkversion="3.22.0"
3070bbbf9bfbSStefan Weil    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
307189138857SStefan Weil        gtk_cflags=$($pkg_config --cflags $gtkpackage)
307289138857SStefan Weil        gtk_libs=$($pkg_config --libs $gtkpackage)
307389138857SStefan Weil        gtk_version=$($pkg_config --modversion $gtkpackage)
30740a337ed0SGerd Hoffmann        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
30758781595bSGerd Hoffmann            need_x11=yes
3076f676c67eSJeremy White            gtk_cflags="$gtk_cflags $x11_cflags"
3077f676c67eSJeremy White            gtk_libs="$gtk_libs $x11_libs"
30780a337ed0SGerd Hoffmann        fi
3079bbbf9bfbSStefan Weil        gtk="yes"
3080bbbf9bfbSStefan Weil    elif test "$gtk" = "yes"; then
30815fe309ffSGerd Hoffmann        feature_not_found "gtk" "Install gtk3-devel"
3082bbbf9bfbSStefan Weil    else
3083bbbf9bfbSStefan Weil        gtk="no"
3084bbbf9bfbSStefan Weil    fi
3085bbbf9bfbSStefan Weilfi
3086bbbf9bfbSStefan Weil
3087ddbb0d09SDaniel P. Berrange
3088ddbb0d09SDaniel P. Berrange##########################################
3089ddbb0d09SDaniel P. Berrange# GNUTLS probe
3090ddbb0d09SDaniel P. Berrange
3091ddbb0d09SDaniel P. Berrangeif test "$gnutls" != "no"; then
3092a73e82efSRichard Henderson    pass="no"
3093a0722409SDaniel P. Berrangé    if $pkg_config --exists "gnutls >= 3.1.18"; then
309489138857SStefan Weil        gnutls_cflags=$($pkg_config --cflags gnutls)
309589138857SStefan Weil        gnutls_libs=$($pkg_config --libs gnutls)
3096a73e82efSRichard Henderson        # Packaging for the static libraries is not always correct.
3097a73e82efSRichard Henderson        # At least ubuntu 18.04 ships only shared libraries.
3098a73e82efSRichard Henderson        write_c_skeleton
3099a73e82efSRichard Henderson        if compile_prog "" "$gnutls_libs" ; then
3100243dc2cfSRichard Henderson            LIBS="$gnutls_libs $LIBS"
3101ddbb0d09SDaniel P. Berrange            QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
3102a73e82efSRichard Henderson            pass="yes"
3103a73e82efSRichard Henderson        fi
3104a73e82efSRichard Henderson    fi
3105a73e82efSRichard Henderson    if test "$pass" = "no" && test "$gnutls" = "yes"; then
3106a0722409SDaniel P. Berrangé	feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3107ddbb0d09SDaniel P. Berrange    else
3108a73e82efSRichard Henderson        gnutls="$pass"
3109ddbb0d09SDaniel P. Berrange    fi
3110ddbb0d09SDaniel P. Berrangefi
3111ddbb0d09SDaniel P. Berrange
311291bfcdb0SDaniel P. Berrange
311391bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-gcrypt flag,
311491bfcdb0SDaniel P. Berrange# then mark as disabled if user requested nettle
3115a0722409SDaniel P. Berrangé# explicitly
311691bfcdb0SDaniel P. Berrangeif test -z "$gcrypt"
311791bfcdb0SDaniel P. Berrangethen
3118a0722409SDaniel P. Berrangé    if test "$nettle" = "yes"
311991bfcdb0SDaniel P. Berrange    then
312091bfcdb0SDaniel P. Berrange        gcrypt="no"
312191bfcdb0SDaniel P. Berrange    fi
312291bfcdb0SDaniel P. Berrangefi
312391bfcdb0SDaniel P. Berrange
312491bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-nettle flag,
312591bfcdb0SDaniel P. Berrange# then mark as disabled if user requested gcrypt
3126a0722409SDaniel P. Berrangé# explicitly
312791bfcdb0SDaniel P. Berrangeif test -z "$nettle"
312891bfcdb0SDaniel P. Berrangethen
3129a0722409SDaniel P. Berrangé    if test "$gcrypt" = "yes"
313091bfcdb0SDaniel P. Berrange    then
313191bfcdb0SDaniel P. Berrange        nettle="no"
313291bfcdb0SDaniel P. Berrange    fi
313391bfcdb0SDaniel P. Berrangefi
313491bfcdb0SDaniel P. Berrange
3135dea7a64eSDaniel P. Berrangéhas_libgcrypt() {
313691bfcdb0SDaniel P. Berrange    if ! has "libgcrypt-config"
313791bfcdb0SDaniel P. Berrange    then
313891bfcdb0SDaniel P. Berrange	return 1
313991bfcdb0SDaniel P. Berrange    fi
314091bfcdb0SDaniel P. Berrange
314191bfcdb0SDaniel P. Berrange    if test -n "$cross_prefix"
314291bfcdb0SDaniel P. Berrange    then
314389138857SStefan Weil	host=$(libgcrypt-config --host)
314491bfcdb0SDaniel P. Berrange	if test "$host-" != $cross_prefix
314591bfcdb0SDaniel P. Berrange	then
314691bfcdb0SDaniel P. Berrange	    return 1
314791bfcdb0SDaniel P. Berrange	fi
314891bfcdb0SDaniel P. Berrange    fi
314991bfcdb0SDaniel P. Berrange
3150dea7a64eSDaniel P. Berrangé    maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3151dea7a64eSDaniel P. Berrangé    min=`libgcrypt-config --version | awk -F . '{print $2}'`
3152dea7a64eSDaniel P. Berrangé
3153dea7a64eSDaniel P. Berrangé    if test $maj != 1 || test $min -lt 5
3154dea7a64eSDaniel P. Berrangé    then
3155dea7a64eSDaniel P. Berrangé       return 1
3156dea7a64eSDaniel P. Berrangé    fi
3157dea7a64eSDaniel P. Berrangé
315891bfcdb0SDaniel P. Berrange    return 0
315991bfcdb0SDaniel P. Berrange}
316091bfcdb0SDaniel P. Berrange
3161a0722409SDaniel P. Berrangé
3162a0722409SDaniel P. Berrangéif test "$nettle" != "no"; then
3163a73e82efSRichard Henderson    pass="no"
316464dd2f3bSDaniel P. Berrangé    if $pkg_config --exists "nettle >= 2.7.1"; then
3165a0722409SDaniel P. Berrangé        nettle_cflags=$($pkg_config --cflags nettle)
3166a0722409SDaniel P. Berrangé        nettle_libs=$($pkg_config --libs nettle)
3167a0722409SDaniel P. Berrangé        nettle_version=$($pkg_config --modversion nettle)
3168a73e82efSRichard Henderson        # Link test to make sure the given libraries work (e.g for static).
3169a73e82efSRichard Henderson        write_c_skeleton
3170a73e82efSRichard Henderson        if compile_prog "" "$nettle_libs" ; then
3171243dc2cfSRichard Henderson            LIBS="$nettle_libs $LIBS"
3172a0722409SDaniel P. Berrangé            QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3173a0722409SDaniel P. Berrangé            if test -z "$gcrypt"; then
3174a0722409SDaniel P. Berrangé               gcrypt="no"
3175a0722409SDaniel P. Berrangé            fi
3176a73e82efSRichard Henderson            pass="yes"
3177a73e82efSRichard Henderson        fi
3178a73e82efSRichard Henderson    fi
3179dc2207afSDaniel P. Berrangé    if test "$pass" = "yes"
3180dc2207afSDaniel P. Berrangé    then
3181dc2207afSDaniel P. Berrangé        cat > $TMPC << EOF
3182dc2207afSDaniel P. Berrangé#include <nettle/xts.h>
3183dc2207afSDaniel P. Berrangéint main(void) {
3184dc2207afSDaniel P. Berrangé  return 0;
3185dc2207afSDaniel P. Berrangé}
3186dc2207afSDaniel P. BerrangéEOF
3187dc2207afSDaniel P. Berrangé        if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3188dc2207afSDaniel P. Berrangé            nettle_xts=yes
3189dc2207afSDaniel P. Berrangé            qemu_private_xts=no
3190dc2207afSDaniel P. Berrangé        fi
3191dc2207afSDaniel P. Berrangé    fi
3192a73e82efSRichard Henderson    if test "$pass" = "no" && test "$nettle" = "yes"; then
319364dd2f3bSDaniel P. Berrangé        feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3194a0722409SDaniel P. Berrangé    else
3195a73e82efSRichard Henderson        nettle="$pass"
3196a0722409SDaniel P. Berrangé    fi
3197a0722409SDaniel P. Berrangéfi
3198a0722409SDaniel P. Berrangé
319991bfcdb0SDaniel P. Berrangeif test "$gcrypt" != "no"; then
3200a73e82efSRichard Henderson    pass="no"
3201dea7a64eSDaniel P. Berrangé    if has_libgcrypt; then
320289138857SStefan Weil        gcrypt_cflags=$(libgcrypt-config --cflags)
320389138857SStefan Weil        gcrypt_libs=$(libgcrypt-config --libs)
3204a73e82efSRichard Henderson        # Debian has removed -lgpg-error from libgcrypt-config
320591bfcdb0SDaniel P. Berrange        # as it "spreads unnecessary dependencies" which in
320691bfcdb0SDaniel P. Berrange        # turn breaks static builds...
320791bfcdb0SDaniel P. Berrange        if test "$static" = "yes"
320891bfcdb0SDaniel P. Berrange        then
320991bfcdb0SDaniel P. Berrange            gcrypt_libs="$gcrypt_libs -lgpg-error"
321091bfcdb0SDaniel P. Berrange        fi
32111f923c70SLongpeng(Mike)
3212a73e82efSRichard Henderson        # Link test to make sure the given libraries work (e.g for static).
3213a73e82efSRichard Henderson        write_c_skeleton
3214a73e82efSRichard Henderson        if compile_prog "" "$gcrypt_libs" ; then
3215243dc2cfSRichard Henderson            LIBS="$gcrypt_libs $LIBS"
321637788f25SDaniel P. Berrange            QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3217a73e82efSRichard Henderson            pass="yes"
3218a73e82efSRichard Henderson        fi
3219a73e82efSRichard Henderson    fi
3220a73e82efSRichard Henderson    if test "$pass" = "yes"; then
322137788f25SDaniel P. Berrange        gcrypt="yes"
32221f923c70SLongpeng(Mike)        cat > $TMPC << EOF
32231f923c70SLongpeng(Mike)#include <gcrypt.h>
32241f923c70SLongpeng(Mike)int main(void) {
32251f923c70SLongpeng(Mike)  gcry_mac_hd_t handle;
32261f923c70SLongpeng(Mike)  gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
32271f923c70SLongpeng(Mike)                GCRY_MAC_FLAG_SECURE, NULL);
32281f923c70SLongpeng(Mike)  return 0;
32291f923c70SLongpeng(Mike)}
32301f923c70SLongpeng(Mike)EOF
32311f923c70SLongpeng(Mike)        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
32321f923c70SLongpeng(Mike)            gcrypt_hmac=yes
32331f923c70SLongpeng(Mike)        fi
3234e0576942SDaniel P. Berrangé        cat > $TMPC << EOF
3235e0576942SDaniel P. Berrangé#include <gcrypt.h>
3236e0576942SDaniel P. Berrangéint main(void) {
3237e0576942SDaniel P. Berrangé  gcry_cipher_hd_t handle;
3238e0576942SDaniel P. Berrangé  gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3239e0576942SDaniel P. Berrangé  return 0;
3240e0576942SDaniel P. Berrangé}
3241e0576942SDaniel P. BerrangéEOF
3242e0576942SDaniel P. Berrangé        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3243e0576942SDaniel P. Berrangé            gcrypt_xts=yes
3244e0576942SDaniel P. Berrangé            qemu_private_xts=no
3245e0576942SDaniel P. Berrangé        fi
3246a73e82efSRichard Henderson    elif test "$gcrypt" = "yes"; then
3247dea7a64eSDaniel P. Berrangé        feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
324891bfcdb0SDaniel P. Berrange    else
324991bfcdb0SDaniel P. Berrange        gcrypt="no"
325091bfcdb0SDaniel P. Berrange    fi
325162893b67SDaniel P. Berrangefi
325262893b67SDaniel P. Berrange
3253ddbb0d09SDaniel P. Berrange
325491bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" && test "$nettle" = "yes"
325591bfcdb0SDaniel P. Berrangethen
325691bfcdb0SDaniel P. Berrange    error_exit "Only one of gcrypt & nettle can be enabled"
325791bfcdb0SDaniel P. Berrangefi
3258ed754746SDaniel P. Berrange
32599a2fd434SDaniel P. Berrange##########################################
32609a2fd434SDaniel P. Berrange# libtasn1 - only for the TLS creds/session test suite
32619a2fd434SDaniel P. Berrange
32629a2fd434SDaniel P. Berrangetasn1=yes
326390246037SDaniel P. Berrangetasn1_cflags=""
326490246037SDaniel P. Berrangetasn1_libs=""
32659a2fd434SDaniel P. Berrangeif $pkg_config --exists "libtasn1"; then
326689138857SStefan Weil    tasn1_cflags=$($pkg_config --cflags libtasn1)
326789138857SStefan Weil    tasn1_libs=$($pkg_config --libs libtasn1)
32689a2fd434SDaniel P. Berrangeelse
32699a2fd434SDaniel P. Berrange    tasn1=no
32709a2fd434SDaniel P. Berrangefi
32719a2fd434SDaniel P. Berrange
3272ed754746SDaniel P. Berrange
3273bbbf9bfbSStefan Weil##########################################
32748953caf3SDaniel P. Berrange# PAM probe
32758953caf3SDaniel P. Berrange
32768953caf3SDaniel P. Berrangeif test "$auth_pam" != "no"; then
32778953caf3SDaniel P. Berrange    cat > $TMPC <<EOF
32788953caf3SDaniel P. Berrange#include <security/pam_appl.h>
32798953caf3SDaniel P. Berrange#include <stdio.h>
32808953caf3SDaniel P. Berrangeint main(void) {
32818953caf3SDaniel P. Berrange   const char *service_name = "qemu";
32828953caf3SDaniel P. Berrange   const char *user = "frank";
32839c9642d0SDr. David Alan Gilbert   const struct pam_conv pam_conv = { 0 };
32848953caf3SDaniel P. Berrange   pam_handle_t *pamh = NULL;
32859c9642d0SDr. David Alan Gilbert   pam_start(service_name, user, &pam_conv, &pamh);
32868953caf3SDaniel P. Berrange   return 0;
32878953caf3SDaniel P. Berrange}
32888953caf3SDaniel P. BerrangeEOF
32898953caf3SDaniel P. Berrange    if compile_prog "" "-lpam" ; then
32908953caf3SDaniel P. Berrange        auth_pam=yes
32918953caf3SDaniel P. Berrange    else
32928953caf3SDaniel P. Berrange        if test "$auth_pam" = "yes"; then
32938953caf3SDaniel P. Berrange            feature_not_found "PAM" "Install PAM development package"
32948953caf3SDaniel P. Berrange        else
32958953caf3SDaniel P. Berrange            auth_pam=no
32968953caf3SDaniel P. Berrange        fi
32978953caf3SDaniel P. Berrange    fi
32988953caf3SDaniel P. Berrangefi
32998953caf3SDaniel P. Berrange
33008953caf3SDaniel P. Berrange##########################################
3301559607eaSDaniel P. Berrange# getifaddrs (for tests/test-io-channel-socket )
3302559607eaSDaniel P. Berrange
3303559607eaSDaniel P. Berrangehave_ifaddrs_h=yes
3304559607eaSDaniel P. Berrangeif ! check_include "ifaddrs.h" ; then
3305559607eaSDaniel P. Berrange  have_ifaddrs_h=no
3306559607eaSDaniel P. Berrangefi
3307559607eaSDaniel P. Berrange
3308e865b97fSChen Gang#########################################
3309e865b97fSChen Gang# libdrm check
3310e865b97fSChen Ganghave_drm_h=no
3311e865b97fSChen Gangif check_include "libdrm/drm.h" ; then
3312e865b97fSChen Gang    have_drm_h=yes
3313e865b97fSChen Gangfi
3314e865b97fSChen Gang
33152a4b472cSDavid CARLIER#########################################
33162a4b472cSDavid CARLIER# sys/signal.h check
33172a4b472cSDavid CARLIERhave_sys_signal_h=no
33182a4b472cSDavid CARLIERif check_include "sys/signal.h" ; then
33192a4b472cSDavid CARLIER  have_sys_signal_h=yes
33202a4b472cSDavid CARLIERfi
33212a4b472cSDavid CARLIER
3322559607eaSDaniel P. Berrange##########################################
3323bbbf9bfbSStefan Weil# VTE probe
3324bbbf9bfbSStefan Weil
3325bbbf9bfbSStefan Weilif test "$vte" != "no"; then
3326c6feff9eSCole Robinson    vteminversion="0.32.0"
3327c6feff9eSCole Robinson    if $pkg_config --exists "vte-2.91"; then
3328c6feff9eSCole Robinson      vtepackage="vte-2.91"
3329c6feff9eSCole Robinson    else
3330528de90aSDaniel P. Berrange      vtepackage="vte-2.90"
3331c6feff9eSCole Robinson    fi
3332c6feff9eSCole Robinson    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
333389138857SStefan Weil        vte_cflags=$($pkg_config --cflags $vtepackage)
333489138857SStefan Weil        vte_libs=$($pkg_config --libs $vtepackage)
333589138857SStefan Weil        vteversion=$($pkg_config --modversion $vtepackage)
3336bbbf9bfbSStefan Weil        vte="yes"
3337bbbf9bfbSStefan Weil    elif test "$vte" = "yes"; then
3338c6feff9eSCole Robinson        feature_not_found "vte" "Install libvte-2.90/2.91 devel"
33399e04c683SStefan Weil    else
3340bbbf9bfbSStefan Weil        vte="no"
3341a4ccabcfSAnthony Liguori    fi
3342a4ccabcfSAnthony Liguorifi
3343a4ccabcfSAnthony Liguori
3344a4ccabcfSAnthony Liguori##########################################
334511d9f695Sbellard# SDL probe
334611d9f695Sbellard
3347aee8a619SCarlo Marcelo Arenas Belón# Look for sdl configuration program (pkg-config or sdl2-config).  Try
3348aee8a619SCarlo Marcelo Arenas Belón# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
334947c03744SDave Airlie
3350c6093a05SPeter Xusdl_probe ()
3351c6093a05SPeter Xu{
33520015ca5cSDaniel P. Berrangé  if $pkg_config sdl2 --exists; then
33530015ca5cSDaniel P. Berrangé    sdlconfig="$pkg_config sdl2"
335489138857SStefan Weil    sdlversion=$($sdlconfig --modversion 2>/dev/null)
3355aee8a619SCarlo Marcelo Arenas Belón  elif has "$sdl2_config"; then
33560015ca5cSDaniel P. Berrangé    sdlconfig="$sdl2_config"
335789138857SStefan Weil    sdlversion=$($sdlconfig --version)
3358a0dfd8a4SLoïc Minier  else
3359a0dfd8a4SLoïc Minier    if test "$sdl" = "yes" ; then
33608f4ea9cdSGerd Hoffmann      feature_not_found "sdl" "Install SDL2-devel"
3361a0dfd8a4SLoïc Minier    fi
3362a0dfd8a4SLoïc Minier    sdl=no
3363c6093a05SPeter Xu    # no need to do the rest
3364c6093a05SPeter Xu    return
33659316f803SPaolo Bonzini  fi
3366aee8a619SCarlo Marcelo Arenas Belón  if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
33673ec87ffeSPaolo Bonzini    echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
33683ec87ffeSPaolo Bonzini  fi
336911d9f695Sbellard
337011d9f695Sbellard  cat > $TMPC << EOF
337111d9f695Sbellard#include <SDL.h>
337211d9f695Sbellard#undef main /* We don't want SDL to override our main() */
337311d9f695Sbellardint main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
337411d9f695SbellardEOF
337589138857SStefan Weil  sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
33762ca5c430SGerd Hoffmann  sdl_cflags="$sdl_cflags -Wno-undef"  # workaround 2.0.8 bug
337774f42e18STeLeMan  if test "$static" = "yes" ; then
33780015ca5cSDaniel P. Berrangé    if $pkg_config sdl2 --exists; then
33790015ca5cSDaniel P. Berrangé      sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
33805f37e6d4SThomas Huth    else
338189138857SStefan Weil      sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
33825f37e6d4SThomas Huth    fi
338374f42e18STeLeMan  else
338489138857SStefan Weil    sdl_libs=$($sdlconfig --libs 2>/dev/null)
338574f42e18STeLeMan  fi
338652166aa0SJuan Quintela  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
338711d9f695Sbellard    sdl=yes
33887c1f25b4Sbellard
338967c274d3SPaolo Bonzini    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3390e633a5c6SEric Blake    if test "$sdl" = "yes" && test "$static" = "yes" ; then
339167c274d3SPaolo Bonzini      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
339289138857SStefan Weil         sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
339389138857SStefan Weil         sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
339411d9f695Sbellard      fi
339552166aa0SJuan Quintela      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
33961ac88f28SJuan Quintela	:
33971ac88f28SJuan Quintela      else
33981ac88f28SJuan Quintela        sdl=no
33997c1f25b4Sbellard      fi
34007c1f25b4Sbellard    fi # static link
3401c4198157SJuan Quintela  else # sdl not found
3402c4198157SJuan Quintela    if test "$sdl" = "yes" ; then
34030015ca5cSDaniel P. Berrangé      feature_not_found "sdl" "Install SDL2 devel"
3404c4198157SJuan Quintela    fi
3405c4198157SJuan Quintela    sdl=no
34067c1f25b4Sbellard  fi # sdl compile test
3407c6093a05SPeter Xu}
3408c6093a05SPeter Xu
3409a442fe2fSDaniel P. Berrangésdl_image_probe ()
3410a442fe2fSDaniel P. Berrangé{
3411a442fe2fSDaniel P. Berrangé    if test "$sdl_image" != "no" ; then
3412a442fe2fSDaniel P. Berrangé        if $pkg_config SDL2_image --exists; then
3413a442fe2fSDaniel P. Berrangé            if test "$static" = "yes"; then
3414a442fe2fSDaniel P. Berrangé                sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3415a442fe2fSDaniel P. Berrangé            else
3416a442fe2fSDaniel P. Berrangé                sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3417a442fe2fSDaniel P. Berrangé            fi
3418a442fe2fSDaniel P. Berrangé            sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3419a442fe2fSDaniel P. Berrangé            sdl_image=yes
3420a442fe2fSDaniel P. Berrangé
3421a442fe2fSDaniel P. Berrangé            sdl_cflags="$sdl_cflags $sdl_image_cflags"
3422a442fe2fSDaniel P. Berrangé            sdl_libs="$sdl_libs $sdl_image_libs"
3423a442fe2fSDaniel P. Berrangé        else
3424a442fe2fSDaniel P. Berrangé            if test "$sdl_image" = "yes" ; then
3425a442fe2fSDaniel P. Berrangé                feature_not_found "sdl_image" "Install SDL Image devel"
3426a442fe2fSDaniel P. Berrangé            else
3427a442fe2fSDaniel P. Berrangé                sdl_image=no
3428a442fe2fSDaniel P. Berrangé            fi
3429a442fe2fSDaniel P. Berrangé        fi
3430a442fe2fSDaniel P. Berrangé    fi
3431a442fe2fSDaniel P. Berrangé}
3432a442fe2fSDaniel P. Berrangé
3433c6093a05SPeter Xuif test "$sdl" != "no" ; then
3434c6093a05SPeter Xu  sdl_probe
3435fd677642Sthsfi
343611d9f695Sbellard
34375368a422Saliguoriif test "$sdl" = "yes" ; then
3438a442fe2fSDaniel P. Berrangé  sdl_image_probe
3439a442fe2fSDaniel P. Berrangéelse
3440a442fe2fSDaniel P. Berrangé  if test "$sdl_image" = "yes"; then
3441a442fe2fSDaniel P. Berrangé    echo "warning: SDL Image requested, but SDL is not available, disabling"
3442a442fe2fSDaniel P. Berrangé  fi
3443a442fe2fSDaniel P. Berrangé  sdl_image=no
3444a442fe2fSDaniel P. Berrangéfi
3445a442fe2fSDaniel P. Berrangé
3446a442fe2fSDaniel P. Berrangéif test "$sdl" = "yes" ; then
34475368a422Saliguori  cat > $TMPC <<EOF
34485368a422Saliguori#include <SDL.h>
34495368a422Saliguori#if defined(SDL_VIDEO_DRIVER_X11)
34505368a422Saliguori#include <X11/XKBlib.h>
34515368a422Saliguori#else
34525368a422Saliguori#error No x11 support
34535368a422Saliguori#endif
34545368a422Saliguoriint main(void) { return 0; }
34555368a422SaliguoriEOF
3456f676c67eSJeremy White  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
34578781595bSGerd Hoffmann    need_x11=yes
3458f676c67eSJeremy White    sdl_cflags="$sdl_cflags $x11_cflags"
3459f676c67eSJeremy White    sdl_libs="$sdl_libs $x11_libs"
34605368a422Saliguori  fi
34615368a422Saliguorifi
34625368a422Saliguori
34638f28f3fbSths##########################################
34642da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
34652da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
34662da776dbSMichael R. Hines  cat > $TMPC <<EOF
34672da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
34682da776dbSMichael R. Hinesint main(void) { return 0; }
34692da776dbSMichael R. HinesEOF
3470ef6d4ccdSYuval Shaia  rdma_libs="-lrdmacm -libverbs -libumad"
34712da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
34722da776dbSMichael R. Hines    rdma="yes"
3473ef6d4ccdSYuval Shaia    libs_softmmu="$libs_softmmu $rdma_libs"
34742da776dbSMichael R. Hines  else
34752da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
34762da776dbSMichael R. Hines        error_exit \
3477ef6d4ccdSYuval Shaia            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
34782da776dbSMichael R. Hines            " Your options:" \
3479ef6d4ccdSYuval Shaia            "  (1) Fast: Install infiniband packages (devel) from your distro." \
34802da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
34812da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
34822da776dbSMichael R. Hines    fi
34832da776dbSMichael R. Hines    rdma="no"
34842da776dbSMichael R. Hines  fi
34852da776dbSMichael R. Hinesfi
34862da776dbSMichael R. Hines
348721ab34c9SMarcel Apfelbaum##########################################
348821ab34c9SMarcel Apfelbaum# PVRDMA detection
348921ab34c9SMarcel Apfelbaum
349021ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF &&
349121ab34c9SMarcel Apfelbaum#include <sys/mman.h>
349221ab34c9SMarcel Apfelbaum
349321ab34c9SMarcel Apfelbaumint
349421ab34c9SMarcel Apfelbaummain(void)
349521ab34c9SMarcel Apfelbaum{
349621ab34c9SMarcel Apfelbaum    char buf = 0;
349721ab34c9SMarcel Apfelbaum    void *addr = &buf;
349821ab34c9SMarcel Apfelbaum    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
349921ab34c9SMarcel Apfelbaum
350021ab34c9SMarcel Apfelbaum    return 0;
350121ab34c9SMarcel Apfelbaum}
350221ab34c9SMarcel ApfelbaumEOF
350321ab34c9SMarcel Apfelbaum
350421ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then
350521ab34c9SMarcel Apfelbaum    case "$pvrdma" in
350621ab34c9SMarcel Apfelbaum    "")
350721ab34c9SMarcel Apfelbaum        if compile_prog "" ""; then
350821ab34c9SMarcel Apfelbaum            pvrdma="yes"
350921ab34c9SMarcel Apfelbaum        else
351021ab34c9SMarcel Apfelbaum            pvrdma="no"
351121ab34c9SMarcel Apfelbaum        fi
351221ab34c9SMarcel Apfelbaum        ;;
351321ab34c9SMarcel Apfelbaum    "yes")
351421ab34c9SMarcel Apfelbaum        if ! compile_prog "" ""; then
351521ab34c9SMarcel Apfelbaum            error_exit "PVRDMA is not supported since mremap is not implemented"
351621ab34c9SMarcel Apfelbaum        fi
351721ab34c9SMarcel Apfelbaum        pvrdma="yes"
351821ab34c9SMarcel Apfelbaum        ;;
351921ab34c9SMarcel Apfelbaum    "no")
352021ab34c9SMarcel Apfelbaum        pvrdma="no"
352121ab34c9SMarcel Apfelbaum        ;;
352221ab34c9SMarcel Apfelbaum    esac
352321ab34c9SMarcel Apfelbaumelse
352421ab34c9SMarcel Apfelbaum    if test "$pvrdma" = "yes" ; then
352521ab34c9SMarcel Apfelbaum        error_exit "PVRDMA requires rdma suppport"
352621ab34c9SMarcel Apfelbaum    fi
352721ab34c9SMarcel Apfelbaum    pvrdma="no"
352821ab34c9SMarcel Apfelbaumfi
352995c6bff3SBenoît Canet
3530ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported
3531ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then
3532ee108585SYuval Shaia
3533ee108585SYuval Shaiacat > $TMPC <<EOF &&
3534ee108585SYuval Shaia#include <infiniband/verbs.h>
3535ee108585SYuval Shaia
3536ee108585SYuval Shaiaint
3537ee108585SYuval Shaiamain(void)
3538ee108585SYuval Shaia{
3539ee108585SYuval Shaia    struct ibv_mr *mr;
3540ee108585SYuval Shaia    struct ibv_pd *pd = NULL;
3541ee108585SYuval Shaia    size_t length = 10;
3542ee108585SYuval Shaia    uint64_t iova = 0;
3543ee108585SYuval Shaia    int access = 0;
3544ee108585SYuval Shaia    void *addr = NULL;
3545ee108585SYuval Shaia
3546ee108585SYuval Shaia    mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3547ee108585SYuval Shaia
3548ee108585SYuval Shaia    ibv_dereg_mr(mr);
3549ee108585SYuval Shaia
3550ee108585SYuval Shaia    return 0;
3551ee108585SYuval Shaia}
3552ee108585SYuval ShaiaEOF
3553ee108585SYuval Shaia    if ! compile_prog "" "-libverbs"; then
3554ee108585SYuval Shaia        QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3555ee108585SYuval Shaia    fi
3556ee108585SYuval Shaiafi
3557ee108585SYuval Shaia
355895c6bff3SBenoît Canet##########################################
35592f9606b3Saliguori# VNC SASL detection
3560e633a5c6SEric Blakeif test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
35612f9606b3Saliguori  cat > $TMPC <<EOF
35622f9606b3Saliguori#include <sasl/sasl.h>
35632f9606b3Saliguori#include <stdio.h>
35642f9606b3Saliguoriint main(void) { sasl_server_init(NULL, "qemu"); return 0; }
35652f9606b3SaliguoriEOF
35662f9606b3Saliguori  # Assuming Cyrus-SASL installed in /usr prefix
3567bd702ffcSPhilippe Mathieu-Daudé  # QEMU defines struct iovec in "qemu/osdep.h",
3568bd702ffcSPhilippe Mathieu-Daudé  # we don't want libsasl to redefine it in <sasl/sasl.h>.
3569bd702ffcSPhilippe Mathieu-Daudé  vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
35702f9606b3Saliguori  vnc_sasl_libs="-lsasl2"
357152166aa0SJuan Quintela  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3572ea784e3bSJuan Quintela    vnc_sasl=yes
3573fa838301SJuan Quintela    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3574ca273d58SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
35752f9606b3Saliguori  else
3576ea784e3bSJuan Quintela    if test "$vnc_sasl" = "yes" ; then
357721684af0SStewart Smith      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3578ea784e3bSJuan Quintela    fi
3579ea784e3bSJuan Quintela    vnc_sasl=no
35802f9606b3Saliguori  fi
35812f9606b3Saliguorifi
35822f9606b3Saliguori
35832f9606b3Saliguori##########################################
35842f6f5c7aSCorentin Chary# VNC JPEG detection
3585e633a5c6SEric Blakeif test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
35862f6f5c7aSCorentin Charycat > $TMPC <<EOF
35872f6f5c7aSCorentin Chary#include <stdio.h>
35882f6f5c7aSCorentin Chary#include <jpeglib.h>
35892f6f5c7aSCorentin Charyint main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
35902f6f5c7aSCorentin CharyEOF
35912f6f5c7aSCorentin Chary    vnc_jpeg_cflags=""
35922f6f5c7aSCorentin Chary    vnc_jpeg_libs="-ljpeg"
35932f6f5c7aSCorentin Chary  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
35942f6f5c7aSCorentin Chary    vnc_jpeg=yes
35952f6f5c7aSCorentin Chary    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3596ca273d58SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
35972f6f5c7aSCorentin Chary  else
35982f6f5c7aSCorentin Chary    if test "$vnc_jpeg" = "yes" ; then
359921684af0SStewart Smith      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
36002f6f5c7aSCorentin Chary    fi
36012f6f5c7aSCorentin Chary    vnc_jpeg=no
36022f6f5c7aSCorentin Chary  fi
36032f6f5c7aSCorentin Charyfi
36042f6f5c7aSCorentin Chary
36052f6f5c7aSCorentin Chary##########################################
3606efe556adSCorentin Chary# VNC PNG detection
3607e633a5c6SEric Blakeif test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3608efe556adSCorentin Charycat > $TMPC <<EOF
3609efe556adSCorentin Chary//#include <stdio.h>
3610efe556adSCorentin Chary#include <png.h>
3611832ce9c2SScott Wood#include <stddef.h>
3612efe556adSCorentin Charyint main(void) {
3613efe556adSCorentin Chary    png_structp png_ptr;
3614efe556adSCorentin Chary    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
36157edc3fedSPeter Maydell    return png_ptr != 0;
3616efe556adSCorentin Chary}
3617efe556adSCorentin CharyEOF
361865d5d3f9SStefan Weil  if $pkg_config libpng --exists; then
361989138857SStefan Weil    vnc_png_cflags=$($pkg_config libpng --cflags)
362089138857SStefan Weil    vnc_png_libs=$($pkg_config libpng --libs)
36219af8025eSBrad  else
3622efe556adSCorentin Chary    vnc_png_cflags=""
3623efe556adSCorentin Chary    vnc_png_libs="-lpng"
36249af8025eSBrad  fi
3625efe556adSCorentin Chary  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3626efe556adSCorentin Chary    vnc_png=yes
3627efe556adSCorentin Chary    libs_softmmu="$vnc_png_libs $libs_softmmu"
36289af8025eSBrad    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3629efe556adSCorentin Chary  else
3630efe556adSCorentin Chary    if test "$vnc_png" = "yes" ; then
363121684af0SStewart Smith      feature_not_found "vnc-png" "Install libpng devel"
3632efe556adSCorentin Chary    fi
3633efe556adSCorentin Chary    vnc_png=no
3634efe556adSCorentin Chary  fi
3635efe556adSCorentin Charyfi
3636efe556adSCorentin Chary
3637efe556adSCorentin Chary##########################################
36386a021536SGerd Hoffmann# xkbcommon probe
36396a021536SGerd Hoffmannif test "$xkbcommon" != "no" ; then
36406a021536SGerd Hoffmann  if $pkg_config xkbcommon --exists; then
36416a021536SGerd Hoffmann    xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
36426a021536SGerd Hoffmann    xkbcommon_libs=$($pkg_config xkbcommon --libs)
36436a021536SGerd Hoffmann    xkbcommon=yes
36446a021536SGerd Hoffmann  else
36456a021536SGerd Hoffmann    if test "$xkbcommon" = "yes" ; then
36466a021536SGerd Hoffmann      feature_not_found "xkbcommon" "Install libxkbcommon-devel"
36476a021536SGerd Hoffmann    fi
36486a021536SGerd Hoffmann    xkbcommon=no
36496a021536SGerd Hoffmann  fi
36506a021536SGerd Hoffmannfi
36516a021536SGerd Hoffmann
365276655d6dSaliguori
365376655d6dSaliguori##########################################
3654c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c
3655dce512deSChristoph Hellwigif test "$xfs" != "no" ; then
3656dce512deSChristoph Hellwig  cat > $TMPC << EOF
3657ffc41d10SStefan Weil#include <stddef.h>  /* NULL */
3658dce512deSChristoph Hellwig#include <xfs/xfs.h>
3659dce512deSChristoph Hellwigint main(void)
3660dce512deSChristoph Hellwig{
3661dce512deSChristoph Hellwig    xfsctl(NULL, 0, 0, NULL);
3662dce512deSChristoph Hellwig    return 0;
3663dce512deSChristoph Hellwig}
3664dce512deSChristoph HellwigEOF
3665dce512deSChristoph Hellwig  if compile_prog "" "" ; then
3666dce512deSChristoph Hellwig    xfs="yes"
3667dce512deSChristoph Hellwig  else
3668dce512deSChristoph Hellwig    if test "$xfs" = "yes" ; then
366921684af0SStewart Smith      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3670dce512deSChristoph Hellwig    fi
3671dce512deSChristoph Hellwig    xfs=no
3672dce512deSChristoph Hellwig  fi
3673dce512deSChristoph Hellwigfi
3674dce512deSChristoph Hellwig
3675dce512deSChristoph Hellwig##########################################
36768a16d273Sths# vde libraries probe
3677dfb278bdSJuan Quintelaif test "$vde" != "no" ; then
36784baae0acSJuan Quintela  vde_libs="-lvdeplug"
36798a16d273Sths  cat > $TMPC << EOF
36808a16d273Sths#include <libvdeplug.h>
36814a7f0e06Spbrookint main(void)
36824a7f0e06Spbrook{
36834a7f0e06Spbrook    struct vde_open_args a = {0, 0, 0};
3684fea08e08SPeter Maydell    char s[] = "";
3685fea08e08SPeter Maydell    vde_open(s, s, &a);
36864a7f0e06Spbrook    return 0;
36874a7f0e06Spbrook}
36888a16d273SthsEOF
368952166aa0SJuan Quintela  if compile_prog "" "$vde_libs" ; then
36904baae0acSJuan Quintela    vde=yes
3691dfb278bdSJuan Quintela  else
3692dfb278bdSJuan Quintela    if test "$vde" = "yes" ; then
369321684af0SStewart Smith      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3694dfb278bdSJuan Quintela    fi
3695dfb278bdSJuan Quintela    vde=no
36968a16d273Sths  fi
36978a16d273Sthsfi
36988a16d273Sths
36998a16d273Sths##########################################
37000a985b37SVincenzo Maffione# netmap support probe
37010a985b37SVincenzo Maffione# Apart from looking for netmap headers, we make sure that the host API version
37020a985b37SVincenzo Maffione# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
37030a985b37SVincenzo Maffione# a minor/major version number. Minor new features will be marked with values up
37040a985b37SVincenzo Maffione# to 15, and if something happens that requires a change to the backend we will
37050a985b37SVincenzo Maffione# move above 15, submit the backend fixes and modify this two bounds.
370658952137SVincenzo Maffioneif test "$netmap" != "no" ; then
370758952137SVincenzo Maffione  cat > $TMPC << EOF
370858952137SVincenzo Maffione#include <inttypes.h>
370958952137SVincenzo Maffione#include <net/if.h>
371058952137SVincenzo Maffione#include <net/netmap.h>
371158952137SVincenzo Maffione#include <net/netmap_user.h>
37120a985b37SVincenzo Maffione#if (NETMAP_API < 11) || (NETMAP_API > 15)
37130a985b37SVincenzo Maffione#error
37140a985b37SVincenzo Maffione#endif
371558952137SVincenzo Maffioneint main(void) { return 0; }
371658952137SVincenzo MaffioneEOF
371758952137SVincenzo Maffione  if compile_prog "" "" ; then
371858952137SVincenzo Maffione    netmap=yes
371958952137SVincenzo Maffione  else
372058952137SVincenzo Maffione    if test "$netmap" = "yes" ; then
372158952137SVincenzo Maffione      feature_not_found "netmap"
372258952137SVincenzo Maffione    fi
372358952137SVincenzo Maffione    netmap=no
372458952137SVincenzo Maffione  fi
372558952137SVincenzo Maffionefi
372658952137SVincenzo Maffione
372758952137SVincenzo Maffione##########################################
372847e98658SCorey Bryant# libcap-ng library probe
372947e98658SCorey Bryantif test "$cap_ng" != "no" ; then
373047e98658SCorey Bryant  cap_libs="-lcap-ng"
373147e98658SCorey Bryant  cat > $TMPC << EOF
373247e98658SCorey Bryant#include <cap-ng.h>
373347e98658SCorey Bryantint main(void)
373447e98658SCorey Bryant{
373547e98658SCorey Bryant    capng_capability_to_name(CAPNG_EFFECTIVE);
373647e98658SCorey Bryant    return 0;
373747e98658SCorey Bryant}
373847e98658SCorey BryantEOF
373947e98658SCorey Bryant  if compile_prog "" "$cap_libs" ; then
374047e98658SCorey Bryant    cap_ng=yes
374147e98658SCorey Bryant  else
374247e98658SCorey Bryant    if test "$cap_ng" = "yes" ; then
374321684af0SStewart Smith      feature_not_found "cap_ng" "Install libcap-ng devel"
374447e98658SCorey Bryant    fi
374547e98658SCorey Bryant    cap_ng=no
374647e98658SCorey Bryant  fi
374747e98658SCorey Bryantfi
374847e98658SCorey Bryant
374947e98658SCorey Bryant##########################################
3750c2de5c91Smalc# Sound support libraries probe
37518f28f3fbSths
375289138857SStefan Weilaudio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3753c2de5c91Smalcfor drv in $audio_drv_list; do
3754c2de5c91Smalc    case $drv in
3755e42975a1SGerd Hoffmann    alsa | try-alsa)
3756c80a867fSGerd Hoffmann    if $pkg_config alsa --exists; then
3757c80a867fSGerd Hoffmann        alsa_libs=$($pkg_config alsa --libs)
3758478e943fSPaolo Bonzini        alsa_cflags=$($pkg_config alsa --cflags)
3759478e943fSPaolo Bonzini        alsa=yes
3760e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3761e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3762e42975a1SGerd Hoffmann        fi
3763e42975a1SGerd Hoffmann    else
3764e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3765e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3766c80a867fSGerd Hoffmann        else
3767c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3768c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3769c80a867fSGerd Hoffmann        fi
3770e42975a1SGerd Hoffmann    fi
3771c2de5c91Smalc    ;;
3772c2de5c91Smalc
3773e42975a1SGerd Hoffmann    pa | try-pa)
3774c80a867fSGerd Hoffmann    if $pkg_config libpulse --exists; then
3775478e943fSPaolo Bonzini        libpulse=yes
3776c80a867fSGerd Hoffmann        pulse_libs=$($pkg_config libpulse --libs)
3777478e943fSPaolo Bonzini        pulse_cflags=$($pkg_config libpulse --cflags)
3778e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3779e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3780e42975a1SGerd Hoffmann        fi
3781e42975a1SGerd Hoffmann    else
3782e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3783e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3784c80a867fSGerd Hoffmann        else
3785c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3786c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3787c80a867fSGerd Hoffmann        fi
3788e42975a1SGerd Hoffmann    fi
3789b8e59f18Smalc    ;;
3790b8e59f18Smalc
3791373967b2SGerd Hoffmann    sdl)
3792373967b2SGerd Hoffmann    if test "$sdl" = "no"; then
3793373967b2SGerd Hoffmann        error_exit "sdl not found or disabled, can not use sdl audio driver"
3794373967b2SGerd Hoffmann    fi
3795373967b2SGerd Hoffmann    ;;
3796373967b2SGerd Hoffmann
3797e42975a1SGerd Hoffmann    try-sdl)
3798e42975a1SGerd Hoffmann    if test "$sdl" = "no"; then
3799e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3800e42975a1SGerd Hoffmann    else
3801e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3802e42975a1SGerd Hoffmann    fi
3803e42975a1SGerd Hoffmann    ;;
3804e42975a1SGerd Hoffmann
3805997e690aSJuan Quintela    coreaudio)
3806b1149911SFam Zheng      coreaudio_libs="-framework CoreAudio"
3807997e690aSJuan Quintela    ;;
3808997e690aSJuan Quintela
3809a4bf6780SJuan Quintela    dsound)
3810b1149911SFam Zheng      dsound_libs="-lole32 -ldxguid"
3811d5631638Smalc      audio_win_int="yes"
3812a4bf6780SJuan Quintela    ;;
3813a4bf6780SJuan Quintela
3814a4bf6780SJuan Quintela    oss)
3815b1149911SFam Zheng      oss_libs="$oss_lib"
3816a4bf6780SJuan Quintela    ;;
3817a4bf6780SJuan Quintela
38182e445703SGeoffrey McRae    jack | try-jack)
38192e445703SGeoffrey McRae    if $pkg_config jack --exists; then
3820478e943fSPaolo Bonzini        libjack=yes
38212e445703SGeoffrey McRae        jack_libs=$($pkg_config jack --libs)
38222e445703SGeoffrey McRae        if test "$drv" = "try-jack"; then
38232e445703SGeoffrey McRae            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
38242e445703SGeoffrey McRae        fi
38252e445703SGeoffrey McRae    else
38262e445703SGeoffrey McRae        if test "$drv" = "try-jack"; then
38272e445703SGeoffrey McRae            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
38282e445703SGeoffrey McRae        else
38292e445703SGeoffrey McRae            error_exit "$drv check failed" \
38302e445703SGeoffrey McRae                "Make sure to have the $drv libs and headers installed."
38312e445703SGeoffrey McRae        fi
38322e445703SGeoffrey McRae    fi
38332e445703SGeoffrey McRae    ;;
38342e445703SGeoffrey McRae
3835e4c63a6aSmalc    *)
38361c9b2a52Smalc    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
383776ad07a4SPeter Maydell        error_exit "Unknown driver '$drv' selected" \
383876ad07a4SPeter Maydell            "Possible drivers are: $audio_possible_drivers"
3839e4c63a6aSmalc    }
3840e4c63a6aSmalc    ;;
3841c2de5c91Smalc    esac
3842c2de5c91Smalcdone
38438f28f3fbSths
38444d3b6f6eSbalrog##########################################
38452e4d9fb1Saurel32# BrlAPI probe
38462e4d9fb1Saurel32
38474ffcedb6SJuan Quintelaif test "$brlapi" != "no" ; then
3848eb82284fSJuan Quintela  brlapi_libs="-lbrlapi"
38492e4d9fb1Saurel32  cat > $TMPC << EOF
38502e4d9fb1Saurel32#include <brlapi.h>
3851832ce9c2SScott Wood#include <stddef.h>
38522e4d9fb1Saurel32int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
38532e4d9fb1Saurel32EOF
385452166aa0SJuan Quintela  if compile_prog "" "$brlapi_libs" ; then
38552e4d9fb1Saurel32    brlapi=yes
38564ffcedb6SJuan Quintela  else
38574ffcedb6SJuan Quintela    if test "$brlapi" = "yes" ; then
385821684af0SStewart Smith      feature_not_found "brlapi" "Install brlapi devel"
38594ffcedb6SJuan Quintela    fi
38604ffcedb6SJuan Quintela    brlapi=no
3861eb82284fSJuan Quintela  fi
3862eb82284fSJuan Quintelafi
38632e4d9fb1Saurel32
38642e4d9fb1Saurel32##########################################
3865e08bb301SSamuel Thibault# iconv probe
3866e08bb301SSamuel Thibaultif test "$iconv" != "no" ; then
3867e08bb301SSamuel Thibault  cat > $TMPC << EOF
3868e08bb301SSamuel Thibault#include <iconv.h>
3869e08bb301SSamuel Thibaultint main(void) {
3870e08bb301SSamuel Thibault  iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3871e08bb301SSamuel Thibault  return conv != (iconv_t) -1;
3872e08bb301SSamuel Thibault}
3873e08bb301SSamuel ThibaultEOF
3874e08bb301SSamuel Thibault  iconv_prefix_list="/usr/local:/usr"
3875e08bb301SSamuel Thibault  iconv_lib_list=":-liconv"
3876e08bb301SSamuel Thibault  IFS=:
3877e08bb301SSamuel Thibault  for iconv_prefix in $iconv_prefix_list; do
3878e08bb301SSamuel Thibault    IFS=:
3879e08bb301SSamuel Thibault    iconv_cflags="-I$iconv_prefix/include"
3880e08bb301SSamuel Thibault    iconv_ldflags="-L$iconv_prefix/lib"
3881e08bb301SSamuel Thibault    for iconv_link in $iconv_lib_list; do
3882e08bb301SSamuel Thibault      unset IFS
3883e08bb301SSamuel Thibault      iconv_lib="$iconv_ldflags $iconv_link"
3884e08bb301SSamuel Thibault      echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3885e08bb301SSamuel Thibault      if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3886e08bb301SSamuel Thibault        iconv_found=yes
3887e08bb301SSamuel Thibault        break
3888e08bb301SSamuel Thibault      fi
3889e08bb301SSamuel Thibault    done
3890e08bb301SSamuel Thibault    if test "$iconv_found" = yes ; then
3891e08bb301SSamuel Thibault      break
3892e08bb301SSamuel Thibault    fi
3893e08bb301SSamuel Thibault  done
3894e08bb301SSamuel Thibault  if test "$iconv_found" = "yes" ; then
3895e08bb301SSamuel Thibault    iconv=yes
3896e08bb301SSamuel Thibault  else
3897e08bb301SSamuel Thibault    if test "$iconv" = "yes" ; then
3898e08bb301SSamuel Thibault      feature_not_found "iconv" "Install iconv devel"
3899e08bb301SSamuel Thibault    fi
3900e08bb301SSamuel Thibault    iconv=no
3901e08bb301SSamuel Thibault  fi
3902e08bb301SSamuel Thibaultfi
3903e08bb301SSamuel Thibault
3904e08bb301SSamuel Thibault##########################################
39054d3b6f6eSbalrog# curses probe
3906e08bb301SSamuel Thibaultif test "$iconv" = "no" ; then
3907e08bb301SSamuel Thibault  # curses will need iconv
3908e08bb301SSamuel Thibault  curses=no
3909e08bb301SSamuel Thibaultfi
3910a3605bf6SMichael Tokarevif test "$curses" != "no" ; then
3911e095e2f3SStefan Weil  if test "$mingw32" = "yes" ; then
39128ddc5bf9SSamuel Thibault    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
39138ddc5bf9SSamuel Thibault    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3914e095e2f3SStefan Weil  else
39157c703002SSamuel Thibault    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
39168ddc5bf9SSamuel Thibault    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3917e095e2f3SStefan Weil  fi
3918c584a6d0SJuan Quintela  curses_found=no
39194d3b6f6eSbalrog  cat > $TMPC << EOF
39208ddc5bf9SSamuel Thibault#include <locale.h>
39214d3b6f6eSbalrog#include <curses.h>
39228ddc5bf9SSamuel Thibault#include <wchar.h>
39232f8b7cd5SSamuel Thibault#include <langinfo.h>
3924ef9a2524SStefan Weilint main(void) {
39252f8b7cd5SSamuel Thibault  const char *codeset;
39268ddc5bf9SSamuel Thibault  wchar_t wch = L'w';
39278ddc5bf9SSamuel Thibault  setlocale(LC_ALL, "");
3928ef9a2524SStefan Weil  resize_term(0, 0);
39298ddc5bf9SSamuel Thibault  addwstr(L"wide chars\n");
39308ddc5bf9SSamuel Thibault  addnwstr(&wch, 1);
39317c703002SSamuel Thibault  add_wch(WACS_DEGREE);
39322f8b7cd5SSamuel Thibault  codeset = nl_langinfo(CODESET);
39332f8b7cd5SSamuel Thibault  return codeset != 0;
3934ef9a2524SStefan Weil}
39354d3b6f6eSbalrogEOF
3936ecbe251fSVadim Evard  IFS=:
39378ddc5bf9SSamuel Thibault  for curses_inc in $curses_inc_list; do
3938b01a4fd3SPeter Maydell    # Make sure we get the wide character prototypes
3939b01a4fd3SPeter Maydell    curses_inc="-DNCURSES_WIDECHAR $curses_inc"
39407c703002SSamuel Thibault    IFS=:
39418ddc5bf9SSamuel Thibault    for curses_lib in $curses_lib_list; do
3942ecbe251fSVadim Evard      unset IFS
39438ddc5bf9SSamuel Thibault      if compile_prog "$curses_inc" "$curses_lib" ; then
3944c584a6d0SJuan Quintela        curses_found=yes
39454f78ef9aSJuan Quintela        break
39464d3b6f6eSbalrog      fi
39474f78ef9aSJuan Quintela    done
39487c703002SSamuel Thibault    if test "$curses_found" = yes ; then
39497c703002SSamuel Thibault      break
39507c703002SSamuel Thibault    fi
39518ddc5bf9SSamuel Thibault  done
3952ecbe251fSVadim Evard  unset IFS
3953c584a6d0SJuan Quintela  if test "$curses_found" = "yes" ; then
3954c584a6d0SJuan Quintela    curses=yes
3955c584a6d0SJuan Quintela  else
3956c584a6d0SJuan Quintela    if test "$curses" = "yes" ; then
395721684af0SStewart Smith      feature_not_found "curses" "Install ncurses devel"
3958c584a6d0SJuan Quintela    fi
3959c584a6d0SJuan Quintela    curses=no
3960c584a6d0SJuan Quintela  fi
39614f78ef9aSJuan Quintelafi
39624d3b6f6eSbalrog
3963414f0dabSblueswir1##########################################
3964769ce76dSAlexander Graf# curl probe
3965a3605bf6SMichael Tokarevif test "$curl" != "no" ; then
396665d5d3f9SStefan Weil  if $pkg_config libcurl --exists; then
3967a8bd70adSPaolo Bonzini    curlconfig="$pkg_config libcurl"
39684e2b0658SPaolo Bonzini  else
39694e2b0658SPaolo Bonzini    curlconfig=curl-config
39704e2b0658SPaolo Bonzini  fi
3971769ce76dSAlexander Graf  cat > $TMPC << EOF
3972769ce76dSAlexander Graf#include <curl/curl.h>
39730b862cedSPeter Maydellint main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3974769ce76dSAlexander GrafEOF
397589138857SStefan Weil  curl_cflags=$($curlconfig --cflags 2>/dev/null)
397689138857SStefan Weil  curl_libs=$($curlconfig --libs 2>/dev/null)
3977b1d5a277SJuan Quintela  if compile_prog "$curl_cflags" "$curl_libs" ; then
3978769ce76dSAlexander Graf    curl=yes
3979788c8196SJuan Quintela  else
3980788c8196SJuan Quintela    if test "$curl" = "yes" ; then
398121684af0SStewart Smith      feature_not_found "curl" "Install libcurl devel"
3982788c8196SJuan Quintela    fi
3983788c8196SJuan Quintela    curl=no
3984769ce76dSAlexander Graf  fi
3985769ce76dSAlexander Graffi # test "$curl"
3986769ce76dSAlexander Graf
3987769ce76dSAlexander Graf##########################################
3988e18df141SAnthony Liguori# glib support probe
3989a52d28afSPaolo Bonzini
399000f2cfbbSDaniel P. Berrangéglib_req_ver=2.48
3991aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
3992aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
3993a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
3994aa0d1f44SPaolo Bonzinifi
399554cb65d8SEmilio G. Cotaif test "$plugins" = yes; then
399654cb65d8SEmilio G. Cota    glib_modules="$glib_modules gmodule-2.0"
399754cb65d8SEmilio G. Cotafi
3998e26110cfSFam Zheng
39994eaf7202SSameeh Jubran# This workaround is required due to a bug in pkg-config file for glib as it
40004eaf7202SSameeh Jubran# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
40014eaf7202SSameeh Jubran
4002e633a5c6SEric Blakeif test "$static" = yes && test "$mingw32" = yes; then
40034eaf7202SSameeh Jubran    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
40044eaf7202SSameeh Jubranfi
40054eaf7202SSameeh Jubran
4006aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
4007e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
400889138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
400989138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
40104a058899SMarc-André Lureau        QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
401114015304SAnthony Liguori        LIBS="$glib_libs $LIBS"
4012e18df141SAnthony Liguori    else
4013e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
4014e26110cfSFam Zheng    fi
4015e26110cfSFam Zhengdone
4016e26110cfSFam Zheng
4017f876b765SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
4018f876b765SMarc-André Lureau    gio=yes
4019f876b765SMarc-André Lureau    gio_cflags=$($pkg_config --cflags gio-2.0)
4020f876b765SMarc-André Lureau    gio_libs=$($pkg_config --libs gio-2.0)
402125a97a56SMarc-André Lureau    gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
40220dba4897SMarc-André Lureau    if [ ! -x "$gdbus_codegen" ]; then
40230dba4897SMarc-André Lureau        gdbus_codegen=
40240dba4897SMarc-André Lureau    fi
4025f876b765SMarc-André Lureauelse
4026f876b765SMarc-André Lureau    gio=no
4027f876b765SMarc-André Lureaufi
4028f876b765SMarc-André Lureau
402925a97a56SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
403025a97a56SMarc-André Lureau    gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
403125a97a56SMarc-André Lureau    gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
403225a97a56SMarc-André Lureaufi
403325a97a56SMarc-André Lureau
4034977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
4035977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
4036977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
4037977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
4038977a82abSDaniel P. Berrangecat > $TMPC <<EOF
4039977a82abSDaniel P. Berrange#include <glib.h>
4040977a82abSDaniel P. Berrange#include <unistd.h>
4041977a82abSDaniel P. Berrange
4042977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
4043977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
4044977a82abSDaniel P. Berrange
4045977a82abSDaniel P. Berrangeint main(void) {
4046977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
4047977a82abSDaniel P. Berrange   return 0;
4048977a82abSDaniel P. Berrange}
4049977a82abSDaniel P. BerrangeEOF
4050977a82abSDaniel P. Berrange
40515919e032SStefan Weilif ! compile_prog "$CFLAGS" "$LIBS" ; then
4052977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
4053977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
4054977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
4055977a82abSDaniel P. Berrange	       "build target"
4056977a82abSDaniel P. Berrangefi
4057977a82abSDaniel P. Berrange
4058bbbf2e04SJohn Snow# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
4059bbbf2e04SJohn Snowcat > $TMPC << EOF
4060bbbf2e04SJohn Snow#include <glib.h>
4061bbbf2e04SJohn Snowint main(void) { return 0; }
4062bbbf2e04SJohn SnowEOF
4063bbbf2e04SJohn Snowif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
4064bbbf2e04SJohn Snow    if cc_has_warning_flag "-Wno-unknown-attributes"; then
4065bbbf2e04SJohn Snow        glib_cflags="-Wno-unknown-attributes $glib_cflags"
4066086d5f75SPaolo Bonzini        QEMU_CFLAGS="-Wno-unknown-attributes $CFLAGS"
4067bbbf2e04SJohn Snow    fi
4068bbbf2e04SJohn Snowfi
4069bbbf2e04SJohn Snow
40709bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2
40719bda600bSEric Blakecat > $TMPC << EOF
40729bda600bSEric Blake#include <glib.h>
40739bda600bSEric Blaketypedef struct Foo {
40749bda600bSEric Blake    int i;
40759bda600bSEric Blake} Foo;
40769bda600bSEric Blakestatic void foo_free(Foo *f)
40779bda600bSEric Blake{
40789bda600bSEric Blake    g_free(f);
40799bda600bSEric Blake}
40809bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
40819bda600bSEric Blakeint main(void) { return 0; }
40829bda600bSEric BlakeEOF
40839bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
40849bda600bSEric Blake    if cc_has_warning_flag "-Wno-unused-function"; then
40859bda600bSEric Blake        glib_cflags="$glib_cflags -Wno-unused-function"
40869bda600bSEric Blake        CFLAGS="$CFLAGS -Wno-unused-function"
40879bda600bSEric Blake    fi
40889bda600bSEric Blakefi
40899bda600bSEric Blake
40906a1f42bdSStefan Weil#########################################
40916a1f42bdSStefan Weil# zlib check
40926a1f42bdSStefan Weil
40936a1f42bdSStefan Weilif test "$zlib" != "no" ; then
40946a1f42bdSStefan Weil    if $pkg_config --exists zlib; then
40956a1f42bdSStefan Weil        zlib_cflags=$($pkg_config --cflags zlib)
40966a1f42bdSStefan Weil        zlib_libs=$($pkg_config --libs zlib)
40976a1f42bdSStefan Weil        QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
40986a1f42bdSStefan Weil        LIBS="$zlib_libs $LIBS"
40996a1f42bdSStefan Weil    else
41006a1f42bdSStefan Weil        cat > $TMPC << EOF
41016a1f42bdSStefan Weil#include <zlib.h>
41026a1f42bdSStefan Weilint main(void) { zlibVersion(); return 0; }
41036a1f42bdSStefan WeilEOF
41046a1f42bdSStefan Weil        if compile_prog "" "-lz" ; then
41055e5733e5SMarc-André Lureau            zlib_libs=-lz
41065e5733e5SMarc-André Lureau            LIBS="$LIBS $zlib_libs"
41076a1f42bdSStefan Weil        else
41086a1f42bdSStefan Weil            error_exit "zlib check failed" \
41096a1f42bdSStefan Weil                "Make sure to have the zlib libs and headers installed."
41106a1f42bdSStefan Weil        fi
41116a1f42bdSStefan Weil    fi
41126a1f42bdSStefan Weilfi
41136a1f42bdSStefan Weil
4114e26110cfSFam Zheng##########################################
4115e26110cfSFam Zheng# SHA command probe for modules
4116e26110cfSFam Zhengif test "$modules" = yes; then
4117e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
4118e26110cfSFam Zheng    for c in $shacmd_probe; do
41198ccefb91SFam Zheng        if has $c; then
4120e26110cfSFam Zheng            shacmd="$c"
4121e26110cfSFam Zheng            break
4122e26110cfSFam Zheng        fi
4123e26110cfSFam Zheng    done
4124e26110cfSFam Zheng    if test "$shacmd" = ""; then
4125e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
4126e26110cfSFam Zheng    fi
4127e18df141SAnthony Liguorifi
4128e18df141SAnthony Liguori
4129e18df141SAnthony Liguori##########################################
4130e2134eb9SGerd Hoffmann# pixman support probe
4131e2134eb9SGerd Hoffmann
41329b52b17bSThomas Huthif test "$softmmu" = "no"; then
413374880fe2SRobert Schiele  pixman_cflags=
413474880fe2SRobert Schiele  pixman_libs=
413535c4e86cSGerd Hoffmannelif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
413689138857SStefan Weil  pixman_cflags=$($pkg_config --cflags pixman-1)
413789138857SStefan Weil  pixman_libs=$($pkg_config --libs pixman-1)
4138e2134eb9SGerd Hoffmannelse
4139c12b6d70SGerd Hoffmann  error_exit "pixman >= 0.21.8 not present." \
4140c12b6d70SGerd Hoffmann      "Please install the pixman devel package."
4141e2134eb9SGerd Hoffmannfi
4142e2134eb9SGerd Hoffmann
4143e2134eb9SGerd Hoffmann##########################################
4144fe8fc5aeSPaolo Bonzini# libmpathpersist probe
4145fe8fc5aeSPaolo Bonzini
4146fe8fc5aeSPaolo Bonziniif test "$mpath" != "no" ; then
41471b0578f5SMurilo Opsfelder Araujo  # probe for the new API
4148fe8fc5aeSPaolo Bonzini  cat > $TMPC <<EOF
4149fe8fc5aeSPaolo Bonzini#include <libudev.h>
4150fe8fc5aeSPaolo Bonzini#include <mpath_persist.h>
4151fe8fc5aeSPaolo Bonziniunsigned mpath_mx_alloc_len = 1024;
4152fe8fc5aeSPaolo Bonziniint logsink;
4153b3f1c8c4SPaolo Bonzinistatic struct config *multipath_conf;
4154b3f1c8c4SPaolo Bonziniextern struct udev *udev;
4155b3f1c8c4SPaolo Bonziniextern struct config *get_multipath_config(void);
4156b3f1c8c4SPaolo Bonziniextern void put_multipath_config(struct config *conf);
4157b3f1c8c4SPaolo Bonzinistruct udev *udev;
4158b3f1c8c4SPaolo Bonzinistruct config *get_multipath_config(void) { return multipath_conf; }
4159b3f1c8c4SPaolo Bonzinivoid put_multipath_config(struct config *conf) { }
4160b3f1c8c4SPaolo Bonzini
4161fe8fc5aeSPaolo Bonziniint main(void) {
4162b3f1c8c4SPaolo Bonzini    udev = udev_new();
4163b3f1c8c4SPaolo Bonzini    multipath_conf = mpath_lib_init();
4164fe8fc5aeSPaolo Bonzini    return 0;
4165fe8fc5aeSPaolo Bonzini}
4166fe8fc5aeSPaolo BonziniEOF
4167fe8fc5aeSPaolo Bonzini  if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4168fe8fc5aeSPaolo Bonzini    mpathpersist=yes
41691b0578f5SMurilo Opsfelder Araujo    mpathpersist_new_api=yes
41701b0578f5SMurilo Opsfelder Araujo  else
41711b0578f5SMurilo Opsfelder Araujo    # probe for the old API
41721b0578f5SMurilo Opsfelder Araujo    cat > $TMPC <<EOF
41731b0578f5SMurilo Opsfelder Araujo#include <libudev.h>
41741b0578f5SMurilo Opsfelder Araujo#include <mpath_persist.h>
41751b0578f5SMurilo Opsfelder Araujounsigned mpath_mx_alloc_len = 1024;
41761b0578f5SMurilo Opsfelder Araujoint logsink;
41771b0578f5SMurilo Opsfelder Araujoint main(void) {
41781b0578f5SMurilo Opsfelder Araujo    struct udev *udev = udev_new();
41791b0578f5SMurilo Opsfelder Araujo    mpath_lib_init(udev);
41801b0578f5SMurilo Opsfelder Araujo    return 0;
41811b0578f5SMurilo Opsfelder Araujo}
41821b0578f5SMurilo Opsfelder AraujoEOF
41831b0578f5SMurilo Opsfelder Araujo    if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
41841b0578f5SMurilo Opsfelder Araujo      mpathpersist=yes
41851b0578f5SMurilo Opsfelder Araujo      mpathpersist_new_api=no
4186fe8fc5aeSPaolo Bonzini    else
4187fe8fc5aeSPaolo Bonzini      mpathpersist=no
4188fe8fc5aeSPaolo Bonzini    fi
41891b0578f5SMurilo Opsfelder Araujo  fi
4190fe8fc5aeSPaolo Bonzinielse
4191fe8fc5aeSPaolo Bonzini  mpathpersist=no
4192fe8fc5aeSPaolo Bonzinifi
4193fe8fc5aeSPaolo Bonzini
4194fe8fc5aeSPaolo Bonzini##########################################
4195e5d355d1Saliguori# pthread probe
41964b29ec41SBradPTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
41973c529d93Saliguori
4198e5d355d1Saliguoripthread=no
4199414f0dabSblueswir1cat > $TMPC << EOF
42003c529d93Saliguori#include <pthread.h>
42017a42bbe4SStefan Weilstatic void *f(void *p) { return NULL; }
42027a42bbe4SStefan Weilint main(void) {
42037a42bbe4SStefan Weil  pthread_t thread;
42047a42bbe4SStefan Weil  pthread_create(&thread, 0, f, 0);
42057a42bbe4SStefan Weil  return 0;
42067a42bbe4SStefan Weil}
4207414f0dabSblueswir1EOF
4208bd00d539SAndreas Färberif compile_prog "" "" ; then
4209bd00d539SAndreas Färber  pthread=yes
4210bd00d539SAndreas Färberelse
4211de65fe0fSSebastian Herbszt  for pthread_lib in $PTHREADLIBS_LIST; do
421252166aa0SJuan Quintela    if compile_prog "" "$pthread_lib" ; then
4213e5d355d1Saliguori      pthread=yes
4214e3c56761SPeter Portante      found=no
4215e3c56761SPeter Portante      for lib_entry in $LIBS; do
4216e3c56761SPeter Portante        if test "$lib_entry" = "$pthread_lib"; then
4217e3c56761SPeter Portante          found=yes
4218e3c56761SPeter Portante          break
4219e3c56761SPeter Portante        fi
4220e3c56761SPeter Portante      done
4221e3c56761SPeter Portante      if test "$found" = "no"; then
42225572b539SJuan Quintela        LIBS="$pthread_lib $LIBS"
4223e3c56761SPeter Portante      fi
4224409437e1SDaniel P. Berrange      PTHREAD_LIB="$pthread_lib"
4225de65fe0fSSebastian Herbszt      break
4226414f0dabSblueswir1    fi
4227de65fe0fSSebastian Herbszt  done
4228bd00d539SAndreas Färberfi
4229414f0dabSblueswir1
4230e633a5c6SEric Blakeif test "$mingw32" != yes && test "$pthread" = no; then
423176ad07a4SPeter Maydell  error_exit "pthread check failed" \
423276ad07a4SPeter Maydell      "Make sure to have the pthread libs and headers installed."
4233e5d355d1Saliguorifi
4234e5d355d1Saliguori
4235479a5747SRoman Bolshakov# check for pthread_setname_np with thread id
4236479a5747SRoman Bolshakovpthread_setname_np_w_tid=no
42375c312079SDr. David Alan Gilbertcat > $TMPC << EOF
42385c312079SDr. David Alan Gilbert#include <pthread.h>
42395c312079SDr. David Alan Gilbert
42405c312079SDr. David Alan Gilbertstatic void *f(void *p) { return NULL; }
42415c312079SDr. David Alan Gilbertint main(void)
42425c312079SDr. David Alan Gilbert{
42435c312079SDr. David Alan Gilbert    pthread_t thread;
42445c312079SDr. David Alan Gilbert    pthread_create(&thread, 0, f, 0);
42455c312079SDr. David Alan Gilbert    pthread_setname_np(thread, "QEMU");
42465c312079SDr. David Alan Gilbert    return 0;
42475c312079SDr. David Alan Gilbert}
42485c312079SDr. David Alan GilbertEOF
42495c312079SDr. David Alan Gilbertif compile_prog "" "$pthread_lib" ; then
4250479a5747SRoman Bolshakov  pthread_setname_np_w_tid=yes
4251479a5747SRoman Bolshakovfi
4252479a5747SRoman Bolshakov
4253479a5747SRoman Bolshakov# check for pthread_setname_np without thread id
4254479a5747SRoman Bolshakovpthread_setname_np_wo_tid=no
4255479a5747SRoman Bolshakovcat > $TMPC << EOF
4256479a5747SRoman Bolshakov#include <pthread.h>
4257479a5747SRoman Bolshakov
425812a9b8d8SThomas Huthstatic void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
4259479a5747SRoman Bolshakovint main(void)
4260479a5747SRoman Bolshakov{
4261479a5747SRoman Bolshakov    pthread_t thread;
4262479a5747SRoman Bolshakov    pthread_create(&thread, 0, f, 0);
4263479a5747SRoman Bolshakov    return 0;
4264479a5747SRoman Bolshakov}
4265479a5747SRoman BolshakovEOF
4266479a5747SRoman Bolshakovif compile_prog "" "$pthread_lib" ; then
4267479a5747SRoman Bolshakov  pthread_setname_np_wo_tid=yes
42685c312079SDr. David Alan Gilbertfi
42695c312079SDr. David Alan Gilbert
4270bf9298b9Saliguori##########################################
4271f27aaf4bSChristian Brunner# rbd probe
4272f27aaf4bSChristian Brunnerif test "$rbd" != "no" ; then
4273f27aaf4bSChristian Brunner  cat > $TMPC <<EOF
4274f27aaf4bSChristian Brunner#include <stdio.h>
4275ad32e9c0SJosh Durgin#include <rbd/librbd.h>
4276f27aaf4bSChristian Brunnerint main(void) {
4277ad32e9c0SJosh Durgin    rados_t cluster;
4278ad32e9c0SJosh Durgin    rados_create(&cluster, NULL);
4279f27aaf4bSChristian Brunner    return 0;
4280f27aaf4bSChristian Brunner}
4281f27aaf4bSChristian BrunnerEOF
4282ad32e9c0SJosh Durgin  rbd_libs="-lrbd -lrados"
4283f27aaf4bSChristian Brunner  if compile_prog "" "$rbd_libs" ; then
4284f27aaf4bSChristian Brunner    rbd=yes
4285f27aaf4bSChristian Brunner  else
4286f27aaf4bSChristian Brunner    if test "$rbd" = "yes" ; then
428721684af0SStewart Smith      feature_not_found "rados block device" "Install librbd/ceph devel"
4288f27aaf4bSChristian Brunner    fi
4289f27aaf4bSChristian Brunner    rbd=no
4290f27aaf4bSChristian Brunner  fi
4291f27aaf4bSChristian Brunnerfi
4292f27aaf4bSChristian Brunner
4293f27aaf4bSChristian Brunner##########################################
4294b10d49d7SPino Toscano# libssh probe
4295b10d49d7SPino Toscanoif test "$libssh" != "no" ; then
4296b10d49d7SPino Toscano  if $pkg_config --exists libssh; then
4297b10d49d7SPino Toscano    libssh_cflags=$($pkg_config libssh --cflags)
4298b10d49d7SPino Toscano    libssh_libs=$($pkg_config libssh --libs)
4299b10d49d7SPino Toscano    libssh=yes
43000a12ec87SRichard W.M. Jones  else
4301b10d49d7SPino Toscano    if test "$libssh" = "yes" ; then
4302b10d49d7SPino Toscano      error_exit "libssh required for --enable-libssh"
43030a12ec87SRichard W.M. Jones    fi
4304b10d49d7SPino Toscano    libssh=no
43050a12ec87SRichard W.M. Jones  fi
43060a12ec87SRichard W.M. Jonesfi
43070a12ec87SRichard W.M. Jones
43080a12ec87SRichard W.M. Jones##########################################
4309b10d49d7SPino Toscano# Check for libssh 0.8
4310b10d49d7SPino Toscano# This is done like this instead of using the LIBSSH_VERSION_* and
4311b10d49d7SPino Toscano# SSH_VERSION_* macros because some distributions in the past shipped
4312b10d49d7SPino Toscano# snapshots of the future 0.8 from Git, and those snapshots did not
4313b10d49d7SPino Toscano# have updated version numbers (still referring to 0.7.0).
43149a2d462eSRichard W.M. Jones
4315b10d49d7SPino Toscanoif test "$libssh" = "yes"; then
43169a2d462eSRichard W.M. Jones  cat > $TMPC <<EOF
4317b10d49d7SPino Toscano#include <libssh/libssh.h>
4318b10d49d7SPino Toscanoint main(void) { return ssh_get_server_publickey(NULL, NULL); }
43199a2d462eSRichard W.M. JonesEOF
4320b10d49d7SPino Toscano  if compile_prog "$libssh_cflags" "$libssh_libs"; then
4321b10d49d7SPino Toscano    libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
43229a2d462eSRichard W.M. Jones  fi
43239a2d462eSRichard W.M. Jonesfi
43249a2d462eSRichard W.M. Jones
43259a2d462eSRichard W.M. Jones##########################################
43265c6c3a6cSChristoph Hellwig# linux-aio probe
43275c6c3a6cSChristoph Hellwig
43285c6c3a6cSChristoph Hellwigif test "$linux_aio" != "no" ; then
43295c6c3a6cSChristoph Hellwig  cat > $TMPC <<EOF
43305c6c3a6cSChristoph Hellwig#include <libaio.h>
43315c6c3a6cSChristoph Hellwig#include <sys/eventfd.h>
4332832ce9c2SScott Wood#include <stddef.h>
43335c6c3a6cSChristoph Hellwigint main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
43345c6c3a6cSChristoph HellwigEOF
43355c6c3a6cSChristoph Hellwig  if compile_prog "" "-laio" ; then
43365c6c3a6cSChristoph Hellwig    linux_aio=yes
43375c6c3a6cSChristoph Hellwig  else
43385c6c3a6cSChristoph Hellwig    if test "$linux_aio" = "yes" ; then
433921684af0SStewart Smith      feature_not_found "linux AIO" "Install libaio devel"
43405c6c3a6cSChristoph Hellwig    fi
43413cfcae3cSLuiz Capitulino    linux_aio=no
43425c6c3a6cSChristoph Hellwig  fi
43435c6c3a6cSChristoph Hellwigfi
4344c10dd856SAarushi Mehta##########################################
4345c10dd856SAarushi Mehta# linux-io-uring probe
4346c10dd856SAarushi Mehta
4347c10dd856SAarushi Mehtaif test "$linux_io_uring" != "no" ; then
4348c10dd856SAarushi Mehta  if $pkg_config liburing; then
4349c10dd856SAarushi Mehta    linux_io_uring_cflags=$($pkg_config --cflags liburing)
4350c10dd856SAarushi Mehta    linux_io_uring_libs=$($pkg_config --libs liburing)
4351c10dd856SAarushi Mehta    linux_io_uring=yes
435273fd282eSStefan Hajnoczi
435373fd282eSStefan Hajnoczi    # io_uring is used in libqemuutil.a where per-file -libs variables are not
435473fd282eSStefan Hajnoczi    # seen by programs linking the archive.  It's not ideal, but just add the
435573fd282eSStefan Hajnoczi    # library dependency globally.
435673fd282eSStefan Hajnoczi    LIBS="$linux_io_uring_libs $LIBS"
4357c10dd856SAarushi Mehta  else
4358c10dd856SAarushi Mehta    if test "$linux_io_uring" = "yes" ; then
4359c10dd856SAarushi Mehta      feature_not_found "linux io_uring" "Install liburing devel"
4360c10dd856SAarushi Mehta    fi
4361c10dd856SAarushi Mehta    linux_io_uring=no
4362c10dd856SAarushi Mehta  fi
4363c10dd856SAarushi Mehtafi
43645c6c3a6cSChristoph Hellwig
43655c6c3a6cSChristoph Hellwig##########################################
43667aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX
43673b8acc11SPaolo Bonzini
43687aaa6a16SPaolo Bonziniif test "$tpm" = ""; then
43697aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes"; then
43707aaa6a16SPaolo Bonzini    tpm=no
43713b8acc11SPaolo Bonzini  else
43727aaa6a16SPaolo Bonzini    tpm=yes
43737aaa6a16SPaolo Bonzini  fi
43747aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then
43757aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes" ; then
43767aaa6a16SPaolo Bonzini    error_exit "TPM emulation only available on POSIX systems"
43777aaa6a16SPaolo Bonzini  fi
43783b8acc11SPaolo Bonzinifi
43793b8acc11SPaolo Bonzini
43803b8acc11SPaolo Bonzini##########################################
4381758e8e38SVenkateswararao Jujjuri (JV)# attr probe
4382758e8e38SVenkateswararao Jujjuri (JV)
4383ec0d5893SMarc-André Lureaulibattr_libs=
4384758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" != "no" ; then
4385758e8e38SVenkateswararao Jujjuri (JV)  cat > $TMPC <<EOF
4386758e8e38SVenkateswararao Jujjuri (JV)#include <stdio.h>
4387758e8e38SVenkateswararao Jujjuri (JV)#include <sys/types.h>
4388f2338fb4SPavel Borzenkov#ifdef CONFIG_LIBATTR
4389f2338fb4SPavel Borzenkov#include <attr/xattr.h>
4390f2338fb4SPavel Borzenkov#else
43914f26f2b6SAvi Kivity#include <sys/xattr.h>
4392f2338fb4SPavel Borzenkov#endif
4393758e8e38SVenkateswararao Jujjuri (JV)int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4394758e8e38SVenkateswararao Jujjuri (JV)EOF
43954f26f2b6SAvi Kivity  if compile_prog "" "" ; then
43964f26f2b6SAvi Kivity    attr=yes
43974f26f2b6SAvi Kivity  # Older distros have <attr/xattr.h>, and need -lattr:
4398f2338fb4SPavel Borzenkov  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4399758e8e38SVenkateswararao Jujjuri (JV)    attr=yes
4400ec0d5893SMarc-André Lureau    libattr_libs="-lattr"
4401ec0d5893SMarc-André Lureau    LIBS="$libattr_libs $LIBS"
44024f26f2b6SAvi Kivity    libattr=yes
4403758e8e38SVenkateswararao Jujjuri (JV)  else
4404758e8e38SVenkateswararao Jujjuri (JV)    if test "$attr" = "yes" ; then
440521684af0SStewart Smith      feature_not_found "ATTR" "Install libc6 or libattr devel"
4406758e8e38SVenkateswararao Jujjuri (JV)    fi
4407758e8e38SVenkateswararao Jujjuri (JV)    attr=no
4408758e8e38SVenkateswararao Jujjuri (JV)  fi
4409758e8e38SVenkateswararao Jujjuri (JV)fi
4410758e8e38SVenkateswararao Jujjuri (JV)
4411758e8e38SVenkateswararao Jujjuri (JV)##########################################
4412bf9298b9Saliguori# iovec probe
4413bf9298b9Saliguoricat > $TMPC <<EOF
4414db34f0b3Sblueswir1#include <sys/types.h>
4415bf9298b9Saliguori#include <sys/uio.h>
4416db34f0b3Sblueswir1#include <unistd.h>
4417f91f9beeSStefan Weilint main(void) { return sizeof(struct iovec); }
4418bf9298b9SaliguoriEOF
4419bf9298b9Saliguoriiovec=no
442052166aa0SJuan Quintelaif compile_prog "" "" ; then
4421bf9298b9Saliguori  iovec=yes
4422bf9298b9Saliguorifi
4423bf9298b9Saliguori
4424f652e6afSaurel32##########################################
4425ceb42de8Saliguori# preadv probe
4426ceb42de8Saliguoricat > $TMPC <<EOF
4427ceb42de8Saliguori#include <sys/types.h>
4428ceb42de8Saliguori#include <sys/uio.h>
4429ceb42de8Saliguori#include <unistd.h>
4430c075a723SBlue Swirlint main(void) { return preadv(0, 0, 0, 0); }
4431ceb42de8SaliguoriEOF
4432ceb42de8Saliguoripreadv=no
443352166aa0SJuan Quintelaif compile_prog "" "" ; then
4434ceb42de8Saliguori  preadv=yes
4435ceb42de8Saliguorifi
4436ceb42de8Saliguori
4437ceb42de8Saliguori##########################################
4438f652e6afSaurel32# fdt probe
4439e169e1e1SPeter Maydell# fdt support is mandatory for at least some target architectures,
4440e169e1e1SPeter Maydell# so insist on it if we're building those system emulators.
4441e169e1e1SPeter Maydellfdt_required=no
4442e169e1e1SPeter Maydellfor target in $target_list; do
4443e169e1e1SPeter Maydell  case $target in
4444c8c35e5fSYoshinori Sato    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4445e169e1e1SPeter Maydell      fdt_required=yes
4446e169e1e1SPeter Maydell    ;;
4447e169e1e1SPeter Maydell  esac
4448e169e1e1SPeter Maydelldone
4449e169e1e1SPeter Maydell
4450e169e1e1SPeter Maydellif test "$fdt_required" = "yes"; then
4451e169e1e1SPeter Maydell  if test "$fdt" = "no"; then
4452e169e1e1SPeter Maydell    error_exit "fdt disabled but some requested targets require it." \
4453e169e1e1SPeter Maydell      "You can turn off fdt only if you also disable all the system emulation" \
4454e169e1e1SPeter Maydell      "targets which need it (by specifying a cut down --target-list)."
4455e169e1e1SPeter Maydell  fi
4456e169e1e1SPeter Maydell  fdt=yes
44577ba4a4d3SPhilippe Mathieu-Daudéelif test "$fdt" != "yes" ; then
44587ba4a4d3SPhilippe Mathieu-Daudé  fdt=no
4459e169e1e1SPeter Maydellfi
4460e169e1e1SPeter Maydell
4461d599938aSLaurent Vivier# fdt is only required when building softmmu targets
4462d599938aSLaurent Vivierif test -z "$fdt" -a "$softmmu" != "yes" ; then
4463d599938aSLaurent Vivier    fdt="no"
4464d599938aSLaurent Vivierfi
4465d599938aSLaurent Vivier
44662df87df7SJuan Quintelaif test "$fdt" != "no" ; then
4467b41af4baSJuan Quintela  fdt_libs="-lfdt"
446896ce6545SPeter Crosthwaite  # explicitly check for libfdt_env.h as it is missing in some stable installs
44696e85fce0SPaul Burton  # and test for required functions to make sure we are on a version >= 1.4.2
4470f652e6afSaurel32  cat > $TMPC << EOF
447131ce0adbSThomas Huth#include <libfdt.h>
447296ce6545SPeter Crosthwaite#include <libfdt_env.h>
4473fea35ca4SAlexey Kardashevskiyint main(void) { fdt_check_full(NULL, 0); return 0; }
4474f652e6afSaurel32EOF
447552166aa0SJuan Quintela  if compile_prog "" "$fdt_libs" ; then
4476a540f158SPeter Crosthwaite    # system DTC is good - use it
4477e3971d61SPhilippe Mathieu-Daudé    fdt=system
4478aef45d51SDaniel P. Berrange  else
4479aef45d51SDaniel P. Berrange      # have GIT checkout, so activate dtc submodule
4480aef45d51SDaniel P. Berrange      if test -e "${source_path}/.git" ; then
4481aef45d51SDaniel P. Berrange          git_submodules="${git_submodules} dtc"
4482aef45d51SDaniel P. Berrange      fi
4483aef45d51SDaniel P. Berrange      if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4484e3971d61SPhilippe Mathieu-Daudé          fdt=git
4485a540f158SPeter Crosthwaite          mkdir -p dtc
4486cab00a5aSMichael S. Tsirkin          if [ "$pwd_is_source_path" != "y" ] ; then
4487a540f158SPeter Crosthwaite              symlink "$source_path/dtc/Makefile" "dtc/Makefile"
44882df87df7SJuan Quintela          fi
448925211446SPaolo Bonzini          fdt_cflags="-I${source_path}/dtc/libfdt"
449025211446SPaolo Bonzini          fdt_ldflags="-L$PWD/dtc/libfdt"
44918a99e9a3SPhilippe Mathieu-Daudé          fdt_libs="$fdt_libs"
4492a540f158SPeter Crosthwaite      elif test "$fdt" = "yes" ; then
4493aef45d51SDaniel P. Berrange          # Not a git build & no libfdt found, prompt for system install
4494aef45d51SDaniel P. Berrange          error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4495aef45d51SDaniel P. Berrange                     "Please install the DTC (libfdt) devel package"
4496a540f158SPeter Crosthwaite      else
4497a540f158SPeter Crosthwaite          # don't have and don't want
4498de3a354aSMichael Walle          fdt_libs=
44992df87df7SJuan Quintela          fdt=no
4500f652e6afSaurel32      fi
4501f652e6afSaurel32  fi
4502aef45d51SDaniel P. Berrangefi
4503f652e6afSaurel32
4504a540f158SPeter Crosthwaitelibs_softmmu="$libs_softmmu $fdt_libs"
4505a540f158SPeter Crosthwaite
450620ff075bSMichael Walle##########################################
4507fb719563SOGAWA Hirofumi# opengl probe (for sdl2, gtk, milkymist-tmu2)
4508b1546f32SGerd Hoffmann
4509d52c454aSMarc-André Lureaugbm="no"
4510d52c454aSMarc-André Lureauif $pkg_config gbm; then
4511d52c454aSMarc-André Lureau    gbm_cflags="$($pkg_config --cflags gbm)"
4512d52c454aSMarc-André Lureau    gbm_libs="$($pkg_config --libs gbm)"
4513d52c454aSMarc-André Lureau    gbm="yes"
4514d52c454aSMarc-André Lureaufi
4515d52c454aSMarc-André Lureau
4516da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
45174939a1dfSMichael Tokarev  opengl_pkgs="epoxy gbm"
45185f9b1e35SGerd Hoffmann  if $pkg_config $opengl_pkgs; then
45195f9b1e35SGerd Hoffmann    opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
45205f9b1e35SGerd Hoffmann    opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4521da076ffeSGerd Hoffmann    opengl=yes
4522925a0400SGerd Hoffmann    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4523925a0400SGerd Hoffmann        gtk_gl="yes"
4524925a0400SGerd Hoffmann    fi
4525cc720a5dSGerd Hoffmann    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
452620ff075bSMichael Walle  else
4527da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
4528dcf30025SGerd Hoffmann      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
452920ff075bSMichael Walle    fi
4530f676c67eSJeremy White    opengl_cflags=""
4531da076ffeSGerd Hoffmann    opengl_libs=""
4532da076ffeSGerd Hoffmann    opengl=no
453320ff075bSMichael Walle  fi
453420ff075bSMichael Wallefi
453520ff075bSMichael Walle
4536014cb152SGerd Hoffmannif test "$opengl" = "yes"; then
4537014cb152SGerd Hoffmann  cat > $TMPC << EOF
4538014cb152SGerd Hoffmann#include <epoxy/egl.h>
4539014cb152SGerd Hoffmann#ifndef EGL_MESA_image_dma_buf_export
4540014cb152SGerd Hoffmann# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4541014cb152SGerd Hoffmann#endif
4542014cb152SGerd Hoffmannint main(void) { return 0; }
4543014cb152SGerd HoffmannEOF
4544014cb152SGerd Hoffmann  if compile_prog "" "" ; then
4545014cb152SGerd Hoffmann    opengl_dmabuf=yes
4546014cb152SGerd Hoffmann  fi
4547014cb152SGerd Hoffmannfi
4548c9a12e75SChrysostomos Nanakos
4549e633a5c6SEric Blakeif test "$opengl" = "yes" && test "$have_x11" = "yes"; then
455099e1a93bSPhilippe Mathieu-Daudé  for target in $target_list; do
455199e1a93bSPhilippe Mathieu-Daudé    case $target in
455299e1a93bSPhilippe Mathieu-Daudé      lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
455399e1a93bSPhilippe Mathieu-Daudé        need_x11=yes
455499e1a93bSPhilippe Mathieu-Daudé      ;;
455599e1a93bSPhilippe Mathieu-Daudé    esac
455699e1a93bSPhilippe Mathieu-Daudé  done
455799e1a93bSPhilippe Mathieu-Daudéfi
455899e1a93bSPhilippe Mathieu-Daudé
4559ed279a06SKlim Kireev##########################################
4560ed279a06SKlim Kireev# libxml2 probe
4561ed279a06SKlim Kireevif test "$libxml2" != "no" ; then
4562ed279a06SKlim Kireev    if $pkg_config --exists libxml-2.0; then
4563ed279a06SKlim Kireev        libxml2="yes"
4564ed279a06SKlim Kireev        libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4565ed279a06SKlim Kireev        libxml2_libs=$($pkg_config --libs libxml-2.0)
4566ed279a06SKlim Kireev    else
4567ed279a06SKlim Kireev        if test "$libxml2" = "yes"; then
4568ed279a06SKlim Kireev            feature_not_found "libxml2" "Install libxml2 devel"
4569ed279a06SKlim Kireev        fi
4570ed279a06SKlim Kireev        libxml2="no"
4571ed279a06SKlim Kireev    fi
4572ed279a06SKlim Kireevfi
4573c9a12e75SChrysostomos Nanakos
4574eb100396SBharata B Rao##########################################
4575eb100396SBharata B Rao# glusterfs probe
4576eb100396SBharata B Raoif test "$glusterfs" != "no" ; then
457765d5d3f9SStefan Weil  if $pkg_config --atleast-version=3 glusterfs-api; then
4578e01bee08SBharata B Rao    glusterfs="yes"
457989138857SStefan Weil    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
458089138857SStefan Weil    glusterfs_libs=$($pkg_config --libs glusterfs-api)
4581d85fa9ebSJeff Cody    if $pkg_config --atleast-version=4 glusterfs-api; then
4582d85fa9ebSJeff Cody      glusterfs_xlator_opt="yes"
4583d85fa9ebSJeff Cody    fi
458465d5d3f9SStefan Weil    if $pkg_config --atleast-version=5 glusterfs-api; then
45850c14fb47SBharata B Rao      glusterfs_discard="yes"
45860c14fb47SBharata B Rao    fi
45877c815372SBharata B Rao    if $pkg_config --atleast-version=6 glusterfs-api; then
4588df3a429aSNiels de Vos      glusterfs_fallocate="yes"
45897c815372SBharata B Rao      glusterfs_zerofill="yes"
45907c815372SBharata B Rao    fi
4591e014dbe7SPrasanna Kumar Kalever    cat > $TMPC << EOF
4592e014dbe7SPrasanna Kumar Kalever#include <glusterfs/api/glfs.h>
4593e014dbe7SPrasanna Kumar Kalever
4594e014dbe7SPrasanna Kumar Kaleverint
4595e014dbe7SPrasanna Kumar Kalevermain(void)
4596e014dbe7SPrasanna Kumar Kalever{
4597e014dbe7SPrasanna Kumar Kalever	/* new glfs_ftruncate() passes two additional args */
4598e014dbe7SPrasanna Kumar Kalever	return glfs_ftruncate(NULL, 0, NULL, NULL);
4599e014dbe7SPrasanna Kumar Kalever}
4600e014dbe7SPrasanna Kumar KaleverEOF
4601e014dbe7SPrasanna Kumar Kalever    if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4602e014dbe7SPrasanna Kumar Kalever      glusterfs_ftruncate_has_stat="yes"
4603e014dbe7SPrasanna Kumar Kalever    fi
46040e3b891fSNiels de Vos    cat > $TMPC << EOF
46050e3b891fSNiels de Vos#include <glusterfs/api/glfs.h>
46060e3b891fSNiels de Vos
46070e3b891fSNiels de Vos/* new glfs_io_cbk() passes two additional glfs_stat structs */
46080e3b891fSNiels de Vosstatic void
46090e3b891fSNiels de Vosglusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
46100e3b891fSNiels de Vos{}
46110e3b891fSNiels de Vos
46120e3b891fSNiels de Vosint
46130e3b891fSNiels de Vosmain(void)
46140e3b891fSNiels de Vos{
46150e3b891fSNiels de Vos	glfs_io_cbk iocb = &glusterfs_iocb;
46160e3b891fSNiels de Vos	iocb(NULL, 0 , NULL, NULL, NULL);
46170e3b891fSNiels de Vos	return 0;
46180e3b891fSNiels de Vos}
46190e3b891fSNiels de VosEOF
46200e3b891fSNiels de Vos    if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
46210e3b891fSNiels de Vos      glusterfs_iocb_has_stat="yes"
46220e3b891fSNiels de Vos    fi
4623eb100396SBharata B Rao  else
4624eb100396SBharata B Rao    if test "$glusterfs" = "yes" ; then
46258efc9363SHu Tao      feature_not_found "GlusterFS backend support" \
46268efc9363SHu Tao          "Install glusterfs-api devel >= 3"
4627eb100396SBharata B Rao    fi
4628e01bee08SBharata B Rao    glusterfs="no"
4629eb100396SBharata B Rao  fi
4630eb100396SBharata B Raofi
4631eb100396SBharata B Rao
463239386ac7Saurel32# Check for inotify functions when we are building linux-user
46333b3f24adSaurel32# emulator.  This is done because older glibc versions don't
46343b3f24adSaurel32# have syscall stubs for these implemented.  In that case we
46353b3f24adSaurel32# don't provide them even if kernel supports them.
46363b3f24adSaurel32#
46373b3f24adSaurel32inotify=no
46383b3f24adSaurel32cat > $TMPC << EOF
46393b3f24adSaurel32#include <sys/inotify.h>
46403b3f24adSaurel32
46413b3f24adSaurel32int
46423b3f24adSaurel32main(void)
46433b3f24adSaurel32{
46443b3f24adSaurel32	/* try to start inotify */
46458690e420Saurel32	return inotify_init();
46463b3f24adSaurel32}
46473b3f24adSaurel32EOF
464852166aa0SJuan Quintelaif compile_prog "" "" ; then
46493b3f24adSaurel32  inotify=yes
46503b3f24adSaurel32fi
46513b3f24adSaurel32
4652c05c7a73SRiku Voipioinotify1=no
4653c05c7a73SRiku Voipiocat > $TMPC << EOF
4654c05c7a73SRiku Voipio#include <sys/inotify.h>
4655c05c7a73SRiku Voipio
4656c05c7a73SRiku Voipioint
4657c05c7a73SRiku Voipiomain(void)
4658c05c7a73SRiku Voipio{
4659c05c7a73SRiku Voipio    /* try to start inotify */
4660c05c7a73SRiku Voipio    return inotify_init1(0);
4661c05c7a73SRiku Voipio}
4662c05c7a73SRiku VoipioEOF
4663c05c7a73SRiku Voipioif compile_prog "" "" ; then
4664c05c7a73SRiku Voipio  inotify1=yes
4665c05c7a73SRiku Voipiofi
4666c05c7a73SRiku Voipio
4667099d6b0fSRiku Voipio# check if pipe2 is there
4668099d6b0fSRiku Voipiopipe2=no
4669099d6b0fSRiku Voipiocat > $TMPC << EOF
4670099d6b0fSRiku Voipio#include <unistd.h>
4671099d6b0fSRiku Voipio#include <fcntl.h>
4672099d6b0fSRiku Voipio
4673099d6b0fSRiku Voipioint main(void)
4674099d6b0fSRiku Voipio{
4675099d6b0fSRiku Voipio    int pipefd[2];
46769bca8162SBruce Rogers    return pipe2(pipefd, O_CLOEXEC);
4677099d6b0fSRiku Voipio}
4678099d6b0fSRiku VoipioEOF
467952166aa0SJuan Quintelaif compile_prog "" "" ; then
4680099d6b0fSRiku Voipio  pipe2=yes
4681099d6b0fSRiku Voipiofi
4682099d6b0fSRiku Voipio
468340ff6d7eSKevin Wolf# check if accept4 is there
468440ff6d7eSKevin Wolfaccept4=no
468540ff6d7eSKevin Wolfcat > $TMPC << EOF
468640ff6d7eSKevin Wolf#include <sys/socket.h>
468740ff6d7eSKevin Wolf#include <stddef.h>
468840ff6d7eSKevin Wolf
468940ff6d7eSKevin Wolfint main(void)
469040ff6d7eSKevin Wolf{
469140ff6d7eSKevin Wolf    accept4(0, NULL, NULL, SOCK_CLOEXEC);
469240ff6d7eSKevin Wolf    return 0;
469340ff6d7eSKevin Wolf}
469440ff6d7eSKevin WolfEOF
469540ff6d7eSKevin Wolfif compile_prog "" "" ; then
469640ff6d7eSKevin Wolf  accept4=yes
469740ff6d7eSKevin Wolffi
469840ff6d7eSKevin Wolf
46993ce34dfbSvibisreenivasan# check if tee/splice is there. vmsplice was added same time.
47003ce34dfbSvibisreenivasansplice=no
47013ce34dfbSvibisreenivasancat > $TMPC << EOF
47023ce34dfbSvibisreenivasan#include <unistd.h>
47033ce34dfbSvibisreenivasan#include <fcntl.h>
47043ce34dfbSvibisreenivasan#include <limits.h>
47053ce34dfbSvibisreenivasan
47063ce34dfbSvibisreenivasanint main(void)
47073ce34dfbSvibisreenivasan{
470866ea0f22SStefan Weil    int len, fd = 0;
47093ce34dfbSvibisreenivasan    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
47103ce34dfbSvibisreenivasan    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
47113ce34dfbSvibisreenivasan    return 0;
47123ce34dfbSvibisreenivasan}
47133ce34dfbSvibisreenivasanEOF
471452166aa0SJuan Quintelaif compile_prog "" "" ; then
47153ce34dfbSvibisreenivasan  splice=yes
47163ce34dfbSvibisreenivasanfi
47173ce34dfbSvibisreenivasan
4718dcc38d1cSMarcelo Tosatti##########################################
4719a99d57bbSWanlong Gao# libnuma probe
4720a99d57bbSWanlong Gao
4721a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
4722a99d57bbSWanlong Gao  cat > $TMPC << EOF
4723a99d57bbSWanlong Gao#include <numa.h>
4724a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
4725a99d57bbSWanlong GaoEOF
4726a99d57bbSWanlong Gao
4727a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
4728a99d57bbSWanlong Gao    numa=yes
4729a99d57bbSWanlong Gao    libs_softmmu="-lnuma $libs_softmmu"
4730ab318051SMarc-André Lureau    numa_libs="-lnuma"
4731a99d57bbSWanlong Gao  else
4732a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
4733a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
4734a99d57bbSWanlong Gao    fi
4735a99d57bbSWanlong Gao    numa=no
4736a99d57bbSWanlong Gao  fi
4737a99d57bbSWanlong Gaofi
4738a99d57bbSWanlong Gao
47397b01cb97SAlexandre Derumierif test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
47407b01cb97SAlexandre Derumier    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
47417b01cb97SAlexandre Derumier    exit 1
47427b01cb97SAlexandre Derumierfi
47437b01cb97SAlexandre Derumier
47445a22ab71SYang Zhong# Even if malloc_trim() is available, these non-libc memory allocators
47455a22ab71SYang Zhong# do not support it.
47465a22ab71SYang Zhongif test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
47475a22ab71SYang Zhong    if test "$malloc_trim" = "yes" ; then
47485a22ab71SYang Zhong        echo "Disabling malloc_trim with non-libc memory allocator"
47495a22ab71SYang Zhong    fi
47505a22ab71SYang Zhong    malloc_trim="no"
47515a22ab71SYang Zhongfi
47525a22ab71SYang Zhong
47535a22ab71SYang Zhong#######################################
47545a22ab71SYang Zhong# malloc_trim
47555a22ab71SYang Zhong
47565a22ab71SYang Zhongif test "$malloc_trim" != "no" ; then
47575a22ab71SYang Zhong    cat > $TMPC << EOF
47585a22ab71SYang Zhong#include <malloc.h>
47595a22ab71SYang Zhongint main(void) { malloc_trim(0); return 0; }
47605a22ab71SYang ZhongEOF
47615a22ab71SYang Zhong    if compile_prog "" "" ; then
47625a22ab71SYang Zhong        malloc_trim="yes"
47635a22ab71SYang Zhong    else
47645a22ab71SYang Zhong        malloc_trim="no"
47655a22ab71SYang Zhong    fi
47665a22ab71SYang Zhongfi
47675a22ab71SYang Zhong
4768a99d57bbSWanlong Gao##########################################
47692847b469SFam Zheng# tcmalloc probe
47702847b469SFam Zheng
47712847b469SFam Zhengif test "$tcmalloc" = "yes" ; then
47722847b469SFam Zheng  cat > $TMPC << EOF
47732847b469SFam Zheng#include <stdlib.h>
4774f2dfe54cSLeonid Blochint main(void) {
4775f2dfe54cSLeonid Bloch    void *tmp = malloc(1);
4776f2dfe54cSLeonid Bloch    if (tmp != NULL) {
4777f2dfe54cSLeonid Bloch        return 0;
4778f2dfe54cSLeonid Bloch    }
4779f2dfe54cSLeonid Bloch    return 1;
4780f2dfe54cSLeonid Bloch}
47812847b469SFam ZhengEOF
47822847b469SFam Zheng
47832847b469SFam Zheng  if compile_prog "" "-ltcmalloc" ; then
47842847b469SFam Zheng    LIBS="-ltcmalloc $LIBS"
47852847b469SFam Zheng  else
47862847b469SFam Zheng    feature_not_found "tcmalloc" "install gperftools devel"
47872847b469SFam Zheng  fi
47882847b469SFam Zhengfi
47892847b469SFam Zheng
47902847b469SFam Zheng##########################################
47917b01cb97SAlexandre Derumier# jemalloc probe
47927b01cb97SAlexandre Derumier
47937b01cb97SAlexandre Derumierif test "$jemalloc" = "yes" ; then
47947b01cb97SAlexandre Derumier  cat > $TMPC << EOF
47957b01cb97SAlexandre Derumier#include <stdlib.h>
4796f2dfe54cSLeonid Blochint main(void) {
4797f2dfe54cSLeonid Bloch    void *tmp = malloc(1);
4798f2dfe54cSLeonid Bloch    if (tmp != NULL) {
4799f2dfe54cSLeonid Bloch        return 0;
4800f2dfe54cSLeonid Bloch    }
4801f2dfe54cSLeonid Bloch    return 1;
4802f2dfe54cSLeonid Bloch}
48037b01cb97SAlexandre DerumierEOF
48047b01cb97SAlexandre Derumier
48057b01cb97SAlexandre Derumier  if compile_prog "" "-ljemalloc" ; then
48067b01cb97SAlexandre Derumier    LIBS="-ljemalloc $LIBS"
48077b01cb97SAlexandre Derumier  else
48087b01cb97SAlexandre Derumier    feature_not_found "jemalloc" "install jemalloc devel"
48097b01cb97SAlexandre Derumier  fi
48107b01cb97SAlexandre Derumierfi
48117b01cb97SAlexandre Derumier
48127b01cb97SAlexandre Derumier##########################################
4813dcc38d1cSMarcelo Tosatti# signalfd probe
4814dcc38d1cSMarcelo Tosattisignalfd="no"
4815dcc38d1cSMarcelo Tosatticat > $TMPC << EOF
4816dcc38d1cSMarcelo Tosatti#include <unistd.h>
4817dcc38d1cSMarcelo Tosatti#include <sys/syscall.h>
4818dcc38d1cSMarcelo Tosatti#include <signal.h>
4819dcc38d1cSMarcelo Tosattiint main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4820dcc38d1cSMarcelo TosattiEOF
4821dcc38d1cSMarcelo Tosatti
4822dcc38d1cSMarcelo Tosattiif compile_prog "" "" ; then
4823dcc38d1cSMarcelo Tosatti  signalfd=yes
4824dcc38d1cSMarcelo Tosattifi
4825dcc38d1cSMarcelo Tosatti
4826d339d766SRichard W.M. Jones# check if optreset global is declared by <getopt.h>
4827d339d766SRichard W.M. Jonesoptreset="no"
4828d339d766SRichard W.M. Jonescat > $TMPC << EOF
4829d339d766SRichard W.M. Jones#include <getopt.h>
4830d339d766SRichard W.M. Jonesint main(void) { return optreset; }
4831d339d766SRichard W.M. JonesEOF
4832d339d766SRichard W.M. Jones
4833d339d766SRichard W.M. Jonesif compile_prog "" "" ; then
4834d339d766SRichard W.M. Jones  optreset=yes
4835d339d766SRichard W.M. Jonesfi
4836d339d766SRichard W.M. Jones
4837c2882b96SRiku Voipio# check if eventfd is supported
4838c2882b96SRiku Voipioeventfd=no
4839c2882b96SRiku Voipiocat > $TMPC << EOF
4840c2882b96SRiku Voipio#include <sys/eventfd.h>
4841c2882b96SRiku Voipio
4842c2882b96SRiku Voipioint main(void)
4843c2882b96SRiku Voipio{
484455cc7f3eSStefan Weil    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4845c2882b96SRiku Voipio}
4846c2882b96SRiku VoipioEOF
4847c2882b96SRiku Voipioif compile_prog "" "" ; then
4848c2882b96SRiku Voipio  eventfd=yes
4849c2882b96SRiku Voipiofi
4850c2882b96SRiku Voipio
4851751bcc39SMarc-André Lureau# check if memfd is supported
4852751bcc39SMarc-André Lureaumemfd=no
4853751bcc39SMarc-André Lureaucat > $TMPC << EOF
485475e5b70eSPaolo Bonzini#include <sys/mman.h>
4855751bcc39SMarc-André Lureau
4856751bcc39SMarc-André Lureauint main(void)
4857751bcc39SMarc-André Lureau{
4858751bcc39SMarc-André Lureau    return memfd_create("foo", MFD_ALLOW_SEALING);
4859751bcc39SMarc-André Lureau}
4860751bcc39SMarc-André LureauEOF
4861751bcc39SMarc-André Lureauif compile_prog "" "" ; then
4862751bcc39SMarc-André Lureau  memfd=yes
4863751bcc39SMarc-André Lureaufi
4864751bcc39SMarc-André Lureau
4865955727d2SCortland Tölva# check for usbfs
4866955727d2SCortland Tölvahave_usbfs=no
4867955727d2SCortland Tölvaif test "$linux_user" = "yes"; then
486896566d09SThomas Petazzoni  cat > $TMPC << EOF
486996566d09SThomas Petazzoni#include <linux/usbdevice_fs.h>
487096566d09SThomas Petazzoni
487196566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES
487296566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined"
487396566d09SThomas Petazzoni#endif
487496566d09SThomas Petazzoni
487596566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM
487696566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined"
487796566d09SThomas Petazzoni#endif
487896566d09SThomas Petazzoni
487996566d09SThomas Petazzoniint main(void)
488096566d09SThomas Petazzoni{
488196566d09SThomas Petazzoni    return 0;
488296566d09SThomas Petazzoni}
488396566d09SThomas PetazzoniEOF
488496566d09SThomas Petazzoni  if compile_prog "" ""; then
4885955727d2SCortland Tölva    have_usbfs=yes
4886955727d2SCortland Tölva  fi
4887955727d2SCortland Tölvafi
4888751bcc39SMarc-André Lureau
4889d0927938SUlrich Hecht# check for fallocate
4890d0927938SUlrich Hechtfallocate=no
4891d0927938SUlrich Hechtcat > $TMPC << EOF
4892d0927938SUlrich Hecht#include <fcntl.h>
4893d0927938SUlrich Hecht
4894d0927938SUlrich Hechtint main(void)
4895d0927938SUlrich Hecht{
4896d0927938SUlrich Hecht    fallocate(0, 0, 0, 0);
4897d0927938SUlrich Hecht    return 0;
4898d0927938SUlrich Hecht}
4899d0927938SUlrich HechtEOF
49008fb03151SPeter Maydellif compile_prog "" "" ; then
4901d0927938SUlrich Hecht  fallocate=yes
4902d0927938SUlrich Hechtfi
4903d0927938SUlrich Hecht
49043d4fa43eSKusanagi Kouichi# check for fallocate hole punching
49053d4fa43eSKusanagi Kouichifallocate_punch_hole=no
49063d4fa43eSKusanagi Kouichicat > $TMPC << EOF
49073d4fa43eSKusanagi Kouichi#include <fcntl.h>
49083d4fa43eSKusanagi Kouichi#include <linux/falloc.h>
49093d4fa43eSKusanagi Kouichi
49103d4fa43eSKusanagi Kouichiint main(void)
49113d4fa43eSKusanagi Kouichi{
49123d4fa43eSKusanagi Kouichi    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
49133d4fa43eSKusanagi Kouichi    return 0;
49143d4fa43eSKusanagi Kouichi}
49153d4fa43eSKusanagi KouichiEOF
49163d4fa43eSKusanagi Kouichiif compile_prog "" "" ; then
49173d4fa43eSKusanagi Kouichi  fallocate_punch_hole=yes
49183d4fa43eSKusanagi Kouichifi
49193d4fa43eSKusanagi Kouichi
4920b953f075SDenis V. Lunev# check that fallocate supports range zeroing inside the file
4921b953f075SDenis V. Lunevfallocate_zero_range=no
4922b953f075SDenis V. Lunevcat > $TMPC << EOF
4923b953f075SDenis V. Lunev#include <fcntl.h>
4924b953f075SDenis V. Lunev#include <linux/falloc.h>
4925b953f075SDenis V. Lunev
4926b953f075SDenis V. Lunevint main(void)
4927b953f075SDenis V. Lunev{
4928b953f075SDenis V. Lunev    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4929b953f075SDenis V. Lunev    return 0;
4930b953f075SDenis V. Lunev}
4931b953f075SDenis V. LunevEOF
4932b953f075SDenis V. Lunevif compile_prog "" "" ; then
4933b953f075SDenis V. Lunev  fallocate_zero_range=yes
4934b953f075SDenis V. Lunevfi
4935b953f075SDenis V. Lunev
4936ed911435SKevin Wolf# check for posix_fallocate
4937ed911435SKevin Wolfposix_fallocate=no
4938ed911435SKevin Wolfcat > $TMPC << EOF
4939ed911435SKevin Wolf#include <fcntl.h>
4940ed911435SKevin Wolf
4941ed911435SKevin Wolfint main(void)
4942ed911435SKevin Wolf{
4943ed911435SKevin Wolf    posix_fallocate(0, 0, 0);
4944ed911435SKevin Wolf    return 0;
4945ed911435SKevin Wolf}
4946ed911435SKevin WolfEOF
4947ed911435SKevin Wolfif compile_prog "" "" ; then
4948ed911435SKevin Wolf    posix_fallocate=yes
4949ed911435SKevin Wolffi
4950ed911435SKevin Wolf
4951c727f47dSPeter Maydell# check for sync_file_range
4952c727f47dSPeter Maydellsync_file_range=no
4953c727f47dSPeter Maydellcat > $TMPC << EOF
4954c727f47dSPeter Maydell#include <fcntl.h>
4955c727f47dSPeter Maydell
4956c727f47dSPeter Maydellint main(void)
4957c727f47dSPeter Maydell{
4958c727f47dSPeter Maydell    sync_file_range(0, 0, 0, 0);
4959c727f47dSPeter Maydell    return 0;
4960c727f47dSPeter Maydell}
4961c727f47dSPeter MaydellEOF
49628fb03151SPeter Maydellif compile_prog "" "" ; then
4963c727f47dSPeter Maydell  sync_file_range=yes
4964c727f47dSPeter Maydellfi
4965c727f47dSPeter Maydell
4966dace20dcSPeter Maydell# check for linux/fiemap.h and FS_IOC_FIEMAP
4967dace20dcSPeter Maydellfiemap=no
4968dace20dcSPeter Maydellcat > $TMPC << EOF
4969dace20dcSPeter Maydell#include <sys/ioctl.h>
4970dace20dcSPeter Maydell#include <linux/fs.h>
4971dace20dcSPeter Maydell#include <linux/fiemap.h>
4972dace20dcSPeter Maydell
4973dace20dcSPeter Maydellint main(void)
4974dace20dcSPeter Maydell{
4975dace20dcSPeter Maydell    ioctl(0, FS_IOC_FIEMAP, 0);
4976dace20dcSPeter Maydell    return 0;
4977dace20dcSPeter Maydell}
4978dace20dcSPeter MaydellEOF
49798fb03151SPeter Maydellif compile_prog "" "" ; then
4980dace20dcSPeter Maydell  fiemap=yes
4981dace20dcSPeter Maydellfi
4982dace20dcSPeter Maydell
4983d0927938SUlrich Hecht# check for dup3
4984d0927938SUlrich Hechtdup3=no
4985d0927938SUlrich Hechtcat > $TMPC << EOF
4986d0927938SUlrich Hecht#include <unistd.h>
4987d0927938SUlrich Hecht
4988d0927938SUlrich Hechtint main(void)
4989d0927938SUlrich Hecht{
4990d0927938SUlrich Hecht    dup3(0, 0, 0);
4991d0927938SUlrich Hecht    return 0;
4992d0927938SUlrich Hecht}
4993d0927938SUlrich HechtEOF
499478f5d726SJan Kiszkaif compile_prog "" "" ; then
4995d0927938SUlrich Hecht  dup3=yes
4996d0927938SUlrich Hechtfi
4997d0927938SUlrich Hecht
49984e0c6529SAlex Bligh# check for ppoll support
49994e0c6529SAlex Blighppoll=no
50004e0c6529SAlex Blighcat > $TMPC << EOF
50014e0c6529SAlex Bligh#include <poll.h>
50024e0c6529SAlex Bligh
50034e0c6529SAlex Blighint main(void)
50044e0c6529SAlex Bligh{
50054e0c6529SAlex Bligh    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
50064e0c6529SAlex Bligh    ppoll(&pfd, 1, 0, 0);
50074e0c6529SAlex Bligh    return 0;
50084e0c6529SAlex Bligh}
50094e0c6529SAlex BlighEOF
50104e0c6529SAlex Blighif compile_prog "" "" ; then
50114e0c6529SAlex Bligh  ppoll=yes
50124e0c6529SAlex Blighfi
50134e0c6529SAlex Bligh
5014cd758dd0SAlex Bligh# check for prctl(PR_SET_TIMERSLACK , ... ) support
5015cd758dd0SAlex Blighprctl_pr_set_timerslack=no
5016cd758dd0SAlex Blighcat > $TMPC << EOF
5017cd758dd0SAlex Bligh#include <sys/prctl.h>
5018cd758dd0SAlex Bligh
5019cd758dd0SAlex Blighint main(void)
5020cd758dd0SAlex Bligh{
5021cd758dd0SAlex Bligh    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
5022cd758dd0SAlex Bligh    return 0;
5023cd758dd0SAlex Bligh}
5024cd758dd0SAlex BlighEOF
5025cd758dd0SAlex Blighif compile_prog "" "" ; then
5026cd758dd0SAlex Bligh  prctl_pr_set_timerslack=yes
5027cd758dd0SAlex Blighfi
5028cd758dd0SAlex Bligh
50293b6edd16SPeter Maydell# check for epoll support
50303b6edd16SPeter Maydellepoll=no
50313b6edd16SPeter Maydellcat > $TMPC << EOF
50323b6edd16SPeter Maydell#include <sys/epoll.h>
50333b6edd16SPeter Maydell
50343b6edd16SPeter Maydellint main(void)
50353b6edd16SPeter Maydell{
50363b6edd16SPeter Maydell    epoll_create(0);
50373b6edd16SPeter Maydell    return 0;
50383b6edd16SPeter Maydell}
50393b6edd16SPeter MaydellEOF
50408fb03151SPeter Maydellif compile_prog "" "" ; then
50413b6edd16SPeter Maydell  epoll=yes
50423b6edd16SPeter Maydellfi
50433b6edd16SPeter Maydell
5044227f0214SPeter Maydell# epoll_create1 is a later addition
5045227f0214SPeter Maydell# so we must check separately for its presence
50463b6edd16SPeter Maydellepoll_create1=no
50473b6edd16SPeter Maydellcat > $TMPC << EOF
50483b6edd16SPeter Maydell#include <sys/epoll.h>
50493b6edd16SPeter Maydell
50503b6edd16SPeter Maydellint main(void)
50513b6edd16SPeter Maydell{
505219e83f6bSPeter Maydell    /* Note that we use epoll_create1 as a value, not as
505319e83f6bSPeter Maydell     * a function being called. This is necessary so that on
505419e83f6bSPeter Maydell     * old SPARC glibc versions where the function was present in
505519e83f6bSPeter Maydell     * the library but not declared in the header file we will
505619e83f6bSPeter Maydell     * fail the configure check. (Otherwise we will get a compiler
505719e83f6bSPeter Maydell     * warning but not an error, and will proceed to fail the
505819e83f6bSPeter Maydell     * qemu compile where we compile with -Werror.)
505919e83f6bSPeter Maydell     */
5060c075a723SBlue Swirl    return (int)(uintptr_t)&epoll_create1;
50613b6edd16SPeter Maydell}
50623b6edd16SPeter MaydellEOF
50638fb03151SPeter Maydellif compile_prog "" "" ; then
50643b6edd16SPeter Maydell  epoll_create1=yes
50653b6edd16SPeter Maydellfi
50663b6edd16SPeter Maydell
5067a8fd1abaSPeter Maydell# check for sendfile support
5068a8fd1abaSPeter Maydellsendfile=no
5069a8fd1abaSPeter Maydellcat > $TMPC << EOF
5070a8fd1abaSPeter Maydell#include <sys/sendfile.h>
5071a8fd1abaSPeter Maydell
5072a8fd1abaSPeter Maydellint main(void)
5073a8fd1abaSPeter Maydell{
5074a8fd1abaSPeter Maydell    return sendfile(0, 0, 0, 0);
5075a8fd1abaSPeter Maydell}
5076a8fd1abaSPeter MaydellEOF
5077a8fd1abaSPeter Maydellif compile_prog "" "" ; then
5078a8fd1abaSPeter Maydell  sendfile=yes
5079a8fd1abaSPeter Maydellfi
5080a8fd1abaSPeter Maydell
508151834341SRiku Voipio# check for timerfd support (glibc 2.8 and newer)
508251834341SRiku Voipiotimerfd=no
508351834341SRiku Voipiocat > $TMPC << EOF
508451834341SRiku Voipio#include <sys/timerfd.h>
508551834341SRiku Voipio
508651834341SRiku Voipioint main(void)
508751834341SRiku Voipio{
508851834341SRiku Voipio    return(timerfd_create(CLOCK_REALTIME, 0));
508951834341SRiku Voipio}
509051834341SRiku VoipioEOF
509151834341SRiku Voipioif compile_prog "" "" ; then
509251834341SRiku Voipio  timerfd=yes
509351834341SRiku Voipiofi
509451834341SRiku Voipio
50959af5c906SRiku Voipio# check for setns and unshare support
50969af5c906SRiku Voipiosetns=no
50979af5c906SRiku Voipiocat > $TMPC << EOF
50989af5c906SRiku Voipio#include <sched.h>
50999af5c906SRiku Voipio
51009af5c906SRiku Voipioint main(void)
51019af5c906SRiku Voipio{
51029af5c906SRiku Voipio    int ret;
51039af5c906SRiku Voipio    ret = setns(0, 0);
51049af5c906SRiku Voipio    ret = unshare(0);
51059af5c906SRiku Voipio    return ret;
51069af5c906SRiku Voipio}
51079af5c906SRiku VoipioEOF
51089af5c906SRiku Voipioif compile_prog "" "" ; then
51099af5c906SRiku Voipio  setns=yes
51109af5c906SRiku Voipiofi
51119af5c906SRiku Voipio
511238860a03SAleksandar Markovic# clock_adjtime probe
511338860a03SAleksandar Markovicclock_adjtime=no
511438860a03SAleksandar Markoviccat > $TMPC <<EOF
511538860a03SAleksandar Markovic#include <time.h>
511638860a03SAleksandar Markovic
511738860a03SAleksandar Markovicint main(void)
511838860a03SAleksandar Markovic{
511938860a03SAleksandar Markovic    return clock_adjtime(0, 0);
512038860a03SAleksandar Markovic}
512138860a03SAleksandar MarkovicEOF
512238860a03SAleksandar Markovicclock_adjtime=no
512338860a03SAleksandar Markovicif compile_prog "" "" ; then
512438860a03SAleksandar Markovic  clock_adjtime=yes
512538860a03SAleksandar Markovicfi
512638860a03SAleksandar Markovic
51275a03cd00SAleksandar Markovic# syncfs probe
51285a03cd00SAleksandar Markovicsyncfs=no
51295a03cd00SAleksandar Markoviccat > $TMPC <<EOF
51305a03cd00SAleksandar Markovic#include <unistd.h>
51315a03cd00SAleksandar Markovic
51325a03cd00SAleksandar Markovicint main(void)
51335a03cd00SAleksandar Markovic{
51345a03cd00SAleksandar Markovic    return syncfs(0);
51355a03cd00SAleksandar Markovic}
51365a03cd00SAleksandar MarkovicEOF
51375a03cd00SAleksandar Markovicsyncfs=no
51385a03cd00SAleksandar Markovicif compile_prog "" "" ; then
51395a03cd00SAleksandar Markovic  syncfs=yes
51405a03cd00SAleksandar Markovicfi
51415a03cd00SAleksandar Markovic
5142db37dd89SAleksandar Markovic# check for kcov support (kernel must be 4.4+, compiled with certain options)
5143db37dd89SAleksandar Markovickcov=no
5144db37dd89SAleksandar Markovicif check_include sys/kcov.h ; then
5145db37dd89SAleksandar Markovic    kcov=yes
5146db37dd89SAleksandar Markovicfi
5147db37dd89SAleksandar Markovic
5148516e8b7dSPeter Maydell# If we're making warnings fatal, apply this to Sphinx runs as well
5149516e8b7dSPeter Maydellsphinx_werror=""
5150516e8b7dSPeter Maydellif test "$werror" = "yes"; then
5151516e8b7dSPeter Maydell    sphinx_werror="-W"
5152516e8b7dSPeter Maydellfi
5153516e8b7dSPeter Maydell
51545f71eac0SPeter Maydell# Check we have a new enough version of sphinx-build
51555f71eac0SPeter Maydellhas_sphinx_build() {
51565f71eac0SPeter Maydell    # This is a bit awkward but works: create a trivial document and
51575f71eac0SPeter Maydell    # try to run it with our configuration file (which enforces a
51585f71eac0SPeter Maydell    # version requirement). This will fail if either
51595f71eac0SPeter Maydell    # sphinx-build doesn't exist at all or if it is too old.
51605f71eac0SPeter Maydell    mkdir -p "$TMPDIR1/sphinx"
51615f71eac0SPeter Maydell    touch "$TMPDIR1/sphinx/index.rst"
5162988ae6c3SAlex Bennée    "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
5163988ae6c3SAlex Bennée                    -b html "$TMPDIR1/sphinx" \
5164988ae6c3SAlex Bennée                    "$TMPDIR1/sphinx/out"  >> config.log 2>&1
51655f71eac0SPeter Maydell}
51665f71eac0SPeter Maydell
5167cc8ae6deSpbrook# Check if tools are available to build documentation.
5168a25dba17SJuan Quintelaif test "$docs" != "no" ; then
5169758b617aSPeter Maydell  if has_sphinx_build; then
5170758b617aSPeter Maydell    sphinx_ok=yes
5171758b617aSPeter Maydell  else
5172758b617aSPeter Maydell    sphinx_ok=no
5173758b617aSPeter Maydell  fi
5174758b617aSPeter Maydell  if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
5175a25dba17SJuan Quintela    docs=yes
517683a3ab8bSJuan Quintela  else
5177a25dba17SJuan Quintela    if test "$docs" = "yes" ; then
5178758b617aSPeter Maydell      if has $sphinx_build && test "$sphinx_ok" != "yes"; then
5179758b617aSPeter Maydell        echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
5180758b617aSPeter Maydell      fi
5181758b617aSPeter Maydell      feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
518283a3ab8bSJuan Quintela    fi
5183a25dba17SJuan Quintela    docs=no
518483a3ab8bSJuan Quintela  fi
5185cc8ae6deSpbrookfi
5186cc8ae6deSpbrook
5187f514f41cSStefan Weil# Search for bswap_32 function
51886ae9a1f4SJuan Quintelabyteswap_h=no
51896ae9a1f4SJuan Quintelacat > $TMPC << EOF
51906ae9a1f4SJuan Quintela#include <byteswap.h>
51916ae9a1f4SJuan Quintelaint main(void) { return bswap_32(0); }
51926ae9a1f4SJuan QuintelaEOF
519352166aa0SJuan Quintelaif compile_prog "" "" ; then
51946ae9a1f4SJuan Quintela  byteswap_h=yes
51956ae9a1f4SJuan Quintelafi
51966ae9a1f4SJuan Quintela
519775f13596SStefan Weil# Search for bswap32 function
51986ae9a1f4SJuan Quintelabswap_h=no
51996ae9a1f4SJuan Quintelacat > $TMPC << EOF
52006ae9a1f4SJuan Quintela#include <sys/endian.h>
52016ae9a1f4SJuan Quintela#include <sys/types.h>
52026ae9a1f4SJuan Quintela#include <machine/bswap.h>
52036ae9a1f4SJuan Quintelaint main(void) { return bswap32(0); }
52046ae9a1f4SJuan QuintelaEOF
520552166aa0SJuan Quintelaif compile_prog "" "" ; then
52066ae9a1f4SJuan Quintela  bswap_h=yes
52076ae9a1f4SJuan Quintelafi
52086ae9a1f4SJuan Quintela
5209da93a1fdSaliguori##########################################
5210e49ab19fSPeter Lieven# Do we have libiscsi >= 1.9.0
5211c589b249SRonnie Sahlbergif test "$libiscsi" != "no" ; then
5212e49ab19fSPeter Lieven  if $pkg_config --atleast-version=1.9.0 libiscsi; then
52133c33ea96SPaolo Bonzini    libiscsi="yes"
5214ca871ec8SStefan Weil    libiscsi_cflags=$($pkg_config --cflags libiscsi)
5215ca871ec8SStefan Weil    libiscsi_libs=$($pkg_config --libs libiscsi)
5216c589b249SRonnie Sahlberg  else
5217c589b249SRonnie Sahlberg    if test "$libiscsi" = "yes" ; then
5218e49ab19fSPeter Lieven      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
5219c589b249SRonnie Sahlberg    fi
5220c589b249SRonnie Sahlberg    libiscsi="no"
5221c589b249SRonnie Sahlberg  fi
5222c589b249SRonnie Sahlbergfi
5223c589b249SRonnie Sahlberg
5224c589b249SRonnie Sahlberg##########################################
52258bacde8dSNatanael Copa# Do we need libm
52268bacde8dSNatanael Copacat > $TMPC << EOF
52278bacde8dSNatanael Copa#include <math.h>
5228f80ea986SAlexey Kardashevskiyint main(int argc, char **argv) { return isnan(sin((double)argc)); }
52298bacde8dSNatanael CopaEOF
52308bacde8dSNatanael Copaif compile_prog "" "" ; then
52318bacde8dSNatanael Copa  :
52328bacde8dSNatanael Copaelif compile_prog "" "-lm" ; then
52338bacde8dSNatanael Copa  LIBS="-lm $LIBS"
52348bacde8dSNatanael Copaelse
523576ad07a4SPeter Maydell  error_exit "libm check failed"
52368bacde8dSNatanael Copafi
52378bacde8dSNatanael Copa
52388bacde8dSNatanael Copa##########################################
5239da93a1fdSaliguori# Do we need librt
52408bacde8dSNatanael Copa# uClibc provides 2 versions of clock_gettime(), one with realtime
52418bacde8dSNatanael Copa# support and one without. This means that the clock_gettime() don't
52428bacde8dSNatanael Copa# need -lrt. We still need it for timer_create() so we check for this
52438bacde8dSNatanael Copa# function in addition.
5244da93a1fdSaliguoricat > $TMPC <<EOF
5245da93a1fdSaliguori#include <signal.h>
5246da93a1fdSaliguori#include <time.h>
52478bacde8dSNatanael Copaint main(void) {
52488bacde8dSNatanael Copa  timer_create(CLOCK_REALTIME, NULL, NULL);
52498bacde8dSNatanael Copa  return clock_gettime(CLOCK_REALTIME, NULL);
52508bacde8dSNatanael Copa}
5251da93a1fdSaliguoriEOF
5252da93a1fdSaliguori
525352166aa0SJuan Quintelaif compile_prog "" "" ; then
525407ffa4bdSJuan Quintela  :
52558bacde8dSNatanael Copa# we need pthread for static linking. use previous pthread test result
525618e588b1SRick Liuelif compile_prog "" "$pthread_lib -lrt" ; then
525718e588b1SRick Liu  LIBS="$LIBS -lrt"
5258da93a1fdSaliguorifi
5259da93a1fdSaliguori
5260d99e97e6SThomas Huth# Check whether we need to link libutil for openpty()
5261d99e97e6SThomas Huthcat > $TMPC << EOF
5262d99e97e6SThomas Huthextern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5263d99e97e6SThomas Huthint main(void) { return openpty(0, 0, 0, 0, 0); }
5264d99e97e6SThomas HuthEOF
5265d99e97e6SThomas Huth
52669df8b20dSThomas Huthhave_openpty="no"
52679df8b20dSThomas Huthif compile_prog "" "" ; then
52689df8b20dSThomas Huth  have_openpty="yes"
52699df8b20dSThomas Huthelse
5270d99e97e6SThomas Huth  if compile_prog "" "-lutil" ; then
52716362a53fSJuan Quintela    libs_softmmu="-lutil $libs_softmmu"
5272d99e97e6SThomas Huth    libs_tools="-lutil $libs_tools"
52739df8b20dSThomas Huth    have_openpty="yes"
5274d99e97e6SThomas Huth  fi
52756362a53fSJuan Quintelafi
52766362a53fSJuan Quintela
5277de5071c5SBlue Swirl##########################################
5278cd4ec0b4SGerd Hoffmann# spice probe
5279cd4ec0b4SGerd Hoffmannif test "$spice" != "no" ; then
5280cd4ec0b4SGerd Hoffmann  cat > $TMPC << EOF
5281cd4ec0b4SGerd Hoffmann#include <spice.h>
5282cd4ec0b4SGerd Hoffmannint main(void) { spice_server_new(); return 0; }
5283cd4ec0b4SGerd HoffmannEOF
5284710fc4f5SJiri Denemark  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5285710fc4f5SJiri Denemark  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
52861b63665cSMarc-André Lureau  if $pkg_config --atleast-version=0.12.5 spice-server && \
528765d5d3f9SStefan Weil     $pkg_config --atleast-version=0.12.3 spice-protocol && \
5288cd4ec0b4SGerd Hoffmann     compile_prog "$spice_cflags" "$spice_libs" ; then
5289cd4ec0b4SGerd Hoffmann    spice="yes"
5290cd4ec0b4SGerd Hoffmann    libs_softmmu="$libs_softmmu $spice_libs"
5291cd4ec0b4SGerd Hoffmann    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
5292cd4ec0b4SGerd Hoffmann  else
5293cd4ec0b4SGerd Hoffmann    if test "$spice" = "yes" ; then
52948efc9363SHu Tao      feature_not_found "spice" \
52951b63665cSMarc-André Lureau          "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
5296cd4ec0b4SGerd Hoffmann    fi
5297cd4ec0b4SGerd Hoffmann    spice="no"
5298cd4ec0b4SGerd Hoffmann  fi
5299cd4ec0b4SGerd Hoffmannfi
5300cd4ec0b4SGerd Hoffmann
53017b02f544SMarc-André Lureau# check for smartcard support
53027b02f544SMarc-André Lureauif test "$smartcard" != "no"; then
53030f5c642dSMichal Privoznik    if $pkg_config --atleast-version=2.5.1 libcacard; then
53047b02f544SMarc-André Lureau        libcacard_cflags=$($pkg_config --cflags libcacard)
53057b02f544SMarc-André Lureau        libcacard_libs=$($pkg_config --libs libcacard)
53067b02f544SMarc-André Lureau        smartcard="yes"
5307111a38b0SRobert Relyea    else
53087b02f544SMarc-André Lureau        if test "$smartcard" = "yes"; then
53097b02f544SMarc-André Lureau            feature_not_found "smartcard" "Install libcacard devel"
5310111a38b0SRobert Relyea        fi
53117b02f544SMarc-André Lureau        smartcard="no"
5312111a38b0SRobert Relyea    fi
5313111a38b0SRobert Relyeafi
5314111a38b0SRobert Relyea
53152b2325ffSGerd Hoffmann# check for libusb
53162b2325ffSGerd Hoffmannif test "$libusb" != "no" ; then
531765d5d3f9SStefan Weil    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
53182b2325ffSGerd Hoffmann        libusb="yes"
5319ca871ec8SStefan Weil        libusb_cflags=$($pkg_config --cflags libusb-1.0)
5320ca871ec8SStefan Weil        libusb_libs=$($pkg_config --libs libusb-1.0)
53212b2325ffSGerd Hoffmann    else
53222b2325ffSGerd Hoffmann        if test "$libusb" = "yes"; then
53238efc9363SHu Tao            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
53242b2325ffSGerd Hoffmann        fi
53252b2325ffSGerd Hoffmann        libusb="no"
53262b2325ffSGerd Hoffmann    fi
53272b2325ffSGerd Hoffmannfi
53282b2325ffSGerd Hoffmann
532969354a83SHans de Goede# check for usbredirparser for usb network redirection support
533069354a83SHans de Goedeif test "$usb_redir" != "no" ; then
533165d5d3f9SStefan Weil    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
533269354a83SHans de Goede        usb_redir="yes"
5333ca871ec8SStefan Weil        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5334ca871ec8SStefan Weil        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
533569354a83SHans de Goede    else
533669354a83SHans de Goede        if test "$usb_redir" = "yes"; then
533721684af0SStewart Smith            feature_not_found "usb-redir" "Install usbredir devel"
533869354a83SHans de Goede        fi
533969354a83SHans de Goede        usb_redir="no"
534069354a83SHans de Goede    fi
534169354a83SHans de Goedefi
534269354a83SHans de Goede
5343cd4ec0b4SGerd Hoffmann##########################################
5344d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
5345d9840e25STomoki Sekiyama
5346e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5347e633a5c6SEric Blake        test "$vss_win32_sdk" != "no" ; then
5348d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
5349690604f6SMichael Roth    "")   vss_win32_include="-isystem $source_path" ;;
5350d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5351d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
5352690604f6SMichael Roth          vss_win32_include="-isystem $source_path/.sdk/vss"
5353d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5354d9840e25STomoki Sekiyama	  ;;
5355690604f6SMichael Roth    *)    vss_win32_include="-isystem $vss_win32_sdk"
5356d9840e25STomoki Sekiyama  esac
5357d9840e25STomoki Sekiyama  cat > $TMPC << EOF
5358d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
5359d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
5360d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
5361d9840e25STomoki SekiyamaEOF
5362d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
5363d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
5364d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
5365315d3184SFam Zheng    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5366f33ca81fSMichael Roth    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5367d9840e25STomoki Sekiyama  else
5368d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
5369d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
5370d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5371d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5372d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
5373d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
5374d9840e25STomoki Sekiyama      feature_not_found "VSS support"
5375d9840e25STomoki Sekiyama    fi
5376d9840e25STomoki Sekiyama    guest_agent_with_vss="no"
5377d9840e25STomoki Sekiyama  fi
5378d9840e25STomoki Sekiyamafi
5379d9840e25STomoki Sekiyama
5380d9840e25STomoki Sekiyama##########################################
5381d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
5382d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
5383d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
5384d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
5385d9840e25STomoki Sekiyama
5386e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5387e633a5c6SEric Blake        test "$guest_agent_with_vss" = "yes" ; then
5388d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
5389d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
5390d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5391d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
5392d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5393d9840e25STomoki Sekiyama    else
5394d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
5395d9840e25STomoki Sekiyama    fi
5396d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
5397d9840e25STomoki Sekiyama    win_sdk=""
5398d9840e25STomoki Sekiyama  fi
5399d9840e25STomoki Sekiyamafi
5400d9840e25STomoki Sekiyama
5401d9840e25STomoki Sekiyama##########################################
540250cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h
5403e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
540450cbebb9SMichael Roth  cat > $TMPC << EOF
540550cbebb9SMichael Roth#include <windows.h>
540650cbebb9SMichael Roth#include <ntddscsi.h>
540750cbebb9SMichael Rothint main(void) {
540850cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS)
540950cbebb9SMichael Roth#error Missing required ioctl definitions
541050cbebb9SMichael Roth#endif
541150cbebb9SMichael Roth  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
541250cbebb9SMichael Roth  return addr.Lun;
541350cbebb9SMichael Roth}
541450cbebb9SMichael RothEOF
541550cbebb9SMichael Roth  if compile_prog "" "" ; then
541650cbebb9SMichael Roth    guest_agent_ntddscsi=yes
5417996b9cdcSMatt Hines    libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
541850cbebb9SMichael Roth  fi
541950cbebb9SMichael Rothfi
542050cbebb9SMichael Roth
542150cbebb9SMichael Roth##########################################
54229d9e1521SGerd Hoffmann# virgl renderer probe
54239d9e1521SGerd Hoffmann
54249d9e1521SGerd Hoffmannif test "$virglrenderer" != "no" ; then
54259d9e1521SGerd Hoffmann  cat > $TMPC << EOF
54269d9e1521SGerd Hoffmann#include <virglrenderer.h>
54279d9e1521SGerd Hoffmannint main(void) { virgl_renderer_poll(); return 0; }
54289d9e1521SGerd HoffmannEOF
54299d9e1521SGerd Hoffmann  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
54309d9e1521SGerd Hoffmann  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
543147479c55SMarc-André Lureau  virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
54329d9e1521SGerd Hoffmann  if $pkg_config virglrenderer >/dev/null 2>&1 && \
54339d9e1521SGerd Hoffmann     compile_prog "$virgl_cflags" "$virgl_libs" ; then
54349d9e1521SGerd Hoffmann    virglrenderer="yes"
54359d9e1521SGerd Hoffmann  else
54369d9e1521SGerd Hoffmann    if test "$virglrenderer" = "yes" ; then
54379d9e1521SGerd Hoffmann      feature_not_found "virglrenderer"
54389d9e1521SGerd Hoffmann    fi
54399d9e1521SGerd Hoffmann    virglrenderer="no"
54409d9e1521SGerd Hoffmann  fi
54419d9e1521SGerd Hoffmannfi
54429d9e1521SGerd Hoffmann
54439d9e1521SGerd Hoffmann##########################################
54448ca80760SRichard Henderson# capstone
54458ca80760SRichard Henderson
5446e219c499SRichard Hendersoncase "$capstone" in
5447e219c499SRichard Henderson  "" | yes)
54488ca80760SRichard Henderson    if $pkg_config capstone; then
5449e219c499SRichard Henderson      capstone=system
5450e633a5c6SEric Blake    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5451e219c499SRichard Henderson      capstone=git
5452e219c499SRichard Henderson    elif test -e "${source_path}/capstone/Makefile" ; then
5453e219c499SRichard Henderson      capstone=internal
5454e219c499SRichard Henderson    elif test -z "$capstone" ; then
5455e219c499SRichard Henderson      capstone=no
5456e219c499SRichard Henderson    else
5457e219c499SRichard Henderson      feature_not_found "capstone" "Install capstone devel or git submodule"
5458e219c499SRichard Henderson    fi
5459e219c499SRichard Henderson    ;;
5460e219c499SRichard Henderson
5461e219c499SRichard Henderson  system)
5462e219c499SRichard Henderson    if ! $pkg_config capstone; then
5463e219c499SRichard Henderson      feature_not_found "capstone" "Install capstone devel"
5464e219c499SRichard Henderson    fi
5465e219c499SRichard Henderson    ;;
5466e219c499SRichard Hendersonesac
5467e219c499SRichard Henderson
5468e219c499SRichard Hendersoncase "$capstone" in
5469e219c499SRichard Henderson  git | internal)
5470e219c499SRichard Henderson    if test "$capstone" = git; then
5471e219c499SRichard Henderson      git_submodules="${git_submodules} capstone"
5472e219c499SRichard Henderson    fi
5473e219c499SRichard Henderson    mkdir -p capstone
547425211446SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS -I${source_path}/capstone/include"
5475e219c499SRichard Henderson    if test "$mingw32" = "yes"; then
5476e219c499SRichard Henderson      LIBCAPSTONE=capstone.lib
5477e219c499SRichard Henderson    else
5478e219c499SRichard Henderson      LIBCAPSTONE=libcapstone.a
5479e219c499SRichard Henderson    fi
548025211446SPaolo Bonzini    libs_cpu="-L$PWD/capstone -lcapstone $libs_cpu"
5481*c9322ab5SMarc-André Lureau    capstone_libs="-L$PWD/capstone -lcapstone"
5482*c9322ab5SMarc-André Lureau    capstone_cflags="-I${source_path}/capstone/include"
5483e219c499SRichard Henderson    ;;
5484e219c499SRichard Henderson
5485e219c499SRichard Henderson  system)
5486*c9322ab5SMarc-André Lureau    capstone_libs="$($pkg_config --libs capstone)"
5487*c9322ab5SMarc-André Lureau    capstone_cflags="$($pkg_config --cflags capstone)"
54888ca80760SRichard Henderson    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
548902f9135bSDaniel P. Berrangé    libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5490e219c499SRichard Henderson    ;;
5491e219c499SRichard Henderson
5492e219c499SRichard Henderson  no)
5493e219c499SRichard Henderson    ;;
5494e219c499SRichard Henderson  *)
5495e219c499SRichard Henderson    error_exit "Unknown state for capstone: $capstone"
5496e219c499SRichard Henderson    ;;
5497e219c499SRichard Hendersonesac
54988ca80760SRichard Henderson
54998ca80760SRichard Henderson##########################################
55005f6b9e8fSBlue Swirl# check if we have fdatasync
55015f6b9e8fSBlue Swirl
55025f6b9e8fSBlue Swirlfdatasync=no
55035f6b9e8fSBlue Swirlcat > $TMPC << EOF
55045f6b9e8fSBlue Swirl#include <unistd.h>
5505d1722a27SAlexandre Raymondint main(void) {
5506d1722a27SAlexandre Raymond#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5507d1722a27SAlexandre Raymondreturn fdatasync(0);
5508d1722a27SAlexandre Raymond#else
5509e172fe11SStefan Weil#error Not supported
5510d1722a27SAlexandre Raymond#endif
5511d1722a27SAlexandre Raymond}
55125f6b9e8fSBlue SwirlEOF
55135f6b9e8fSBlue Swirlif compile_prog "" "" ; then
55145f6b9e8fSBlue Swirl    fdatasync=yes
55155f6b9e8fSBlue Swirlfi
55165f6b9e8fSBlue Swirl
551794a420b1SStefan Hajnoczi##########################################
5518e78815a5SAndreas Färber# check if we have madvise
5519e78815a5SAndreas Färber
5520e78815a5SAndreas Färbermadvise=no
5521e78815a5SAndreas Färbercat > $TMPC << EOF
5522e78815a5SAndreas Färber#include <sys/types.h>
5523e78815a5SAndreas Färber#include <sys/mman.h>
5524832ce9c2SScott Wood#include <stddef.h>
5525e78815a5SAndreas Färberint main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5526e78815a5SAndreas FärberEOF
5527e78815a5SAndreas Färberif compile_prog "" "" ; then
5528e78815a5SAndreas Färber    madvise=yes
5529e78815a5SAndreas Färberfi
5530e78815a5SAndreas Färber
5531e78815a5SAndreas Färber##########################################
5532e78815a5SAndreas Färber# check if we have posix_madvise
5533e78815a5SAndreas Färber
5534e78815a5SAndreas Färberposix_madvise=no
5535e78815a5SAndreas Färbercat > $TMPC << EOF
5536e78815a5SAndreas Färber#include <sys/mman.h>
5537832ce9c2SScott Wood#include <stddef.h>
5538e78815a5SAndreas Färberint main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5539e78815a5SAndreas FärberEOF
5540e78815a5SAndreas Färberif compile_prog "" "" ; then
5541e78815a5SAndreas Färber    posix_madvise=yes
5542e78815a5SAndreas Färberfi
5543e78815a5SAndreas Färber
5544e78815a5SAndreas Färber##########################################
55459bc5a719SAndreas Gustafsson# check if we have posix_memalign()
55469bc5a719SAndreas Gustafsson
55479bc5a719SAndreas Gustafssonposix_memalign=no
55489bc5a719SAndreas Gustafssoncat > $TMPC << EOF
55499bc5a719SAndreas Gustafsson#include <stdlib.h>
55509bc5a719SAndreas Gustafssonint main(void) {
55519bc5a719SAndreas Gustafsson    void *p;
55529bc5a719SAndreas Gustafsson    return posix_memalign(&p, 8, 8);
55539bc5a719SAndreas Gustafsson}
55549bc5a719SAndreas GustafssonEOF
55559bc5a719SAndreas Gustafssonif compile_prog "" "" ; then
55569bc5a719SAndreas Gustafsson    posix_memalign=yes
55579bc5a719SAndreas Gustafssonfi
55589bc5a719SAndreas Gustafsson
55599bc5a719SAndreas Gustafsson##########################################
55600a852417SPaul Durrant# check if we have posix_syslog
55610a852417SPaul Durrant
55620a852417SPaul Durrantposix_syslog=no
55630a852417SPaul Durrantcat > $TMPC << EOF
55640a852417SPaul Durrant#include <syslog.h>
55650a852417SPaul Durrantint main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
55660a852417SPaul DurrantEOF
55670a852417SPaul Durrantif compile_prog "" "" ; then
55680a852417SPaul Durrant    posix_syslog=yes
55690a852417SPaul Durrantfi
55700a852417SPaul Durrant
55710a852417SPaul Durrant##########################################
5572401bc051SPeter Maydell# check if we have sem_timedwait
5573401bc051SPeter Maydell
5574401bc051SPeter Maydellsem_timedwait=no
5575401bc051SPeter Maydellcat > $TMPC << EOF
5576401bc051SPeter Maydell#include <semaphore.h>
5577811294b7SDaniel P. Berrangéint main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5578401bc051SPeter MaydellEOF
5579401bc051SPeter Maydellif compile_prog "" "" ; then
5580401bc051SPeter Maydell    sem_timedwait=yes
5581401bc051SPeter Maydellfi
5582401bc051SPeter Maydell
5583401bc051SPeter Maydell##########################################
55845c99fa37SKeno Fischer# check if we have strchrnul
55855c99fa37SKeno Fischer
55865c99fa37SKeno Fischerstrchrnul=no
55875c99fa37SKeno Fischercat > $TMPC << EOF
55885c99fa37SKeno Fischer#include <string.h>
55895c99fa37SKeno Fischerint main(void);
55905c99fa37SKeno Fischer// Use a haystack that the compiler shouldn't be able to constant fold
55915c99fa37SKeno Fischerchar *haystack = (char*)&main;
55925c99fa37SKeno Fischerint main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
55935c99fa37SKeno FischerEOF
55945c99fa37SKeno Fischerif compile_prog "" "" ; then
55955c99fa37SKeno Fischer    strchrnul=yes
55965c99fa37SKeno Fischerfi
55975c99fa37SKeno Fischer
55988a792b03SJiufei Xue#########################################
55998a792b03SJiufei Xue# check if we have st_atim
56008a792b03SJiufei Xue
56018a792b03SJiufei Xuest_atim=no
56028a792b03SJiufei Xuecat > $TMPC << EOF
56038a792b03SJiufei Xue#include <sys/stat.h>
56048a792b03SJiufei Xue#include <stddef.h>
56058a792b03SJiufei Xueint main(void) { return offsetof(struct stat, st_atim); }
56068a792b03SJiufei XueEOF
56078a792b03SJiufei Xueif compile_prog "" "" ; then
56088a792b03SJiufei Xue    st_atim=yes
56098a792b03SJiufei Xuefi
56108a792b03SJiufei Xue
56115c99fa37SKeno Fischer##########################################
561294a420b1SStefan Hajnoczi# check if trace backend exists
561394a420b1SStefan Hajnoczi
56145b808275SLluís Vilanova$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
561594a420b1SStefan Hajnocziif test "$?" -ne 0 ; then
56165b808275SLluís Vilanova  error_exit "invalid trace backends" \
56175b808275SLluís Vilanova      "Please choose supported trace backends."
561894a420b1SStefan Hajnoczifi
561994a420b1SStefan Hajnoczi
56207e24e92aSStefan Hajnoczi##########################################
56217e24e92aSStefan Hajnoczi# For 'ust' backend, test if ust headers are present
56225b808275SLluís Vilanovaif have_backend "ust"; then
56237e24e92aSStefan Hajnoczi  cat > $TMPC << EOF
5624bf15f63cSMohamad Gebai#include <lttng/tracepoint.h>
56257e24e92aSStefan Hajnocziint main(void) { return 0; }
56267e24e92aSStefan HajnocziEOF
5627c79ed23dSFrancis Deslauriers  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5628bf15f63cSMohamad Gebai    if $pkg_config lttng-ust --exists; then
562989138857SStefan Weil      lttng_ust_libs=$($pkg_config --libs lttng-ust)
56307e24e92aSStefan Hajnoczi    else
5631c79ed23dSFrancis Deslauriers      lttng_ust_libs="-llttng-ust -ldl"
5632bf15f63cSMohamad Gebai    fi
5633bf15f63cSMohamad Gebai    if $pkg_config liburcu-bp --exists; then
563489138857SStefan Weil      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5635bf15f63cSMohamad Gebai    else
5636bf15f63cSMohamad Gebai      urcu_bp_libs="-lurcu-bp"
5637bf15f63cSMohamad Gebai    fi
5638bf15f63cSMohamad Gebai
5639bf15f63cSMohamad Gebai    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5640bf15f63cSMohamad Gebai  else
5641bf15f63cSMohamad Gebai    error_exit "Trace backend 'ust' missing lttng-ust header files"
56427e24e92aSStefan Hajnoczi  fi
56437e24e92aSStefan Hajnoczifi
5644b3d08c02SDaniel P. Berrange
5645b3d08c02SDaniel P. Berrange##########################################
5646b3d08c02SDaniel P. Berrange# For 'dtrace' backend, test if 'dtrace' command is present
56475b808275SLluís Vilanovaif have_backend "dtrace"; then
5648b3d08c02SDaniel P. Berrange  if ! has 'dtrace' ; then
564976ad07a4SPeter Maydell    error_exit "dtrace command is not found in PATH $PATH"
5650b3d08c02SDaniel P. Berrange  fi
5651c276b17dSDaniel P. Berrange  trace_backend_stap="no"
5652c276b17dSDaniel P. Berrange  if has 'stap' ; then
5653c276b17dSDaniel P. Berrange    trace_backend_stap="yes"
5654c276b17dSDaniel P. Berrange  fi
5655b3d08c02SDaniel P. Berrangefi
5656b3d08c02SDaniel P. Berrange
56577e24e92aSStefan Hajnoczi##########################################
5658519175a2SAlex Barcelo# check and set a backend for coroutine
5659d0e2fce5SAneesh Kumar K.V
56607c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
566133c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows
566233c53c54SDaniel P. Berrange# specific one.
56637c2acc70SPeter Maydell
56647c2acc70SPeter Maydellucontext_works=no
5665d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
5666d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
5667d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
5668cdf84806SPeter Maydell#ifdef __stub_makecontext
5669cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
5670cdf84806SPeter Maydell#endif
567175cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
5672d0e2fce5SAneesh Kumar K.VEOF
5673d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
56747c2acc70SPeter Maydell    ucontext_works=yes
5675d0e2fce5SAneesh Kumar K.V  fi
5676519175a2SAlex Barcelofi
56777c2acc70SPeter Maydell
56787c2acc70SPeter Maydellif test "$coroutine" = ""; then
56797c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
56807c2acc70SPeter Maydell    coroutine=win32
56817c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
56827c2acc70SPeter Maydell    coroutine=ucontext
5683519175a2SAlex Barcelo  else
56847c2acc70SPeter Maydell    coroutine=sigaltstack
56857c2acc70SPeter Maydell  fi
56867c2acc70SPeter Maydellelse
56877c2acc70SPeter Maydell  case $coroutine in
56887c2acc70SPeter Maydell  windows)
56897c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
56907c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
56917c2acc70SPeter Maydell    fi
56927c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
56937c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
56947c2acc70SPeter Maydell    coroutine=win32
56957c2acc70SPeter Maydell    ;;
56967c2acc70SPeter Maydell  ucontext)
56977c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
56987c2acc70SPeter Maydell      feature_not_found "ucontext"
56997c2acc70SPeter Maydell    fi
57007c2acc70SPeter Maydell    ;;
570133c53c54SDaniel P. Berrange  sigaltstack)
57027c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
57037c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
57047c2acc70SPeter Maydell    fi
57057c2acc70SPeter Maydell    ;;
57067c2acc70SPeter Maydell  *)
570776ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
57087c2acc70SPeter Maydell    ;;
57097c2acc70SPeter Maydell  esac
5710d0e2fce5SAneesh Kumar K.Vfi
5711d0e2fce5SAneesh Kumar K.V
571270c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then
571370c60c08SStefan Hajnoczi  coroutine_pool=yes
571470c60c08SStefan Hajnoczifi
571570c60c08SStefan Hajnoczi
57167d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then
57177d992e4dSPeter Lieven  if test "$coroutine_pool" = "yes"; then
57187d992e4dSPeter Lieven    echo "WARN: disabling coroutine pool for stack usage debugging"
57197d992e4dSPeter Lieven    coroutine_pool=no
57207d992e4dSPeter Lieven  fi
57217d992e4dSPeter Lievenfi
57227d992e4dSPeter Lieven
57231e4f6065SDaniele Buono##################################################
57241e4f6065SDaniele Buono# SafeStack
57251e4f6065SDaniele Buono
57261e4f6065SDaniele Buono
57271e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
57281e4f6065SDaniele Buonocat > $TMPC << EOF
57291e4f6065SDaniele Buonoint main(int argc, char *argv[])
57301e4f6065SDaniele Buono{
57311e4f6065SDaniele Buono#if ! __has_feature(safe_stack)
57321e4f6065SDaniele Buono#error SafeStack Disabled
57331e4f6065SDaniele Buono#endif
57341e4f6065SDaniele Buono    return 0;
57351e4f6065SDaniele Buono}
57361e4f6065SDaniele BuonoEOF
57371e4f6065SDaniele Buono  flag="-fsanitize=safe-stack"
57381e4f6065SDaniele Buono  # Check that safe-stack is supported and enabled.
57391e4f6065SDaniele Buono  if compile_prog "-Werror $flag" "$flag"; then
57401e4f6065SDaniele Buono    # Flag needed both at compilation and at linking
57411e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
57421e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
57431e4f6065SDaniele Buono  else
57441e4f6065SDaniele Buono    error_exit "SafeStack not supported by your compiler"
57451e4f6065SDaniele Buono  fi
57461e4f6065SDaniele Buono  if test "$coroutine" != "ucontext"; then
57471e4f6065SDaniele Buono    error_exit "SafeStack is only supported by the coroutine backend ucontext"
57481e4f6065SDaniele Buono  fi
57491e4f6065SDaniele Buonoelse
57501e4f6065SDaniele Buonocat > $TMPC << EOF
57511e4f6065SDaniele Buonoint main(int argc, char *argv[])
57521e4f6065SDaniele Buono{
57531e4f6065SDaniele Buono#if defined(__has_feature)
57541e4f6065SDaniele Buono#if __has_feature(safe_stack)
57551e4f6065SDaniele Buono#error SafeStack Enabled
57561e4f6065SDaniele Buono#endif
57571e4f6065SDaniele Buono#endif
57581e4f6065SDaniele Buono    return 0;
57591e4f6065SDaniele Buono}
57601e4f6065SDaniele BuonoEOF
57611e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then
57621e4f6065SDaniele Buono  # Make sure that safe-stack is disabled
57631e4f6065SDaniele Buono  if ! compile_prog "-Werror" ""; then
57641e4f6065SDaniele Buono    # SafeStack was already enabled, try to explicitly remove the feature
57651e4f6065SDaniele Buono    flag="-fno-sanitize=safe-stack"
57661e4f6065SDaniele Buono    if ! compile_prog "-Werror $flag" "$flag"; then
57671e4f6065SDaniele Buono      error_exit "Configure cannot disable SafeStack"
57681e4f6065SDaniele Buono    fi
57691e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
57701e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
57711e4f6065SDaniele Buono  fi
57721e4f6065SDaniele Buonoelse # "$safe_stack" = ""
57731e4f6065SDaniele Buono  # Set safe_stack to yes or no based on pre-existing flags
57741e4f6065SDaniele Buono  if compile_prog "-Werror" ""; then
57751e4f6065SDaniele Buono    safe_stack="no"
57761e4f6065SDaniele Buono  else
57771e4f6065SDaniele Buono    safe_stack="yes"
57781e4f6065SDaniele Buono    if test "$coroutine" != "ucontext"; then
57791e4f6065SDaniele Buono      error_exit "SafeStack is only supported by the coroutine backend ucontext"
57801e4f6065SDaniele Buono    fi
57811e4f6065SDaniele Buono  fi
57821e4f6065SDaniele Buonofi
57831e4f6065SDaniele Buonofi
57847d992e4dSPeter Lieven
5785d0e2fce5SAneesh Kumar K.V##########################################
5786d2042378SAneesh Kumar K.V# check if we have open_by_handle_at
5787d2042378SAneesh Kumar K.V
57884e1797f9SStefan Weilopen_by_handle_at=no
5789d2042378SAneesh Kumar K.Vcat > $TMPC << EOF
5790d2042378SAneesh Kumar K.V#include <fcntl.h>
5791acc55ba8SStefan Weil#if !defined(AT_EMPTY_PATH)
5792acc55ba8SStefan Weil# error missing definition
5793acc55ba8SStefan Weil#else
579475cafad7SStefan Weilint main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5795acc55ba8SStefan Weil#endif
5796d2042378SAneesh Kumar K.VEOF
5797d2042378SAneesh Kumar K.Vif compile_prog "" "" ; then
5798d2042378SAneesh Kumar K.V    open_by_handle_at=yes
5799d2042378SAneesh Kumar K.Vfi
5800d2042378SAneesh Kumar K.V
5801e06a765eSHarsh Prateek Bora########################################
5802e06a765eSHarsh Prateek Bora# check if we have linux/magic.h
5803e06a765eSHarsh Prateek Bora
5804e06a765eSHarsh Prateek Boralinux_magic_h=no
5805e06a765eSHarsh Prateek Boracat > $TMPC << EOF
5806e06a765eSHarsh Prateek Bora#include <linux/magic.h>
5807e06a765eSHarsh Prateek Boraint main(void) {
580875cafad7SStefan Weil  return 0;
5809e06a765eSHarsh Prateek Bora}
5810e06a765eSHarsh Prateek BoraEOF
5811e06a765eSHarsh Prateek Boraif compile_prog "" "" ; then
5812e06a765eSHarsh Prateek Bora    linux_magic_h=yes
5813e06a765eSHarsh Prateek Borafi
5814e06a765eSHarsh Prateek Bora
58158ab1bf12SLuiz Capitulino########################################
5816541be927SChristian Borntraeger# check if we have valgrind/valgrind.h
58173f4349dcSKevin Wolf
58183f4349dcSKevin Wolfvalgrind_h=no
58193f4349dcSKevin Wolfcat > $TMPC << EOF
58203f4349dcSKevin Wolf#include <valgrind/valgrind.h>
58213f4349dcSKevin Wolfint main(void) {
58223f4349dcSKevin Wolf  return 0;
58233f4349dcSKevin Wolf}
58243f4349dcSKevin WolfEOF
58253f4349dcSKevin Wolfif compile_prog "" "" ; then
58263f4349dcSKevin Wolf    valgrind_h=yes
58273f4349dcSKevin Wolffi
58283f4349dcSKevin Wolf
58293f4349dcSKevin Wolf########################################
58308ab1bf12SLuiz Capitulino# check if environ is declared
58318ab1bf12SLuiz Capitulino
58328ab1bf12SLuiz Capitulinohas_environ=no
58338ab1bf12SLuiz Capitulinocat > $TMPC << EOF
58348ab1bf12SLuiz Capitulino#include <unistd.h>
58358ab1bf12SLuiz Capitulinoint main(void) {
5836c075a723SBlue Swirl    environ = 0;
58378ab1bf12SLuiz Capitulino    return 0;
58388ab1bf12SLuiz Capitulino}
58398ab1bf12SLuiz CapitulinoEOF
58408ab1bf12SLuiz Capitulinoif compile_prog "" "" ; then
58418ab1bf12SLuiz Capitulino    has_environ=yes
58428ab1bf12SLuiz Capitulinofi
58438ab1bf12SLuiz Capitulino
584476a347e1SRichard Henderson########################################
584576a347e1SRichard Henderson# check if cpuid.h is usable.
584676a347e1SRichard Henderson
584776a347e1SRichard Hendersoncat > $TMPC << EOF
584876a347e1SRichard Henderson#include <cpuid.h>
584976a347e1SRichard Hendersonint main(void) {
5850774d566cSPeter Maydell    unsigned a, b, c, d;
5851774d566cSPeter Maydell    int max = __get_cpuid_max(0, 0);
5852774d566cSPeter Maydell
5853774d566cSPeter Maydell    if (max >= 1) {
5854774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
5855774d566cSPeter Maydell    }
5856774d566cSPeter Maydell
5857774d566cSPeter Maydell    if (max >= 7) {
5858774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
5859774d566cSPeter Maydell    }
5860774d566cSPeter Maydell
586176a347e1SRichard Henderson    return 0;
586276a347e1SRichard Henderson}
586376a347e1SRichard HendersonEOF
586476a347e1SRichard Hendersonif compile_prog "" "" ; then
586576a347e1SRichard Henderson    cpuid_h=yes
586676a347e1SRichard Hendersonfi
586776a347e1SRichard Henderson
58685dd89908SRichard Henderson##########################################
58695dd89908SRichard Henderson# avx2 optimization requirement check
58705dd89908SRichard Henderson#
58715dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable,
58725dd89908SRichard Henderson# since we won't be able to select the new routines.
58735dd89908SRichard Henderson
5874e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
58755dd89908SRichard Henderson  cat > $TMPC << EOF
58765dd89908SRichard Henderson#pragma GCC push_options
58775dd89908SRichard Henderson#pragma GCC target("avx2")
58785dd89908SRichard Henderson#include <cpuid.h>
58795dd89908SRichard Henderson#include <immintrin.h>
58805dd89908SRichard Hendersonstatic int bar(void *a) {
58815dd89908SRichard Henderson    __m256i x = *(__m256i *)a;
58825dd89908SRichard Henderson    return _mm256_testz_si256(x, x);
58835dd89908SRichard Henderson}
58845dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); }
58855dd89908SRichard HendersonEOF
58865dd89908SRichard Henderson  if compile_object "" ; then
58875dd89908SRichard Henderson    avx2_opt="yes"
588886583a07SLiam Merwick  else
588986583a07SLiam Merwick    avx2_opt="no"
58905dd89908SRichard Henderson  fi
58915dd89908SRichard Hendersonfi
58925dd89908SRichard Henderson
58936b8cd447SRobert Hoo##########################################
58946b8cd447SRobert Hoo# avx512f optimization requirement check
58956b8cd447SRobert Hoo#
58966b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable,
58976b8cd447SRobert Hoo# since we won't be able to select the new routines.
58986b8cd447SRobert Hoo# by default, it is turned off.
58996b8cd447SRobert Hoo# if user explicitly want to enable it, check environment
59006b8cd447SRobert Hoo
59016b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
59026b8cd447SRobert Hoo  cat > $TMPC << EOF
59036b8cd447SRobert Hoo#pragma GCC push_options
59046b8cd447SRobert Hoo#pragma GCC target("avx512f")
59056b8cd447SRobert Hoo#include <cpuid.h>
59066b8cd447SRobert Hoo#include <immintrin.h>
59076b8cd447SRobert Hoostatic int bar(void *a) {
59086b8cd447SRobert Hoo    __m512i x = *(__m512i *)a;
59096b8cd447SRobert Hoo    return _mm512_test_epi64_mask(x, x);
59106b8cd447SRobert Hoo}
59116b8cd447SRobert Hooint main(int argc, char *argv[])
59126b8cd447SRobert Hoo{
59136b8cd447SRobert Hoo	return bar(argv[0]);
59146b8cd447SRobert Hoo}
59156b8cd447SRobert HooEOF
59166b8cd447SRobert Hoo  if ! compile_object "" ; then
59176b8cd447SRobert Hoo    avx512f_opt="no"
59186b8cd447SRobert Hoo  fi
59196b8cd447SRobert Hooelse
59206b8cd447SRobert Hoo  avx512f_opt="no"
59216b8cd447SRobert Hoofi
59226b8cd447SRobert Hoo
5923f540166bSRichard Henderson########################################
5924f540166bSRichard Henderson# check if __[u]int128_t is usable.
5925f540166bSRichard Henderson
5926f540166bSRichard Hendersonint128=no
5927f540166bSRichard Hendersoncat > $TMPC << EOF
5928f540166bSRichard Henderson__int128_t a;
5929f540166bSRichard Henderson__uint128_t b;
5930f540166bSRichard Hendersonint main (void) {
5931f540166bSRichard Henderson  a = a + b;
5932f540166bSRichard Henderson  b = a * b;
5933464e3671SPeter Maydell  a = a * a;
5934f540166bSRichard Henderson  return 0;
5935f540166bSRichard Henderson}
5936f540166bSRichard HendersonEOF
5937f540166bSRichard Hendersonif compile_prog "" "" ; then
5938f540166bSRichard Henderson    int128=yes
5939f540166bSRichard Hendersonfi
594076a347e1SRichard Henderson
59417ebee43eSRichard Henderson#########################################
59427ebee43eSRichard Henderson# See if 128-bit atomic operations are supported.
59437ebee43eSRichard Henderson
59447ebee43eSRichard Hendersonatomic128=no
59457ebee43eSRichard Hendersonif test "$int128" = "yes"; then
59467ebee43eSRichard Henderson  cat > $TMPC << EOF
59477ebee43eSRichard Hendersonint main(void)
59487ebee43eSRichard Henderson{
59497ebee43eSRichard Henderson  unsigned __int128 x = 0, y = 0;
59507ebee43eSRichard Henderson  y = __atomic_load_16(&x, 0);
59517ebee43eSRichard Henderson  __atomic_store_16(&x, y, 0);
59527ebee43eSRichard Henderson  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
59537ebee43eSRichard Henderson  return 0;
59547ebee43eSRichard Henderson}
59557ebee43eSRichard HendersonEOF
59567ebee43eSRichard Henderson  if compile_prog "" "" ; then
59577ebee43eSRichard Henderson    atomic128=yes
59587ebee43eSRichard Henderson  fi
59597ebee43eSRichard Hendersonfi
59607ebee43eSRichard Henderson
5961e6cd4bb5SRichard Hendersoncmpxchg128=no
5962e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then
5963e6cd4bb5SRichard Henderson  cat > $TMPC << EOF
5964e6cd4bb5SRichard Hendersonint main(void)
5965e6cd4bb5SRichard Henderson{
5966e6cd4bb5SRichard Henderson  unsigned __int128 x = 0, y = 0;
5967e6cd4bb5SRichard Henderson  __sync_val_compare_and_swap_16(&x, y, x);
5968e6cd4bb5SRichard Henderson  return 0;
5969e6cd4bb5SRichard Henderson}
5970e6cd4bb5SRichard HendersonEOF
5971e6cd4bb5SRichard Henderson  if compile_prog "" "" ; then
5972e6cd4bb5SRichard Henderson    cmpxchg128=yes
5973e6cd4bb5SRichard Henderson  fi
5974e6cd4bb5SRichard Hendersonfi
5975e6cd4bb5SRichard Henderson
5976df79b996SRichard Henderson#########################################
5977df79b996SRichard Henderson# See if 64-bit atomic operations are supported.
5978df79b996SRichard Henderson# Note that without __atomic builtins, we can only
5979df79b996SRichard Henderson# assume atomic loads/stores max at pointer size.
5980df79b996SRichard Henderson
5981df79b996SRichard Hendersoncat > $TMPC << EOF
5982df79b996SRichard Henderson#include <stdint.h>
5983df79b996SRichard Hendersonint main(void)
5984df79b996SRichard Henderson{
5985df79b996SRichard Henderson  uint64_t x = 0, y = 0;
5986df79b996SRichard Henderson#ifdef __ATOMIC_RELAXED
5987df79b996SRichard Henderson  y = __atomic_load_8(&x, 0);
5988df79b996SRichard Henderson  __atomic_store_8(&x, y, 0);
5989df79b996SRichard Henderson  __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5990df79b996SRichard Henderson  __atomic_exchange_8(&x, y, 0);
5991df79b996SRichard Henderson  __atomic_fetch_add_8(&x, y, 0);
5992df79b996SRichard Henderson#else
5993df79b996SRichard Henderson  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5994df79b996SRichard Henderson  __sync_lock_test_and_set(&x, y);
5995df79b996SRichard Henderson  __sync_val_compare_and_swap(&x, y, 0);
5996df79b996SRichard Henderson  __sync_fetch_and_add(&x, y);
5997df79b996SRichard Henderson#endif
5998df79b996SRichard Henderson  return 0;
5999df79b996SRichard Henderson}
6000df79b996SRichard HendersonEOF
6001df79b996SRichard Hendersonif compile_prog "" "" ; then
6002df79b996SRichard Henderson  atomic64=yes
6003df79b996SRichard Hendersonfi
6004df79b996SRichard Henderson
600526fffe29SEmilio G. Cota#########################################
600626fffe29SEmilio G. Cota# See if --dynamic-list is supported by the linker
600726fffe29SEmilio G. Cotald_dynamic_list="no"
600826fffe29SEmilio G. Cotaif test "$static" = "no" ; then
600926fffe29SEmilio G. Cota    cat > $TMPTXT <<EOF
601026fffe29SEmilio G. Cota{
601126fffe29SEmilio G. Cota  foo;
601226fffe29SEmilio G. Cota};
601326fffe29SEmilio G. CotaEOF
601426fffe29SEmilio G. Cota
601526fffe29SEmilio G. Cota    cat > $TMPC <<EOF
601626fffe29SEmilio G. Cota#include <stdio.h>
601726fffe29SEmilio G. Cotavoid foo(void);
601826fffe29SEmilio G. Cota
601926fffe29SEmilio G. Cotavoid foo(void)
602026fffe29SEmilio G. Cota{
602126fffe29SEmilio G. Cota  printf("foo\n");
602226fffe29SEmilio G. Cota}
602326fffe29SEmilio G. Cota
602426fffe29SEmilio G. Cotaint main(void)
602526fffe29SEmilio G. Cota{
602626fffe29SEmilio G. Cota  foo();
602726fffe29SEmilio G. Cota  return 0;
602826fffe29SEmilio G. Cota}
602926fffe29SEmilio G. CotaEOF
603026fffe29SEmilio G. Cota
603126fffe29SEmilio G. Cota    if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
603226fffe29SEmilio G. Cota        ld_dynamic_list="yes"
603326fffe29SEmilio G. Cota    fi
603426fffe29SEmilio G. Cotafi
603526fffe29SEmilio G. Cota
603626fffe29SEmilio G. Cota#########################################
603726fffe29SEmilio G. Cota# See if -exported_symbols_list is supported by the linker
603826fffe29SEmilio G. Cota
603926fffe29SEmilio G. Cotald_exported_symbols_list="no"
604026fffe29SEmilio G. Cotaif test "$static" = "no" ; then
604126fffe29SEmilio G. Cota    cat > $TMPTXT <<EOF
604226fffe29SEmilio G. Cota  _foo
604326fffe29SEmilio G. CotaEOF
604426fffe29SEmilio G. Cota
604526fffe29SEmilio G. Cota    if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
604626fffe29SEmilio G. Cota        ld_exported_symbols_list="yes"
604726fffe29SEmilio G. Cota    fi
604826fffe29SEmilio G. Cotafi
604926fffe29SEmilio G. Cota
605026fffe29SEmilio G. Cotaif  test "$plugins" = "yes" &&
605126fffe29SEmilio G. Cota    test "$ld_dynamic_list" = "no" &&
605226fffe29SEmilio G. Cota    test "$ld_exported_symbols_list" = "no" ; then
605326fffe29SEmilio G. Cota  error_exit \
605426fffe29SEmilio G. Cota      "Plugin support requires dynamic linking and specifying a set of symbols " \
605526fffe29SEmilio G. Cota      "that are exported to plugins. Unfortunately your linker doesn't " \
605626fffe29SEmilio G. Cota      "support the flag (--dynamic-list or -exported_symbols_list) used " \
605726fffe29SEmilio G. Cota      "for this purpose. You can't build with --static."
605826fffe29SEmilio G. Cotafi
605926fffe29SEmilio G. Cota
60601e6e9acaSRichard Henderson########################################
6061db8aaae8SRichard Henderson# See if __attribute__((alias)) is supported.
6062db8aaae8SRichard Henderson# This false for Xcode 9, but has been remedied for Xcode 10.
6063db8aaae8SRichard Henderson# Unfortunately, travis uses Xcode 9 by default.
6064db8aaae8SRichard Henderson
6065db8aaae8SRichard Hendersonattralias=no
6066db8aaae8SRichard Hendersoncat > $TMPC << EOF
6067db8aaae8SRichard Hendersonint x = 1;
6068db8aaae8SRichard Hendersonextern const int y __attribute__((alias("x")));
6069db8aaae8SRichard Hendersonint main(void) { return 0; }
6070db8aaae8SRichard HendersonEOF
6071db8aaae8SRichard Hendersonif compile_prog "" "" ; then
6072db8aaae8SRichard Henderson    attralias=yes
6073db8aaae8SRichard Hendersonfi
6074db8aaae8SRichard Henderson
6075db8aaae8SRichard Henderson########################################
60761e6e9acaSRichard Henderson# check if getauxval is available.
60771e6e9acaSRichard Henderson
60781e6e9acaSRichard Hendersongetauxval=no
60791e6e9acaSRichard Hendersoncat > $TMPC << EOF
60801e6e9acaSRichard Henderson#include <sys/auxv.h>
60811e6e9acaSRichard Hendersonint main(void) {
60821e6e9acaSRichard Henderson  return getauxval(AT_HWCAP) == 0;
60831e6e9acaSRichard Henderson}
60841e6e9acaSRichard HendersonEOF
60851e6e9acaSRichard Hendersonif compile_prog "" "" ; then
60861e6e9acaSRichard Henderson    getauxval=yes
60871e6e9acaSRichard Hendersonfi
60881e6e9acaSRichard Henderson
6089fd0e6053SJohn Snow########################################
6090fd0e6053SJohn Snow# check if ccache is interfering with
6091fd0e6053SJohn Snow# semantic analysis of macros
6092fd0e6053SJohn Snow
60935e4dfd3dSJohn Snowunset CCACHE_CPP2
6094fd0e6053SJohn Snowccache_cpp2=no
6095fd0e6053SJohn Snowcat > $TMPC << EOF
6096fd0e6053SJohn Snowstatic const int Z = 1;
6097fd0e6053SJohn Snow#define fn() ({ Z; })
6098fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
6099fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
6100fd0e6053SJohn Snow#define ID(X) (X)
6101fd0e6053SJohn Snowint main(int argc, char *argv[])
6102fd0e6053SJohn Snow{
6103fd0e6053SJohn Snow    int x = 0, y = 0;
6104fd0e6053SJohn Snow    x = ID(x);
6105fd0e6053SJohn Snow    x = fn();
6106fd0e6053SJohn Snow    fn();
6107fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
6108fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
6109fd0e6053SJohn Snow    return 0;
6110fd0e6053SJohn Snow}
6111fd0e6053SJohn SnowEOF
6112fd0e6053SJohn Snow
6113fd0e6053SJohn Snowif ! compile_object "-Werror"; then
6114fd0e6053SJohn Snow    ccache_cpp2=yes
6115fd0e6053SJohn Snowfi
6116fd0e6053SJohn Snow
6117b553a042SJohn Snow#################################################
6118b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
6119b553a042SJohn Snow
6120b553a042SJohn Snowif test "$fortify_source" != "no"; then
6121b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
6122b553a042SJohn Snow    fortify_source="no";
6123e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
6124cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
6125b553a042SJohn Snow    fortify_source="no";
6126b553a042SJohn Snow  else
6127b553a042SJohn Snow    fortify_source="yes"
6128b553a042SJohn Snow  fi
6129b553a042SJohn Snowfi
6130b553a042SJohn Snow
61311efad060SFam Zheng###############################################
61321efad060SFam Zheng# Check if copy_file_range is provided by glibc
61331efad060SFam Zhenghave_copy_file_range=no
61341efad060SFam Zhengcat > $TMPC << EOF
61351efad060SFam Zheng#include <unistd.h>
61361efad060SFam Zhengint main(void) {
61371efad060SFam Zheng  copy_file_range(0, NULL, 0, NULL, 0, 0);
61381efad060SFam Zheng  return 0;
61391efad060SFam Zheng}
61401efad060SFam ZhengEOF
61411efad060SFam Zhengif compile_prog "" "" ; then
61421efad060SFam Zheng    have_copy_file_range=yes
61431efad060SFam Zhengfi
61441efad060SFam Zheng
6145d2042378SAneesh Kumar K.V##########################################
6146277abf15SJan Vesely# check if struct fsxattr is available via linux/fs.h
6147277abf15SJan Vesely
6148277abf15SJan Veselyhave_fsxattr=no
6149277abf15SJan Veselycat > $TMPC << EOF
6150277abf15SJan Vesely#include <linux/fs.h>
6151277abf15SJan Veselystruct fsxattr foo;
6152277abf15SJan Veselyint main(void) {
6153277abf15SJan Vesely  return 0;
6154277abf15SJan Vesely}
6155277abf15SJan VeselyEOF
6156277abf15SJan Veselyif compile_prog "" "" ; then
6157277abf15SJan Vesely    have_fsxattr=yes
6158277abf15SJan Veselyfi
6159277abf15SJan Vesely
6160b66e10e4SPeter Maydell##########################################
6161a40161cbSPaolo Bonzini# check for usable membarrier system call
6162a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then
6163a40161cbSPaolo Bonzini    have_membarrier=no
6164a40161cbSPaolo Bonzini    if test "$mingw32" = "yes" ; then
6165a40161cbSPaolo Bonzini        have_membarrier=yes
6166a40161cbSPaolo Bonzini    elif test "$linux" = "yes" ; then
6167a40161cbSPaolo Bonzini        cat > $TMPC << EOF
6168a40161cbSPaolo Bonzini    #include <linux/membarrier.h>
6169a40161cbSPaolo Bonzini    #include <sys/syscall.h>
6170a40161cbSPaolo Bonzini    #include <unistd.h>
6171a40161cbSPaolo Bonzini    #include <stdlib.h>
6172a40161cbSPaolo Bonzini    int main(void) {
6173a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
6174a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
6175a40161cbSPaolo Bonzini	exit(0);
6176a40161cbSPaolo Bonzini    }
6177a40161cbSPaolo BonziniEOF
6178a40161cbSPaolo Bonzini        if compile_prog "" "" ; then
6179a40161cbSPaolo Bonzini            have_membarrier=yes
6180a40161cbSPaolo Bonzini        fi
6181a40161cbSPaolo Bonzini    fi
6182a40161cbSPaolo Bonzini    if test "$have_membarrier" = "no"; then
6183a40161cbSPaolo Bonzini      feature_not_found "membarrier" "membarrier system call not available"
6184a40161cbSPaolo Bonzini    fi
6185a40161cbSPaolo Bonzinielse
6186a40161cbSPaolo Bonzini    # Do not enable it by default even for Mingw32, because it doesn't
6187a40161cbSPaolo Bonzini    # work on Wine.
6188a40161cbSPaolo Bonzini    membarrier=no
6189a40161cbSPaolo Bonzinifi
6190a40161cbSPaolo Bonzini
6191a40161cbSPaolo Bonzini##########################################
6192b66e10e4SPeter Maydell# check if rtnetlink.h exists and is useful
6193575b22b1SLaurent Vivierhave_rtnetlink=no
6194575b22b1SLaurent Viviercat > $TMPC << EOF
6195575b22b1SLaurent Vivier#include <linux/rtnetlink.h>
6196575b22b1SLaurent Vivierint main(void) {
6197575b22b1SLaurent Vivier  return IFLA_PROTO_DOWN;
6198575b22b1SLaurent Vivier}
6199575b22b1SLaurent VivierEOF
6200575b22b1SLaurent Vivierif compile_prog "" "" ; then
6201575b22b1SLaurent Vivier    have_rtnetlink=yes
6202575b22b1SLaurent Vivierfi
6203575b22b1SLaurent Vivier
62046a02c806SStefan Hajnoczi##########################################
62056a02c806SStefan Hajnoczi# check for usable AF_VSOCK environment
62066a02c806SStefan Hajnoczihave_af_vsock=no
62076a02c806SStefan Hajnoczicat > $TMPC << EOF
62086a02c806SStefan Hajnoczi#include <errno.h>
62096a02c806SStefan Hajnoczi#include <sys/types.h>
62106a02c806SStefan Hajnoczi#include <sys/socket.h>
62116a02c806SStefan Hajnoczi#if !defined(AF_VSOCK)
62126a02c806SStefan Hajnoczi# error missing AF_VSOCK flag
62136a02c806SStefan Hajnoczi#endif
62146a02c806SStefan Hajnoczi#include <linux/vm_sockets.h>
62156a02c806SStefan Hajnocziint main(void) {
62166a02c806SStefan Hajnoczi    int sock, ret;
62176a02c806SStefan Hajnoczi    struct sockaddr_vm svm;
62186a02c806SStefan Hajnoczi    socklen_t len = sizeof(svm);
62196a02c806SStefan Hajnoczi    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
62206a02c806SStefan Hajnoczi    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
62216a02c806SStefan Hajnoczi    if ((ret == -1) && (errno == ENOTCONN)) {
62226a02c806SStefan Hajnoczi        return 0;
62236a02c806SStefan Hajnoczi    }
62246a02c806SStefan Hajnoczi    return -1;
62256a02c806SStefan Hajnoczi}
62266a02c806SStefan HajnocziEOF
62276a02c806SStefan Hajnocziif compile_prog "" "" ; then
62286a02c806SStefan Hajnoczi    have_af_vsock=yes
62296a02c806SStefan Hajnoczifi
62306a02c806SStefan Hajnoczi
6231f0d92b56SLongpeng(Mike)##########################################
6232f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment
62334f67366eSThomas Huthhave_afalg=no
6234f0d92b56SLongpeng(Mike)cat > $TMPC << EOF
6235f0d92b56SLongpeng(Mike)#include <errno.h>
6236f0d92b56SLongpeng(Mike)#include <sys/types.h>
6237f0d92b56SLongpeng(Mike)#include <sys/socket.h>
6238f0d92b56SLongpeng(Mike)#include <linux/if_alg.h>
6239f0d92b56SLongpeng(Mike)int main(void) {
6240f0d92b56SLongpeng(Mike)    int sock;
6241f0d92b56SLongpeng(Mike)    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6242f0d92b56SLongpeng(Mike)    return sock;
6243f0d92b56SLongpeng(Mike)}
6244f0d92b56SLongpeng(Mike)EOF
6245f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then
6246f0d92b56SLongpeng(Mike)    have_afalg=yes
6247f0d92b56SLongpeng(Mike)fi
6248f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes"
6249f0d92b56SLongpeng(Mike)then
6250f0d92b56SLongpeng(Mike)    if test "$have_afalg" != "yes"
6251f0d92b56SLongpeng(Mike)    then
6252f0d92b56SLongpeng(Mike)	error_exit "AF_ALG requested but could not be detected"
6253f0d92b56SLongpeng(Mike)    fi
6254f0d92b56SLongpeng(Mike)fi
6255f0d92b56SLongpeng(Mike)
6256f0d92b56SLongpeng(Mike)
62576969ec6cSJames Clarke#################################################
6258c97d6d2cSSergio Andres Gomez Del Real# Check to see if we have the Hypervisor framework
6259d2d08522SPeter Maydellif [ "$darwin" = "yes" ] ; then
6260c97d6d2cSSergio Andres Gomez Del Real  cat > $TMPC << EOF
6261c97d6d2cSSergio Andres Gomez Del Real#include <Hypervisor/hv.h>
6262c97d6d2cSSergio Andres Gomez Del Realint main() { return 0;}
6263c97d6d2cSSergio Andres Gomez Del RealEOF
6264c97d6d2cSSergio Andres Gomez Del Real  if ! compile_object ""; then
6265c97d6d2cSSergio Andres Gomez Del Real    hvf='no'
6266c97d6d2cSSergio Andres Gomez Del Real  else
6267c97d6d2cSSergio Andres Gomez Del Real    hvf='yes'
6268db5adeaaSPaolo Bonzini    QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
6269c97d6d2cSSergio Andres Gomez Del Real  fi
6270c97d6d2cSSergio Andres Gomez Del Realfi
6271c97d6d2cSSergio Andres Gomez Del Real
6272c97d6d2cSSergio Andres Gomez Del Real#################################################
62736969ec6cSJames Clarke# Sparc implicitly links with --relax, which is
62746969ec6cSJames Clarke# incompatible with -r, so --no-relax should be
62756969ec6cSJames Clarke# given. It does no harm to give it on other
62766969ec6cSJames Clarke# platforms too.
62776969ec6cSJames Clarke
62786969ec6cSJames Clarke# Note: the prototype is needed since QEMU_CFLAGS
62796969ec6cSJames Clarke#       contains -Wmissing-prototypes
62806969ec6cSJames Clarkecat > $TMPC << EOF
62816969ec6cSJames Clarkeextern int foo(void);
62826969ec6cSJames Clarkeint foo(void) { return 0; }
62836969ec6cSJames ClarkeEOF
62846969ec6cSJames Clarkeif ! compile_object ""; then
62856969ec6cSJames Clarke  error_exit "Failed to compile object file for LD_REL_FLAGS test"
62866969ec6cSJames Clarkefi
62877ecf44a5SPaolo Bonzinifor i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
62887ecf44a5SPaolo Bonzini  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
62897ecf44a5SPaolo Bonzini    LD_REL_FLAGS=$i
62907ecf44a5SPaolo Bonzini    break
62917ecf44a5SPaolo Bonzini  fi
62927ecf44a5SPaolo Bonzinidone
62937ecf44a5SPaolo Bonziniif test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
62947ecf44a5SPaolo Bonzini  feature_not_found "modules" "Cannot find how to build relocatable objects"
62956969ec6cSJames Clarkefi
62966969ec6cSJames Clarke
6297277abf15SJan Vesely##########################################
62984d04351fSChristopher Covington# check for sysmacros.h
62994d04351fSChristopher Covington
63004d04351fSChristopher Covingtonhave_sysmacros=no
63014d04351fSChristopher Covingtoncat > $TMPC << EOF
63024d04351fSChristopher Covington#include <sys/sysmacros.h>
63034d04351fSChristopher Covingtonint main(void) {
63044d04351fSChristopher Covington    return makedev(0, 0);
63054d04351fSChristopher Covington}
63064d04351fSChristopher CovingtonEOF
63074d04351fSChristopher Covingtonif compile_prog "" "" ; then
63084d04351fSChristopher Covington    have_sysmacros=yes
63094d04351fSChristopher Covingtonfi
63104d04351fSChristopher Covington
63114d04351fSChristopher Covington##########################################
631249e00a18SAndreas Grapentin# check for _Static_assert()
631349e00a18SAndreas Grapentin
631449e00a18SAndreas Grapentinhave_static_assert=no
631549e00a18SAndreas Grapentincat > $TMPC << EOF
631649e00a18SAndreas Grapentin_Static_assert(1, "success");
631749e00a18SAndreas Grapentinint main(void) {
631849e00a18SAndreas Grapentin    return 0;
631949e00a18SAndreas Grapentin}
632049e00a18SAndreas GrapentinEOF
632149e00a18SAndreas Grapentinif compile_prog "" "" ; then
632249e00a18SAndreas Grapentin    have_static_assert=yes
632349e00a18SAndreas Grapentinfi
632449e00a18SAndreas Grapentin
632549e00a18SAndreas Grapentin##########################################
6326e674605fSTomáš Golembiovský# check for utmpx.h, it is missing e.g. on OpenBSD
6327e674605fSTomáš Golembiovský
6328e674605fSTomáš Golembiovskýhave_utmpx=no
6329e674605fSTomáš Golembiovskýcat > $TMPC << EOF
6330e674605fSTomáš Golembiovský#include <utmpx.h>
6331e674605fSTomáš Golembiovskýstruct utmpx user_info;
6332e674605fSTomáš Golembiovskýint main(void) {
6333e674605fSTomáš Golembiovský    return 0;
6334e674605fSTomáš Golembiovský}
6335e674605fSTomáš GolembiovskýEOF
6336e674605fSTomáš Golembiovskýif compile_prog "" "" ; then
6337e674605fSTomáš Golembiovský    have_utmpx=yes
6338e674605fSTomáš Golembiovskýfi
6339e674605fSTomáš Golembiovský
6340e674605fSTomáš Golembiovský##########################################
6341db1ed1abSRichard Henderson# check for getrandom()
6342db1ed1abSRichard Henderson
6343db1ed1abSRichard Hendersonhave_getrandom=no
6344db1ed1abSRichard Hendersoncat > $TMPC << EOF
6345db1ed1abSRichard Henderson#include <sys/random.h>
6346db1ed1abSRichard Hendersonint main(void) {
6347db1ed1abSRichard Henderson    return getrandom(0, 0, GRND_NONBLOCK);
6348db1ed1abSRichard Henderson}
6349db1ed1abSRichard HendersonEOF
6350db1ed1abSRichard Hendersonif compile_prog "" "" ; then
6351db1ed1abSRichard Henderson    have_getrandom=yes
6352db1ed1abSRichard Hendersonfi
6353db1ed1abSRichard Henderson
6354db1ed1abSRichard Henderson##########################################
6355247724cbSMarc-André Lureau# checks for sanitizers
6356247724cbSMarc-André Lureau
6357247724cbSMarc-André Lureauhave_asan=no
6358247724cbSMarc-André Lureauhave_ubsan=no
6359d83414e1SMarc-André Lureauhave_asan_iface_h=no
6360d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
6361247724cbSMarc-André Lureau
6362247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
6363b9f44da2SMarc-André Lureau  write_c_skeleton
6364247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6365247724cbSMarc-André Lureau      have_asan=yes
6366247724cbSMarc-André Lureau  fi
6367b9f44da2SMarc-André Lureau
6368b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
6369b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
6370b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6371b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
6372b9f44da2SMarc-André Lureau#include <stdlib.h>
6373b9f44da2SMarc-André Lureauint main(void) {
6374b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
6375f2dfe54cSLeonid Bloch    if (tmp != NULL) {
6376b9f44da2SMarc-André Lureau        return *(int *)(tmp + 2);
6377b9f44da2SMarc-André Lureau    }
6378d1abf3fcSOlaf Hering    return 1;
6379f2dfe54cSLeonid Bloch}
6380b9f44da2SMarc-André LureauEOF
6381247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6382247724cbSMarc-André Lureau      have_ubsan=yes
6383247724cbSMarc-André Lureau  fi
6384d83414e1SMarc-André Lureau
6385d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
6386d83414e1SMarc-André Lureau      have_asan_iface_h=yes
6387d83414e1SMarc-André Lureau  fi
6388d83414e1SMarc-André Lureau
6389d83414e1SMarc-André Lureau  cat > $TMPC << EOF
6390d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
6391d83414e1SMarc-André Lureauint main(void) {
6392d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
6393d83414e1SMarc-André Lureau  return 0;
6394d83414e1SMarc-André Lureau}
6395d83414e1SMarc-André LureauEOF
6396d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6397d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
6398d83414e1SMarc-André Lureau  fi
6399247724cbSMarc-André Lureaufi
6400247724cbSMarc-André Lureau
6401247724cbSMarc-André Lureau##########################################
6402adc28027SAlexander Bulekov# checks for fuzzer
6403adc28027SAlexander Bulekovif test "$fuzzing" = "yes" ; then
6404adc28027SAlexander Bulekov  write_c_fuzzer_skeleton
6405dd016265SAlexander Bulekov  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
6406adc28027SAlexander Bulekov      have_fuzzer=yes
6407adc28027SAlexander Bulekov  fi
6408adc28027SAlexander Bulekovfi
6409adc28027SAlexander Bulekov
64100aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers;
64110aebab04SLingfeng Yang# keep it separate until that is not the case.
64120aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
64130aebab04SLingfeng Yang  error_exit "TSAN is not supported with other sanitiziers."
64140aebab04SLingfeng Yangfi
64150aebab04SLingfeng Yanghave_tsan=no
64160aebab04SLingfeng Yanghave_tsan_iface_fiber=no
64170aebab04SLingfeng Yangif test "$tsan" = "yes" ; then
64180aebab04SLingfeng Yang  write_c_skeleton
64190aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
64200aebab04SLingfeng Yang      have_tsan=yes
64210aebab04SLingfeng Yang  fi
64220aebab04SLingfeng Yang  cat > $TMPC << EOF
64230aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h>
64240aebab04SLingfeng Yangint main(void) {
64250aebab04SLingfeng Yang  __tsan_create_fiber(0);
64260aebab04SLingfeng Yang  return 0;
64270aebab04SLingfeng Yang}
64280aebab04SLingfeng YangEOF
64290aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
64300aebab04SLingfeng Yang      have_tsan_iface_fiber=yes
64310aebab04SLingfeng Yang  fi
64320aebab04SLingfeng Yangfi
64330aebab04SLingfeng Yang
6434adc28027SAlexander Bulekov##########################################
643517824406SJunyan He# check for libpmem
643617824406SJunyan He
643717824406SJunyan Heif test "$libpmem" != "no"; then
643817824406SJunyan He	if $pkg_config --exists "libpmem"; then
643917824406SJunyan He		libpmem="yes"
644017824406SJunyan He		libpmem_libs=$($pkg_config --libs libpmem)
644117824406SJunyan He		libpmem_cflags=$($pkg_config --cflags libpmem)
644217824406SJunyan He		libs_softmmu="$libs_softmmu $libpmem_libs"
644317824406SJunyan He		QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
644417824406SJunyan He	else
644517824406SJunyan He		if test "$libpmem" = "yes" ; then
644617824406SJunyan He			feature_not_found "libpmem" "Install nvml or pmdk"
644717824406SJunyan He		fi
644817824406SJunyan He		libpmem="no"
644917824406SJunyan He	fi
645017824406SJunyan Hefi
645117824406SJunyan He
645217824406SJunyan He##########################################
645321b2eca6SJingqi Liu# check for libdaxctl
645421b2eca6SJingqi Liu
645521b2eca6SJingqi Liuif test "$libdaxctl" != "no"; then
645621b2eca6SJingqi Liu	if $pkg_config --atleast-version=57 "libdaxctl"; then
645721b2eca6SJingqi Liu		libdaxctl="yes"
645821b2eca6SJingqi Liu		libdaxctl_libs=$($pkg_config --libs libdaxctl)
645921b2eca6SJingqi Liu		libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
646021b2eca6SJingqi Liu		libs_softmmu="$libs_softmmu $libdaxctl_libs"
646121b2eca6SJingqi Liu		QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags"
646221b2eca6SJingqi Liu	else
646321b2eca6SJingqi Liu		if test "$libdaxctl" = "yes" ; then
646421b2eca6SJingqi Liu			feature_not_found "libdaxctl" "Install libdaxctl"
646521b2eca6SJingqi Liu		fi
646621b2eca6SJingqi Liu		libdaxctl="no"
646721b2eca6SJingqi Liu	fi
646821b2eca6SJingqi Liufi
646921b2eca6SJingqi Liu
647021b2eca6SJingqi Liu##########################################
6471675b9b53SMarc-André Lureau# check for slirp
6472675b9b53SMarc-André Lureau
6473d599938aSLaurent Vivier# slirp is only required when building softmmu targets
6474d599938aSLaurent Vivierif test -z "$slirp" -a "$softmmu" != "yes" ; then
6475d599938aSLaurent Vivier    slirp="no"
6476d599938aSLaurent Vivierfi
6477d599938aSLaurent Vivier
6478675b9b53SMarc-André Lureaucase "$slirp" in
6479675b9b53SMarc-André Lureau  "" | yes)
6480675b9b53SMarc-André Lureau    if $pkg_config slirp; then
6481675b9b53SMarc-André Lureau      slirp=system
64827c57bdd8SMarc-André Lureau    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
64837c57bdd8SMarc-André Lureau      slirp=git
6484675b9b53SMarc-André Lureau    elif test -e "${source_path}/slirp/Makefile" ; then
6485675b9b53SMarc-André Lureau      slirp=internal
6486675b9b53SMarc-André Lureau    elif test -z "$slirp" ; then
6487675b9b53SMarc-André Lureau      slirp=no
6488675b9b53SMarc-André Lureau    else
6489675b9b53SMarc-André Lureau      feature_not_found "slirp" "Install slirp devel or git submodule"
6490675b9b53SMarc-André Lureau    fi
6491675b9b53SMarc-André Lureau    ;;
6492675b9b53SMarc-André Lureau
6493675b9b53SMarc-André Lureau  system)
6494675b9b53SMarc-André Lureau    if ! $pkg_config slirp; then
6495675b9b53SMarc-André Lureau      feature_not_found "slirp" "Install slirp devel"
6496675b9b53SMarc-André Lureau    fi
6497675b9b53SMarc-André Lureau    ;;
6498675b9b53SMarc-André Lureauesac
6499675b9b53SMarc-André Lureau
6500675b9b53SMarc-André Lureaucase "$slirp" in
65017c57bdd8SMarc-André Lureau  git | internal)
65027c57bdd8SMarc-André Lureau    if test "$slirp" = git; then
65037c57bdd8SMarc-André Lureau      git_submodules="${git_submodules} slirp"
65047c57bdd8SMarc-André Lureau    fi
6505675b9b53SMarc-André Lureau    mkdir -p slirp
650625211446SPaolo Bonzini    slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src"
650725211446SPaolo Bonzini    slirp_libs="-L$PWD/slirp -lslirp"
6508b965e8c5SPaolo Bonzini    if test "$mingw32" = "yes" ; then
6509b965e8c5SPaolo Bonzini      slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6510b965e8c5SPaolo Bonzini    fi
6511675b9b53SMarc-André Lureau    ;;
6512675b9b53SMarc-André Lureau
6513675b9b53SMarc-André Lureau  system)
6514675b9b53SMarc-André Lureau    slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6515675b9b53SMarc-André Lureau    slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6516675b9b53SMarc-André Lureau    slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6517675b9b53SMarc-André Lureau    ;;
6518675b9b53SMarc-André Lureau
6519675b9b53SMarc-André Lureau  no)
6520675b9b53SMarc-André Lureau    ;;
6521675b9b53SMarc-André Lureau  *)
6522675b9b53SMarc-André Lureau    error_exit "Unknown state for slirp: $slirp"
6523675b9b53SMarc-André Lureau    ;;
6524675b9b53SMarc-André Lureauesac
6525675b9b53SMarc-André Lureau
652654e7aac0SAlexey Krasikov##########################################
652754e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall
652854e7aac0SAlexey Krasikov
652954e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then
653054e7aac0SAlexey Krasikov
653154e7aac0SAlexey Krasikov    have_keyring=no
653254e7aac0SAlexey Krasikov    cat > $TMPC << EOF
653354e7aac0SAlexey Krasikov#include <errno.h>
653454e7aac0SAlexey Krasikov#include <asm/unistd.h>
653554e7aac0SAlexey Krasikov#include <linux/keyctl.h>
653654e7aac0SAlexey Krasikov#include <unistd.h>
653754e7aac0SAlexey Krasikovint main(void) {
653854e7aac0SAlexey Krasikov    return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
653954e7aac0SAlexey Krasikov}
654054e7aac0SAlexey KrasikovEOF
654154e7aac0SAlexey Krasikov    if compile_prog "" "" ; then
654254e7aac0SAlexey Krasikov        have_keyring=yes
654354e7aac0SAlexey Krasikov    fi
654454e7aac0SAlexey Krasikovfi
654554e7aac0SAlexey Krasikovif test "$secret_keyring" != "no"
654654e7aac0SAlexey Krasikovthen
6547b418d265SDavid Edmondson    if test "$have_keyring" = "yes"
654854e7aac0SAlexey Krasikov    then
654954e7aac0SAlexey Krasikov	secret_keyring=yes
655054e7aac0SAlexey Krasikov    else
655154e7aac0SAlexey Krasikov	if test "$secret_keyring" = "yes"
655254e7aac0SAlexey Krasikov	then
655354e7aac0SAlexey Krasikov	    error_exit "syscall __NR_keyctl requested, \
655454e7aac0SAlexey Krasikovbut not implemented on your system"
655554e7aac0SAlexey Krasikov	else
655654e7aac0SAlexey Krasikov	    secret_keyring=no
655754e7aac0SAlexey Krasikov	fi
655854e7aac0SAlexey Krasikov    fi
655954e7aac0SAlexey Krasikovfi
656054e7aac0SAlexey Krasikov
656192500362SAlexey Krasikov##########################################
656292500362SAlexey Krasikov# check for usable keyutils.h
656392500362SAlexey Krasikov
656492500362SAlexey Krasikovif test "$linux" = "yes" ; then
656592500362SAlexey Krasikov
656692500362SAlexey Krasikov    have_keyutils=no
656792500362SAlexey Krasikov    cat > $TMPC << EOF
656892500362SAlexey Krasikov#include <errno.h>
656992500362SAlexey Krasikov#include <asm/unistd.h>
657092500362SAlexey Krasikov#include <unistd.h>
657192500362SAlexey Krasikov#include <sys/types.h>
657292500362SAlexey Krasikov#include <keyutils.h>
657392500362SAlexey Krasikovint main(void) {
657492500362SAlexey Krasikov    return request_key("user", NULL, NULL, 0);
657592500362SAlexey Krasikov}
657692500362SAlexey KrasikovEOF
657792500362SAlexey Krasikov    if compile_prog "" "-lkeyutils"; then
657892500362SAlexey Krasikov        have_keyutils=yes
657992500362SAlexey Krasikov    fi
658092500362SAlexey Krasikovfi
658192500362SAlexey Krasikov
6582675b9b53SMarc-André Lureau
6583675b9b53SMarc-André Lureau##########################################
6584e86ecd4bSJuan Quintela# End of CC checks
6585e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
6586e86ecd4bSJuan Quintela
6587d83414e1SMarc-André Lureauwrite_c_skeleton
6588d83414e1SMarc-André Lureau
65891d728c39SBlue Swirlif test "$gcov" = "yes" ; then
6590bf0e56a3SMarc-André Lureau  :
6591b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then
6592086d5f75SPaolo Bonzini  QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
6593086d5f75SPaolo Bonzini  debug=no
6594086d5f75SPaolo Bonzinifi
6595086d5f75SPaolo Bonziniif test "$debug_info" = "yes"; then
6596086d5f75SPaolo Bonzini  CFLAGS="-g $CFLAGS"
6597086d5f75SPaolo Bonzini  LDFLAGS="-g $LDFLAGS"
6598086d5f75SPaolo Bonzinifi
6599a5665051SPaolo Bonziniif test "$debug" = "no"; then
6600a5665051SPaolo Bonzini  CFLAGS="-O2 $CFLAGS"
6601a5665051SPaolo Bonzinifi
6602086d5f75SPaolo Bonzini
6603086d5f75SPaolo Bonzinicase "$ARCH" in
6604086d5f75SPaolo Bonzinialpha)
6605086d5f75SPaolo Bonzini  # Ensure there's only a single GP
6606086d5f75SPaolo Bonzini  QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
6607086d5f75SPaolo Bonzini;;
6608086d5f75SPaolo Bonziniesac
6609086d5f75SPaolo Bonzini
6610086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then
6611086d5f75SPaolo Bonzini  QEMU_CFLAGS="-p $QEMU_CFLAGS"
6612086d5f75SPaolo Bonzini  QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
6613086d5f75SPaolo Bonzinifi
6614a316e378SJuan Quintela
6615247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
6616db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6617db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
6618d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
6619d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
6620d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
6621d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
6622d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
6623d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
6624d83414e1SMarc-André Lureau  fi
6625247724cbSMarc-André Lureaufi
66260aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then
66270aebab04SLingfeng Yang  if test "$have_tsan_iface_fiber" = "yes" ; then
66280aebab04SLingfeng Yang    QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
66290aebab04SLingfeng Yang    QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
66300aebab04SLingfeng Yang  else
66310aebab04SLingfeng Yang    error_exit "Cannot enable TSAN due to missing fiber annotation interface."
66320aebab04SLingfeng Yang  fi
66330aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then
66340aebab04SLingfeng Yang  error_exit "Cannot enable TSAN due to missing sanitize thread interface."
66350aebab04SLingfeng Yangfi
6636247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
6637db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6638db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
6639247724cbSMarc-André Lureaufi
6640247724cbSMarc-André Lureau
66416542aa9cSPeter Lieven##########################################
66426542aa9cSPeter Lieven# Do we have libnfs
66436542aa9cSPeter Lievenif test "$libnfs" != "no" ; then
6644b7d769c9SPeter Lieven  if $pkg_config --atleast-version=1.9.3 libnfs; then
66456542aa9cSPeter Lieven    libnfs="yes"
66466542aa9cSPeter Lieven    libnfs_libs=$($pkg_config --libs libnfs)
66476542aa9cSPeter Lieven  else
66486542aa9cSPeter Lieven    if test "$libnfs" = "yes" ; then
66498efc9363SHu Tao      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
66506542aa9cSPeter Lieven    fi
66516542aa9cSPeter Lieven    libnfs="no"
66526542aa9cSPeter Lieven  fi
66536542aa9cSPeter Lievenfi
66541d728c39SBlue Swirl
66553efac6ebSTomáš Golembiovský##########################################
66563efac6ebSTomáš Golembiovský# Do we have libudev
66573efac6ebSTomáš Golembiovskýif test "$libudev" != "no" ; then
66583efac6ebSTomáš Golembiovský  if $pkg_config libudev && test "$static" != "yes"; then
66593efac6ebSTomáš Golembiovský    libudev="yes"
66603efac6ebSTomáš Golembiovský    libudev_libs=$($pkg_config --libs libudev)
66613efac6ebSTomáš Golembiovský  else
66623efac6ebSTomáš Golembiovský    libudev="no"
66633efac6ebSTomáš Golembiovský  fi
66643efac6ebSTomáš Golembiovskýfi
66653efac6ebSTomáš Golembiovský
66666ca026cbSPeter Maydell# Now we've finished running tests it's OK to add -Werror to the compiler flags
66676ca026cbSPeter Maydellif test "$werror" = "yes"; then
66686ca026cbSPeter Maydell    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
66696ca026cbSPeter Maydellfi
66706ca026cbSPeter Maydell
66710aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
66720aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then
6673e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6674db5adeaaSPaolo Bonzini        QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
6675e86ecd4bSJuan Quintela    fi
6676e86ecd4bSJuan Quintelafi
6677e86ecd4bSJuan Quintela
667894dd53c5SGerd Hoffmann# test if pod2man has --utf8 option
667994dd53c5SGerd Hoffmannif pod2man --help | grep -q utf8; then
668094dd53c5SGerd Hoffmann    POD2MAN="pod2man --utf8"
668194dd53c5SGerd Hoffmannelse
668294dd53c5SGerd Hoffmann    POD2MAN="pod2man"
668394dd53c5SGerd Hoffmannfi
668494dd53c5SGerd Hoffmann
6685952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
6686952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
6687952afb71SBlue Swirl    for flag in --dynamicbase --no-seh --nxcompat; do
6688e9a3591fSChristian Borntraeger        if ld_has $flag ; then
6689db5adeaaSPaolo Bonzini            QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
6690952afb71SBlue Swirl        fi
6691952afb71SBlue Swirl    done
6692952afb71SBlue Swirlfi
6693952afb71SBlue Swirl
66947776ea6bSPhilippe Mathieu-Daudé# Disable OpenBSD W^X if available
66957776ea6bSPhilippe Mathieu-Daudéif test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
66967776ea6bSPhilippe Mathieu-Daudé    cat > $TMPC <<EOF
66977776ea6bSPhilippe Mathieu-Daudé    int main(void) { return 0; }
66987776ea6bSPhilippe Mathieu-DaudéEOF
66997776ea6bSPhilippe Mathieu-Daudé    wx_ldflags="-Wl,-z,wxneeded"
67007776ea6bSPhilippe Mathieu-Daudé    if compile_prog "" "$wx_ldflags"; then
67017776ea6bSPhilippe Mathieu-Daudé        QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
67027776ea6bSPhilippe Mathieu-Daudé    fi
67037776ea6bSPhilippe Mathieu-Daudéfi
67047776ea6bSPhilippe Mathieu-Daudé
670510ea68b3SEduardo Habkostqemu_confdir=$sysconfdir$confsuffix
6706e26110cfSFam Zhengqemu_moddir=$libdir$confsuffix
6707528ae5b8SEduardo Habkostqemu_datadir=$datadir$confsuffix
6708834574eaSAnthony Liguoriqemu_localedir="$datadir/locale"
6709a8260d38SDaniel P. Berrangéqemu_icondir="$datadir/icons"
671067ea9546SDaniel P. Berrangéqemu_desktopdir="$datadir/applications"
67115a67135aSbellard
6712e0580342SKamil Rytarowski# We can only support ivshmem if we have eventfd
6713e0580342SKamil Rytarowskiif [ "$eventfd" = "yes" ]; then
6714e0580342SKamil Rytarowski  ivshmem=yes
6715e0580342SKamil Rytarowskifi
6716e0580342SKamil Rytarowski
67174b1c11fdSDaniel P. Berrangeif test "$softmmu" = yes ; then
6718b855f8d1SPaolo Bonzini  if test "$linux" = yes; then
67197e462613SPaolo Bonzini    if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
6720983eef5aSMeador Inge      virtfs=yes
6721983eef5aSMeador Inge    else
6722983eef5aSMeador Inge      if test "$virtfs" = yes; then
67237e462613SPaolo Bonzini        error_exit "VirtFS requires libcap-ng devel and libattr devel"
6724983eef5aSMeador Inge      fi
672517500370SAndreas Färber      virtfs=no
6726983eef5aSMeador Inge    fi
6727fe8fc5aeSPaolo Bonzini    if test "$mpath" != no && test "$mpathpersist" = yes ; then
6728fe8fc5aeSPaolo Bonzini      mpath=yes
6729fe8fc5aeSPaolo Bonzini    else
6730fe8fc5aeSPaolo Bonzini      if test "$mpath" = yes; then
6731fe8fc5aeSPaolo Bonzini        error_exit "Multipath requires libmpathpersist devel"
6732fe8fc5aeSPaolo Bonzini      fi
6733fe8fc5aeSPaolo Bonzini      mpath=no
6734fe8fc5aeSPaolo Bonzini    fi
6735b855f8d1SPaolo Bonzini  else
6736b855f8d1SPaolo Bonzini    if test "$virtfs" = yes; then
6737b855f8d1SPaolo Bonzini      error_exit "VirtFS is supported only on Linux"
6738b855f8d1SPaolo Bonzini    fi
6739b855f8d1SPaolo Bonzini    virtfs=no
6740fe8fc5aeSPaolo Bonzini    if test "$mpath" = yes; then
6741fe8fc5aeSPaolo Bonzini      error_exit "Multipath is supported only on Linux"
6742fe8fc5aeSPaolo Bonzini    fi
6743fe8fc5aeSPaolo Bonzini    mpath=no
674417bff52bSM. Mohan Kumar  fi
6745ff69fd8cSLaurent Vivierfi
67469d6bc27bSMichael Roth
67479d6bc27bSMichael Roth# Probe for guest agent support/options
67489d6bc27bSMichael Roth
6749e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
6750a5125905SLaurent Vivier  if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6751a5125905SLaurent Vivier      guest_agent=no
6752a5125905SLaurent Vivier  elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6753e8ef31a3SMichael Tokarev      guest_agent=yes
6754e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
6755e8ef31a3SMichael Tokarev      guest_agent=no
6756e8ef31a3SMichael Tokarev  else
6757e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
6758ca35f780SPaolo Bonzini  fi
67594b1c11fdSDaniel P. Berrangefi
6760ca35f780SPaolo Bonzini
67619d6bc27bSMichael Roth# Guest agent Window MSI  package
67629d6bc27bSMichael Roth
67639d6bc27bSMichael Rothif test "$guest_agent" != yes; then
67649d6bc27bSMichael Roth  if test "$guest_agent_msi" = yes; then
67659d6bc27bSMichael Roth    error_exit "MSI guest agent package requires guest agent enabled"
67669d6bc27bSMichael Roth  fi
67679d6bc27bSMichael Roth  guest_agent_msi=no
67689d6bc27bSMichael Rothelif test "$mingw32" != "yes"; then
67699d6bc27bSMichael Roth  if test "$guest_agent_msi" = "yes"; then
67709d6bc27bSMichael Roth    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
67719d6bc27bSMichael Roth  fi
67729d6bc27bSMichael Roth  guest_agent_msi=no
67739d6bc27bSMichael Rothelif ! has wixl; then
67749d6bc27bSMichael Roth  if test "$guest_agent_msi" = "yes"; then
67759d6bc27bSMichael Roth    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
67769d6bc27bSMichael Roth  fi
67779d6bc27bSMichael Roth  guest_agent_msi=no
67781a34904eSMichael Rothelse
67791a34904eSMichael Roth  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
67801a34904eSMichael Roth  # disabled explicitly
67811a34904eSMichael Roth  if test "$guest_agent_msi" != "no"; then
67821a34904eSMichael Roth    guest_agent_msi=yes
67831a34904eSMichael Roth  fi
67849d6bc27bSMichael Rothfi
67859d6bc27bSMichael Roth
67861a34904eSMichael Rothif test "$guest_agent_msi" = "yes"; then
67879d6bc27bSMichael Roth  if test "$guest_agent_with_vss" = "yes"; then
67889d6bc27bSMichael Roth    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
67899d6bc27bSMichael Roth  fi
67909d6bc27bSMichael Roth
67919d6bc27bSMichael Roth  if test "$QEMU_GA_MANUFACTURER" = ""; then
67929d6bc27bSMichael Roth    QEMU_GA_MANUFACTURER=QEMU
67939d6bc27bSMichael Roth  fi
67949d6bc27bSMichael Roth
67959d6bc27bSMichael Roth  if test "$QEMU_GA_DISTRO" = ""; then
67969d6bc27bSMichael Roth    QEMU_GA_DISTRO=Linux
67979d6bc27bSMichael Roth  fi
67989d6bc27bSMichael Roth
67999d6bc27bSMichael Roth  if test "$QEMU_GA_VERSION" = ""; then
680089138857SStefan Weil      QEMU_GA_VERSION=$(cat $source_path/VERSION)
68019d6bc27bSMichael Roth  fi
68029d6bc27bSMichael Roth
680389138857SStefan Weil  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
68049d6bc27bSMichael Roth
68059d6bc27bSMichael Roth  case "$cpu" in
68069d6bc27bSMichael Roth  x86_64)
68079d6bc27bSMichael Roth    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
68089d6bc27bSMichael Roth    ;;
68099d6bc27bSMichael Roth  i386)
68109d6bc27bSMichael Roth    QEMU_GA_MSI_ARCH="-D Arch=32"
68119d6bc27bSMichael Roth    ;;
68129d6bc27bSMichael Roth  *)
68139d6bc27bSMichael Roth    error_exit "CPU $cpu not supported for building installation package"
68149d6bc27bSMichael Roth    ;;
68159d6bc27bSMichael Roth  esac
68169d6bc27bSMichael Rothfi
68179d6bc27bSMichael Roth
6818ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
6819ca35f780SPaolo Bonziniroms=
6820e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6821e633a5c6SEric Blake        test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6822e633a5c6SEric Blake        test "$softmmu" = yes ; then
6823e57218b6SPeter Maydell    # Different host OS linkers have different ideas about the name of the ELF
6824c65d5e4eSBrad Smith    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6825c65d5e4eSBrad Smith    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6826c65d5e4eSBrad Smith    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6827e57218b6SPeter Maydell        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6828e57218b6SPeter Maydell            ld_i386_emulation="$emu"
6829ca35f780SPaolo Bonzini            roms="optionrom"
6830e57218b6SPeter Maydell            break
6831e57218b6SPeter Maydell        fi
6832e57218b6SPeter Maydell    done
6833ca35f780SPaolo Bonzinifi
6834ca35f780SPaolo Bonzini
68352e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
68369933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
68372e33c3f8SThomas Huth  write_c_skeleton
68382e33c3f8SThomas Huth  if compile_prog "-march=z900" ""; then
68399933c305SChristian Borntraeger    roms="$roms s390-ccw"
68401ef6bfc2SPhilippe Mathieu-Daudé    # SLOF is required for building the s390-ccw firmware on s390x,
68411ef6bfc2SPhilippe Mathieu-Daudé    # since it is using the libnet code from SLOF for network booting.
68421ef6bfc2SPhilippe Mathieu-Daudé    if test -e "${source_path}/.git" ; then
68431ef6bfc2SPhilippe Mathieu-Daudé      git_submodules="${git_submodules} roms/SLOF"
68441ef6bfc2SPhilippe Mathieu-Daudé    fi
68459933c305SChristian Borntraeger  fi
68462e33c3f8SThomas Huthfi
68479933c305SChristian Borntraeger
684811cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler.
684911cde1c8SBruno 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.
685011cde1c8SBruno Dominguezif has $cxx; then
685111cde1c8SBruno Dominguez    cat > $TMPC <<EOF
685211cde1c8SBruno Dominguezint c_function(void);
685311cde1c8SBruno Dominguezint main(void) { return c_function(); }
685411cde1c8SBruno DominguezEOF
685511cde1c8SBruno Dominguez
685611cde1c8SBruno Dominguez    compile_object
685711cde1c8SBruno Dominguez
685811cde1c8SBruno Dominguez    cat > $TMPCXX <<EOF
685911cde1c8SBruno Dominguezextern "C" {
686011cde1c8SBruno Dominguez   int c_function(void);
686111cde1c8SBruno Dominguez}
686211cde1c8SBruno Dominguezint c_function(void) { return 42; }
686311cde1c8SBruno DominguezEOF
686411cde1c8SBruno Dominguez
686511cde1c8SBruno Dominguez    update_cxxflags
686611cde1c8SBruno Dominguez
6867086d5f75SPaolo Bonzini    if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
686811cde1c8SBruno Dominguez        # C++ compiler $cxx works ok with C compiler $cc
686911cde1c8SBruno Dominguez        :
687011cde1c8SBruno Dominguez    else
687111cde1c8SBruno Dominguez        echo "C++ compiler $cxx does not work with C compiler $cc"
687211cde1c8SBruno Dominguez        echo "Disabling C++ specific optional code"
687311cde1c8SBruno Dominguez        cxx=
687411cde1c8SBruno Dominguez    fi
687511cde1c8SBruno Dominguezelse
687611cde1c8SBruno Dominguez    echo "No C++ compiler available; disabling C++ specific optional code"
687711cde1c8SBruno Dominguez    cxx=
687811cde1c8SBruno Dominguezfi
687911cde1c8SBruno Dominguez
688002d34f62SCole Robinsonecho_version() {
688102d34f62SCole Robinson    if test "$1" = "yes" ; then
688202d34f62SCole Robinson        echo "($2)"
688302d34f62SCole Robinson    fi
688402d34f62SCole Robinson}
688502d34f62SCole Robinson
688650e12060SJan Kiszka# prepend pixman and ftd flags after all config tests are done
688750e12060SJan KiszkaQEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
68888a99e9a3SPhilippe Mathieu-DaudéQEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
688950e12060SJan Kiszkalibs_softmmu="$pixman_libs $libs_softmmu"
68905ca9388aSGerd Hoffmann
689198ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
689297a847bcSbellard
6893dbd99ae3SStefan Weilecho "# Automatically generated by configure - do not modify" >config-all-disas.mak
6894dbd99ae3SStefan Weil
689598ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
689698ec69acSJuan Quintelaecho >> $config_host_mak
689798ec69acSJuan Quintela
6898e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
689999d7cc75SPaolo Bonziniecho "prefix=$prefix" >> $config_host_mak
690099d7cc75SPaolo Bonziniecho "bindir=$bindir" >> $config_host_mak
69013aa5d2beSAlon Levyecho "libdir=$libdir" >> $config_host_mak
69028bf188aaSMichael Tokarevecho "libexecdir=$libexecdir" >> $config_host_mak
69030f94d6daSAlon Levyecho "includedir=$includedir" >> $config_host_mak
690499d7cc75SPaolo Bonziniecho "mandir=$mandir" >> $config_host_mak
690599d7cc75SPaolo Bonziniecho "sysconfdir=$sysconfdir" >> $config_host_mak
690622d07038SEduardo Habkostecho "qemu_confdir=$qemu_confdir" >> $config_host_mak
69079afa52ceSEduardo Habkostecho "qemu_datadir=$qemu_datadir" >> $config_host_mak
69083d5eecabSGerd Hoffmannecho "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
69099afa52ceSEduardo Habkostecho "qemu_docdir=$qemu_docdir" >> $config_host_mak
6910e26110cfSFam Zhengecho "qemu_moddir=$qemu_moddir" >> $config_host_mak
69115a699bbbSLaszlo Ersekif test "$mingw32" = "no" ; then
6912785c23aeSLuiz Capitulino  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
69135a699bbbSLaszlo Ersekfi
6914f354b1a1SMichael Tokarevecho "qemu_helperdir=$libexecdir" >> $config_host_mak
6915834574eaSAnthony Liguoriecho "qemu_localedir=$qemu_localedir" >> $config_host_mak
6916a8260d38SDaniel P. Berrangéecho "qemu_icondir=$qemu_icondir" >> $config_host_mak
691767ea9546SDaniel P. Berrangéecho "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
691802f9135bSDaniel P. Berrangéecho "libs_cpu=$libs_cpu" >> $config_host_mak
6919f544a488SPaolo Bonziniecho "libs_softmmu=$libs_softmmu" >> $config_host_mak
6920cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
6921aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6922f62bbee5SDaniel P. Berrangeecho "GIT_UPDATE=$git_update" >> $config_host_mak
6923804edf29SJuan Quintela
692498ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak
6925727e5283SPaolo Bonzini
6926777dddc5SAlex Bennéeecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6927777dddc5SAlex Bennéeecho "GLIB_LDFLAGS=$glib_ldflags" >> $config_host_mak
6928777dddc5SAlex Bennée
6929f3494749SPaolo Bonziniif test "$default_devices" = "yes" ; then
6930f3494749SPaolo Bonzini  echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6931f3494749SPaolo Bonzinielse
6932f3494749SPaolo Bonzini  echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6933f3494749SPaolo Bonzinifi
6934f8393946Saurel32if test "$debug_tcg" = "yes" ; then
69352358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6936f8393946Saurel32fi
69371625af87Saliguoriif test "$strip_opt" = "yes" ; then
693852ba784dSHollis Blanchard  echo "STRIP=${strip}" >> $config_host_mak
69391625af87Saliguorifi
69407d13299dSbellardif test "$bigendian" = "yes" ; then
6941e2542fe2SJuan Quintela  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
694297a847bcSbellardfi
694367b915a5Sbellardif test "$mingw32" = "yes" ; then
694498ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
694589138857SStefan Weil  rc_version=$(cat $source_path/VERSION)
69469fe6de94SBlue Swirl  version_major=${rc_version%%.*}
69479fe6de94SBlue Swirl  rc_version=${rc_version#*.}
69489fe6de94SBlue Swirl  version_minor=${rc_version%%.*}
69499fe6de94SBlue Swirl  rc_version=${rc_version#*.}
69509fe6de94SBlue Swirl  version_subminor=${rc_version%%.*}
69519fe6de94SBlue Swirl  version_micro=0
69529fe6de94SBlue Swirl  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
69539fe6de94SBlue Swirl  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6954d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
6955d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6956f33ca81fSMichael Roth    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6957d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6958d9840e25STomoki Sekiyama  fi
695950cbebb9SMichael Roth  if test "$guest_agent_ntddscsi" = "yes" ; then
696076dc75caSTomáš Golembiovský    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
696150cbebb9SMichael Roth  fi
69621a34904eSMichael Roth  if test "$guest_agent_msi" = "yes"; then
69639dacf32dSYossi Hindin    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
69649dacf32dSYossi Hindin    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
69659dacf32dSYossi Hindin    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
69669dacf32dSYossi Hindin    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
69679dacf32dSYossi Hindin    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
69689dacf32dSYossi Hindin    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
69699dacf32dSYossi Hindin    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
69709dacf32dSYossi Hindin  fi
6971210fa556Spbrookelse
697235f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
6973210fa556Spbrookfi
6974128ab2ffSblueswir1
6975dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
6976dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
6977dffcb71cSMark McLoughlinfi
6978dffcb71cSMark McLoughlin
697983fb7adfSbellardif test "$darwin" = "yes" ; then
698098ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
698183fb7adfSbellardfi
6982b29fe3edSmalc
6983ec530c81Sbellardif test "$solaris" = "yes" ; then
698498ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
6985ec530c81Sbellardfi
6986179cf400SAndreas Färberif test "$haiku" = "yes" ; then
6987179cf400SAndreas Färber  echo "CONFIG_HAIKU=y" >> $config_host_mak
6988179cf400SAndreas Färberfi
698997a847bcSbellardif test "$static" = "yes" ; then
699098ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
699197a847bcSbellardfi
69921ba16968SStefan Weilif test "$profiler" = "yes" ; then
69932358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
699405c2a3e7Sbellardfi
6995c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then
6996c932ce31SPaolo Bonzini  echo "CONFIG_TOOLS=y" >> $config_host_mak
6997c932ce31SPaolo Bonzinifi
6998f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then
6999f15bff25SPaolo Bonzini  echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
7000f15bff25SPaolo Bonzinifi
7001675b9b53SMarc-André Lureauif test "$slirp" != "no"; then
700298ec69acSJuan Quintela  echo "CONFIG_SLIRP=y" >> $config_host_mak
7003e2d8830eSBrad  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
7004675b9b53SMarc-André Lureau  echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
7005675b9b53SMarc-André Lureau  echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
7006675b9b53SMarc-André Lureaufi
70077c57bdd8SMarc-André Lureauif [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
70083b8593eeSMarkus Armbruster    echo "config-host.h: slirp/all" >> $config_host_mak
7009c20709aaSbellardfi
70108a16d273Sthsif test "$vde" = "yes" ; then
701198ec69acSJuan Quintela  echo "CONFIG_VDE=y" >> $config_host_mak
7012e2ad6f16SFam Zheng  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
70138a16d273Sthsfi
701458952137SVincenzo Maffioneif test "$netmap" = "yes" ; then
701558952137SVincenzo Maffione  echo "CONFIG_NETMAP=y" >> $config_host_mak
701658952137SVincenzo Maffionefi
7017015a33bdSGongleiif test "$l2tpv3" = "yes" ; then
7018015a33bdSGonglei  echo "CONFIG_L2TPV3=y" >> $config_host_mak
7019015a33bdSGongleifi
70204cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then
70214cc600d2SPaolo Bonzini  echo "CONFIG_GPROF=y" >> $config_host_mak
70224cc600d2SPaolo Bonzinifi
702347e98658SCorey Bryantif test "$cap_ng" = "yes" ; then
7024a358bca2SPaolo Bonzini  echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
70253f99cf57SPaolo Bonzini  echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
702647e98658SCorey Bryantfi
70272358a494SJuan Quintelaecho "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
70280c58ac1cSmalcfor drv in $audio_drv_list; do
70291ef1ec2aSGerd Hoffmann    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
7030ce3dc033SGerd Hoffmann    case "$drv" in
7031051c7d5cSGerd Hoffmann	alsa | oss | pa | sdl)
7032ce3dc033SGerd Hoffmann	    echo "$def=m" >> $config_host_mak ;;
7033ce3dc033SGerd Hoffmann	*)
7034ce3dc033SGerd Hoffmann	    echo "$def=y" >> $config_host_mak ;;
7035ce3dc033SGerd Hoffmann    esac
70360c58ac1cSmalcdone
7037478e943fSPaolo Bonziniif test "$alsa" = "yes" ; then
7038478e943fSPaolo Bonzini    echo "CONFIG_ALSA=y" >> $config_host_mak
7039478e943fSPaolo Bonzinifi
7040b1149911SFam Zhengecho "ALSA_LIBS=$alsa_libs" >> $config_host_mak
7041478e943fSPaolo Bonziniecho "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
7042478e943fSPaolo Bonziniif test "$libpulse" = "yes" ; then
7043478e943fSPaolo Bonzini    echo "CONFIG_LIBPULSE=y" >> $config_host_mak
7044478e943fSPaolo Bonzinifi
7045b1149911SFam Zhengecho "PULSE_LIBS=$pulse_libs" >> $config_host_mak
7046478e943fSPaolo Bonziniecho "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
7047b1149911SFam Zhengecho "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
7048b1149911SFam Zhengecho "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
7049b1149911SFam Zhengecho "OSS_LIBS=$oss_libs" >> $config_host_mak
7050478e943fSPaolo Bonziniif test "$libjack" = "yes" ; then
7051478e943fSPaolo Bonzini    echo "CONFIG_LIBJACK=y" >> $config_host_mak
7052478e943fSPaolo Bonzinifi
70532e445703SGeoffrey McRaeecho "JACK_LIBS=$jack_libs" >> $config_host_mak
7054d5631638Smalcif test "$audio_win_int" = "yes" ; then
7055d5631638Smalc  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
7056d5631638Smalcfi
7057b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
7058b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
7059821601eaSJes Sorensenif test "$vnc" = "yes" ; then
7060821601eaSJes Sorensen  echo "CONFIG_VNC=y" >> $config_host_mak
7061821601eaSJes Sorensenfi
70622f9606b3Saliguoriif test "$vnc_sasl" = "yes" ; then
706398ec69acSJuan Quintela  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
70642f9606b3Saliguorifi
70652b1ccdf4SMarc-André Lureauecho "SASL_CFLAGS=$vnc_sasl_cflags" >> $config_host_mak
70662b1ccdf4SMarc-André Lureauecho "SASL_LIBS=$vnc_sasl_libs" >> $config_host_mak
7067821601eaSJes Sorensenif test "$vnc_jpeg" = "yes" ; then
70682f6f5c7aSCorentin Chary  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
70692f6f5c7aSCorentin Charyfi
70702b1ccdf4SMarc-André Lureauecho "JPEG_CFLAGS=$vnc_jpeg_cflags" >> $config_host_mak
70712b1ccdf4SMarc-André Lureauecho "JPEG_LIBS=$vnc_jpeg_libs" >> $config_host_mak
7072821601eaSJes Sorensenif test "$vnc_png" = "yes" ; then
7073efe556adSCorentin Chary  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
7074efe556adSCorentin Charyfi
70752b1ccdf4SMarc-André Lureauecho "PNG_CFLAGS=$vnc_png_cflags" >> $config_host_mak
70762b1ccdf4SMarc-André Lureauecho "PNG_LIBS=$vnc_png_libs" >> $config_host_mak
70776a021536SGerd Hoffmannif test "$xkbcommon" = "yes" ; then
7078ade60d4fSMarc-André Lureau  echo "CONFIG_XKBCOMMON=y" >> $config_host_mak
70796a021536SGerd Hoffmann  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
70806a021536SGerd Hoffmann  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
70816a021536SGerd Hoffmannfi
7082dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then
7083dce512deSChristoph Hellwig  echo "CONFIG_XFS=y" >> $config_host_mak
7084dce512deSChristoph Hellwigfi
708589138857SStefan Weilqemu_version=$(head $source_path/VERSION)
708698ec69acSJuan Quintelaecho "VERSION=$qemu_version" >>$config_host_mak
70872358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
708898ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
70892b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
7090a25dba17SJuan Quintelaif [ "$docs" = "yes" ] ; then
709198ec69acSJuan Quintela  echo "BUILD_DOCS=yes" >> $config_host_mak
7092cc8ae6deSpbrookfi
709317969268SFam Zhengif test "$modules" = "yes"; then
7094e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
7095e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
709689138857SStefan Weil  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
709717969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
709817969268SFam Zhengfi
7099bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then
7100bd83c861SChristian Ehrhardt  echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
7101bd83c861SChristian Ehrhardtfi
7102e633a5c6SEric Blakeif test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
71038781595bSGerd Hoffmann  echo "CONFIG_X11=y" >> $config_host_mak
71048781595bSGerd Hoffmann  echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
71058781595bSGerd Hoffmann  echo "X11_LIBS=$x11_libs" >> $config_host_mak
71068781595bSGerd Hoffmannfi
71071ac88f28SJuan Quintelaif test "$sdl" = "yes" ; then
710896400a14SGerd Hoffmann  echo "CONFIG_SDL=m" >> $config_host_mak
71098ad3a7ddSJuan Quintela  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
71108ecc89f6SFam Zheng  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
7111a442fe2fSDaniel P. Berrangé  if test "$sdl_image" = "yes" ; then
7112a442fe2fSDaniel P. Berrangé      echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
7113a442fe2fSDaniel P. Berrangé  fi
711449ecc3faSbellardfi
711549ecc3faSbellardif test "$cocoa" = "yes" ; then
711698ec69acSJuan Quintela  echo "CONFIG_COCOA=y" >> $config_host_mak
711749ecc3faSbellardfi
7118e08bb301SSamuel Thibaultif test "$iconv" = "yes" ; then
7119e08bb301SSamuel Thibault  echo "CONFIG_ICONV=y" >> $config_host_mak
7120e08bb301SSamuel Thibault  echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7121e08bb301SSamuel Thibault  echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7122e08bb301SSamuel Thibaultfi
71234d3b6f6eSbalrogif test "$curses" = "yes" ; then
71242373f7d5SGerd Hoffmann  echo "CONFIG_CURSES=m" >> $config_host_mak
71252373f7d5SGerd Hoffmann  echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
71262373f7d5SGerd Hoffmann  echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
7127ab4e5602SJan Kiszkafi
7128099d6b0fSRiku Voipioif test "$pipe2" = "yes" ; then
71292358a494SJuan Quintela  echo "CONFIG_PIPE2=y" >> $config_host_mak
7130099d6b0fSRiku Voipiofi
713140ff6d7eSKevin Wolfif test "$accept4" = "yes" ; then
713240ff6d7eSKevin Wolf  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
713340ff6d7eSKevin Wolffi
71343ce34dfbSvibisreenivasanif test "$splice" = "yes" ; then
71352358a494SJuan Quintela  echo "CONFIG_SPLICE=y" >> $config_host_mak
71363ce34dfbSvibisreenivasanfi
7137c2882b96SRiku Voipioif test "$eventfd" = "yes" ; then
7138c2882b96SRiku Voipio  echo "CONFIG_EVENTFD=y" >> $config_host_mak
7139c2882b96SRiku Voipiofi
7140751bcc39SMarc-André Lureauif test "$memfd" = "yes" ; then
7141751bcc39SMarc-André Lureau  echo "CONFIG_MEMFD=y" >> $config_host_mak
7142751bcc39SMarc-André Lureaufi
7143955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then
7144955727d2SCortland Tölva  echo "CONFIG_USBFS=y" >> $config_host_mak
7145955727d2SCortland Tölvafi
7146d0927938SUlrich Hechtif test "$fallocate" = "yes" ; then
7147d0927938SUlrich Hecht  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7148d0927938SUlrich Hechtfi
71493d4fa43eSKusanagi Kouichiif test "$fallocate_punch_hole" = "yes" ; then
71503d4fa43eSKusanagi Kouichi  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
71513d4fa43eSKusanagi Kouichifi
7152b953f075SDenis V. Lunevif test "$fallocate_zero_range" = "yes" ; then
7153b953f075SDenis V. Lunev  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7154b953f075SDenis V. Lunevfi
7155ed911435SKevin Wolfif test "$posix_fallocate" = "yes" ; then
7156ed911435SKevin Wolf  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7157ed911435SKevin Wolffi
7158c727f47dSPeter Maydellif test "$sync_file_range" = "yes" ; then
7159c727f47dSPeter Maydell  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7160c727f47dSPeter Maydellfi
7161dace20dcSPeter Maydellif test "$fiemap" = "yes" ; then
7162dace20dcSPeter Maydell  echo "CONFIG_FIEMAP=y" >> $config_host_mak
7163dace20dcSPeter Maydellfi
7164d0927938SUlrich Hechtif test "$dup3" = "yes" ; then
7165d0927938SUlrich Hecht  echo "CONFIG_DUP3=y" >> $config_host_mak
7166d0927938SUlrich Hechtfi
71674e0c6529SAlex Blighif test "$ppoll" = "yes" ; then
71684e0c6529SAlex Bligh  echo "CONFIG_PPOLL=y" >> $config_host_mak
71694e0c6529SAlex Blighfi
7170cd758dd0SAlex Blighif test "$prctl_pr_set_timerslack" = "yes" ; then
7171cd758dd0SAlex Bligh  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7172cd758dd0SAlex Blighfi
71733b6edd16SPeter Maydellif test "$epoll" = "yes" ; then
71743b6edd16SPeter Maydell  echo "CONFIG_EPOLL=y" >> $config_host_mak
71753b6edd16SPeter Maydellfi
71763b6edd16SPeter Maydellif test "$epoll_create1" = "yes" ; then
71773b6edd16SPeter Maydell  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
71783b6edd16SPeter Maydellfi
7179a8fd1abaSPeter Maydellif test "$sendfile" = "yes" ; then
7180a8fd1abaSPeter Maydell  echo "CONFIG_SENDFILE=y" >> $config_host_mak
7181a8fd1abaSPeter Maydellfi
718251834341SRiku Voipioif test "$timerfd" = "yes" ; then
718351834341SRiku Voipio  echo "CONFIG_TIMERFD=y" >> $config_host_mak
718451834341SRiku Voipiofi
71859af5c906SRiku Voipioif test "$setns" = "yes" ; then
71869af5c906SRiku Voipio  echo "CONFIG_SETNS=y" >> $config_host_mak
71879af5c906SRiku Voipiofi
718838860a03SAleksandar Markovicif test "$clock_adjtime" = "yes" ; then
718938860a03SAleksandar Markovic  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
719038860a03SAleksandar Markovicfi
71915a03cd00SAleksandar Markovicif test "$syncfs" = "yes" ; then
71925a03cd00SAleksandar Markovic  echo "CONFIG_SYNCFS=y" >> $config_host_mak
71935a03cd00SAleksandar Markovicfi
7194db37dd89SAleksandar Markovicif test "$kcov" = "yes" ; then
7195db37dd89SAleksandar Markovic  echo "CONFIG_KCOV=y" >> $config_host_mak
7196db37dd89SAleksandar Markovicfi
71973b3f24adSaurel32if test "$inotify" = "yes" ; then
71982358a494SJuan Quintela  echo "CONFIG_INOTIFY=y" >> $config_host_mak
71993b3f24adSaurel32fi
7200c05c7a73SRiku Voipioif test "$inotify1" = "yes" ; then
7201c05c7a73SRiku Voipio  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7202c05c7a73SRiku Voipiofi
7203401bc051SPeter Maydellif test "$sem_timedwait" = "yes" ; then
7204401bc051SPeter Maydell  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7205401bc051SPeter Maydellfi
72065c99fa37SKeno Fischerif test "$strchrnul" = "yes" ; then
72075c99fa37SKeno Fischer  echo "HAVE_STRCHRNUL=y" >> $config_host_mak
72085c99fa37SKeno Fischerfi
72098a792b03SJiufei Xueif test "$st_atim" = "yes" ; then
72108a792b03SJiufei Xue  echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
72118a792b03SJiufei Xuefi
72126ae9a1f4SJuan Quintelaif test "$byteswap_h" = "yes" ; then
72136ae9a1f4SJuan Quintela  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
72146ae9a1f4SJuan Quintelafi
72156ae9a1f4SJuan Quintelaif test "$bswap_h" = "yes" ; then
72166ae9a1f4SJuan Quintela  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
72176ae9a1f4SJuan Quintelafi
7218769ce76dSAlexander Grafif test "$curl" = "yes" ; then
7219d3399d7cSFam Zheng  echo "CONFIG_CURL=m" >> $config_host_mak
7220b1d5a277SJuan Quintela  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
72216ebc91e5SFam Zheng  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
7222769ce76dSAlexander Graffi
72232e4d9fb1Saurel32if test "$brlapi" = "yes" ; then
722498ec69acSJuan Quintela  echo "CONFIG_BRLAPI=y" >> $config_host_mak
72258eca2889SFam Zheng  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
72262e4d9fb1Saurel32fi
7227a4ccabcfSAnthony Liguoriif test "$gtk" = "yes" ; then
7228e0fb129cSGerd Hoffmann  echo "CONFIG_GTK=m" >> $config_host_mak
7229a4ccabcfSAnthony Liguori  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
7230014cb152SGerd Hoffmann  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
7231925a0400SGerd Hoffmann  if test "$gtk_gl" = "yes" ; then
7232925a0400SGerd Hoffmann    echo "CONFIG_GTK_GL=y" >> $config_host_mak
7233925a0400SGerd Hoffmann  fi
7234bbbf9bfbSStefan Weilfi
7235f876b765SMarc-André Lureauif test "$gio" = "yes" ; then
7236f876b765SMarc-André Lureau    echo "CONFIG_GIO=y" >> $config_host_mak
7237f876b765SMarc-André Lureau    echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7238f876b765SMarc-André Lureau    echo "GIO_LIBS=$gio_libs" >> $config_host_mak
723925a97a56SMarc-André Lureau    echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
7240f876b765SMarc-André Lureaufi
7241a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
7242ddbb0d09SDaniel P. Berrangeif test "$gnutls" = "yes" ; then
7243ddbb0d09SDaniel P. Berrange  echo "CONFIG_GNUTLS=y" >> $config_host_mak
7244a81df1b6SPaolo Bonzini  echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
7245a81df1b6SPaolo Bonzini  echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
7246ddbb0d09SDaniel P. Berrangefi
724791bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" ; then
724891bfcdb0SDaniel P. Berrange  echo "CONFIG_GCRYPT=y" >> $config_host_mak
72491f923c70SLongpeng(Mike)  if test "$gcrypt_hmac" = "yes" ; then
72501f923c70SLongpeng(Mike)    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
72511f923c70SLongpeng(Mike)  fi
725262893b67SDaniel P. Berrangefi
725391bfcdb0SDaniel P. Berrangeif test "$nettle" = "yes" ; then
725491bfcdb0SDaniel P. Berrange  echo "CONFIG_NETTLE=y" >> $config_host_mak
7255becaeb72SRadim Krčmář  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
7256a81df1b6SPaolo Bonzini  echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
7257a81df1b6SPaolo Bonzini  echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
7258ed754746SDaniel P. Berrangefi
7259e0576942SDaniel P. Berrangéif test "$qemu_private_xts" = "yes" ; then
7260e0576942SDaniel P. Berrangé  echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7261e0576942SDaniel P. Berrangéfi
72629a2fd434SDaniel P. Berrangeif test "$tasn1" = "yes" ; then
72639a2fd434SDaniel P. Berrange  echo "CONFIG_TASN1=y" >> $config_host_mak
72649a2fd434SDaniel P. Berrangefi
72658953caf3SDaniel P. Berrangeif test "$auth_pam" = "yes" ; then
72668953caf3SDaniel P. Berrange    echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
72678953caf3SDaniel P. Berrangefi
7268559607eaSDaniel P. Berrangeif test "$have_ifaddrs_h" = "yes" ; then
7269559607eaSDaniel P. Berrange    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7270559607eaSDaniel P. Berrangefi
7271e865b97fSChen Gangif test "$have_drm_h" = "yes" ; then
7272e865b97fSChen Gang  echo "HAVE_DRM_H=y" >> $config_host_mak
7273e865b97fSChen Gangfi
72746b39b063SEric Blakeif test "$have_broken_size_max" = "yes" ; then
72756b39b063SEric Blake    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
72766b39b063SEric Blakefi
72779df8b20dSThomas Huthif test "$have_openpty" = "yes" ; then
72789df8b20dSThomas Huth    echo "HAVE_OPENPTY=y" >> $config_host_mak
72799df8b20dSThomas Huthfi
72802a4b472cSDavid CARLIERif test "$have_sys_signal_h" = "yes" ; then
72812a4b472cSDavid CARLIER    echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
72822a4b472cSDavid CARLIERfi
7283277abf15SJan Vesely
7284277abf15SJan Vesely# Work around a system header bug with some kernel/XFS header
7285277abf15SJan Vesely# versions where they both try to define 'struct fsxattr':
7286277abf15SJan Vesely# xfs headers will not try to redefine structs from linux headers
7287277abf15SJan Vesely# if this macro is set.
7288277abf15SJan Veselyif test "$have_fsxattr" = "yes" ; then
7289277abf15SJan Vesely    echo "HAVE_FSXATTR=y" >> $config_host_mak
7290277abf15SJan Veselyfi
72911efad060SFam Zhengif test "$have_copy_file_range" = "yes" ; then
72921efad060SFam Zheng    echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
72931efad060SFam Zhengfi
7294bbbf9bfbSStefan Weilif test "$vte" = "yes" ; then
7295bbbf9bfbSStefan Weil  echo "CONFIG_VTE=y" >> $config_host_mak
7296a4ccabcfSAnthony Liguori  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
7297e0fb129cSGerd Hoffmann  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
7298a4ccabcfSAnthony Liguorifi
72999d9e1521SGerd Hoffmannif test "$virglrenderer" = "yes" ; then
73009d9e1521SGerd Hoffmann  echo "CONFIG_VIRGL=y" >> $config_host_mak
73019d9e1521SGerd Hoffmann  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
73029d9e1521SGerd Hoffmann  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
73039d9e1521SGerd Hoffmannfi
7304e37630caSaliguoriif test "$xen" = "yes" ; then
73056dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
7306d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
7307582ea95fSMarc-André Lureau  echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
7308582ea95fSMarc-André Lureau  echo "XEN_LIBS=$xen_libs" >> $config_host_mak
7309e37630caSaliguorifi
73105c6c3a6cSChristoph Hellwigif test "$linux_aio" = "yes" ; then
73115c6c3a6cSChristoph Hellwig  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
73125c6c3a6cSChristoph Hellwigfi
7313c10dd856SAarushi Mehtaif test "$linux_io_uring" = "yes" ; then
7314c10dd856SAarushi Mehta  echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7315c10dd856SAarushi Mehta  echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7316c10dd856SAarushi Mehta  echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7317c10dd856SAarushi Mehtafi
7318758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" = "yes" ; then
7319758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_ATTR=y" >> $config_host_mak
7320ec0d5893SMarc-André Lureau  echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
7321758e8e38SVenkateswararao Jujjuri (JV)fi
73224f26f2b6SAvi Kivityif test "$libattr" = "yes" ; then
73234f26f2b6SAvi Kivity  echo "CONFIG_LIBATTR=y" >> $config_host_mak
73244f26f2b6SAvi Kivityfi
7325983eef5aSMeador Ingeif test "$virtfs" = "yes" ; then
7326758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_VIRTFS=y" >> $config_host_mak
7327758e8e38SVenkateswararao Jujjuri (JV)fi
7328fe8fc5aeSPaolo Bonziniif test "$mpath" = "yes" ; then
7329fe8fc5aeSPaolo Bonzini  echo "CONFIG_MPATH=y" >> $config_host_mak
73301b0578f5SMurilo Opsfelder Araujo  if test "$mpathpersist_new_api" = "yes"; then
73311b0578f5SMurilo Opsfelder Araujo    echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
73321b0578f5SMurilo Opsfelder Araujo  fi
7333fe8fc5aeSPaolo Bonzinifi
73345e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
73355e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
73365e9be92dSNicholas Bellingerfi
7337af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then
7338af3bba76SPaolo Bonzini  echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7339af3bba76SPaolo Bonzinifi
7340af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then
734156f41de7SPaolo Bonzini  echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
734203ce5744SNikolay Nikolaevfi
7343108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then
7344108a6481SCindy Lu  echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
7345108a6481SCindy Lufi
7346042cea27SGongleiif test "$vhost_crypto" = "yes" ; then
7347042cea27SGonglei  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7348042cea27SGongleifi
7349fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then
7350fc0b9b0eSStefan Hajnoczi  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
73515fe97d88SStefano Garzarella  if test "$vhost_user" = "yes" ; then
73525fe97d88SStefano Garzarella    echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
73535fe97d88SStefano Garzarella  fi
7354fc0b9b0eSStefan Hajnoczifi
7355299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then
7356299e6f19SPaolo Bonzini  echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7357299e6f19SPaolo Bonzinifi
7358e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then
7359e6a74868SMarc-André Lureau  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7360e6a74868SMarc-André Lureaufi
7361108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then
7362108a6481SCindy Lu  echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
7363108a6481SCindy Lufi
736498fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then
736598fc1adaSDr. David Alan Gilbert  echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
736698fc1adaSDr. David Alan Gilbertfi
736777755340Sthsif test "$blobs" = "yes" ; then
736898ec69acSJuan Quintela  echo "INSTALL_BLOBS=yes" >> $config_host_mak
736977755340Sthsfi
7370bf9298b9Saliguoriif test "$iovec" = "yes" ; then
73712358a494SJuan Quintela  echo "CONFIG_IOVEC=y" >> $config_host_mak
7372bf9298b9Saliguorifi
7373ceb42de8Saliguoriif test "$preadv" = "yes" ; then
73742358a494SJuan Quintela  echo "CONFIG_PREADV=y" >> $config_host_mak
7375ceb42de8Saliguorifi
7376e3971d61SPhilippe Mathieu-Daudéif test "$fdt" != "no" ; then
73773f0855b1SJuan Quintela  echo "CONFIG_FDT=y" >> $config_host_mak
73784a96337dSPaolo Bonzini  echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak
73794a96337dSPaolo Bonzini  echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak
7380f652e6afSaurel32fi
7381a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then
7382a40161cbSPaolo Bonzini  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7383a40161cbSPaolo Bonzinifi
7384dcc38d1cSMarcelo Tosattiif test "$signalfd" = "yes" ; then
7385dcc38d1cSMarcelo Tosatti  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7386dcc38d1cSMarcelo Tosattifi
7387d339d766SRichard W.M. Jonesif test "$optreset" = "yes" ; then
7388d339d766SRichard W.M. Jones  echo "HAVE_OPTRESET=y" >> $config_host_mak
7389d339d766SRichard W.M. Jonesfi
7390b3f6ea7eSPaolo Bonziniif test "$tcg" = "yes"; then
7391b3f6ea7eSPaolo Bonzini  echo "CONFIG_TCG=y" >> $config_host_mak
73929195b2c2SStefan Weil  if test "$tcg_interpreter" = "yes" ; then
73939195b2c2SStefan Weil    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
73949195b2c2SStefan Weil  fi
7395b3f6ea7eSPaolo Bonzinifi
73965f6b9e8fSBlue Swirlif test "$fdatasync" = "yes" ; then
73975f6b9e8fSBlue Swirl  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
73985f6b9e8fSBlue Swirlfi
7399e78815a5SAndreas Färberif test "$madvise" = "yes" ; then
7400e78815a5SAndreas Färber  echo "CONFIG_MADVISE=y" >> $config_host_mak
7401e78815a5SAndreas Färberfi
7402e78815a5SAndreas Färberif test "$posix_madvise" = "yes" ; then
7403e78815a5SAndreas Färber  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7404e78815a5SAndreas Färberfi
74059bc5a719SAndreas Gustafssonif test "$posix_memalign" = "yes" ; then
74069bc5a719SAndreas Gustafsson  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
74079bc5a719SAndreas Gustafssonfi
74085e5733e5SMarc-André Lureauif test "$zlib" != "no" ; then
74095e5733e5SMarc-André Lureau    echo "CONFIG_ZLIB=y" >> $config_host_mak
74105e5733e5SMarc-André Lureau    echo "ZLIB_CFLAGS=$zlib_cflags" >> $config_host_mak
74115e5733e5SMarc-André Lureau    echo "ZLIB_LIBS=$zlib_libs" >> $config_host_mak
74125e5733e5SMarc-André Lureaufi
7413cd4ec0b4SGerd Hoffmannif test "$spice" = "yes" ; then
7414cd4ec0b4SGerd Hoffmann  echo "CONFIG_SPICE=y" >> $config_host_mak
74152634733cSPaolo Bonzini  echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
74162634733cSPaolo Bonzini  echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
7417cd4ec0b4SGerd Hoffmannfi
7418cd4ec0b4SGerd Hoffmann
74197b02f544SMarc-André Lureauif test "$smartcard" = "yes" ; then
74207b02f544SMarc-André Lureau  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
74217b62bf5aSFam Zheng  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
74227b62bf5aSFam Zheng  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
7423111a38b0SRobert Relyeafi
7424111a38b0SRobert Relyea
74252b2325ffSGerd Hoffmannif test "$libusb" = "yes" ; then
74262b2325ffSGerd Hoffmann  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7427b878b652SFam Zheng  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7428b878b652SFam Zheng  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
74292b2325ffSGerd Hoffmannfi
74302b2325ffSGerd Hoffmann
743169354a83SHans de Goedeif test "$usb_redir" = "yes" ; then
743269354a83SHans de Goede  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7433cc7923fcSFam Zheng  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7434cc7923fcSFam Zheng  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
743569354a83SHans de Goedefi
743669354a83SHans de Goede
7437da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
7438da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
7439da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7440014cb152SGerd Hoffmann  if test "$opengl_dmabuf" = "yes" ; then
7441014cb152SGerd Hoffmann    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7442014cb152SGerd Hoffmann  fi
744320ff075bSMichael Wallefi
744420ff075bSMichael Walle
7445d52c454aSMarc-André Lureauif test "$gbm" = "yes" ; then
7446d52c454aSMarc-André Lureau    echo "CONFIG_GBM=y" >> $config_host_mak
7447d52c454aSMarc-André Lureau    echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7448d52c454aSMarc-André Lureau    echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7449d52c454aSMarc-André Lureaufi
7450d52c454aSMarc-André Lureau
7451d52c454aSMarc-André Lureau
74525a22ab71SYang Zhongif test "$malloc_trim" = "yes" ; then
74535a22ab71SYang Zhong  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
74545a22ab71SYang Zhongfi
74555a22ab71SYang Zhong
745699f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then
745799f2dbd3SLiang Li  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
745899f2dbd3SLiang Lifi
745999f2dbd3SLiang Li
74606b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then
74616b8cd447SRobert Hoo  echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
74626b8cd447SRobert Hoofi
74636b8cd447SRobert Hoo
7464607dacd0Sqiaonuohanif test "$lzo" = "yes" ; then
7465607dacd0Sqiaonuohan  echo "CONFIG_LZO=y" >> $config_host_mak
7466708eab42SMarc-André Lureau  echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
7467607dacd0Sqiaonuohanfi
7468607dacd0Sqiaonuohan
7469607dacd0Sqiaonuohanif test "$snappy" = "yes" ; then
7470607dacd0Sqiaonuohan  echo "CONFIG_SNAPPY=y" >> $config_host_mak
7471708eab42SMarc-André Lureau  echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
7472607dacd0Sqiaonuohanfi
7473607dacd0Sqiaonuohan
74746b383c08SPeter Wuif test "$bzip2" = "yes" ; then
74756b383c08SPeter Wu  echo "CONFIG_BZIP2=y" >> $config_host_mak
74766b383c08SPeter Wu  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
74776b383c08SPeter Wufi
74786b383c08SPeter Wu
747983bc1f97SJulio Faraccoif test "$lzfse" = "yes" ; then
748083bc1f97SJulio Faracco  echo "CONFIG_LZFSE=y" >> $config_host_mak
748183bc1f97SJulio Faracco  echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
748283bc1f97SJulio Faraccofi
748383bc1f97SJulio Faracco
74843a678481SJuan Quintelaif test "$zstd" = "yes" ; then
74853a678481SJuan Quintela  echo "CONFIG_ZSTD=y" >> $config_host_mak
74865e5733e5SMarc-André Lureau  echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
74875e5733e5SMarc-André Lureau  echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
74883a678481SJuan Quintelafi
74893a678481SJuan Quintela
7490c589b249SRonnie Sahlbergif test "$libiscsi" = "yes" ; then
7491d3399d7cSFam Zheng  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
74926ebc91e5SFam Zheng  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
74936ebc91e5SFam Zheng  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7494c589b249SRonnie Sahlbergfi
7495c589b249SRonnie Sahlberg
74966542aa9cSPeter Lievenif test "$libnfs" = "yes" ; then
74974be4879fSColin Lord  echo "CONFIG_LIBNFS=m" >> $config_host_mak
74984be4879fSColin Lord  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
74996542aa9cSPeter Lievenfi
75006542aa9cSPeter Lieven
7501f794573eSEduardo Otuboif test "$seccomp" = "yes"; then
7502f794573eSEduardo Otubo  echo "CONFIG_SECCOMP=y" >> $config_host_mak
7503c3883e1fSFam Zheng  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7504c3883e1fSFam Zheng  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7505f794573eSEduardo Otubofi
7506f794573eSEduardo Otubo
750783fb7adfSbellard# XXX: suppress that
75087d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
75092358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
75107d3505c5Sbellardfi
75117d3505c5Sbellard
75124d9310f4SDaniel P. Berrangeif test "$localtime_r" = "yes" ; then
75134d9310f4SDaniel P. Berrange  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
75144d9310f4SDaniel P. Berrangefi
75153556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
75163556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
75173556c233SPaolo Bonzinifi
7518f27aaf4bSChristian Brunnerif test "$rbd" = "yes" ; then
7519d3399d7cSFam Zheng  echo "CONFIG_RBD=m" >> $config_host_mak
75206ebc91e5SFam Zheng  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7521f27aaf4bSChristian Brunnerfi
752220ff6c80SAnthony Liguori
75237c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
752470c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
752570c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
752670c60c08SStefan Hajnoczielse
752770c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
752870c60c08SStefan Hajnoczifi
7529d0e2fce5SAneesh Kumar K.V
75307d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then
75317d992e4dSPeter Lieven  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
75327d992e4dSPeter Lievenfi
75337d992e4dSPeter Lieven
7534f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then
7535f0d92b56SLongpeng(Mike)  echo "CONFIG_AF_ALG=y" >> $config_host_mak
7536f0d92b56SLongpeng(Mike)fi
7537f0d92b56SLongpeng(Mike)
7538d2042378SAneesh Kumar K.Vif test "$open_by_handle_at" = "yes" ; then
7539d2042378SAneesh Kumar K.V  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7540d2042378SAneesh Kumar K.Vfi
7541d2042378SAneesh Kumar K.V
7542e06a765eSHarsh Prateek Boraif test "$linux_magic_h" = "yes" ; then
7543e06a765eSHarsh Prateek Bora  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7544e06a765eSHarsh Prateek Borafi
7545e06a765eSHarsh Prateek Bora
75463f4349dcSKevin Wolfif test "$valgrind_h" = "yes" ; then
75473f4349dcSKevin Wolf  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
75483f4349dcSKevin Wolffi
75493f4349dcSKevin Wolf
7550d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
7551d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7552d83414e1SMarc-André Lureaufi
7553d83414e1SMarc-André Lureau
75540aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
75550aebab04SLingfeng Yang    echo "CONFIG_TSAN=y" >> $config_host_mak
75560aebab04SLingfeng Yangfi
75570aebab04SLingfeng Yang
75588ab1bf12SLuiz Capitulinoif test "$has_environ" = "yes" ; then
75598ab1bf12SLuiz Capitulino  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
75608ab1bf12SLuiz Capitulinofi
75618ab1bf12SLuiz Capitulino
756276a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
756376a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
756476a347e1SRichard Hendersonfi
756576a347e1SRichard Henderson
7566f540166bSRichard Hendersonif test "$int128" = "yes" ; then
7567f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
7568f540166bSRichard Hendersonfi
7569f540166bSRichard Henderson
75707ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then
75717ebee43eSRichard Henderson  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
75727ebee43eSRichard Hendersonfi
75737ebee43eSRichard Henderson
7574e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then
7575e6cd4bb5SRichard Henderson  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7576e6cd4bb5SRichard Hendersonfi
7577e6cd4bb5SRichard Henderson
7578df79b996SRichard Hendersonif test "$atomic64" = "yes" ; then
7579df79b996SRichard Henderson  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7580df79b996SRichard Hendersonfi
7581df79b996SRichard Henderson
7582db8aaae8SRichard Hendersonif test "$attralias" = "yes" ; then
7583db8aaae8SRichard Henderson  echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7584db8aaae8SRichard Hendersonfi
7585db8aaae8SRichard Henderson
75861e6e9acaSRichard Hendersonif test "$getauxval" = "yes" ; then
75871e6e9acaSRichard Henderson  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
75881e6e9acaSRichard Hendersonfi
75891e6e9acaSRichard Henderson
7590eb100396SBharata B Raoif test "$glusterfs" = "yes" ; then
7591d3399d7cSFam Zheng  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
75926ebc91e5SFam Zheng  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
75936ebc91e5SFam Zheng  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7594eb100396SBharata B Raofi
7595eb100396SBharata B Rao
7596d85fa9ebSJeff Codyif test "$glusterfs_xlator_opt" = "yes" ; then
7597d85fa9ebSJeff Cody  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7598d85fa9ebSJeff Codyfi
7599d85fa9ebSJeff Cody
76000c14fb47SBharata B Raoif test "$glusterfs_discard" = "yes" ; then
76010c14fb47SBharata B Rao  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
76020c14fb47SBharata B Raofi
76030c14fb47SBharata B Rao
7604df3a429aSNiels de Vosif test "$glusterfs_fallocate" = "yes" ; then
7605df3a429aSNiels de Vos  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7606df3a429aSNiels de Vosfi
7607df3a429aSNiels de Vos
76087c815372SBharata B Raoif test "$glusterfs_zerofill" = "yes" ; then
76097c815372SBharata B Rao  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
76107c815372SBharata B Raofi
76117c815372SBharata B Rao
7612e014dbe7SPrasanna Kumar Kaleverif test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7613e014dbe7SPrasanna Kumar Kalever  echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7614e014dbe7SPrasanna Kumar Kaleverfi
7615e014dbe7SPrasanna Kumar Kalever
76160e3b891fSNiels de Vosif test "$glusterfs_iocb_has_stat" = "yes" ; then
76170e3b891fSNiels de Vos  echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
76180e3b891fSNiels de Vosfi
76190e3b891fSNiels de Vos
7620b10d49d7SPino Toscanoif test "$libssh" = "yes" ; then
7621b10d49d7SPino Toscano  echo "CONFIG_LIBSSH=m" >> $config_host_mak
7622b10d49d7SPino Toscano  echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7623b10d49d7SPino Toscano  echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
76240a12ec87SRichard W.M. Jonesfi
76250a12ec87SRichard W.M. Jones
7626ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then
7627ed1701c6SDr. David Alan Gilbert  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7628ed1701c6SDr. David Alan Gilbertfi
7629ed1701c6SDr. David Alan Gilbert
76303b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
76313cae16dbSPaolo Bonzini  echo 'CONFIG_TPM=y' >> $config_host_mak
76323b8acc11SPaolo Bonzinifi
76333b8acc11SPaolo Bonzini
76345b808275SLluís Vilanovaecho "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
76355b808275SLluís Vilanovaif have_backend "nop"; then
76366d8a764eSLluís  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
763722890ab5SPrerna Saxenafi
76385b808275SLluís Vilanovaif have_backend "simple"; then
76396d8a764eSLluís  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
76406d8a764eSLluís  # Set the appropriate trace file.
7641953ffe0fSAndreas Färber  trace_file="\"$trace_file-\" FMT_pid"
76429410b56cSPrerna Saxenafi
7643ed7f5f1dSPaolo Bonziniif have_backend "log"; then
7644ed7f5f1dSPaolo Bonzini  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
76456d8a764eSLluísfi
76465b808275SLluís Vilanovaif have_backend "ust"; then
76476d8a764eSLluís  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7648a81df1b6SPaolo Bonzini  echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
7649a81df1b6SPaolo Bonzini  echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
76506d8a764eSLluísfi
76515b808275SLluís Vilanovaif have_backend "dtrace"; then
76526d8a764eSLluís  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
76536d8a764eSLluís  if test "$trace_backend_stap" = "yes" ; then
76546d8a764eSLluís    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
76556d8a764eSLluís  fi
7656c276b17dSDaniel P. Berrangefi
76575b808275SLluís Vilanovaif have_backend "ftrace"; then
7658781e9545SEiichi Tsukata  if test "$linux" = "yes" ; then
7659781e9545SEiichi Tsukata    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7660781e9545SEiichi Tsukata  else
766121684af0SStewart Smith    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7662781e9545SEiichi Tsukata  fi
7663781e9545SEiichi Tsukatafi
76640a852417SPaul Durrantif have_backend "syslog"; then
76650a852417SPaul Durrant  if test "$posix_syslog" = "yes" ; then
76660a852417SPaul Durrant    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
76670a852417SPaul Durrant  else
76680a852417SPaul Durrant    feature_not_found "syslog(trace backend)" "syslog not available"
76690a852417SPaul Durrant  fi
76700a852417SPaul Durrantfi
76719410b56cSPrerna Saxenaecho "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
76729410b56cSPrerna Saxena
76732da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
76742da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
7675392fb643SFam Zheng  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
76762da776dbSMichael R. Hinesfi
76772da776dbSMichael R. Hines
767821ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then
767921ab34c9SMarcel Apfelbaum  echo "CONFIG_PVRDMA=y" >> $config_host_mak
768021ab34c9SMarcel Apfelbaumfi
768121ab34c9SMarcel Apfelbaum
7682575b22b1SLaurent Vivierif test "$have_rtnetlink" = "yes" ; then
7683575b22b1SLaurent Vivier  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7684575b22b1SLaurent Vivierfi
7685575b22b1SLaurent Vivier
7686ed279a06SKlim Kireevif test "$libxml2" = "yes" ; then
7687ed279a06SKlim Kireev  echo "CONFIG_LIBXML2=y" >> $config_host_mak
7688ed279a06SKlim Kireev  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7689ed279a06SKlim Kireev  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7690ed279a06SKlim Kireevfi
7691ed279a06SKlim Kireev
7692a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then
7693a6b1d4c0SChanglong Xie  echo "CONFIG_REPLICATION=y" >> $config_host_mak
7694a6b1d4c0SChanglong Xiefi
7695a6b1d4c0SChanglong Xie
76966a02c806SStefan Hajnocziif test "$have_af_vsock" = "yes" ; then
76976a02c806SStefan Hajnoczi  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
76986a02c806SStefan Hajnoczifi
76996a02c806SStefan Hajnoczi
77004d04351fSChristopher Covingtonif test "$have_sysmacros" = "yes" ; then
77014d04351fSChristopher Covington  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
77024d04351fSChristopher Covingtonfi
77034d04351fSChristopher Covington
770449e00a18SAndreas Grapentinif test "$have_static_assert" = "yes" ; then
770549e00a18SAndreas Grapentin  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
770649e00a18SAndreas Grapentinfi
770749e00a18SAndreas Grapentin
7708e674605fSTomáš Golembiovskýif test "$have_utmpx" = "yes" ; then
7709e674605fSTomáš Golembiovský  echo "HAVE_UTMPX=y" >> $config_host_mak
7710e674605fSTomáš Golembiovskýfi
7711db1ed1abSRichard Hendersonif test "$have_getrandom" = "yes" ; then
7712db1ed1abSRichard Henderson  echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7713db1ed1abSRichard Hendersonfi
7714e0580342SKamil Rytarowskiif test "$ivshmem" = "yes" ; then
7715e0580342SKamil Rytarowski  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7716e0580342SKamil Rytarowskifi
7717e219c499SRichard Hendersonif test "$capstone" != "no" ; then
77188ca80760SRichard Henderson  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7719*c9322ab5SMarc-André Lureau  echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak
7720*c9322ab5SMarc-André Lureau  echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak
77218ca80760SRichard Hendersonfi
7722ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then
7723ba59fb77SPaolo Bonzini  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7724ba59fb77SPaolo Bonzinifi
7725e0580342SKamil Rytarowski
77265c312079SDr. David Alan Gilbert# Hold two types of flag:
77275c312079SDr. David Alan Gilbert#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
77285c312079SDr. David Alan Gilbert#                                     a thread we have a handle to
7729479a5747SRoman Bolshakov#   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
77305c312079SDr. David Alan Gilbert#                                     platform
7731479a5747SRoman Bolshakovif test "$pthread_setname_np_w_tid" = "yes" ; then
77325c312079SDr. David Alan Gilbert  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7733479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7734479a5747SRoman Bolshakovelif test "$pthread_setname_np_wo_tid" = "yes" ; then
7735479a5747SRoman Bolshakov  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7736479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
77375c312079SDr. David Alan Gilbertfi
77385c312079SDr. David Alan Gilbert
773917824406SJunyan Heif test "$libpmem" = "yes" ; then
774017824406SJunyan He  echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7741*c9322ab5SMarc-André Lureau  echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
7742*c9322ab5SMarc-André Lureau  echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
774317824406SJunyan Hefi
774417824406SJunyan He
774521b2eca6SJingqi Liuif test "$libdaxctl" = "yes" ; then
774621b2eca6SJingqi Liu  echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
774721b2eca6SJingqi Liufi
774821b2eca6SJingqi Liu
77492f740136SJeff Codyif test "$bochs" = "yes" ; then
77502f740136SJeff Cody  echo "CONFIG_BOCHS=y" >> $config_host_mak
77512f740136SJeff Codyfi
77522f740136SJeff Codyif test "$cloop" = "yes" ; then
77532f740136SJeff Cody  echo "CONFIG_CLOOP=y" >> $config_host_mak
77542f740136SJeff Codyfi
77552f740136SJeff Codyif test "$dmg" = "yes" ; then
77562f740136SJeff Cody  echo "CONFIG_DMG=y" >> $config_host_mak
77572f740136SJeff Codyfi
77582f740136SJeff Codyif test "$qcow1" = "yes" ; then
77592f740136SJeff Cody  echo "CONFIG_QCOW1=y" >> $config_host_mak
77602f740136SJeff Codyfi
77612f740136SJeff Codyif test "$vdi" = "yes" ; then
77622f740136SJeff Cody  echo "CONFIG_VDI=y" >> $config_host_mak
77632f740136SJeff Codyfi
77642f740136SJeff Codyif test "$vvfat" = "yes" ; then
77652f740136SJeff Cody  echo "CONFIG_VVFAT=y" >> $config_host_mak
77662f740136SJeff Codyfi
77672f740136SJeff Codyif test "$qed" = "yes" ; then
77682f740136SJeff Cody  echo "CONFIG_QED=y" >> $config_host_mak
77692f740136SJeff Codyfi
77702f740136SJeff Codyif test "$parallels" = "yes" ; then
77712f740136SJeff Cody  echo "CONFIG_PARALLELS=y" >> $config_host_mak
77722f740136SJeff Codyfi
77732f740136SJeff Codyif test "$sheepdog" = "yes" ; then
77742f740136SJeff Cody  echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
77752f740136SJeff Codyfi
7776c9c8b88fSDavid CARLIERif test "$pty_h" = "yes" ; then
7777c9c8b88fSDavid CARLIER  echo "HAVE_PTY_H=y" >> $config_host_mak
7778c9c8b88fSDavid CARLIERfi
7779195588ccSDavid CARLIERif test "$have_mlockall" = "yes" ; then
7780195588ccSDavid CARLIER  echo "HAVE_MLOCKALL=y" >> $config_host_mak
7781195588ccSDavid CARLIERfi
7782adc28027SAlexander Bulekovif test "$fuzzing" = "yes" ; then
7783adc28027SAlexander Bulekov  if test "$have_fuzzer" = "yes"; then
7784dd016265SAlexander Bulekov    FUZZ_LDFLAGS=" -fsanitize=fuzzer"
7785dd016265SAlexander Bulekov    FUZZ_CFLAGS=" -fsanitize=fuzzer"
7786086d5f75SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
7787adc28027SAlexander Bulekov  else
7788dd016265SAlexander Bulekov    error_exit "Your compiler doesn't support -fsanitize=fuzzer"
7789adc28027SAlexander Bulekov    exit 1
7790adc28027SAlexander Bulekov  fi
7791adc28027SAlexander Bulekovfi
77922f740136SJeff Cody
779340e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
779440e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
779540e8c6f4SAlex Bennée    LIBS="-ldl $LIBS"
779626fffe29SEmilio G. Cota    # Copy the export object list to the build dir
779726fffe29SEmilio G. Cota    if test "$ld_dynamic_list" = "yes" ; then
779826fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
779926fffe29SEmilio G. Cota	ld_symbols=qemu-plugins-ld.symbols
780026fffe29SEmilio G. Cota	cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
780126fffe29SEmilio G. Cota    elif test "$ld_exported_symbols_list" = "yes" ; then
780226fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
780326fffe29SEmilio G. Cota	ld64_symbols=qemu-plugins-ld64.symbols
780426fffe29SEmilio G. Cota	echo "# Automatically generated by configure - do not modify" > $ld64_symbols
780526fffe29SEmilio G. Cota	grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
780626fffe29SEmilio G. Cota	    sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
780726fffe29SEmilio G. Cota    else
780826fffe29SEmilio G. Cota	error_exit \
780926fffe29SEmilio G. Cota	    "If \$plugins=yes, either \$ld_dynamic_list or " \
781026fffe29SEmilio G. Cota	    "\$ld_exported_symbols_list should have been set to 'yes'."
781126fffe29SEmilio G. Cota    fi
781240e8c6f4SAlex Bennéefi
781340e8c6f4SAlex Bennée
7814f48e590aSAlex Bennéeif test -n "$gdb_bin" ; then
7815f48e590aSAlex Bennée    echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7816f48e590aSAlex Bennéefi
7817f48e590aSAlex Bennée
781854e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then
781954e7aac0SAlexey Krasikov  echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
782092500362SAlexey Krasikov  if test "$have_keyutils" = "yes" ; then
782192500362SAlexey Krasikov    echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak
782292500362SAlexey Krasikov  fi
782354e7aac0SAlexey Krasikovfi
782454e7aac0SAlexey Krasikov
78255b5e3037SPaolo Bonziniif test "$tcg_interpreter" = "yes"; then
782625211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES"
78275b5e3037SPaolo Bonzinielif test "$ARCH" = "sparc64" ; then
782825211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES"
78295b5e3037SPaolo Bonzinielif test "$ARCH" = "s390x" ; then
783025211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES"
7831e633a5c6SEric Blakeelif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
783225211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES"
783340d964b5SRichard Hendersonelif test "$ARCH" = "ppc64" ; then
783425211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES"
7835e633a5c6SEric Blakeelif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
783625211446SPaolo Bonzini  QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES"
78375b5e3037SPaolo Bonzinielse
783825211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES"
78395b5e3037SPaolo Bonzinifi
78405b5e3037SPaolo Bonzini
784198ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
7842804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
7843804edf29SJuan Quintelaecho "INSTALL=$install" >> $config_host_mak
78441901cb14SBradecho "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
78451901cb14SBradecho "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
78461901cb14SBradecho "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
784721655882SPaolo Bonziniecho "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7848c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
78492eb054c2SPeter Maydellecho "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7850516e8b7dSPeter Maydellecho "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak
785139d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
7852a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
7853804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
7854a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
7855a31a8642SMichael S. Tsirkin  echo "IASL=$iasl" >> $config_host_mak
7856a31a8642SMichael S. Tsirkinfi
785783f73fceSTomoki Sekiyamaecho "CXX=$cxx" >> $config_host_mak
78583c4a4d0dSPeter Maydellecho "OBJCC=$objcc" >> $config_host_mak
7859804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
786045d285abSPeter Maydellecho "ARFLAGS=$ARFLAGS" >> $config_host_mak
7861cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak
78625f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak
78633dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
7864804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
7865804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
78669f81aeb5SAlistair Francisecho "RANLIB=$ranlib" >> $config_host_mak
78674852ee95SStefan Weilecho "NM=$nm" >> $config_host_mak
7868daa79d9aSAlex Bennéeecho "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
78699fe6de94SBlue Swirlecho "WINDRES=$windres" >> $config_host_mak
7870e2a2ed06SJuan Quintelaecho "CFLAGS=$CFLAGS" >> $config_host_mak
7871086d5f75SPaolo Bonziniecho "CXXFLAGS=$CXXFLAGS" >> $config_host_mak
787246eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7873a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
787411cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7875f9728943SPaolo Bonziniecho "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7876a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
7877a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak
7878e39f0062SPaolo Bonziniif test "$sparse" = "yes" ; then
7879968b4db3SPaolo Bonzini  echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7880e39f0062SPaolo Bonzinifi
78818a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7882db5adeaaSPaolo Bonziniecho "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
78836969ec6cSJames Clarkeecho "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7884e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
788573da375eSJuan Quintelaecho "LIBS+=$LIBS" >> $config_host_mak
78863e2e0e6bSJuan Quintelaecho "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7887409437e1SDaniel P. Berrangeecho "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7888804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
788917969268SFam Zhengecho "DSOSUF=$DSOSUF" >> $config_host_mak
789017969268SFam Zhengecho "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7891f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak
789290246037SDaniel P. Berrangeecho "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
789390246037SDaniel P. Berrangeecho "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
789494dd53c5SGerd Hoffmannecho "POD2MAN=$POD2MAN" >> $config_host_mak
78951d728c39SBlue Swirlif test "$gcov" = "yes" ; then
78961d728c39SBlue Swirl  echo "CONFIG_GCOV=y" >> $config_host_mak
78971d728c39SBlue Swirlfi
7898804edf29SJuan Quintela
78993efac6ebSTomáš Golembiovskýif test "$libudev" != "no"; then
79003efac6ebSTomáš Golembiovský    echo "CONFIG_LIBUDEV=y" >> $config_host_mak
79013efac6ebSTomáš Golembiovský    echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
79023efac6ebSTomáš Golembiovskýfi
7903adc28027SAlexander Bulekovif test "$fuzzing" != "no"; then
7904adc28027SAlexander Bulekov    echo "CONFIG_FUZZ=y" >> $config_host_mak
7905adc28027SAlexander Bulekov    echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7906adc28027SAlexander Bulekov    echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7907adc28027SAlexander Bulekovfi
79083efac6ebSTomáš Golembiovský
790905dfa22bSPhilippe Mathieu-Daudéif test "$edk2_blobs" = "yes" ; then
791005dfa22bSPhilippe Mathieu-Daudé  echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
791105dfa22bSPhilippe Mathieu-Daudéfi
791205dfa22bSPhilippe Mathieu-Daudé
7913b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then
7914b767d257SMarek Marczykowski-Górecki  echo "CONFIG_RNG_NONE=y" >> $config_host_mak
7915b767d257SMarek Marczykowski-Góreckifi
7916b767d257SMarek Marczykowski-Górecki
79176efd7517SPeter Maydell# use included Linux headers
79186efd7517SPeter Maydellif test "$linux" = "yes" ; then
7919a307beb6SAndreas Färber  mkdir -p linux-headers
79206efd7517SPeter Maydell  case "$cpu" in
7921c72b26ecSRichard Henderson  i386|x86_64|x32)
792208312a63SPeter Maydell    linux_arch=x86
79236efd7517SPeter Maydell    ;;
7924f8378accSRichard Henderson  ppc|ppc64|ppc64le)
792508312a63SPeter Maydell    linux_arch=powerpc
79266efd7517SPeter Maydell    ;;
79276efd7517SPeter Maydell  s390x)
792808312a63SPeter Maydell    linux_arch=s390
792908312a63SPeter Maydell    ;;
79301f080313SClaudio Fontana  aarch64)
79311f080313SClaudio Fontana    linux_arch=arm64
79321f080313SClaudio Fontana    ;;
7933222e7d11SSanjay Lal  mips64)
7934222e7d11SSanjay Lal    linux_arch=mips
7935222e7d11SSanjay Lal    ;;
793608312a63SPeter Maydell  *)
793708312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
793808312a63SPeter Maydell    linux_arch="$cpu"
79396efd7517SPeter Maydell    ;;
79406efd7517SPeter Maydell  esac
794108312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
794208312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
794308312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
794408312a63SPeter Maydell    fi
79456efd7517SPeter Maydellfi
79466efd7517SPeter Maydell
794797a847bcSbellardfor target in $target_list; do
794897a847bcSbellardtarget_dir="$target"
794925be210fSJuan Quintelaconfig_target_mak=$target_dir/config-target.mak
795089138857SStefan Weiltarget_name=$(echo $target | cut -d '-' -f 1)
795152bf9771Stony.nguyen@bt.comtarget_aligned_only="no"
795252bf9771Stony.nguyen@bt.comcase "$target_name" in
795352bf9771Stony.nguyen@bt.com  alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
795452bf9771Stony.nguyen@bt.com  target_aligned_only="yes"
795552bf9771Stony.nguyen@bt.com  ;;
795652bf9771Stony.nguyen@bt.comesac
795797a847bcSbellardtarget_bigendian="no"
7958c1799a84SPaolo Bonzinicase "$target_name" in
7959a69dc537SThomas Huth  armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
796052bf9771Stony.nguyen@bt.com  target_bigendian="yes"
7961ea2d6a39SJuan Quintela  ;;
7962ea2d6a39SJuan Quintelaesac
796397a847bcSbellardtarget_softmmu="no"
7964997344f3Sbellardtarget_user_only="no"
7965831b7825Sthstarget_linux_user="no"
796684778508Sblueswir1target_bsd_user="no"
79679e407a85Spbrookcase "$target" in
7968c1799a84SPaolo Bonzini  ${target_name}-softmmu)
79699e407a85Spbrook    target_softmmu="yes"
79709e407a85Spbrook    ;;
7971c1799a84SPaolo Bonzini  ${target_name}-linux-user)
79729e407a85Spbrook    target_user_only="yes"
79739e407a85Spbrook    target_linux_user="yes"
79749e407a85Spbrook    ;;
7975c1799a84SPaolo Bonzini  ${target_name}-bsd-user)
797684778508Sblueswir1    target_user_only="yes"
797784778508Sblueswir1    target_bsd_user="yes"
797884778508Sblueswir1    ;;
79799e407a85Spbrook  *)
798076ad07a4SPeter Maydell    error_exit "Target '$target' not recognised"
79819e407a85Spbrook    exit 1
79829e407a85Spbrook    ;;
79839e407a85Spbrookesac
7984831b7825Sths
798597a847bcSbellardmkdir -p $target_dir
798625be210fSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_target_mak
798797a847bcSbellard
7988e5fe0c52Spbrookbflt="no"
7989ca759f9eSAlex Bennéemttcg="no"
799089138857SStefan Weilinterp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
799156aebc89Spbrookgdb_xml_files=""
79927ba1e619Saliguori
7993c1799a84SPaolo BonziniTARGET_ARCH="$target_name"
79946acff7daSJuan QuintelaTARGET_BASE_ARCH=""
7995e6e91b9cSJuan QuintelaTARGET_ABI_DIR=""
79963a30446aSMarc-André LureauTARGET_SYSTBL_ABI=""
79973a30446aSMarc-André LureauTARGET_SYSTBL=""
7998e73aae67SJuan Quintela
7999c1799a84SPaolo Bonzinicase "$target_name" in
80002408a527Saurel32  i386)
80010a7fa00aSEmilio G. Cota    mttcg="yes"
80027b0f97baSDoug Gale	gdb_xml_files="i386-32bit.xml"
800328988117SLaurent Vivier    TARGET_SYSTBL_ABI=i386
80043a30446aSMarc-André Lureau    TARGET_SYSTBL=syscall_32.tbl
80052408a527Saurel32  ;;
80062408a527Saurel32  x86_64)
80076acff7daSJuan Quintela    TARGET_BASE_ARCH=i386
80088d62f35aSLaurent Vivier    TARGET_SYSTBL_ABI=common,64
80093a30446aSMarc-André Lureau    TARGET_SYSTBL=syscall_64.tbl
80100a7fa00aSEmilio G. Cota    mttcg="yes"
80117b0f97baSDoug Gale    gdb_xml_files="i386-64bit.xml"
80122408a527Saurel32  ;;
80132408a527Saurel32  alpha)
80145ee4f3c2SRichard Henderson    mttcg="yes"
80156116aea9SLaurent Vivier    TARGET_SYSTBL_ABI=common
80162408a527Saurel32  ;;
80172408a527Saurel32  arm|armeb)
8018b498c8a0SJuan Quintela    TARGET_ARCH=arm
80195bcb4986SLaurent Vivier    TARGET_SYSTBL_ABI=common,oabi
8020e5fe0c52Spbrook    bflt="yes"
8021ca759f9eSAlex Bennée    mttcg="yes"
8022c888f7e0SPeter Maydell    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
80232408a527Saurel32  ;;
8024722dd7beSMichael Weiser  aarch64|aarch64_be)
8025722dd7beSMichael Weiser    TARGET_ARCH=aarch64
80266a49fa95SAlexander Graf    TARGET_BASE_ARCH=arm
80276a49fa95SAlexander Graf    bflt="yes"
8028ca759f9eSAlex Bennée    mttcg="yes"
8029c888f7e0SPeter Maydell    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
80306a49fa95SAlexander Graf  ;;
803142f3ff00SMichael Rolnik  avr)
803242f3ff00SMichael Rolnik    gdb_xml_files="avr-cpu.xml"
803342f3ff00SMichael Rolnik    target_compiler=$cross_cc_avr
803442f3ff00SMichael Rolnik  ;;
80352408a527Saurel32  cris)
80362408a527Saurel32  ;;
803761766fe9SRichard Henderson  hppa)
80387b93dab5SRichard Henderson    mttcg="yes"
80399566f4c6SLaurent Vivier    TARGET_SYSTBL_ABI=common,32
804061766fe9SRichard Henderson  ;;
8041613a22c9SMichael Walle  lm32)
8042613a22c9SMichael Walle  ;;
80432408a527Saurel32  m68k)
80440938cda5Saurel32    bflt="yes"
8045a976ed3fSKONRAD Frederic    gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
80465b85cae9SLaurent Vivier    TARGET_SYSTBL_ABI=common
80472408a527Saurel32  ;;
8048877fdc12SEdgar E. Iglesias  microblaze|microblazeel)
8049877fdc12SEdgar E. Iglesias    TARGET_ARCH=microblaze
8050ddf0c4cdSLaurent Vivier    TARGET_SYSTBL_ABI=common
805172b675caSEdgar E. Iglesias    bflt="yes"
8052be73ef64SEdgar E. Iglesias    echo "TARGET_ABI32=y" >> $config_target_mak
805372b675caSEdgar E. Iglesias  ;;
80542408a527Saurel32  mips|mipsel)
80550454728cSAleksandar Markovic    mttcg="yes"
8056b498c8a0SJuan Quintela    TARGET_ARCH=mips
805725be210fSJuan Quintela    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
8058c59716fcSLaurent Vivier    TARGET_SYSTBL_ABI=o32
80593a30446aSMarc-André Lureau    TARGET_SYSTBL=syscall_o32.tbl
80602408a527Saurel32  ;;
80612408a527Saurel32  mipsn32|mipsn32el)
80620454728cSAleksandar Markovic    mttcg="yes"
8063597e2cecSRichard Henderson    TARGET_ARCH=mips64
80646acff7daSJuan Quintela    TARGET_BASE_ARCH=mips
806525be210fSJuan Quintela    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
8066597e2cecSRichard Henderson    echo "TARGET_ABI32=y" >> $config_target_mak
8067686a0fe4SLaurent Vivier    TARGET_SYSTBL_ABI=n32
80683a30446aSMarc-André Lureau    TARGET_SYSTBL=syscall_n32.tbl
80692408a527Saurel32  ;;
80702408a527Saurel32  mips64|mips64el)
8071a092a955SAlex Bennée    mttcg="no"
8072b498c8a0SJuan Quintela    TARGET_ARCH=mips64
80736acff7daSJuan Quintela    TARGET_BASE_ARCH=mips
807425be210fSJuan Quintela    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
8075686a0fe4SLaurent Vivier    TARGET_SYSTBL_ABI=n64
80763a30446aSMarc-André Lureau    TARGET_SYSTBL=syscall_n64.tbl
80772408a527Saurel32  ;;
8078d15a9c23SAnthony Green  moxie)
8079d15a9c23SAnthony Green  ;;
8080e671711cSMarek Vasut  nios2)
8081e671711cSMarek Vasut  ;;
80824a09d0bbSRichard Henderson  or1k)
8083e67db06eSJia Liu    TARGET_ARCH=openrisc
8084e67db06eSJia Liu    TARGET_BASE_ARCH=openrisc
8085e67db06eSJia Liu  ;;
80862408a527Saurel32  ppc)
8087c8b3532dSaurel32    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
808876a691f1SLaurent Vivier    TARGET_SYSTBL_ABI=common,nospu,32
80892408a527Saurel32  ;;
80902408a527Saurel32  ppc64)
80916acff7daSJuan Quintela    TARGET_BASE_ARCH=ppc
8092e6e91b9cSJuan Quintela    TARGET_ABI_DIR=ppc
809376a691f1SLaurent Vivier    TARGET_SYSTBL_ABI=common,nospu,64
8094f0b0685dSNikunj A Dadhania    mttcg=yes
80951438eff3SAnton Blanchard    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
80962408a527Saurel32  ;;
80979c35126cSDoug Kwan  ppc64le)
80989c35126cSDoug Kwan    TARGET_ARCH=ppc64
80999c35126cSDoug Kwan    TARGET_BASE_ARCH=ppc
81009c35126cSDoug Kwan    TARGET_ABI_DIR=ppc
810176a691f1SLaurent Vivier    TARGET_SYSTBL_ABI=common,nospu,64
8102f0b0685dSNikunj A Dadhania    mttcg=yes
81031438eff3SAnton Blanchard    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
81049c35126cSDoug Kwan  ;;
81052408a527Saurel32  ppc64abi32)
8106b498c8a0SJuan Quintela    TARGET_ARCH=ppc64
81076acff7daSJuan Quintela    TARGET_BASE_ARCH=ppc
8108e6e91b9cSJuan Quintela    TARGET_ABI_DIR=ppc
810976a691f1SLaurent Vivier    TARGET_SYSTBL_ABI=common,nospu,32
811025be210fSJuan Quintela    echo "TARGET_ABI32=y" >> $config_target_mak
81111438eff3SAnton Blanchard    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
81122408a527Saurel32  ;;
811325fa194bSMichael Clark  riscv32)
811425fa194bSMichael Clark    TARGET_BASE_ARCH=riscv
811525fa194bSMichael Clark    TARGET_ABI_DIR=riscv
811625fa194bSMichael Clark    mttcg=yes
8117ae4a70c0SKeith Packard    gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
811825fa194bSMichael Clark  ;;
811925fa194bSMichael Clark  riscv64)
812025fa194bSMichael Clark    TARGET_BASE_ARCH=riscv
812125fa194bSMichael Clark    TARGET_ABI_DIR=riscv
812225fa194bSMichael Clark    mttcg=yes
8123ae4a70c0SKeith Packard    gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
812425fa194bSMichael Clark  ;;
8125c8c35e5fSYoshinori Sato  rx)
8126c8c35e5fSYoshinori Sato    TARGET_ARCH=rx
8127c8c35e5fSYoshinori Sato    bflt="yes"
8128c8c35e5fSYoshinori Sato    target_compiler=$cross_cc_rx
8129c8c35e5fSYoshinori Sato    gdb_xml_files="rx-core.xml"
8130c8c35e5fSYoshinori Sato  ;;
81312408a527Saurel32  sh4|sh4eb)
8132b498c8a0SJuan Quintela    TARGET_ARCH=sh4
8133d0c832f6SLaurent Vivier    TARGET_SYSTBL_ABI=common
81344dbed897Spbrook    bflt="yes"
81352408a527Saurel32  ;;
81362408a527Saurel32  sparc)
8137bb0cdc03SLaurent Vivier    TARGET_SYSTBL_ABI=common,32
81382408a527Saurel32  ;;
81392408a527Saurel32  sparc64)
81406acff7daSJuan Quintela    TARGET_BASE_ARCH=sparc
8141bb0cdc03SLaurent Vivier    TARGET_SYSTBL_ABI=common,64
81422408a527Saurel32  ;;
81432408a527Saurel32  sparc32plus)
8144b498c8a0SJuan Quintela    TARGET_ARCH=sparc64
81456acff7daSJuan Quintela    TARGET_BASE_ARCH=sparc
8146e6e91b9cSJuan Quintela    TARGET_ABI_DIR=sparc
8147bb0cdc03SLaurent Vivier    TARGET_SYSTBL_ABI=common,32
814825be210fSJuan Quintela    echo "TARGET_ABI32=y" >> $config_target_mak
81492408a527Saurel32  ;;
815024e804ecSAlexander Graf  s390x)
8151318f371dSLaurent Vivier    TARGET_SYSTBL_ABI=common,64
815263685bc4SDavid Hildenbrand    mttcg=yes
815386158a2aSChristian Borntraeger    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
815424e804ecSAlexander Graf  ;;
8155444e06b1SChen Gang  tilegx)
8156444e06b1SChen Gang  ;;
81575ecaa4edSPeter Crosthwaite  tricore)
81585ecaa4edSPeter Crosthwaite  ;;
8159d2fbca94SGuan Xuetao  unicore32)
8160d2fbca94SGuan Xuetao  ;;
8161cfa550c6SMax Filippov  xtensa|xtensaeb)
8162cfa550c6SMax Filippov    TARGET_ARCH=xtensa
8163a4a93592SLaurent Vivier    TARGET_SYSTBL_ABI=common
816402e33e9fSMax Filippov    bflt="yes"
81659fb40342SMax Filippov    mttcg="yes"
8166cfa550c6SMax Filippov  ;;
81672408a527Saurel32  *)
816876ad07a4SPeter Maydell    error_exit "Unsupported target CPU"
81692408a527Saurel32  ;;
81702408a527Saurel32esac
81715e8861a0SPaolo Bonzini# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
81725e8861a0SPaolo Bonziniif [ "$TARGET_BASE_ARCH" = "" ]; then
81735e8861a0SPaolo Bonzini  TARGET_BASE_ARCH=$TARGET_ARCH
81745e8861a0SPaolo Bonzinifi
81753a30446aSMarc-André Lureauif [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then
81763a30446aSMarc-André Lureau  TARGET_SYSTBL=syscall.tbl
81773a30446aSMarc-André Lureaufi
81785e8861a0SPaolo Bonzini
81795e8861a0SPaolo Bonzinisymlink "$source_path/Makefile.target" "$target_dir/Makefile"
81805e8861a0SPaolo Bonzini
818199afc91dSDaniel P. Berrangeupper() {
818299afc91dSDaniel P. Berrange    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
818399afc91dSDaniel P. Berrange}
818499afc91dSDaniel P. Berrange
818589138857SStefan Weiltarget_arch_name="$(upper $TARGET_ARCH)"
818625be210fSJuan Quintelaecho "TARGET_$target_arch_name=y" >> $config_target_mak
8187c1799a84SPaolo Bonziniecho "TARGET_NAME=$target_name" >> $config_target_mak
818825be210fSJuan Quintelaecho "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
8189e6e91b9cSJuan Quintelaif [ "$TARGET_ABI_DIR" = "" ]; then
8190e6e91b9cSJuan Quintela  TARGET_ABI_DIR=$TARGET_ARCH
8191e6e91b9cSJuan Quintelafi
819225be210fSJuan Quintelaecho "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
8193adfc3e91SStacey Sonif [ "$HOST_VARIANT_DIR" != "" ]; then
8194adfc3e91SStacey Son    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
8195adfc3e91SStacey Sonfi
81964d6a835dSLaurent Vivierif [ "$TARGET_SYSTBL_ABI" != "" ]; then
81974d6a835dSLaurent Vivier    echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
81983a30446aSMarc-André Lureau    echo "TARGET_SYSTBL=$TARGET_SYSTBL" >> $config_target_mak
81994d6a835dSLaurent Vivierfi
82003b6b7550SPaolo Bonzini
82013b6b7550SPaolo Bonziniif supported_xen_target $target; then
820225be210fSJuan Quintela    echo "CONFIG_XEN=y" >> $config_target_mak
8203eb6fda0fSAnthony PERARD    if test "$xen_pci_passthrough" = yes; then
8204eb6fda0fSAnthony PERARD        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
8205eb6fda0fSAnthony PERARD    fi
8206432d268cSJun Nakajimafi
82073b6b7550SPaolo Bonziniif supported_kvm_target $target; then
820825be210fSJuan Quintela    echo "CONFIG_KVM=y" >> $config_target_mak
8209c59249f9SJuan Quintelafi
82103b6b7550SPaolo Bonziniif supported_hax_target $target; then
8211b0cb0a66SVincent Palatin    echo "CONFIG_HAX=y" >> $config_target_mak
8212b0cb0a66SVincent Palatinfi
8213c97d6d2cSSergio Andres Gomez Del Realif supported_hvf_target $target; then
8214c97d6d2cSSergio Andres Gomez Del Real    echo "CONFIG_HVF=y" >> $config_target_mak
8215c97d6d2cSSergio Andres Gomez Del Realfi
8216d661d9a4SJustin Terry (VM)if supported_whpx_target $target; then
8217d661d9a4SJustin Terry (VM)    echo "CONFIG_WHPX=y" >> $config_target_mak
8218d661d9a4SJustin Terry (VM)fi
821952bf9771Stony.nguyen@bt.comif test "$target_aligned_only" = "yes" ; then
822052bf9771Stony.nguyen@bt.com  echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
822152bf9771Stony.nguyen@bt.comfi
8222de83cd02Sbellardif test "$target_bigendian" = "yes" ; then
822325be210fSJuan Quintela  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
822497a847bcSbellardfi
822597a847bcSbellardif test "$target_softmmu" = "yes" ; then
822625be210fSJuan Quintela  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
8227ca759f9eSAlex Bennée  if test "$mttcg" = "yes" ; then
8228ca759f9eSAlex Bennée    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8229ca759f9eSAlex Bennée  fi
8230de83cd02Sbellardfi
8231997344f3Sbellardif test "$target_user_only" = "yes" ; then
823225be210fSJuan Quintela  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
8233a2c80be9SStefan Weil  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
8234997344f3Sbellardfi
8235831b7825Sthsif test "$target_linux_user" = "yes" ; then
823625be210fSJuan Quintela  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
8237831b7825Sthsfi
823856aebc89Spbrooklist=""
823956aebc89Spbrookif test ! -z "$gdb_xml_files" ; then
824056aebc89Spbrook  for x in $gdb_xml_files; do
8241*c9322ab5SMarc-André Lureau    list="$list gdb-xml/$x"
824256aebc89Spbrook  done
824325be210fSJuan Quintela  echo "TARGET_XML_FILES=$list" >> $config_target_mak
82443d0f1517SJuan Quintelafi
8245de83cd02Sbellard
8246e633a5c6SEric Blakeif test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
824725be210fSJuan Quintela  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
8248e5fe0c52Spbrookfi
824984778508Sblueswir1if test "$target_bsd_user" = "yes" ; then
825025be210fSJuan Quintela  echo "CONFIG_BSD_USER=y" >> $config_target_mak
825184778508Sblueswir1fi
82525b0753e0Sbellard
8253d75402b5SAlex Bennée
8254db5adeaaSPaolo Bonzini# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
8255fa282484SJuan Quintela
82564afddb55SJuan Quintelacflags=""
8257fa282484SJuan Quintelaldflags=""
82589b8e111fSJuan Quintela
8259c765fcacSPeter Crosthwaitedisas_config() {
8260c765fcacSPeter Crosthwaite  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8261c765fcacSPeter Crosthwaite  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8262c765fcacSPeter Crosthwaite}
8263c765fcacSPeter Crosthwaite
826464656024SJuan Quintelafor i in $ARCH $TARGET_BASE_ARCH ; do
826564656024SJuan Quintela  case "$i" in
826664656024SJuan Quintela  alpha)
8267c765fcacSPeter Crosthwaite    disas_config "ALPHA"
826864656024SJuan Quintela  ;;
826982295d8aSRichard Henderson  aarch64)
827082295d8aSRichard Henderson    if test -n "${cxx}"; then
8271c765fcacSPeter Crosthwaite      disas_config "ARM_A64"
827282295d8aSRichard Henderson    fi
827382295d8aSRichard Henderson  ;;
827464656024SJuan Quintela  arm)
8275c765fcacSPeter Crosthwaite    disas_config "ARM"
8276999b53ecSClaudio Fontana    if test -n "${cxx}"; then
8277c765fcacSPeter Crosthwaite      disas_config "ARM_A64"
8278999b53ecSClaudio Fontana    fi
827964656024SJuan Quintela  ;;
828042f3ff00SMichael Rolnik  avr)
828142f3ff00SMichael Rolnik    disas_config "AVR"
828242f3ff00SMichael Rolnik  ;;
828364656024SJuan Quintela  cris)
8284c765fcacSPeter Crosthwaite    disas_config "CRIS"
828564656024SJuan Quintela  ;;
8286429b31a2SRichard Henderson  hppa)
8287429b31a2SRichard Henderson    disas_config "HPPA"
8288429b31a2SRichard Henderson  ;;
8289c72b26ecSRichard Henderson  i386|x86_64|x32)
8290c765fcacSPeter Crosthwaite    disas_config "I386"
829164656024SJuan Quintela  ;;
829279368f49SMichael Walle  lm32)
8293c765fcacSPeter Crosthwaite    disas_config "LM32"
829479368f49SMichael Walle  ;;
829564656024SJuan Quintela  m68k)
8296c765fcacSPeter Crosthwaite    disas_config "M68K"
829764656024SJuan Quintela  ;;
8298877fdc12SEdgar E. Iglesias  microblaze*)
8299c765fcacSPeter Crosthwaite    disas_config "MICROBLAZE"
830064656024SJuan Quintela  ;;
830164656024SJuan Quintela  mips*)
8302c765fcacSPeter Crosthwaite    disas_config "MIPS"
830389a955e8SAleksandar Markovic    if test -n "${cxx}"; then
830489a955e8SAleksandar Markovic      disas_config "NANOMIPS"
830589a955e8SAleksandar Markovic    fi
830664656024SJuan Quintela  ;;
8307d15a9c23SAnthony Green  moxie*)
8308c765fcacSPeter Crosthwaite    disas_config "MOXIE"
8309d15a9c23SAnthony Green  ;;
8310e671711cSMarek Vasut  nios2)
8311e671711cSMarek Vasut    disas_config "NIOS2"
8312e671711cSMarek Vasut  ;;
83134a09d0bbSRichard Henderson  or1k)
8314c765fcacSPeter Crosthwaite    disas_config "OPENRISC"
8315e67db06eSJia Liu  ;;
831664656024SJuan Quintela  ppc*)
8317c765fcacSPeter Crosthwaite    disas_config "PPC"
831864656024SJuan Quintela  ;;
8319c4f80543SAlistair Francis  riscv*)
832025fa194bSMichael Clark    disas_config "RISCV"
832125fa194bSMichael Clark  ;;
8322c8c35e5fSYoshinori Sato  rx)
8323c8c35e5fSYoshinori Sato    disas_config "RX"
8324c8c35e5fSYoshinori Sato  ;;
832524e804ecSAlexander Graf  s390*)
8326c765fcacSPeter Crosthwaite    disas_config "S390"
832764656024SJuan Quintela  ;;
832864656024SJuan Quintela  sh4)
8329c765fcacSPeter Crosthwaite    disas_config "SH4"
833064656024SJuan Quintela  ;;
833164656024SJuan Quintela  sparc*)
8332c765fcacSPeter Crosthwaite    disas_config "SPARC"
833364656024SJuan Quintela  ;;
8334cfa550c6SMax Filippov  xtensa*)
8335c765fcacSPeter Crosthwaite    disas_config "XTENSA"
8336cfa550c6SMax Filippov  ;;
833764656024SJuan Quintela  esac
833864656024SJuan Quinteladone
83399195b2c2SStefan Weilif test "$tcg_interpreter" = "yes" ; then
8340c765fcacSPeter Crosthwaite  disas_config "TCI"
83419195b2c2SStefan Weilfi
834264656024SJuan Quintela
8343e9a3591fSChristian Borntraeger# Newer kernels on s390 check for an S390_PGSTE program header and
8344e9a3591fSChristian Borntraeger# enable the pgste page table extensions in that case. This makes
8345e9a3591fSChristian Borntraeger# the vm.allocate_pgste sysctl unnecessary. We enable this program
8346e9a3591fSChristian Borntraeger# header if
8347e9a3591fSChristian Borntraeger#  - we build on s390x
8348e9a3591fSChristian Borntraeger#  - we build the system emulation for s390x (qemu-system-s390x)
8349e9a3591fSChristian Borntraeger#  - KVM is enabled
8350e9a3591fSChristian Borntraeger#  - the linker supports --s390-pgste
8351e633a5c6SEric Blakeif test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8352e633a5c6SEric Blake        test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
8353e9a3591fSChristian Borntraeger    if ld_has --s390-pgste ; then
8354e9a3591fSChristian Borntraeger        ldflags="-Wl,--s390-pgste $ldflags"
8355e9a3591fSChristian Borntraeger    fi
8356e9a3591fSChristian Borntraegerfi
8357e9a3591fSChristian Borntraeger
8358db5adeaaSPaolo Bonziniecho "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
835925be210fSJuan Quintelaecho "QEMU_CFLAGS+=$cflags" >> $config_target_mak
8360fa282484SJuan Quintela
836197a847bcSbellarddone # for target in $targets
83627d13299dSbellard
8363d52c454aSMarc-André Lureauecho "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8364d52c454aSMarc-André Lureauecho "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8365d52c454aSMarc-André Lureau
8366e3971d61SPhilippe Mathieu-Daudéif [ "$fdt" = "git" ]; then
83673b8593eeSMarkus Armbruster  echo "config-host.h: dtc/all" >> $config_host_mak
8368a540f158SPeter Crosthwaitefi
8369e219c499SRichard Hendersonif [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
83703b8593eeSMarkus Armbruster  echo "config-host.h: capstone/all" >> $config_host_mak
8371e219c499SRichard Hendersonfi
8372e219c499SRichard Hendersonif test -n "$LIBCAPSTONE"; then
8373e219c499SRichard Henderson  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8374e219c499SRichard Hendersonfi
8375a540f158SPeter Crosthwaite
8376a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
8377a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
8378ab318051SMarc-André Lureau  echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
8379a99d57bbSWanlong Gaofi
8380a99d57bbSWanlong Gao
8381fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
8382fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
8383fd0e6053SJohn Snowfi
8384fd0e6053SJohn Snow
83851e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
83861e4f6065SDaniele Buono  echo "CONFIG_SAFESTACK=y" >> $config_host_mak
83871e4f6065SDaniele Buonofi
83881e4f6065SDaniele Buono
8389e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now.
8390e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree;
8391e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree
8392e29e5c6eSPeter Maydell# (these can be both files and directories).
8393e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This
8394e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is
8395e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun
8396e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and
8397e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own
8398e29e5c6eSPeter Maydell# directory and symlink the directory instead.
83991cf4323eSThomas HuthDIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
84001cf4323eSThomas HuthDIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
8401b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi"
8402744a928cSAlexey KardashevskiyDIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
84038db2a4fdSGerd HoffmannDIRS="$DIRS roms/seabios"
84042038f8c8SPaolo BonziniLINKS="Makefile"
84052038f8c8SPaolo BonziniLINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
84063941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target"
8407671f760bSEmilio G. CotaLINKS="$LINKS tests/plugin/Makefile"
8408e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
8409e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile"
84108db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile"
8411e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp"
8412e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
841339950353SPeter MaydellLINKS="$LINKS tests/acceptance tests/data"
841439950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check"
84158f8fd9edSCleber RosaLINKS="$LINKS python"
8416753d11f2SRichard Hendersonfor bios_file in \
8417753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
8418225a9ab8SAlexey Kardashevskiy    $source_path/pc-bios/*.lid \
8419753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
8420753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
8421e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
8422753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
84234e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
842426ce90fdSLaszlo Ersek    $source_path/pc-bios/edk2-*.fd.bz2 \
8425753d11f2SRichard Henderson    $source_path/pc-bios/palcode-*
8426753d11f2SRichard Hendersondo
8427e29e5c6eSPeter Maydell    LINKS="$LINKS pc-bios/$(basename $bios_file)"
84287ea78b74SJan Kiszkadone
8429d1807a4fSPaolo Bonzinimkdir -p $DIRS
8430e29e5c6eSPeter Maydellfor f in $LINKS ; do
8431cab00a5aSMichael S. Tsirkin    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
8432f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
8433f9245e10SPeter Maydell    fi
84347d13299dSbellarddone
84351ad2134fSPaul Brook
84362038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do
84372038f8c8SPaolo Bonzini  export $i
84382038f8c8SPaolo Bonzinidone
8439afc3a8f9SAlex Bennéeexport target_list source_path use_containers
84402038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh)
84412038f8c8SPaolo Bonzini
8442c34ebfdcSAnthony Liguori# temporary config to build submodules
84438db2a4fdSGerd Hoffmannfor rom in seabios; do
8444c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
844537116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
8446c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
8447cdbd727cSRichard Henderson    echo "AS=$as" >> $config_mak
84485f6f0e27SRichard Henderson    echo "CCAS=$ccas" >> $config_mak
8449c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
8450c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
84513dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
8452c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
8453a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
8454c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
84559f81aeb5SAlistair Francis    echo "RANLIB=$ranlib" >> $config_mak
8456c34ebfdcSAnthony Liguoridone
8457c34ebfdcSAnthony Liguori
845876c7560aSMax Reitz# set up qemu-iotests in this build directory
845976c7560aSMax Reitziotests_common_env="tests/qemu-iotests/common.env"
846076c7560aSMax Reitz
846176c7560aSMax Reitzecho "# Automatically generated by configure - do not modify" > "$iotests_common_env"
846276c7560aSMax Reitzecho >> "$iotests_common_env"
846376c7560aSMax Reitzecho "export PYTHON='$python'" >> "$iotests_common_env"
846476c7560aSMax Reitz
8465a5665051SPaolo Bonziniif test "$skip_meson" = no; then
8466fc929892SMarc-André Lureaucross="config-meson.cross.new"
8467fc929892SMarc-André Lureaumeson_quote() {
8468fc929892SMarc-André Lureau    echo "['$(echo $* | sed "s/ /','/g")']"
8469fc929892SMarc-André Lureau}
8470fc929892SMarc-André Lureau
8471fc929892SMarc-André Lureauecho "# Automatically generated by configure - do not modify" > $cross
8472fc929892SMarc-André Lureauecho "[properties]" >> $cross
8473fc929892SMarc-André Lureautest -z "$cxx" && echo "link_language = 'c'" >> $cross
8474fc929892SMarc-André Lureauecho "[binaries]" >> $cross
8475fc929892SMarc-André Lureauecho "c = $(meson_quote $cc)" >> $cross
8476fc929892SMarc-André Lureautest -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross
8477fc929892SMarc-André Lureauecho "ar = $(meson_quote $ar)" >> $cross
8478fc929892SMarc-André Lureauecho "nm = $(meson_quote $nm)" >> $cross
8479fc929892SMarc-André Lureauecho "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross
8480fc929892SMarc-André Lureauecho "ranlib = $(meson_quote $ranlib)" >> $cross
8481fc929892SMarc-André Lureauecho "strip = $(meson_quote $strip)" >> $cross
8482fc929892SMarc-André Lureauecho "windres = $(meson_quote $windres)" >> $cross
8483fc929892SMarc-André Lureauif test -n "$cross_prefix"; then
8484fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
8485fc929892SMarc-André Lureau    # Hack: Meson expects an absolute path for the *build* machine
8486fc929892SMarc-André Lureau    # for the prefix, so add a slash in front of a Windows path that
8487fc929892SMarc-André Lureau    # includes a drive letter.
8488fc929892SMarc-André Lureau    #
8489fc929892SMarc-André Lureau    # See https://github.com/mesonbuild/meson/issues/7577.
8490fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
8491fc929892SMarc-André Lureau    if test "$mingw32" = "yes" ; then
8492fc929892SMarc-André Lureau        echo "system = 'windows'" >> $cross
8493fc929892SMarc-André Lureau        case $prefix in
8494fc929892SMarc-André Lureau            ?:*) pre_prefix=/ ;;
8495fc929892SMarc-André Lureau        esac
8496fc929892SMarc-André Lureau    fi
8497fc929892SMarc-André Lureau    case "$ARCH" in
8498fc929892SMarc-André Lureau        i386|x86_64)
8499fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
8500fc929892SMarc-André Lureau            ;;
8501fc929892SMarc-André Lureau        ppc64le)
8502fc929892SMarc-André Lureau            echo "cpu_family = 'ppc64'" >> $cross
8503fc929892SMarc-André Lureau            ;;
8504fc929892SMarc-André Lureau        *)
8505fc929892SMarc-André Lureau            echo "cpu_family = '$ARCH'" >> $cross
8506fc929892SMarc-André Lureau            ;;
8507fc929892SMarc-André Lureau    esac
8508fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
8509fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
8510fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
8511fc929892SMarc-André Lureau    else
8512fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
8513fc929892SMarc-André Lureau    fi
8514fc929892SMarc-André Lureauelse
8515fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
8516fc929892SMarc-André Lureaufi
8517fc929892SMarc-André Lureaumv $cross config-meson.cross
8518fc929892SMarc-André Lureau
8519a5665051SPaolo Bonzinirm -rf meson-private meson-info meson-logs
8520a5665051SPaolo BonziniNINJA=$PWD/ninjatool $meson setup \
8521fc929892SMarc-André Lureau        --prefix "${pre_prefix}$prefix" \
8522fc929892SMarc-André Lureau        --libdir "${pre_prefix}$libdir" \
8523fc929892SMarc-André Lureau        --libexecdir "${pre_prefix}$libexecdir" \
8524fc929892SMarc-André Lureau        --bindir "${pre_prefix}$bindir" \
8525fc929892SMarc-André Lureau        --includedir "${pre_prefix}$includedir" \
8526fc929892SMarc-André Lureau        --datadir "${pre_prefix}$datadir" \
8527fc929892SMarc-André Lureau        --mandir "${pre_prefix}$mandir" \
8528fc929892SMarc-André Lureau        --sysconfdir "${pre_prefix}$sysconfdir" \
8529fc929892SMarc-André Lureau        --localstatedir "${pre_prefix}$local_statedir" \
8530a5665051SPaolo Bonzini        -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
8531a5665051SPaolo Bonzini        -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
8532a5665051SPaolo Bonzini        -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
8533a5665051SPaolo Bonzini        -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
8534da6d48b9SMarc-André Lureau        -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
8535bf0e56a3SMarc-André Lureau        -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
8536fc929892SMarc-André Lureau        $cross_arg \
8537a5665051SPaolo Bonzini        "$PWD" "$source_path"
8538a5665051SPaolo Bonzini
8539a5665051SPaolo Bonziniif test "$?" -ne 0 ; then
8540a5665051SPaolo Bonzini    error_exit "meson setup failed"
8541a5665051SPaolo Bonzinifi
8542a5665051SPaolo Bonzinitouch ninjatool.stamp
8543a5665051SPaolo Bonzinifi
8544a5665051SPaolo Bonzini
8545dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
8546dc655404SMichael S. Tsirkincat <<EOD >config.status
8547dc655404SMichael S. Tsirkin#!/bin/sh
8548dc655404SMichael S. Tsirkin# Generated by configure.
8549dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
8550dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
8551dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
8552dc655404SMichael S. TsirkinEOD
8553e811da7fSDaniel P. Berrangé
8554e811da7fSDaniel P. Berrangépreserve_env() {
8555e811da7fSDaniel P. Berrangé    envname=$1
8556e811da7fSDaniel P. Berrangé
8557e811da7fSDaniel P. Berrangé    eval envval=\$$envname
8558e811da7fSDaniel P. Berrangé
8559e811da7fSDaniel P. Berrangé    if test -n "$envval"
8560e811da7fSDaniel P. Berrangé    then
8561e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
8562e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
8563e811da7fSDaniel P. Berrangé    else
8564e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
8565e811da7fSDaniel P. Berrangé    fi
8566e811da7fSDaniel P. Berrangé}
8567e811da7fSDaniel P. Berrangé
8568e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
8569e811da7fSDaniel P. Berrangé# features/build target configure will detect
8570e811da7fSDaniel P. Berrangépreserve_env AR
8571e811da7fSDaniel P. Berrangépreserve_env AS
8572e811da7fSDaniel P. Berrangépreserve_env CC
8573e811da7fSDaniel P. Berrangépreserve_env CPP
8574e811da7fSDaniel P. Berrangépreserve_env CXX
8575e811da7fSDaniel P. Berrangépreserve_env INSTALL
8576e811da7fSDaniel P. Berrangépreserve_env LD
8577e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
8578e811da7fSDaniel P. Berrangépreserve_env LIBTOOL
8579e811da7fSDaniel P. Berrangépreserve_env MAKE
8580e811da7fSDaniel P. Berrangépreserve_env NM
8581e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
8582e811da7fSDaniel P. Berrangépreserve_env PATH
8583e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
8584e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
8585e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
8586e811da7fSDaniel P. Berrangépreserve_env PYTHON
8587e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
8588e811da7fSDaniel P. Berrangépreserve_env SMBD
8589e811da7fSDaniel P. Berrangépreserve_env STRIP
8590e811da7fSDaniel P. Berrangépreserve_env WINDRES
8591e811da7fSDaniel P. Berrangé
8592dc655404SMichael S. Tsirkinprintf "exec" >>config.status
8593a5665051SPaolo Bonzinifor i in "$0" "$@"; do
8594a5665051SPaolo Bonzini  test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
8595a5665051SPaolo Bonzinidone
8596cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
8597dc655404SMichael S. Tsirkinchmod +x config.status
8598dc655404SMichael S. Tsirkin
85998cd05ab6SPeter Maydellrm -r "$TMPDIR1"
8600