xref: /openbmc/qemu/configure (revision e014dbe7)
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
148cd05ab6SPeter Maydell# Temporary directory used for files created while
158cd05ab6SPeter Maydell# configure runs. Since it is in the build directory
168cd05ab6SPeter Maydell# we can safely blow away any previous version of it
178cd05ab6SPeter Maydell# (and we need not jump through hoops to try to delete
188cd05ab6SPeter Maydell# it when configure exits.)
198cd05ab6SPeter MaydellTMPDIR1="config-temp"
208cd05ab6SPeter Maydellrm -rf "${TMPDIR1}"
218cd05ab6SPeter Maydellmkdir -p "${TMPDIR1}"
228cd05ab6SPeter Maydellif [ $? -ne 0 ]; then
238cd05ab6SPeter Maydell    echo "ERROR: failed to create temporary directory"
248cd05ab6SPeter Maydell    exit 1
257d13299dSbellardfi
267d13299dSbellard
278cd05ab6SPeter MaydellTMPB="qemu-conf"
288cd05ab6SPeter MaydellTMPC="${TMPDIR1}/${TMPB}.c"
2966518bf6SDon SlutzTMPO="${TMPDIR1}/${TMPB}.o"
309c83ffd8SPeter MaydellTMPCXX="${TMPDIR1}/${TMPB}.cxx"
318cd05ab6SPeter MaydellTMPE="${TMPDIR1}/${TMPB}.exe"
326969ec6cSJames ClarkeTMPMO="${TMPDIR1}/${TMPB}.mo"
337d13299dSbellard
34da1d85e3SGerd Hoffmannrm -f config.log
359ac81bbbSmalc
36b48e3611SPeter Maydell# Print a helpful header at the top of config.log
37b48e3611SPeter Maydellecho "# QEMU configure log $(date)" >> config.log
38979ae168SPeter Maydellprintf "# Configured with:" >> config.log
39979ae168SPeter Maydellprintf " '%s'" "$0" "$@" >> config.log
40979ae168SPeter Maydellecho >> config.log
41b48e3611SPeter Maydellecho "#" >> config.log
42b48e3611SPeter Maydell
43d880a3baSPaolo Bonziniprint_error() {
44d880a3baSPaolo Bonzini    (echo
4576ad07a4SPeter Maydell    echo "ERROR: $1"
4676ad07a4SPeter Maydell    while test -n "$2"; do
4776ad07a4SPeter Maydell        echo "       $2"
4876ad07a4SPeter Maydell        shift
4976ad07a4SPeter Maydell    done
50d880a3baSPaolo Bonzini    echo) >&2
51d880a3baSPaolo Bonzini}
52d880a3baSPaolo Bonzini
53d880a3baSPaolo Bonzinierror_exit() {
54d880a3baSPaolo Bonzini    print_error "$@"
5576ad07a4SPeter Maydell    exit 1
5676ad07a4SPeter Maydell}
5776ad07a4SPeter Maydell
589c83ffd8SPeter Maydelldo_compiler() {
599c83ffd8SPeter Maydell    # Run the compiler, capturing its output to the log. First argument
609c83ffd8SPeter Maydell    # is compiler binary to execute.
619c83ffd8SPeter Maydell    local compiler="$1"
629c83ffd8SPeter Maydell    shift
638bbe05d7SIan Jackson    if test -n "$BASH_VERSION"; then eval '
648bbe05d7SIan Jackson        echo >>config.log "
658bbe05d7SIan Jacksonfuncs: ${FUNCNAME[*]}
668bbe05d7SIan Jacksonlines: ${BASH_LINENO[*]}"
678bbe05d7SIan Jackson    '; fi
689c83ffd8SPeter Maydell    echo $compiler "$@" >> config.log
699c83ffd8SPeter Maydell    $compiler "$@" >> config.log 2>&1 || return $?
708dc38a78SPeter Maydell    # Test passed. If this is an --enable-werror build, rerun
718dc38a78SPeter Maydell    # the test with -Werror and bail out if it fails. This
728dc38a78SPeter Maydell    # makes warning-generating-errors in configure test code
738dc38a78SPeter Maydell    # obvious to developers.
748dc38a78SPeter Maydell    if test "$werror" != "yes"; then
758dc38a78SPeter Maydell        return 0
768dc38a78SPeter Maydell    fi
778dc38a78SPeter Maydell    # Don't bother rerunning the compile if we were already using -Werror
788dc38a78SPeter Maydell    case "$*" in
798dc38a78SPeter Maydell        *-Werror*)
808dc38a78SPeter Maydell           return 0
818dc38a78SPeter Maydell        ;;
828dc38a78SPeter Maydell    esac
839c83ffd8SPeter Maydell    echo $compiler -Werror "$@" >> config.log
849c83ffd8SPeter Maydell    $compiler -Werror "$@" >> config.log 2>&1 && return $?
8576ad07a4SPeter Maydell    error_exit "configure test passed without -Werror but failed with -Werror." \
8676ad07a4SPeter Maydell        "This is probably a bug in the configure script. The failing command" \
8776ad07a4SPeter Maydell        "will be at the bottom of config.log." \
8876ad07a4SPeter Maydell        "You can run configure with --disable-werror to bypass this check."
898dc38a78SPeter Maydell}
908dc38a78SPeter Maydell
919c83ffd8SPeter Maydelldo_cc() {
929c83ffd8SPeter Maydell    do_compiler "$cc" "$@"
939c83ffd8SPeter Maydell}
949c83ffd8SPeter Maydell
959c83ffd8SPeter Maydelldo_cxx() {
969c83ffd8SPeter Maydell    do_compiler "$cxx" "$@"
979c83ffd8SPeter Maydell}
989c83ffd8SPeter Maydell
999c83ffd8SPeter Maydellupdate_cxxflags() {
1009c83ffd8SPeter Maydell    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
1019c83ffd8SPeter Maydell    # options which some versions of GCC's C++ compiler complain about
1029c83ffd8SPeter Maydell    # because they only make sense for C programs.
10311cde1c8SBruno Dominguez    QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
10411cde1c8SBruno Dominguez
1059c83ffd8SPeter Maydell    for arg in $QEMU_CFLAGS; do
1069c83ffd8SPeter Maydell        case $arg in
1079c83ffd8SPeter Maydell            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
1089c83ffd8SPeter Maydell            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
1099c83ffd8SPeter Maydell                ;;
1107be41675SThomas Huth            -std=gnu99)
1117be41675SThomas Huth                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
1127be41675SThomas Huth                ;;
1139c83ffd8SPeter Maydell            *)
1149c83ffd8SPeter Maydell                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
1159c83ffd8SPeter Maydell                ;;
1169c83ffd8SPeter Maydell        esac
1179c83ffd8SPeter Maydell    done
1189c83ffd8SPeter Maydell}
1199c83ffd8SPeter Maydell
12052166aa0SJuan Quintelacompile_object() {
121fd0e6053SJohn Snow  local_cflags="$1"
122fd0e6053SJohn Snow  do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
12352166aa0SJuan Quintela}
12452166aa0SJuan Quintela
12552166aa0SJuan Quintelacompile_prog() {
12652166aa0SJuan Quintela  local_cflags="$1"
12752166aa0SJuan Quintela  local_ldflags="$2"
1288dc38a78SPeter Maydell  do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
12952166aa0SJuan Quintela}
13052166aa0SJuan Quintela
13111568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
13211568d6dSPaolo Bonzinisymlink() {
13372b8b5a1SStefan Weil  rm -rf "$2"
134ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
13572b8b5a1SStefan Weil  ln -s "$1" "$2"
13611568d6dSPaolo Bonzini}
13711568d6dSPaolo Bonzini
1380dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
1390dba6195SLoïc Minier# executable or a builtin)
1400dba6195SLoïc Minierhas() {
1410dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
1420dba6195SLoïc Minier}
1430dba6195SLoïc Minier
1440dba6195SLoïc Minier# search for an executable in PATH
1450dba6195SLoïc Minierpath_of() {
1460dba6195SLoïc Minier    local_command="$1"
1470dba6195SLoïc Minier    local_ifs="$IFS"
1480dba6195SLoïc Minier    local_dir=""
1490dba6195SLoïc Minier
1500dba6195SLoïc Minier    # pathname has a dir component?
1510dba6195SLoïc Minier    if [ "${local_command#*/}" != "$local_command" ]; then
1520dba6195SLoïc Minier        if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
1530dba6195SLoïc Minier            echo "$local_command"
1540dba6195SLoïc Minier            return 0
1550dba6195SLoïc Minier        fi
1560dba6195SLoïc Minier    fi
1570dba6195SLoïc Minier    if [ -z "$local_command" ]; then
1580dba6195SLoïc Minier        return 1
1590dba6195SLoïc Minier    fi
1600dba6195SLoïc Minier
1610dba6195SLoïc Minier    IFS=:
1620dba6195SLoïc Minier    for local_dir in $PATH; do
1630dba6195SLoïc Minier        if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
1640dba6195SLoïc Minier            echo "$local_dir/$local_command"
1650dba6195SLoïc Minier            IFS="${local_ifs:-$(printf ' \t\n')}"
1660dba6195SLoïc Minier            return 0
1670dba6195SLoïc Minier        fi
1680dba6195SLoïc Minier    done
1690dba6195SLoïc Minier    # not found
1700dba6195SLoïc Minier    IFS="${local_ifs:-$(printf ' \t\n')}"
1710dba6195SLoïc Minier    return 1
1720dba6195SLoïc Minier}
1730dba6195SLoïc Minier
1745b808275SLluís Vilanovahave_backend () {
1755b808275SLluís Vilanova    echo "$trace_backends" | grep "$1" >/dev/null
1765b808275SLluís Vilanova}
1775b808275SLluís Vilanova
1783b6b7550SPaolo Bonziniglob() {
1793b6b7550SPaolo Bonzini    eval test -z '"${1#'"$2"'}"'
1803b6b7550SPaolo Bonzini}
1813b6b7550SPaolo Bonzini
1823b6b7550SPaolo Bonzinisupported_hax_target() {
1833b6b7550SPaolo Bonzini    test "$hax" = "yes" || return 1
1843b6b7550SPaolo Bonzini    glob "$1" "*-softmmu" || return 1
1853b6b7550SPaolo Bonzini    case "${1%-softmmu}" in
1863b6b7550SPaolo Bonzini        i386|x86_64)
1873b6b7550SPaolo Bonzini            return 0
1883b6b7550SPaolo Bonzini        ;;
1893b6b7550SPaolo Bonzini    esac
1903b6b7550SPaolo Bonzini    return 1
1913b6b7550SPaolo Bonzini}
1923b6b7550SPaolo Bonzini
1933b6b7550SPaolo Bonzinisupported_kvm_target() {
1943b6b7550SPaolo Bonzini    test "$kvm" = "yes" || return 1
1953b6b7550SPaolo Bonzini    glob "$1" "*-softmmu" || return 1
1963b6b7550SPaolo Bonzini    case "${1%-softmmu}:$cpu" in
1973b6b7550SPaolo Bonzini        arm:arm | aarch64:aarch64 | \
1983b6b7550SPaolo Bonzini        i386:i386 | i386:x86_64 | i386:x32 | \
1993b6b7550SPaolo Bonzini        x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
2003b6b7550SPaolo Bonzini        mips:mips | mipsel:mips | \
201a69dc537SThomas Huth        ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | \
2023b6b7550SPaolo Bonzini        s390x:s390x)
2033b6b7550SPaolo Bonzini            return 0
2043b6b7550SPaolo Bonzini        ;;
2053b6b7550SPaolo Bonzini    esac
2063b6b7550SPaolo Bonzini    return 1
2073b6b7550SPaolo Bonzini}
2083b6b7550SPaolo Bonzini
2093b6b7550SPaolo Bonzinisupported_xen_target() {
2103b6b7550SPaolo Bonzini    test "$xen" = "yes" || return 1
2113b6b7550SPaolo Bonzini    glob "$1" "*-softmmu" || return 1
212b5ed2e11SPaolo Bonzini    # Only i386 and x86_64 provide the xenpv machine.
213b5ed2e11SPaolo Bonzini    case "${1%-softmmu}" in
214b5ed2e11SPaolo Bonzini        i386|x86_64)
2153b6b7550SPaolo Bonzini            return 0
2163b6b7550SPaolo Bonzini        ;;
2173b6b7550SPaolo Bonzini    esac
2183b6b7550SPaolo Bonzini    return 1
2193b6b7550SPaolo Bonzini}
2203b6b7550SPaolo Bonzini
221c97d6d2cSSergio Andres Gomez Del Realsupported_hvf_target() {
222c97d6d2cSSergio Andres Gomez Del Real    test "$hvf" = "yes" || return 1
223c97d6d2cSSergio Andres Gomez Del Real    glob "$1" "*-softmmu" || return 1
224c97d6d2cSSergio Andres Gomez Del Real    case "${1%-softmmu}" in
225c97d6d2cSSergio Andres Gomez Del Real        x86_64)
226c97d6d2cSSergio Andres Gomez Del Real            return 0
227c97d6d2cSSergio Andres Gomez Del Real        ;;
228c97d6d2cSSergio Andres Gomez Del Real    esac
229c97d6d2cSSergio Andres Gomez Del Real    return 1
230c97d6d2cSSergio Andres Gomez Del Real}
231c97d6d2cSSergio Andres Gomez Del Real
232d661d9a4SJustin Terry (VM)supported_whpx_target() {
233d661d9a4SJustin Terry (VM)    test "$whpx" = "yes" || return 1
234d661d9a4SJustin Terry (VM)    glob "$1" "*-softmmu" || return 1
235d661d9a4SJustin Terry (VM)    case "${1%-softmmu}" in
236d661d9a4SJustin Terry (VM)        i386|x86_64)
237d661d9a4SJustin Terry (VM)            return 0
238d661d9a4SJustin Terry (VM)        ;;
239d661d9a4SJustin Terry (VM)    esac
240d661d9a4SJustin Terry (VM)    return 1
241d661d9a4SJustin Terry (VM)}
242d661d9a4SJustin Terry (VM)
243d880a3baSPaolo Bonzinisupported_target() {
244d880a3baSPaolo Bonzini    case "$1" in
245d880a3baSPaolo Bonzini        *-softmmu)
246d880a3baSPaolo Bonzini            ;;
247d880a3baSPaolo Bonzini        *-linux-user)
248d880a3baSPaolo Bonzini            if test "$linux" != "yes"; then
249d880a3baSPaolo Bonzini                print_error "Target '$target' is only available on a Linux host"
250d880a3baSPaolo Bonzini                return 1
251d880a3baSPaolo Bonzini            fi
252d880a3baSPaolo Bonzini            ;;
253d880a3baSPaolo Bonzini        *-bsd-user)
254d880a3baSPaolo Bonzini            if test "$bsd" != "yes"; then
255d880a3baSPaolo Bonzini                print_error "Target '$target' is only available on a BSD host"
256d880a3baSPaolo Bonzini                return 1
257d880a3baSPaolo Bonzini            fi
258d880a3baSPaolo Bonzini            ;;
259d880a3baSPaolo Bonzini        *)
260d880a3baSPaolo Bonzini            print_error "Invalid target name '$target'"
261d880a3baSPaolo Bonzini            return 1
262d880a3baSPaolo Bonzini            ;;
263d880a3baSPaolo Bonzini    esac
264b3f6ea7eSPaolo Bonzini    test "$tcg" = "yes" && return 0
265b3f6ea7eSPaolo Bonzini    supported_kvm_target "$1" && return 0
266b3f6ea7eSPaolo Bonzini    supported_xen_target "$1" && return 0
267b3f6ea7eSPaolo Bonzini    supported_hax_target "$1" && return 0
268c97d6d2cSSergio Andres Gomez Del Real    supported_hvf_target "$1" && return 0
269d661d9a4SJustin Terry (VM)    supported_whpx_target "$1" && return 0
270b3f6ea7eSPaolo Bonzini    print_error "TCG disabled, but hardware accelerator not available for '$target'"
271b3f6ea7eSPaolo Bonzini    return 1
272d880a3baSPaolo Bonzini}
273d880a3baSPaolo Bonzini
274e9a3591fSChristian Borntraeger
275e9a3591fSChristian Borntraegerld_has() {
276e9a3591fSChristian Borntraeger    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
277e9a3591fSChristian Borntraeger}
278e9a3591fSChristian Borntraeger
2797d13299dSbellard# default parameters
28089138857SStefan Weilsource_path=$(dirname "$0")
2812ff6b91eSJuan Quintelacpu=""
282a31a8642SMichael S. Tsirkiniasl="iasl"
2831e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M"
28443ce4dfeSbellardstatic="no"
2857d13299dSbellardcross_prefix=""
2860c58ac1cSmalcaudio_drv_list=""
287b64ec4e4SFam Zhengblock_drv_rw_whitelist=""
288b64ec4e4SFam Zhengblock_drv_ro_whitelist=""
289e49d021eSPeter Maydellhost_cc="cc"
29073da375eSJuan Quintelalibs_softmmu=""
2913e2e0e6bSJuan Quintelalibs_tools=""
29267f86e8eSJuan Quintelaaudio_pt_int=""
293d5631638Smalcaudio_win_int=""
294957f1f99SMichael Rothlibs_qga=""
2955bc62e01SGerd Hoffmanndebug_info="yes"
29663678e17SSteven Noonanstack_protector=""
297ac0df51dSaliguori
29892712822SDaniel P. Berrangeif test -e "$source_path/.git"
29992712822SDaniel P. Berrangethen
300f62bbee5SDaniel P. Berrange    git_update=yes
30192712822SDaniel P. Berrange    git_submodules="ui/keycodemapdb"
3023ac1f813SEmilio G. Cota    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
3033ac1f813SEmilio G. Cota    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
30492712822SDaniel P. Berrangeelse
305f62bbee5SDaniel P. Berrange    git_update=no
306aef45d51SDaniel P. Berrange    git_submodules=""
3075c0ef67aSDaniel P. Berrangé
3085c0ef67aSDaniel P. Berrangé    if ! test -f "$source_path/ui/keycodemapdb/README"
3095c0ef67aSDaniel P. Berrangé    then
3105c0ef67aSDaniel P. Berrangé        echo
3115c0ef67aSDaniel P. Berrangé        echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
3125c0ef67aSDaniel P. Berrangé        echo
3135c0ef67aSDaniel P. Berrangé        echo "This is not a GIT checkout but module content appears to"
3145c0ef67aSDaniel P. Berrangé        echo "be missing. Do not use 'git archive' or GitHub download links"
3155c0ef67aSDaniel P. Berrangé        echo "to acquire QEMU source archives. Non-GIT builds are only"
3165c0ef67aSDaniel P. Berrangé        echo "supported with source archives linked from:"
3175c0ef67aSDaniel P. Berrangé        echo
3185c0ef67aSDaniel P. Berrangé        echo "  https://www.qemu.org/download/"
3195c0ef67aSDaniel P. Berrangé        echo
3205c0ef67aSDaniel P. Berrangé        echo "Developers working with GIT can use scripts/archive-source.sh"
3215c0ef67aSDaniel P. Berrangé        echo "if they need to create valid source archives."
3225c0ef67aSDaniel P. Berrangé        echo
3235c0ef67aSDaniel P. Berrangé        exit 1
3245c0ef67aSDaniel P. Berrangé    fi
32592712822SDaniel P. Berrangefi
326cc84d63aSDaniel P. Berrangegit="git"
327ac0df51dSaliguori
328afb63ebdSStefan Weil# Don't accept a target_list environment variable.
329afb63ebdSStefan Weilunset target_list
330377529c0SPaolo Bonzini
331377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
332377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
333377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
334377529c0SPaolo Bonzini#              unless --disable-foo is given
335377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
336377529c0SPaolo Bonzini#              feature will searched for,
337377529c0SPaolo Bonzini#              if not found, configure exits with error
338377529c0SPaolo Bonzini#
339377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
340377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
341377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
342377529c0SPaolo Bonzini
343377529c0SPaolo Bonzinibluez=""
344377529c0SPaolo Bonzinibrlapi=""
345377529c0SPaolo Bonzinicurl=""
346377529c0SPaolo Bonzinicurses=""
347377529c0SPaolo Bonzinidocs=""
348377529c0SPaolo Bonzinifdt=""
34958952137SVincenzo Maffionenetmap="no"
350377529c0SPaolo Bonzinisdl=""
351a442fe2fSDaniel P. Berrangésdl_image=""
352983eef5aSMeador Ingevirtfs=""
353fe8fc5aeSPaolo Bonzinimpath=""
354821601eaSJes Sorensenvnc="yes"
355377529c0SPaolo Bonzinisparse="no"
356377529c0SPaolo Bonzinivde=""
357377529c0SPaolo Bonzinivnc_sasl=""
358377529c0SPaolo Bonzinivnc_jpeg=""
359377529c0SPaolo Bonzinivnc_png=""
3606a021536SGerd Hoffmannxkbcommon=""
361377529c0SPaolo Bonzinixen=""
362d5b93ddfSAnthony PERARDxen_ctrl_version=""
363eb6fda0fSAnthony PERARDxen_pci_passthrough=""
364377529c0SPaolo Bonzinilinux_aio=""
36547e98658SCorey Bryantcap_ng=""
366377529c0SPaolo Bonziniattr=""
3674f26f2b6SAvi Kivitylibattr=""
368377529c0SPaolo Bonzinixfs=""
369b3f6ea7eSPaolo Bonzinitcg="yes"
370a40161cbSPaolo Bonzinimembarrier=""
371299e6f19SPaolo Bonzinivhost_net=""
372299e6f19SPaolo Bonzinivhost_crypto=""
373299e6f19SPaolo Bonzinivhost_scsi=""
374299e6f19SPaolo Bonzinivhost_vsock=""
375e6a74868SMarc-André Lureauvhost_user=""
376d41a75a2SBradkvm="no"
377b0cb0a66SVincent Palatinhax="no"
378c97d6d2cSSergio Andres Gomez Del Realhvf="no"
379d661d9a4SJustin Terry (VM)whpx="no"
3802da776dbSMichael R. Hinesrdma=""
38121ab34c9SMarcel Apfelbaumpvrdma=""
382377529c0SPaolo Bonzinigprof="no"
383377529c0SPaolo Bonzinidebug_tcg="no"
384377529c0SPaolo Bonzinidebug="no"
385247724cbSMarc-André Lureausanitizers="no"
386b553a042SJohn Snowfortify_source=""
387377529c0SPaolo Bonzinistrip_opt="yes"
3889195b2c2SStefan Weiltcg_interpreter="no"
389377529c0SPaolo Bonzinibigendian="no"
390377529c0SPaolo Bonzinimingw32="no"
3911d728c39SBlue Swirlgcov="no"
3921d728c39SBlue Swirlgcov_tool="gcov"
393377529c0SPaolo BonziniEXESUF=""
39417969268SFam ZhengDSOSUF=".so"
39517969268SFam ZhengLDFLAGS_SHARED="-shared"
39617969268SFam Zhengmodules="no"
397377529c0SPaolo Bonziniprefix="/usr/local"
398377529c0SPaolo Bonzinimandir="\${prefix}/share/man"
399528ae5b8SEduardo Habkostdatadir="\${prefix}/share"
4003d5eecabSGerd Hoffmannfirmwarepath="\${prefix}/share/qemu-firmware"
401850da188SEduardo Habkostqemu_docdir="\${prefix}/share/doc/qemu"
402377529c0SPaolo Bonzinibindir="\${prefix}/bin"
4033aa5d2beSAlon Levylibdir="\${prefix}/lib"
4048bf188aaSMichael Tokarevlibexecdir="\${prefix}/libexec"
4050f94d6daSAlon Levyincludedir="\${prefix}/include"
406377529c0SPaolo Bonzinisysconfdir="\${prefix}/etc"
407785c23aeSLuiz Capitulinolocal_statedir="\${prefix}/var"
408377529c0SPaolo Bonziniconfsuffix="/qemu"
409675b9b53SMarc-André Lureauslirp=""
410377529c0SPaolo Bonzinioss_lib=""
411377529c0SPaolo Bonzinibsd="no"
412377529c0SPaolo Bonzinilinux="no"
413377529c0SPaolo Bonzinisolaris="no"
414377529c0SPaolo Bonziniprofiler="no"
415377529c0SPaolo Bonzinicocoa="no"
416377529c0SPaolo Bonzinisoftmmu="yes"
417377529c0SPaolo Bonzinilinux_user="no"
418377529c0SPaolo Bonzinibsd_user="no"
419377529c0SPaolo Bonziniblobs="yes"
420377529c0SPaolo Bonzinipkgversion=""
42140d6444eSAvi Kivitypie=""
4223556c233SPaolo Bonziniqom_cast_debug="yes"
423baf86d6bSPaolo Bonzinitrace_backends="log"
424377529c0SPaolo Bonzinitrace_file="trace"
425377529c0SPaolo Bonzinispice=""
426377529c0SPaolo Bonzinirbd=""
4277b02f544SMarc-André Lureausmartcard=""
4282b2325ffSGerd Hoffmannlibusb=""
42969354a83SHans de Goedeusb_redir=""
430da076ffeSGerd Hoffmannopengl=""
431014cb152SGerd Hoffmannopengl_dmabuf="no"
4325dd89908SRichard Hendersoncpuid_h="no"
43386583a07SLiam Merwickavx2_opt=""
4341ece9905SAlon Levyzlib="yes"
4358ca80760SRichard Hendersoncapstone=""
436b25c9dffSStefan Weillzo=""
437b25c9dffSStefan Weilsnappy=""
4386b383c08SPeter Wubzip2=""
43983bc1f97SJulio Faraccolzfse=""
440e8ef31a3SMichael Tokarevguest_agent=""
441d9840e25STomoki Sekiyamaguest_agent_with_vss="no"
44250cbebb9SMichael Rothguest_agent_ntddscsi="no"
4439dacf32dSYossi Hindinguest_agent_msi=""
444d9840e25STomoki Sekiyamavss_win32_sdk=""
445d9840e25STomoki Sekiyamawin_sdk="no"
4464b1c11fdSDaniel P. Berrangewant_tools="yes"
447c589b249SRonnie Sahlberglibiscsi=""
4486542aa9cSPeter Lievenlibnfs=""
449519175a2SAlex Barcelocoroutine=""
45070c60c08SStefan Hajnoczicoroutine_pool=""
4517d992e4dSPeter Lievendebug_stack_usage="no"
452f0d92b56SLongpeng(Mike)crypto_afalg="no"
453f794573eSEduardo Otuboseccomp=""
454eb100396SBharata B Raoglusterfs=""
455d85fa9ebSJeff Codyglusterfs_xlator_opt="no"
4560c14fb47SBharata B Raoglusterfs_discard="no"
457df3a429aSNiels de Vosglusterfs_fallocate="no"
4587c815372SBharata B Raoglusterfs_zerofill="no"
459*e014dbe7SPrasanna Kumar Kaleverglusterfs_ftruncate_has_stat="no"
460a4ccabcfSAnthony Liguorigtk=""
461925a0400SGerd Hoffmanngtk_gl="no"
462a1c5e949SDaniel P. Berrangetls_priority="NORMAL"
463ddbb0d09SDaniel P. Berrangegnutls=""
46491bfcdb0SDaniel P. Berrangenettle=""
46591bfcdb0SDaniel P. Berrangegcrypt=""
4661f923c70SLongpeng(Mike)gcrypt_hmac="no"
4678953caf3SDaniel P. Berrangeauth_pam=""
468bbbf9bfbSStefan Weilvte=""
4699d9e1521SGerd Hoffmannvirglrenderer=""
4707aaa6a16SPaolo Bonzinitpm=""
4710a12ec87SRichard W.M. Joneslibssh2=""
472ed1701c6SDr. David Alan Gilbertlive_block_migration="yes"
473a99d57bbSWanlong Gaonuma=""
4742847b469SFam Zhengtcmalloc="no"
4757b01cb97SAlexandre Derumierjemalloc="no"
476a6b1d4c0SChanglong Xiereplication="yes"
477da92c3ffSAshish Mittalvxhs=""
4782f740136SJeff Codybochs="yes"
4792f740136SJeff Codycloop="yes"
4802f740136SJeff Codydmg="yes"
4812f740136SJeff Codyqcow1="yes"
4822f740136SJeff Codyvdi="yes"
4832f740136SJeff Codyvvfat="yes"
4842f740136SJeff Codyqed="yes"
4852f740136SJeff Codyparallels="yes"
4862f740136SJeff Codysheepdog="yes"
487ed279a06SKlim Kireevlibxml2=""
48851a12b51SAlex Bennéedocker="no"
489ba59fb77SPaolo Bonzinidebug_mutex="no"
49017824406SJunyan Helibpmem=""
491f3494749SPaolo Bonzinidefault_devices="yes"
492377529c0SPaolo Bonzini
493d75402b5SAlex Bennée# cross compilers defaults, can be overridden with --cross-cc-ARCH
494d75402b5SAlex Bennéecross_cc_aarch64="aarch64-linux-gnu-gcc"
495d422b2bcSAlex Bennéecross_cc_aarch64_be="$cross_cc_aarch64"
496d422b2bcSAlex Bennéecross_cc_cflags_aarch64_be="-mbig-endian"
497d75402b5SAlex Bennéecross_cc_arm="arm-linux-gnueabihf-gcc"
498d422b2bcSAlex Bennéecross_cc_cflags_armeb="-mbig-endian"
499716a507cSAlex Bennéecross_cc_i386="i386-pc-linux-gnu-gcc"
500716a507cSAlex Bennéecross_cc_cflags_i386=""
501d75402b5SAlex Bennéecross_cc_powerpc="powerpc-linux-gnu-gcc"
502d422b2bcSAlex Bennéecross_cc_powerpc="powerpc-linux-gnu-gcc"
503d75402b5SAlex Bennée
504d75402b5SAlex Bennéeenabled_cross_compilers=""
505d75402b5SAlex Bennée
506898be3e0SPeter Maydellsupported_cpu="no"
507898be3e0SPeter Maydellsupported_os="no"
508fb59dabdSPeter Maydellbogus_os="no"
5095a22ab71SYang Zhongmalloc_trim=""
510898be3e0SPeter Maydell
511ac0df51dSaliguori# parse CC options first
512ac0df51dSaliguorifor opt do
51389138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
514ac0df51dSaliguori  case "$opt" in
515ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
516ac0df51dSaliguori  ;;
5173d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
518ac0df51dSaliguori  ;;
51983f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
52083f73fceSTomoki Sekiyama  ;;
521ca4deeb1SPaolo Bonzini  --source-path=*) source_path="$optarg"
522ca4deeb1SPaolo Bonzini  ;;
5232ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
5242ff6b91eSJuan Quintela  ;;
525de385287SAlex Bennée  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
526e2a2ed06SJuan Quintela  ;;
52711cde1c8SBruno Dominguez  --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
52811cde1c8SBruno Dominguez  ;;
529a4969e90SAlex Bennée  --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
530f9943cd5SGerd Hoffmann                     EXTRA_LDFLAGS="$optarg"
531e2a2ed06SJuan Quintela  ;;
5325bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
5335bc62e01SGerd Hoffmann  ;;
5345bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
5355bc62e01SGerd Hoffmann  ;;
536d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
537d75402b5SAlex Bennée  ;;
538d422b2bcSAlex Bennée  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
539d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
540d422b2bcSAlex Bennée  ;;
541d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
542d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
543d75402b5SAlex Bennée  ;;
544ac0df51dSaliguori  esac
545ac0df51dSaliguoridone
546ac0df51dSaliguori# OS specific
547ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
54893148aa5SStefan Weil# we can eliminate its usage altogether.
549ac0df51dSaliguori
550e49d021eSPeter Maydell# Preferred compiler:
551e49d021eSPeter Maydell#  ${CC} (if set)
552e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
553e49d021eSPeter Maydell#  system compiler
554e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
555e49d021eSPeter Maydell  cc="$host_cc"
556e49d021eSPeter Maydellelse
557b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
558e49d021eSPeter Maydellfi
559e49d021eSPeter Maydell
56083f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
56183f73fceSTomoki Sekiyama  cxx="c++"
56283f73fceSTomoki Sekiyamaelse
56383f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
56483f73fceSTomoki Sekiyamafi
56583f73fceSTomoki Sekiyama
566b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
567cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
5685f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
5693dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
570b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
571b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
5729f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
5734852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
574b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
575b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
57617884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
57717884d7bSSergei Trofimovichquery_pkg_config() {
57817884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
57917884d7bSSergei Trofimovich}
58017884d7bSSergei Trofimovichpkg_config=query_pkg_config
58147c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
582ac0df51dSaliguori
58345d285abSPeter Maydell# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
58445d285abSPeter MaydellARFLAGS="${ARFLAGS-rv}"
58545d285abSPeter Maydell
586be17dc90SMichael S. Tsirkin# default flags for all hosts
5872d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
5882d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
5892d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
5902d31515bSPeter Maydell# provides these semantics.)
5917be41675SThomas HuthQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
592f9188227SMike FrysingerQEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
593c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
594be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
5959edc19c9SMichael S. TsirkinQEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
5965bc62e01SGerd Hoffmannif test "$debug_info" = "yes"; then
5975bc62e01SGerd Hoffmann    CFLAGS="-g $CFLAGS"
598be17dc90SMichael S. Tsirkin    LDFLAGS="-g $LDFLAGS"
5995bc62e01SGerd Hoffmannfi
600be17dc90SMichael S. Tsirkin
601ca4deeb1SPaolo Bonzini# make source path absolute
60289138857SStefan Weilsource_path=$(cd "$source_path"; pwd)
603ca4deeb1SPaolo Bonzini
604cab00a5aSMichael S. Tsirkin# running configure in the source tree?
605cab00a5aSMichael S. Tsirkin# we know that's the case if configure is there.
606cab00a5aSMichael S. Tsirkinif test -f "./configure"; then
607cab00a5aSMichael S. Tsirkin    pwd_is_source_path="y"
608cab00a5aSMichael S. Tsirkinelse
609cab00a5aSMichael S. Tsirkin    pwd_is_source_path="n"
610cab00a5aSMichael S. Tsirkinfi
611cab00a5aSMichael S. Tsirkin
612ac0df51dSaliguoricheck_define() {
613ac0df51dSaliguoricat > $TMPC <<EOF
614ac0df51dSaliguori#if !defined($1)
615fd786e1aSPeter Maydell#error $1 not defined
616ac0df51dSaliguori#endif
617ac0df51dSaliguoriint main(void) { return 0; }
618ac0df51dSaliguoriEOF
61952166aa0SJuan Quintela  compile_object
620ac0df51dSaliguori}
621ac0df51dSaliguori
622307119e7SGerd Hoffmanncheck_include() {
623307119e7SGerd Hoffmanncat > $TMPC <<EOF
624307119e7SGerd Hoffmann#include <$1>
625307119e7SGerd Hoffmannint main(void) { return 0; }
626307119e7SGerd HoffmannEOF
627307119e7SGerd Hoffmann  compile_object
628307119e7SGerd Hoffmann}
629307119e7SGerd Hoffmann
63093b25869SJohn Snowwrite_c_skeleton() {
63193b25869SJohn Snow    cat > $TMPC <<EOF
63293b25869SJohn Snowint main(void) { return 0; }
63393b25869SJohn SnowEOF
63493b25869SJohn Snow}
63593b25869SJohn Snow
636bbea4050SPeter Maydellif check_define __linux__ ; then
637bbea4050SPeter Maydell  targetos="Linux"
638bbea4050SPeter Maydellelif check_define _WIN32 ; then
639bbea4050SPeter Maydell  targetos='MINGW32'
640bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
641bbea4050SPeter Maydell  targetos='OpenBSD'
642bbea4050SPeter Maydellelif check_define __sun__ ; then
643bbea4050SPeter Maydell  targetos='SunOS'
644bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
645bbea4050SPeter Maydell  targetos='Haiku'
646951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
647951fedfcSPeter Maydell  targetos='FreeBSD'
648951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
649951fedfcSPeter Maydell  targetos='GNU/kFreeBSD'
650951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
651951fedfcSPeter Maydell  targetos='DragonFly'
652951fedfcSPeter Maydellelif check_define __NetBSD__; then
653951fedfcSPeter Maydell  targetos='NetBSD'
654951fedfcSPeter Maydellelif check_define __APPLE__; then
655951fedfcSPeter Maydell  targetos='Darwin'
656bbea4050SPeter Maydellelse
657951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
658951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
659951fedfcSPeter Maydell  # be the result of a missing compiler.
660951fedfcSPeter Maydell  targetos='bogus'
661951fedfcSPeter Maydell  bogus_os='yes'
662bbea4050SPeter Maydellfi
663bbea4050SPeter Maydell
664bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use.
665bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're
666bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify
667bbea4050SPeter Maydell# the correct CPU with the --cpu option.
668bbea4050SPeter Maydellcase $targetos in
669bbea4050SPeter MaydellDarwin)
670bbea4050SPeter Maydell  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
671bbea4050SPeter Maydell  # run 64-bit userspace code.
672bbea4050SPeter Maydell  # If the user didn't specify a CPU explicitly and the kernel says this is
673bbea4050SPeter Maydell  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
674bbea4050SPeter Maydell  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
675bbea4050SPeter Maydell    cpu="x86_64"
676bbea4050SPeter Maydell  fi
677bbea4050SPeter Maydell  ;;
678bbea4050SPeter MaydellSunOS)
67989138857SStefan Weil  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
680bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
681bbea4050SPeter Maydell    cpu="x86_64"
682bbea4050SPeter Maydell  fi
683bbea4050SPeter Maydellesac
684bbea4050SPeter Maydell
6852ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
6862ff6b91eSJuan Quintela  # command line argument
6872ff6b91eSJuan Quintela  :
6882ff6b91eSJuan Quintelaelif check_define __i386__ ; then
689ac0df51dSaliguori  cpu="i386"
690ac0df51dSaliguorielif check_define __x86_64__ ; then
691c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
692c72b26ecSRichard Henderson    cpu="x32"
693c72b26ecSRichard Henderson  else
694ac0df51dSaliguori    cpu="x86_64"
695c72b26ecSRichard Henderson  fi
6963aa9bd6cSblueswir1elif check_define __sparc__ ; then
6973aa9bd6cSblueswir1  if check_define __arch64__ ; then
6983aa9bd6cSblueswir1    cpu="sparc64"
6993aa9bd6cSblueswir1  else
7003aa9bd6cSblueswir1    cpu="sparc"
7013aa9bd6cSblueswir1  fi
702fdf7ed96Smalcelif check_define _ARCH_PPC ; then
703fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
704fdf7ed96Smalc    cpu="ppc64"
705ac0df51dSaliguori  else
706fdf7ed96Smalc    cpu="ppc"
707fdf7ed96Smalc  fi
708afa05235SAurelien Jarnoelif check_define __mips__ ; then
709afa05235SAurelien Jarno  cpu="mips"
710d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
711d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
712d66ed0eaSAurelien Jarno    cpu="s390x"
713d66ed0eaSAurelien Jarno  else
714d66ed0eaSAurelien Jarno    cpu="s390"
715d66ed0eaSAurelien Jarno  fi
716c4f80543SAlistair Franciselif check_define __riscv ; then
717c4f80543SAlistair Francis  if check_define _LP64 ; then
718c4f80543SAlistair Francis    cpu="riscv64"
719c4f80543SAlistair Francis  else
720c4f80543SAlistair Francis    cpu="riscv32"
721c4f80543SAlistair Francis  fi
72221d89f84SPeter Maydellelif check_define __arm__ ; then
72321d89f84SPeter Maydell  cpu="arm"
7241f080313SClaudio Fontanaelif check_define __aarch64__ ; then
7251f080313SClaudio Fontana  cpu="aarch64"
726fdf7ed96Smalcelse
72789138857SStefan Weil  cpu=$(uname -m)
728ac0df51dSaliguorifi
729ac0df51dSaliguori
730359bc95dSPeter MaydellARCH=
731359bc95dSPeter Maydell# Normalise host CPU name and set ARCH.
732359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
7337d13299dSbellardcase "$cpu" in
734c4f80543SAlistair Francis  ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
735898be3e0SPeter Maydell    cpu="$cpu"
736898be3e0SPeter Maydell    supported_cpu="yes"
737d75402b5SAlex Bennée    eval "cross_cc_${cpu}=\$host_cc"
738898be3e0SPeter Maydell  ;;
7397d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
74097a847bcSbellard    cpu="i386"
741898be3e0SPeter Maydell    supported_cpu="yes"
742d75402b5SAlex Bennée    cross_cc_i386=$host_cc
7437d13299dSbellard  ;;
744aaa5fa14Saurel32  x86_64|amd64)
745aaa5fa14Saurel32    cpu="x86_64"
746898be3e0SPeter Maydell    supported_cpu="yes"
747d75402b5SAlex Bennée    cross_cc_x86_64=$host_cc
748aaa5fa14Saurel32  ;;
74921d89f84SPeter Maydell  armv*b|armv*l|arm)
75021d89f84SPeter Maydell    cpu="arm"
751898be3e0SPeter Maydell    supported_cpu="yes"
752d75402b5SAlex Bennée    cross_cc_arm=$host_cc
7537d13299dSbellard  ;;
7541f080313SClaudio Fontana  aarch64)
7551f080313SClaudio Fontana    cpu="aarch64"
756898be3e0SPeter Maydell    supported_cpu="yes"
757d75402b5SAlex Bennée    cross_cc_aarch64=$host_cc
7581f080313SClaudio Fontana  ;;
759afa05235SAurelien Jarno  mips*)
760afa05235SAurelien Jarno    cpu="mips"
761898be3e0SPeter Maydell    supported_cpu="yes"
762d75402b5SAlex Bennée    cross_cc_mips=$host_cc
763afa05235SAurelien Jarno  ;;
7643142255cSblueswir1  sparc|sun4[cdmuv])
765ae228531Sbellard    cpu="sparc"
7666499fd15SPeter Maydell    supported_cpu="yes"
767d75402b5SAlex Bennée    cross_cc_sparc=$host_cc
768ae228531Sbellard  ;;
7697d13299dSbellard  *)
770359bc95dSPeter Maydell    # This will result in either an error or falling back to TCI later
771359bc95dSPeter Maydell    ARCH=unknown
7727d13299dSbellard  ;;
7737d13299dSbellardesac
774359bc95dSPeter Maydellif test -z "$ARCH"; then
775359bc95dSPeter Maydell  ARCH="$cpu"
776359bc95dSPeter Maydellfi
777e2d52ad3SJuan Quintela
7787d13299dSbellard# OS specific
7790dbfc675SJuan Quintela
780adfc3e91SStacey Son# host *BSD for user mode
781adfc3e91SStacey SonHOST_VARIANT_DIR=""
782adfc3e91SStacey Son
7837d13299dSbellardcase $targetos in
78467b915a5SbellardMINGW32*)
78567b915a5Sbellard  mingw32="yes"
786b0cb0a66SVincent Palatin  hax="yes"
787299e6f19SPaolo Bonzini  vhost_user="no"
7883cec7cc2SKővágó, Zoltán  audio_possible_drivers="dsound sdl"
789307119e7SGerd Hoffmann  if check_include dsound.h; then
7903cec7cc2SKővágó, Zoltán    audio_drv_list="dsound"
791307119e7SGerd Hoffmann  else
792307119e7SGerd Hoffmann    audio_drv_list=""
793307119e7SGerd Hoffmann  fi
794898be3e0SPeter Maydell  supported_os="yes"
79567b915a5Sbellard;;
7965c40d2bdSthsGNU/kFreeBSD)
797a167ba50SAurelien Jarno  bsd="yes"
7986a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7990bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
8005c40d2bdSths;;
8017d3505c5SbellardFreeBSD)
8027d3505c5Sbellard  bsd="yes"
8030db4a067SPaolo Bonzini  make="${MAKE-gmake}"
8046a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
8050bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
806f01576f1SJuergen Lock  # needed for kinfo_getvmmap(3) in libutil.h
807f01576f1SJuergen Lock  LIBS="-lutil $LIBS"
808a7764f15SEd Maste  # needed for kinfo_getproc
809a7764f15SEd Maste  libs_qga="-lutil $libs_qga"
81058952137SVincenzo Maffione  netmap=""  # enable netmap autodetect
811adfc3e91SStacey Son  HOST_VARIANT_DIR="freebsd"
812898be3e0SPeter Maydell  supported_os="yes"
8137d3505c5Sbellard;;
814c5e97233Sblueswir1DragonFly)
815c5e97233Sblueswir1  bsd="yes"
8160db4a067SPaolo Bonzini  make="${MAKE-gmake}"
8176a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
8180bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
819adfc3e91SStacey Son  HOST_VARIANT_DIR="dragonfly"
820c5e97233Sblueswir1;;
8217d3505c5SbellardNetBSD)
8227d3505c5Sbellard  bsd="yes"
823604a5b99SKamil Rytarowski  hax="yes"
8240db4a067SPaolo Bonzini  make="${MAKE-gmake}"
8256a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
8260bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl"
8278ef92a88Sblueswir1  oss_lib="-lossaudio"
828adfc3e91SStacey Son  HOST_VARIANT_DIR="netbsd"
8293c2bdbc1SKamil Rytarowski  supported_os="yes"
8307d3505c5Sbellard;;
8317d3505c5SbellardOpenBSD)
8327d3505c5Sbellard  bsd="yes"
8330db4a067SPaolo Bonzini  make="${MAKE-gmake}"
834f92c7168SGerd Hoffmann  audio_drv_list="try-sdl"
8350bac1111SKővágó, Zoltán  audio_possible_drivers="sdl"
836adfc3e91SStacey Son  HOST_VARIANT_DIR="openbsd"
8370a773d55SBrad Smith  supported_os="yes"
8387d3505c5Sbellard;;
83983fb7adfSbellardDarwin)
84083fb7adfSbellard  bsd="yes"
84183fb7adfSbellard  darwin="yes"
842b0cb0a66SVincent Palatin  hax="yes"
843c97d6d2cSSergio Andres Gomez Del Real  hvf="yes"
84417969268SFam Zheng  LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
8451b0f9cc2Saliguori  if [ "$cpu" = "x86_64" ] ; then
846a558ee17SJuan Quintela    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
8470c439cbfSJuan Quintela    LDFLAGS="-arch x86_64 $LDFLAGS"
8481b0f9cc2Saliguori  fi
849fd677642Sths  cocoa="yes"
8506a485418SGerd Hoffmann  audio_drv_list="coreaudio try-sdl"
85114382605SKővágó, Zoltán  audio_possible_drivers="coreaudio sdl"
8520c439cbfSJuan Quintela  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
8537973f21cSJuan Quintela  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
854a0b7cf6bSPeter Maydell  # Disable attempts to use ObjectiveC features in os/object.h since they
855a0b7cf6bSPeter Maydell  # won't work when we're compiling with gcc as a C compiler.
856a0b7cf6bSPeter Maydell  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
857adfc3e91SStacey Son  HOST_VARIANT_DIR="darwin"
858898be3e0SPeter Maydell  supported_os="yes"
85983fb7adfSbellard;;
860ec530c81SbellardSunOS)
861ec530c81Sbellard  solaris="yes"
8620db4a067SPaolo Bonzini  make="${MAKE-gmake}"
8630db4a067SPaolo Bonzini  install="${INSTALL-ginstall}"
864e2d8830eSBrad  smbd="${SMBD-/usr/sfw/sbin/smbd}"
8656b4d2ba1Sths  if test -f /usr/include/sys/soundcard.h ; then
8666a485418SGerd Hoffmann    audio_drv_list="oss try-sdl"
8676b4d2ba1Sths  fi
868c2de5c91Smalc  audio_possible_drivers="oss sdl"
869d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h
870d741429aSBlue Swirl  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
871d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h
872d741429aSBlue Swirl  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
873a558ee17SJuan Quintela  QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
874560d375fSAndreas Färber  solarisnetlibs="-lsocket -lnsl -lresolv"
875560d375fSAndreas Färber  LIBS="$solarisnetlibs $LIBS"
876560d375fSAndreas Färber  libs_qga="$solarisnetlibs $libs_qga"
877ec530c81Sbellard;;
878179cf400SAndreas FärberHaiku)
879179cf400SAndreas Färber  haiku="yes"
880179cf400SAndreas Färber  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
881179cf400SAndreas Färber  LIBS="-lposix_error_mapper -lnetwork $LIBS"
882179cf400SAndreas Färber;;
883898be3e0SPeter MaydellLinux)
8847183834aSGerd Hoffmann  audio_drv_list="try-pa oss"
8850bac1111SKővágó, Zoltán  audio_possible_drivers="oss alsa sdl pa"
8865327cf48Sbellard  linux="yes"
887831b7825Sths  linux_user="yes"
888af2be207SJan Kiszka  kvm="yes"
889e8d81a61SMao Zhongyi  QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
890898be3e0SPeter Maydell  supported_os="yes"
8913efac6ebSTomáš Golembiovský  libudev="yes"
892898be3e0SPeter Maydell;;
8937d13299dSbellardesac
8947d13299dSbellard
8957d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
896b1a550a0Spbrook  if [ "$darwin" != "yes" ] ; then
89784778508Sblueswir1    bsd_user="yes"
8987d3505c5Sbellard  fi
89908de3949SAndreas Färberfi
9007d3505c5Sbellard
9010db4a067SPaolo Bonzini: ${make=${MAKE-make}}
9020db4a067SPaolo Bonzini: ${install=${INSTALL-install}}
90352510f8bSStefan Weil: ${python=${PYTHON-python}}
904e2d8830eSBrad: ${smbd=${SMBD-/usr/sbin/smbd}}
9050db4a067SPaolo Bonzini
9063c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
9073c4a4d0dSPeter Maydellif has clang; then
9083c4a4d0dSPeter Maydell  objcc=clang
9093c4a4d0dSPeter Maydellelse
9103c4a4d0dSPeter Maydell  objcc="$cc"
9113c4a4d0dSPeter Maydellfi
9123c4a4d0dSPeter Maydell
9133457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
9143457a3f8SJuan Quintela  EXESUF=".exe"
91517969268SFam Zheng  DSOSUF=".dll"
91678e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
91778e9d4adSStefan Weil  QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
918f7cf5d5bSStefan Weil  LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
91993b25869SJohn Snow  write_c_skeleton;
920f7cf5d5bSStefan Weil  if compile_prog "" "-liberty" ; then
921f7cf5d5bSStefan Weil    LIBS="-liberty $LIBS"
922f7cf5d5bSStefan Weil  fi
923c5ec15eaSStefan Weil  prefix="c:/Program Files/QEMU"
924683035deSPaolo Bonzini  mandir="\${prefix}"
925528ae5b8SEduardo Habkost  datadir="\${prefix}"
926850da188SEduardo Habkost  qemu_docdir="\${prefix}"
927683035deSPaolo Bonzini  bindir="\${prefix}"
928683035deSPaolo Bonzini  sysconfdir="\${prefix}"
9295a699bbbSLaszlo Ersek  local_statedir=
930683035deSPaolo Bonzini  confsuffix=""
931105fad6bSBishara AbuHattoum  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
9323457a3f8SJuan Quintelafi
9333457a3f8SJuan Quintela
934487fefdbSAnthony Liguoriwerror=""
93585aa5189Sbellard
9367d13299dSbellardfor opt do
93789138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
9387d13299dSbellard  case "$opt" in
9392efc3265Sbellard  --help|-h) show_help=yes
9402efc3265Sbellard  ;;
94199123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
94299123e13SMike Frysinger  ;;
943b1a550a0Spbrook  --prefix=*) prefix="$optarg"
9447d13299dSbellard  ;;
945b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
94632ce6337Sbellard  ;;
947ca4deeb1SPaolo Bonzini  --source-path=*)
9487d13299dSbellard  ;;
949ac0df51dSaliguori  --cross-prefix=*)
9507d13299dSbellard  ;;
951ac0df51dSaliguori  --cc=*)
9527d13299dSbellard  ;;
953b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
95483469015Sbellard  ;;
95583f73fceSTomoki Sekiyama  --cxx=*)
95683f73fceSTomoki Sekiyama  ;;
957e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
958e007dbecSMichael S. Tsirkin  ;;
9593c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
9603c4a4d0dSPeter Maydell  ;;
961b1a550a0Spbrook  --make=*) make="$optarg"
9627d13299dSbellard  ;;
9636a882643Spbrook  --install=*) install="$optarg"
9646a882643Spbrook  ;;
965c886edfbSBlue Swirl  --python=*) python="$optarg"
966c886edfbSBlue Swirl  ;;
9671d728c39SBlue Swirl  --gcov=*) gcov_tool="$optarg"
9681d728c39SBlue Swirl  ;;
969e2d8830eSBrad  --smbd=*) smbd="$optarg"
970e2d8830eSBrad  ;;
971e2a2ed06SJuan Quintela  --extra-cflags=*)
9727d13299dSbellard  ;;
97311cde1c8SBruno Dominguez  --extra-cxxflags=*)
97411cde1c8SBruno Dominguez  ;;
975e2a2ed06SJuan Quintela  --extra-ldflags=*)
9767d13299dSbellard  ;;
9775bc62e01SGerd Hoffmann  --enable-debug-info)
9785bc62e01SGerd Hoffmann  ;;
9795bc62e01SGerd Hoffmann  --disable-debug-info)
9805bc62e01SGerd Hoffmann  ;;
981d75402b5SAlex Bennée  --cross-cc-*)
982d75402b5SAlex Bennée  ;;
98317969268SFam Zheng  --enable-modules)
98417969268SFam Zheng      modules="yes"
98517969268SFam Zheng  ;;
9863aa88b31SStefan Hajnoczi  --disable-modules)
9873aa88b31SStefan Hajnoczi      modules="no"
9883aa88b31SStefan Hajnoczi  ;;
9892ff6b91eSJuan Quintela  --cpu=*)
9907d13299dSbellard  ;;
991b1a550a0Spbrook  --target-list=*) target_list="$optarg"
992de83cd02Sbellard  ;;
9935b808275SLluís Vilanova  --enable-trace-backends=*) trace_backends="$optarg"
9945b808275SLluís Vilanova  ;;
9955b808275SLluís Vilanova  # XXX: backwards compatibility
9965b808275SLluís Vilanova  --enable-trace-backend=*) trace_backends="$optarg"
99794a420b1SStefan Hajnoczi  ;;
99874242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
9999410b56cSPrerna Saxena  ;;
1000f3494749SPaolo Bonzini  --with-default-devices) default_devices="yes"
1001f3494749SPaolo Bonzini  ;;
1002f3494749SPaolo Bonzini  --without-default-devices) default_devices="no"
1003f3494749SPaolo Bonzini  ;;
10047d13299dSbellard  --enable-gprof) gprof="yes"
10057d13299dSbellard  ;;
10061d728c39SBlue Swirl  --enable-gcov) gcov="yes"
10071d728c39SBlue Swirl  ;;
100879427693SLoïc Minier  --static)
100979427693SLoïc Minier    static="yes"
101079427693SLoïc Minier    LDFLAGS="-static $LDFLAGS"
101117884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
101243ce4dfeSbellard  ;;
10130b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
10140b24e75fSPaolo Bonzini  ;;
10150b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
10160b24e75fSPaolo Bonzini  ;;
10173aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
10183aa5d2beSAlon Levy  ;;
10198bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
10208bf188aaSMichael Tokarev  ;;
10210f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
10220f94d6daSAlon Levy  ;;
1023528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
10240b24e75fSPaolo Bonzini  ;;
1025023d3d67SEduardo Habkost  --with-confsuffix=*) confsuffix="$optarg"
1026023d3d67SEduardo Habkost  ;;
1027850da188SEduardo Habkost  --docdir=*) qemu_docdir="$optarg"
10280b24e75fSPaolo Bonzini  ;;
1029ca2fb938SAndre Przywara  --sysconfdir=*) sysconfdir="$optarg"
103007381cc1SAnthony Liguori  ;;
1031785c23aeSLuiz Capitulino  --localstatedir=*) local_statedir="$optarg"
1032785c23aeSLuiz Capitulino  ;;
10333d5eecabSGerd Hoffmann  --firmwarepath=*) firmwarepath="$optarg"
10343d5eecabSGerd Hoffmann  ;;
1035181ce1d0SOlaf Hering  --host=*|--build=*|\
1036181ce1d0SOlaf Hering  --disable-dependency-tracking|\
1037785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
1038023ddd74SMax Filippov  --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1039023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1040023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
1041023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
1042023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
1043023ddd74SMax Filippov    # lots of directory switches by default.
1044023ddd74SMax Filippov  ;;
104597a847bcSbellard  --disable-sdl) sdl="no"
104697a847bcSbellard  ;;
1047c4198157SJuan Quintela  --enable-sdl) sdl="yes"
1048c4198157SJuan Quintela  ;;
1049a442fe2fSDaniel P. Berrangé  --disable-sdl-image) sdl_image="no"
1050a442fe2fSDaniel P. Berrangé  ;;
1051a442fe2fSDaniel P. Berrangé  --enable-sdl-image) sdl_image="yes"
1052a442fe2fSDaniel P. Berrangé  ;;
10533556c233SPaolo Bonzini  --disable-qom-cast-debug) qom_cast_debug="no"
10543556c233SPaolo Bonzini  ;;
10553556c233SPaolo Bonzini  --enable-qom-cast-debug) qom_cast_debug="yes"
10563556c233SPaolo Bonzini  ;;
1057983eef5aSMeador Inge  --disable-virtfs) virtfs="no"
1058983eef5aSMeador Inge  ;;
1059983eef5aSMeador Inge  --enable-virtfs) virtfs="yes"
1060983eef5aSMeador Inge  ;;
1061fe8fc5aeSPaolo Bonzini  --disable-mpath) mpath="no"
1062fe8fc5aeSPaolo Bonzini  ;;
1063fe8fc5aeSPaolo Bonzini  --enable-mpath) mpath="yes"
1064fe8fc5aeSPaolo Bonzini  ;;
1065821601eaSJes Sorensen  --disable-vnc) vnc="no"
1066821601eaSJes Sorensen  ;;
1067821601eaSJes Sorensen  --enable-vnc) vnc="yes"
1068821601eaSJes Sorensen  ;;
10692f6a1ab0Sblueswir1  --oss-lib=*) oss_lib="$optarg"
10702f6a1ab0Sblueswir1  ;;
10710c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
10720c58ac1cSmalc  ;;
107389138857SStefan Weil  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1074b64ec4e4SFam Zheng  ;;
107589138857SStefan Weil  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1076eb852011SMarkus Armbruster  ;;
1077f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
1078f8393946Saurel32  ;;
1079f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
1080f8393946Saurel32  ;;
1081f3d08ee6SPaul Brook  --enable-debug)
1082f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
1083f3d08ee6SPaul Brook      debug_tcg="yes"
10841fcc6d42SPeter Xu      debug_mutex="yes"
1085f3d08ee6SPaul Brook      debug="yes"
1086f3d08ee6SPaul Brook      strip_opt="no"
1087b553a042SJohn Snow      fortify_source="no"
1088f3d08ee6SPaul Brook  ;;
1089247724cbSMarc-André Lureau  --enable-sanitizers) sanitizers="yes"
1090247724cbSMarc-André Lureau  ;;
1091247724cbSMarc-André Lureau  --disable-sanitizers) sanitizers="no"
1092247724cbSMarc-André Lureau  ;;
109303b4fe7dSaliguori  --enable-sparse) sparse="yes"
109403b4fe7dSaliguori  ;;
109503b4fe7dSaliguori  --disable-sparse) sparse="no"
109603b4fe7dSaliguori  ;;
10971625af87Saliguori  --disable-strip) strip_opt="no"
10981625af87Saliguori  ;;
10992f9606b3Saliguori  --disable-vnc-sasl) vnc_sasl="no"
11002f9606b3Saliguori  ;;
1101ea784e3bSJuan Quintela  --enable-vnc-sasl) vnc_sasl="yes"
1102ea784e3bSJuan Quintela  ;;
11032f6f5c7aSCorentin Chary  --disable-vnc-jpeg) vnc_jpeg="no"
11042f6f5c7aSCorentin Chary  ;;
11052f6f5c7aSCorentin Chary  --enable-vnc-jpeg) vnc_jpeg="yes"
11062f6f5c7aSCorentin Chary  ;;
1107efe556adSCorentin Chary  --disable-vnc-png) vnc_png="no"
1108efe556adSCorentin Chary  ;;
1109efe556adSCorentin Chary  --enable-vnc-png) vnc_png="yes"
1110efe556adSCorentin Chary  ;;
1111443f1376Sbellard  --disable-slirp) slirp="no"
1112c20709aaSbellard  ;;
1113675b9b53SMarc-André Lureau  --enable-slirp=git) slirp="git"
1114675b9b53SMarc-André Lureau  ;;
1115675b9b53SMarc-André Lureau  --enable-slirp=system) slirp="system"
1116675b9b53SMarc-André Lureau  ;;
1117e0e6c8c0Saliguori  --disable-vde) vde="no"
11188a16d273Sths  ;;
1119dfb278bdSJuan Quintela  --enable-vde) vde="yes"
1120dfb278bdSJuan Quintela  ;;
112158952137SVincenzo Maffione  --disable-netmap) netmap="no"
112258952137SVincenzo Maffione  ;;
112358952137SVincenzo Maffione  --enable-netmap) netmap="yes"
112458952137SVincenzo Maffione  ;;
1125e37630caSaliguori  --disable-xen) xen="no"
1126e37630caSaliguori  ;;
1127fc321b4bSJuan Quintela  --enable-xen) xen="yes"
1128fc321b4bSJuan Quintela  ;;
1129eb6fda0fSAnthony PERARD  --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1130eb6fda0fSAnthony PERARD  ;;
1131eb6fda0fSAnthony PERARD  --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1132eb6fda0fSAnthony PERARD  ;;
11332e4d9fb1Saurel32  --disable-brlapi) brlapi="no"
11342e4d9fb1Saurel32  ;;
11354ffcedb6SJuan Quintela  --enable-brlapi) brlapi="yes"
11364ffcedb6SJuan Quintela  ;;
1137fb599c9aSbalrog  --disable-bluez) bluez="no"
1138fb599c9aSbalrog  ;;
1139a20a6f46SJuan Quintela  --enable-bluez) bluez="yes"
1140a20a6f46SJuan Quintela  ;;
11417ba1e619Saliguori  --disable-kvm) kvm="no"
11427ba1e619Saliguori  ;;
1143b31a0277SJuan Quintela  --enable-kvm) kvm="yes"
1144b31a0277SJuan Quintela  ;;
1145b0cb0a66SVincent Palatin  --disable-hax) hax="no"
1146180fb750Szhanghailiang  ;;
1147b0cb0a66SVincent Palatin  --enable-hax) hax="yes"
1148180fb750Szhanghailiang  ;;
1149c97d6d2cSSergio Andres Gomez Del Real  --disable-hvf) hvf="no"
1150c97d6d2cSSergio Andres Gomez Del Real  ;;
1151c97d6d2cSSergio Andres Gomez Del Real  --enable-hvf) hvf="yes"
1152c97d6d2cSSergio Andres Gomez Del Real  ;;
1153d661d9a4SJustin Terry (VM)  --disable-whpx) whpx="no"
1154d661d9a4SJustin Terry (VM)  ;;
1155d661d9a4SJustin Terry (VM)  --enable-whpx) whpx="yes"
1156d661d9a4SJustin Terry (VM)  ;;
11579195b2c2SStefan Weil  --disable-tcg-interpreter) tcg_interpreter="no"
11589195b2c2SStefan Weil  ;;
11599195b2c2SStefan Weil  --enable-tcg-interpreter) tcg_interpreter="yes"
11609195b2c2SStefan Weil  ;;
116147e98658SCorey Bryant  --disable-cap-ng)  cap_ng="no"
116247e98658SCorey Bryant  ;;
116347e98658SCorey Bryant  --enable-cap-ng) cap_ng="yes"
116447e98658SCorey Bryant  ;;
1165b3f6ea7eSPaolo Bonzini  --disable-tcg) tcg="no"
1166b3f6ea7eSPaolo Bonzini  ;;
1167b3f6ea7eSPaolo Bonzini  --enable-tcg) tcg="yes"
1168b3f6ea7eSPaolo Bonzini  ;;
11695a22ab71SYang Zhong  --disable-malloc-trim) malloc_trim="no"
11705a22ab71SYang Zhong  ;;
11715a22ab71SYang Zhong  --enable-malloc-trim) malloc_trim="yes"
11725a22ab71SYang Zhong  ;;
1173cd4ec0b4SGerd Hoffmann  --disable-spice) spice="no"
1174cd4ec0b4SGerd Hoffmann  ;;
1175cd4ec0b4SGerd Hoffmann  --enable-spice) spice="yes"
1176cd4ec0b4SGerd Hoffmann  ;;
1177c589b249SRonnie Sahlberg  --disable-libiscsi) libiscsi="no"
1178c589b249SRonnie Sahlberg  ;;
1179c589b249SRonnie Sahlberg  --enable-libiscsi) libiscsi="yes"
1180c589b249SRonnie Sahlberg  ;;
11816542aa9cSPeter Lieven  --disable-libnfs) libnfs="no"
11826542aa9cSPeter Lieven  ;;
11836542aa9cSPeter Lieven  --enable-libnfs) libnfs="yes"
11846542aa9cSPeter Lieven  ;;
118505c2a3e7Sbellard  --enable-profiler) profiler="yes"
118605c2a3e7Sbellard  ;;
118714821030SPavel Borzenkov  --disable-cocoa) cocoa="no"
118814821030SPavel Borzenkov  ;;
1189c2de5c91Smalc  --enable-cocoa)
1190c2de5c91Smalc      cocoa="yes" ;
119189138857SStefan Weil      audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
11925b0753e0Sbellard  ;;
1193cad25d69Spbrook  --disable-system) softmmu="no"
11940a8e90f4Spbrook  ;;
1195cad25d69Spbrook  --enable-system) softmmu="yes"
11960a8e90f4Spbrook  ;;
11970953a80fSZachary Amsden  --disable-user)
11980953a80fSZachary Amsden      linux_user="no" ;
11990953a80fSZachary Amsden      bsd_user="no" ;
12000953a80fSZachary Amsden  ;;
12010953a80fSZachary Amsden  --enable-user) ;;
1202831b7825Sths  --disable-linux-user) linux_user="no"
12030a8e90f4Spbrook  ;;
1204831b7825Sths  --enable-linux-user) linux_user="yes"
1205831b7825Sths  ;;
120684778508Sblueswir1  --disable-bsd-user) bsd_user="no"
120784778508Sblueswir1  ;;
120884778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
120984778508Sblueswir1  ;;
121040d6444eSAvi Kivity  --enable-pie) pie="yes"
121134005a00SKirill A. Shutemov  ;;
121240d6444eSAvi Kivity  --disable-pie) pie="no"
121334005a00SKirill A. Shutemov  ;;
121485aa5189Sbellard  --enable-werror) werror="yes"
121585aa5189Sbellard  ;;
121685aa5189Sbellard  --disable-werror) werror="no"
121785aa5189Sbellard  ;;
121863678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
121963678e17SSteven Noonan  ;;
122063678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
122163678e17SSteven Noonan  ;;
12224d3b6f6eSbalrog  --disable-curses) curses="no"
12234d3b6f6eSbalrog  ;;
1224c584a6d0SJuan Quintela  --enable-curses) curses="yes"
1225c584a6d0SJuan Quintela  ;;
1226769ce76dSAlexander Graf  --disable-curl) curl="no"
1227769ce76dSAlexander Graf  ;;
1228788c8196SJuan Quintela  --enable-curl) curl="yes"
1229788c8196SJuan Quintela  ;;
12302df87df7SJuan Quintela  --disable-fdt) fdt="no"
12312df87df7SJuan Quintela  ;;
12322df87df7SJuan Quintela  --enable-fdt) fdt="yes"
12332df87df7SJuan Quintela  ;;
12345c6c3a6cSChristoph Hellwig  --disable-linux-aio) linux_aio="no"
12355c6c3a6cSChristoph Hellwig  ;;
12365c6c3a6cSChristoph Hellwig  --enable-linux-aio) linux_aio="yes"
12375c6c3a6cSChristoph Hellwig  ;;
1238758e8e38SVenkateswararao Jujjuri (JV)  --disable-attr) attr="no"
1239758e8e38SVenkateswararao Jujjuri (JV)  ;;
1240758e8e38SVenkateswararao Jujjuri (JV)  --enable-attr) attr="yes"
1241758e8e38SVenkateswararao Jujjuri (JV)  ;;
1242a40161cbSPaolo Bonzini  --disable-membarrier) membarrier="no"
1243a40161cbSPaolo Bonzini  ;;
1244a40161cbSPaolo Bonzini  --enable-membarrier) membarrier="yes"
1245a40161cbSPaolo Bonzini  ;;
124677755340Sths  --disable-blobs) blobs="no"
124777755340Sths  ;;
12487e563bfbSThomas Huth  --with-pkgversion=*) pkgversion="$optarg"
12494a19f1ecSpbrook  ;;
1250519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
1251519175a2SAlex Barcelo  ;;
125270c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
125370c60c08SStefan Hajnoczi  ;;
125470c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
125570c60c08SStefan Hajnoczi  ;;
12567d992e4dSPeter Lieven  --enable-debug-stack-usage) debug_stack_usage="yes"
12577d992e4dSPeter Lieven  ;;
1258f0d92b56SLongpeng(Mike)  --enable-crypto-afalg) crypto_afalg="yes"
1259f0d92b56SLongpeng(Mike)  ;;
1260f0d92b56SLongpeng(Mike)  --disable-crypto-afalg) crypto_afalg="no"
1261f0d92b56SLongpeng(Mike)  ;;
1262a25dba17SJuan Quintela  --disable-docs) docs="no"
126370ec5dc0SAnthony Liguori  ;;
1264a25dba17SJuan Quintela  --enable-docs) docs="yes"
126583a3ab8bSJuan Quintela  ;;
1266d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
1267d5970055SMichael S. Tsirkin  ;;
1268d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
1269d5970055SMichael S. Tsirkin  ;;
1270042cea27SGonglei  --disable-vhost-crypto) vhost_crypto="no"
1271042cea27SGonglei  ;;
1272299e6f19SPaolo Bonzini  --enable-vhost-crypto) vhost_crypto="yes"
1273042cea27SGonglei  ;;
12745e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
12755e9be92dSNicholas Bellinger  ;;
12765e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
12775e9be92dSNicholas Bellinger  ;;
1278fc0b9b0eSStefan Hajnoczi  --disable-vhost-vsock) vhost_vsock="no"
1279fc0b9b0eSStefan Hajnoczi  ;;
1280fc0b9b0eSStefan Hajnoczi  --enable-vhost-vsock) vhost_vsock="yes"
1281fc0b9b0eSStefan Hajnoczi  ;;
1282da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
128320ff075bSMichael Walle  ;;
1284da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
128520ff075bSMichael Walle  ;;
1286f27aaf4bSChristian Brunner  --disable-rbd) rbd="no"
1287f27aaf4bSChristian Brunner  ;;
1288f27aaf4bSChristian Brunner  --enable-rbd) rbd="yes"
1289f27aaf4bSChristian Brunner  ;;
12908c84cf11SSergei Trofimovich  --disable-xfsctl) xfs="no"
12918c84cf11SSergei Trofimovich  ;;
12928c84cf11SSergei Trofimovich  --enable-xfsctl) xfs="yes"
12938c84cf11SSergei Trofimovich  ;;
12947b02f544SMarc-André Lureau  --disable-smartcard) smartcard="no"
1295111a38b0SRobert Relyea  ;;
12967b02f544SMarc-André Lureau  --enable-smartcard) smartcard="yes"
1297111a38b0SRobert Relyea  ;;
12982b2325ffSGerd Hoffmann  --disable-libusb) libusb="no"
12992b2325ffSGerd Hoffmann  ;;
13002b2325ffSGerd Hoffmann  --enable-libusb) libusb="yes"
13012b2325ffSGerd Hoffmann  ;;
130269354a83SHans de Goede  --disable-usb-redir) usb_redir="no"
130369354a83SHans de Goede  ;;
130469354a83SHans de Goede  --enable-usb-redir) usb_redir="yes"
130569354a83SHans de Goede  ;;
13061ece9905SAlon Levy  --disable-zlib-test) zlib="no"
13071ece9905SAlon Levy  ;;
1308b25c9dffSStefan Weil  --disable-lzo) lzo="no"
1309b25c9dffSStefan Weil  ;;
1310607dacd0Sqiaonuohan  --enable-lzo) lzo="yes"
1311607dacd0Sqiaonuohan  ;;
1312b25c9dffSStefan Weil  --disable-snappy) snappy="no"
1313b25c9dffSStefan Weil  ;;
1314607dacd0Sqiaonuohan  --enable-snappy) snappy="yes"
1315607dacd0Sqiaonuohan  ;;
13166b383c08SPeter Wu  --disable-bzip2) bzip2="no"
13176b383c08SPeter Wu  ;;
13186b383c08SPeter Wu  --enable-bzip2) bzip2="yes"
13196b383c08SPeter Wu  ;;
132083bc1f97SJulio Faracco  --enable-lzfse) lzfse="yes"
132183bc1f97SJulio Faracco  ;;
132283bc1f97SJulio Faracco  --disable-lzfse) lzfse="no"
132383bc1f97SJulio Faracco  ;;
1324d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1325d138cee9SMichael Roth  ;;
1326d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1327d138cee9SMichael Roth  ;;
13289dacf32dSYossi Hindin  --enable-guest-agent-msi) guest_agent_msi="yes"
13299dacf32dSYossi Hindin  ;;
13309dacf32dSYossi Hindin  --disable-guest-agent-msi) guest_agent_msi="no"
13319dacf32dSYossi Hindin  ;;
1332d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1333d9840e25STomoki Sekiyama  ;;
1334d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1335d9840e25STomoki Sekiyama  ;;
1336d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1337d9840e25STomoki Sekiyama  ;;
1338d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1339d9840e25STomoki Sekiyama  ;;
1340d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1341d9840e25STomoki Sekiyama  ;;
1342d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1343d9840e25STomoki Sekiyama  ;;
13444b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
13454b1c11fdSDaniel P. Berrange  ;;
13464b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
13474b1c11fdSDaniel P. Berrange  ;;
1348f794573eSEduardo Otubo  --enable-seccomp) seccomp="yes"
1349f794573eSEduardo Otubo  ;;
1350f794573eSEduardo Otubo  --disable-seccomp) seccomp="no"
1351f794573eSEduardo Otubo  ;;
1352eb100396SBharata B Rao  --disable-glusterfs) glusterfs="no"
1353eb100396SBharata B Rao  ;;
135486583a07SLiam Merwick  --disable-avx2) avx2_opt="no"
135586583a07SLiam Merwick  ;;
135686583a07SLiam Merwick  --enable-avx2) avx2_opt="yes"
135786583a07SLiam Merwick  ;;
1358eb100396SBharata B Rao  --enable-glusterfs) glusterfs="yes"
1359eb100396SBharata B Rao  ;;
136052b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
136152b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1362583f6e7bSStefan Hajnoczi  ;;
1363cb6414dfSFam Zheng  --enable-vhdx|--disable-vhdx)
1364cb6414dfSFam Zheng      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1365cb6414dfSFam Zheng  ;;
1366315d3184SFam Zheng  --enable-uuid|--disable-uuid)
1367315d3184SFam Zheng      echo "$0: $opt is obsolete, UUID support is always built" >&2
1368315d3184SFam Zheng  ;;
1369a4ccabcfSAnthony Liguori  --disable-gtk) gtk="no"
1370a4ccabcfSAnthony Liguori  ;;
1371a4ccabcfSAnthony Liguori  --enable-gtk) gtk="yes"
1372a4ccabcfSAnthony Liguori  ;;
1373a1c5e949SDaniel P. Berrange  --tls-priority=*) tls_priority="$optarg"
1374a1c5e949SDaniel P. Berrange  ;;
1375ddbb0d09SDaniel P. Berrange  --disable-gnutls) gnutls="no"
1376ddbb0d09SDaniel P. Berrange  ;;
1377ddbb0d09SDaniel P. Berrange  --enable-gnutls) gnutls="yes"
1378ddbb0d09SDaniel P. Berrange  ;;
137991bfcdb0SDaniel P. Berrange  --disable-nettle) nettle="no"
138091bfcdb0SDaniel P. Berrange  ;;
138191bfcdb0SDaniel P. Berrange  --enable-nettle) nettle="yes"
138291bfcdb0SDaniel P. Berrange  ;;
138391bfcdb0SDaniel P. Berrange  --disable-gcrypt) gcrypt="no"
138491bfcdb0SDaniel P. Berrange  ;;
138591bfcdb0SDaniel P. Berrange  --enable-gcrypt) gcrypt="yes"
138691bfcdb0SDaniel P. Berrange  ;;
13878953caf3SDaniel P. Berrange  --disable-auth-pam) auth_pam="no"
13888953caf3SDaniel P. Berrange  ;;
13898953caf3SDaniel P. Berrange  --enable-auth-pam) auth_pam="yes"
13908953caf3SDaniel P. Berrange  ;;
13912da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
13922da776dbSMichael R. Hines  ;;
13932da776dbSMichael R. Hines  --disable-rdma) rdma="no"
13942da776dbSMichael R. Hines  ;;
139521ab34c9SMarcel Apfelbaum  --enable-pvrdma) pvrdma="yes"
139621ab34c9SMarcel Apfelbaum  ;;
139721ab34c9SMarcel Apfelbaum  --disable-pvrdma) pvrdma="no"
139821ab34c9SMarcel Apfelbaum  ;;
1399bbbf9bfbSStefan Weil  --disable-vte) vte="no"
1400bbbf9bfbSStefan Weil  ;;
1401bbbf9bfbSStefan Weil  --enable-vte) vte="yes"
1402bbbf9bfbSStefan Weil  ;;
14039d9e1521SGerd Hoffmann  --disable-virglrenderer) virglrenderer="no"
14049d9e1521SGerd Hoffmann  ;;
14059d9e1521SGerd Hoffmann  --enable-virglrenderer) virglrenderer="yes"
14069d9e1521SGerd Hoffmann  ;;
1407e91c793cSCole Robinson  --disable-tpm) tpm="no"
1408e91c793cSCole Robinson  ;;
1409ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1410ab214c29SStefan Berger  ;;
14110a12ec87SRichard W.M. Jones  --disable-libssh2) libssh2="no"
14120a12ec87SRichard W.M. Jones  ;;
14130a12ec87SRichard W.M. Jones  --enable-libssh2) libssh2="yes"
14140a12ec87SRichard W.M. Jones  ;;
1415ed1701c6SDr. David Alan Gilbert  --disable-live-block-migration) live_block_migration="no"
1416ed1701c6SDr. David Alan Gilbert  ;;
1417ed1701c6SDr. David Alan Gilbert  --enable-live-block-migration) live_block_migration="yes"
1418ed1701c6SDr. David Alan Gilbert  ;;
1419a99d57bbSWanlong Gao  --disable-numa) numa="no"
1420a99d57bbSWanlong Gao  ;;
1421a99d57bbSWanlong Gao  --enable-numa) numa="yes"
1422a99d57bbSWanlong Gao  ;;
1423ed279a06SKlim Kireev  --disable-libxml2) libxml2="no"
1424ed279a06SKlim Kireev  ;;
1425ed279a06SKlim Kireev  --enable-libxml2) libxml2="yes"
1426ed279a06SKlim Kireev  ;;
14272847b469SFam Zheng  --disable-tcmalloc) tcmalloc="no"
14282847b469SFam Zheng  ;;
14292847b469SFam Zheng  --enable-tcmalloc) tcmalloc="yes"
14302847b469SFam Zheng  ;;
14317b01cb97SAlexandre Derumier  --disable-jemalloc) jemalloc="no"
14327b01cb97SAlexandre Derumier  ;;
14337b01cb97SAlexandre Derumier  --enable-jemalloc) jemalloc="yes"
14347b01cb97SAlexandre Derumier  ;;
1435a6b1d4c0SChanglong Xie  --disable-replication) replication="no"
1436a6b1d4c0SChanglong Xie  ;;
1437a6b1d4c0SChanglong Xie  --enable-replication) replication="yes"
1438a6b1d4c0SChanglong Xie  ;;
1439da92c3ffSAshish Mittal  --disable-vxhs) vxhs="no"
1440da92c3ffSAshish Mittal  ;;
1441da92c3ffSAshish Mittal  --enable-vxhs) vxhs="yes"
1442da92c3ffSAshish Mittal  ;;
14432f740136SJeff Cody  --disable-bochs) bochs="no"
14442f740136SJeff Cody  ;;
14452f740136SJeff Cody  --enable-bochs) bochs="yes"
14462f740136SJeff Cody  ;;
14472f740136SJeff Cody  --disable-cloop) cloop="no"
14482f740136SJeff Cody  ;;
14492f740136SJeff Cody  --enable-cloop) cloop="yes"
14502f740136SJeff Cody  ;;
14512f740136SJeff Cody  --disable-dmg) dmg="no"
14522f740136SJeff Cody  ;;
14532f740136SJeff Cody  --enable-dmg) dmg="yes"
14542f740136SJeff Cody  ;;
14552f740136SJeff Cody  --disable-qcow1) qcow1="no"
14562f740136SJeff Cody  ;;
14572f740136SJeff Cody  --enable-qcow1) qcow1="yes"
14582f740136SJeff Cody  ;;
14592f740136SJeff Cody  --disable-vdi) vdi="no"
14602f740136SJeff Cody  ;;
14612f740136SJeff Cody  --enable-vdi) vdi="yes"
14622f740136SJeff Cody  ;;
14632f740136SJeff Cody  --disable-vvfat) vvfat="no"
14642f740136SJeff Cody  ;;
14652f740136SJeff Cody  --enable-vvfat) vvfat="yes"
14662f740136SJeff Cody  ;;
14672f740136SJeff Cody  --disable-qed) qed="no"
14682f740136SJeff Cody  ;;
14692f740136SJeff Cody  --enable-qed) qed="yes"
14702f740136SJeff Cody  ;;
14712f740136SJeff Cody  --disable-parallels) parallels="no"
14722f740136SJeff Cody  ;;
14732f740136SJeff Cody  --enable-parallels) parallels="yes"
14742f740136SJeff Cody  ;;
14752f740136SJeff Cody  --disable-sheepdog) sheepdog="no"
14762f740136SJeff Cody  ;;
14772f740136SJeff Cody  --enable-sheepdog) sheepdog="yes"
14782f740136SJeff Cody  ;;
1479e6a74868SMarc-André Lureau  --disable-vhost-user) vhost_user="no"
1480e6a74868SMarc-André Lureau  ;;
1481299e6f19SPaolo Bonzini  --enable-vhost-user) vhost_user="yes"
1482299e6f19SPaolo Bonzini  ;;
1483299e6f19SPaolo Bonzini  --disable-vhost-kernel) vhost_kernel="no"
1484299e6f19SPaolo Bonzini  ;;
1485299e6f19SPaolo Bonzini  --enable-vhost-kernel) vhost_kernel="yes"
1486e6a74868SMarc-André Lureau  ;;
14878ca80760SRichard Henderson  --disable-capstone) capstone="no"
14888ca80760SRichard Henderson  ;;
14898ca80760SRichard Henderson  --enable-capstone) capstone="yes"
14908ca80760SRichard Henderson  ;;
1491e219c499SRichard Henderson  --enable-capstone=git) capstone="git"
1492e219c499SRichard Henderson  ;;
1493e219c499SRichard Henderson  --enable-capstone=system) capstone="system"
1494e219c499SRichard Henderson  ;;
1495cc84d63aSDaniel P. Berrange  --with-git=*) git="$optarg"
1496cc84d63aSDaniel P. Berrange  ;;
1497f62bbee5SDaniel P. Berrange  --enable-git-update) git_update=yes
1498f62bbee5SDaniel P. Berrange  ;;
1499f62bbee5SDaniel P. Berrange  --disable-git-update) git_update=no
1500f62bbee5SDaniel P. Berrange  ;;
1501ba59fb77SPaolo Bonzini  --enable-debug-mutex) debug_mutex=yes
1502ba59fb77SPaolo Bonzini  ;;
1503ba59fb77SPaolo Bonzini  --disable-debug-mutex) debug_mutex=no
1504ba59fb77SPaolo Bonzini  ;;
150517824406SJunyan He  --enable-libpmem) libpmem=yes
150617824406SJunyan He  ;;
150717824406SJunyan He  --disable-libpmem) libpmem=no
150817824406SJunyan He  ;;
15092d2ad6d0SFam Zheng  *)
15102d2ad6d0SFam Zheng      echo "ERROR: unknown option $opt"
15112d2ad6d0SFam Zheng      echo "Try '$0 --help' for more information"
15122d2ad6d0SFam Zheng      exit 1
15137f1559c6Sbalrog  ;;
15147d13299dSbellard  esac
15157d13299dSbellarddone
15167d13299dSbellard
151740293e58Sbellardcase "$cpu" in
1518e3608d66SRichard Henderson    ppc)
1519e3608d66SRichard Henderson           CPU_CFLAGS="-m32"
1520e3608d66SRichard Henderson           LDFLAGS="-m32 $LDFLAGS"
152113a5abe2SAlex Bennée           cross_cc_powerpc=$cc
152213a5abe2SAlex Bennée           cross_cc_cflags_powerpc=$CPU_CFLAGS
1523e3608d66SRichard Henderson           ;;
1524e3608d66SRichard Henderson    ppc64)
1525e3608d66SRichard Henderson           CPU_CFLAGS="-m64"
1526e3608d66SRichard Henderson           LDFLAGS="-m64 $LDFLAGS"
152713a5abe2SAlex Bennée           cross_cc_ppc64=$cc
152813a5abe2SAlex Bennée           cross_cc_cflags_ppc64=$CPU_CFLAGS
1529e3608d66SRichard Henderson           ;;
15309b9c37c3SRichard Henderson    sparc)
1531f1079bb8SRichard Henderson           CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1532f1079bb8SRichard Henderson           LDFLAGS="-m32 -mv8plus $LDFLAGS"
153313a5abe2SAlex Bennée           cross_cc_sparc=$cc
153413a5abe2SAlex Bennée           cross_cc_cflags_sparc=$CPU_CFLAGS
15353142255cSblueswir1           ;;
1536ed968ff1SJuan Quintela    sparc64)
153779f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1538f1079bb8SRichard Henderson           LDFLAGS="-m64 $LDFLAGS"
153913a5abe2SAlex Bennée           cross_cc_sparc64=$cc
154013a5abe2SAlex Bennée           cross_cc_cflags_sparc64=$CPU_CFLAGS
15413142255cSblueswir1           ;;
154276d83bdeSths    s390)
1543061cdd81SRichard Henderson           CPU_CFLAGS="-m31"
154428d7cc49SRichard Henderson           LDFLAGS="-m31 $LDFLAGS"
154513a5abe2SAlex Bennée           cross_cc_s390=$cc
154613a5abe2SAlex Bennée           cross_cc_cflags_s390=$CPU_CFLAGS
154728d7cc49SRichard Henderson           ;;
154828d7cc49SRichard Henderson    s390x)
1549061cdd81SRichard Henderson           CPU_CFLAGS="-m64"
155028d7cc49SRichard Henderson           LDFLAGS="-m64 $LDFLAGS"
155113a5abe2SAlex Bennée           cross_cc_s390x=$cc
155213a5abe2SAlex Bennée           cross_cc_cflags_s390x=$CPU_CFLAGS
155376d83bdeSths           ;;
155440293e58Sbellard    i386)
155579f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m32"
15560c439cbfSJuan Quintela           LDFLAGS="-m32 $LDFLAGS"
1557716a507cSAlex Bennée           cross_cc_i386=$cc
1558716a507cSAlex Bennée           cross_cc_cflags_i386=$CPU_CFLAGS
155940293e58Sbellard           ;;
156040293e58Sbellard    x86_64)
15617ebee43eSRichard Henderson           # ??? Only extremely old AMD cpus do not have cmpxchg16b.
15627ebee43eSRichard Henderson           # If we truly care, we should simply detect this case at
15637ebee43eSRichard Henderson           # runtime and generate the fallback to serial emulation.
15647ebee43eSRichard Henderson           CPU_CFLAGS="-m64 -mcx16"
15650c439cbfSJuan Quintela           LDFLAGS="-m64 $LDFLAGS"
1566716a507cSAlex Bennée           cross_cc_x86_64=$cc
1567716a507cSAlex Bennée           cross_cc_cflags_x86_64=$CPU_CFLAGS
1568379f6698SPaul Brook           ;;
1569c72b26ecSRichard Henderson    x32)
1570c72b26ecSRichard Henderson           CPU_CFLAGS="-mx32"
1571c72b26ecSRichard Henderson           LDFLAGS="-mx32 $LDFLAGS"
1572716a507cSAlex Bennée           cross_cc_i386=$cc
157313a5abe2SAlex Bennée           cross_cc_cflags_i386=$CPU_CFLAGS
1574c72b26ecSRichard Henderson           ;;
157530163d89SPeter Maydell    # No special flags required for other host CPUs
15763142255cSblueswir1esac
15773142255cSblueswir1
157879f3b12fSPeter CrosthwaiteQEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
157979f3b12fSPeter Crosthwaite
1580affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly
1581affc88ccSPeter Maydell# support, even if we're using TCI.
1582affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then
1583affc88ccSPeter Maydell  bsd_user="no"
1584affc88ccSPeter Maydell  linux_user="no"
1585affc88ccSPeter Maydellfi
1586affc88ccSPeter Maydell
158760e0df25SPeter Maydelldefault_target_list=""
158860e0df25SPeter Maydell
15896e92f823SPeter Maydellmak_wilds=""
15906e92f823SPeter Maydell
159160e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
15926e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
159360e0df25SPeter Maydellfi
159460e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
15956e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
159660e0df25SPeter Maydellfi
159760e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
15986e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
159960e0df25SPeter Maydellfi
160060e0df25SPeter Maydell
16016e92f823SPeter Maydellfor config in $mak_wilds; do
16026e92f823SPeter Maydell    default_target_list="${default_target_list} $(basename "$config" .mak)"
16036e92f823SPeter Maydelldone
16046e92f823SPeter Maydell
1605c53eeaf7SStefan Hajnoczi# Enumerate public trace backends for --help output
160664a6047dSGreg Kurztrace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1607c53eeaf7SStefan Hajnoczi
1608af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1609af5db58eSpbrookcat << EOF
1610af5db58eSpbrook
1611af5db58eSpbrookUsage: configure [options]
1612af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1613af5db58eSpbrook
161408fb77edSStefan WeilStandard options:
161508fb77edSStefan Weil  --help                   print this message
161608fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
161708fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
161808fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
161908fb77edSStefan Weil  --target-list=LIST       set target list (default: build everything)
162008fb77edSStefan Weil$(echo Available targets: $default_target_list | \
162108fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
162208fb77edSStefan Weil
162308fb77edSStefan WeilAdvanced options (experts only):
162408fb77edSStefan Weil  --source-path=PATH       path of source code [$source_path]
162508fb77edSStefan Weil  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
162608fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
162708fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
162808fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
162908fb77edSStefan Weil                           build time
163008fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
163108fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
163208fb77edSStefan Weil  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
163311cde1c8SBruno Dominguez  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
163408fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1635d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1636d422b2bcSAlex Bennée  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
163708fb77edSStefan Weil  --make=MAKE              use specified make [$make]
163808fb77edSStefan Weil  --install=INSTALL        use specified install [$install]
163908fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
164008fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1641db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
164208fb77edSStefan Weil  --static                 enable static build [$static]
164308fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
164408fb77edSStefan Weil  --datadir=PATH           install firmware in PATH$confsuffix
164508fb77edSStefan Weil  --docdir=PATH            install documentation in PATH$confsuffix
164608fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
164708fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
1648db1b5f13SThomas Huth  --libexecdir=PATH        install helper binaries in PATH
164908fb77edSStefan Weil  --sysconfdir=PATH        install config in PATH$confsuffix
165008fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
16513d5eecabSGerd Hoffmann  --firmwarepath=PATH      search PATH for firmware files
1652e26110cfSFam Zheng  --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1653db1b5f13SThomas Huth  --with-pkgversion=VERS   use specified string as sub-version of the package
165408fb77edSStefan Weil  --enable-debug           enable common debug build options
1655247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
165608fb77edSStefan Weil  --disable-strip          disable stripping binaries
165708fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
165863678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
165908fb77edSStefan Weil  --audio-drv-list=LIST    set audio drivers list:
166008fb77edSStefan Weil                           Available drivers: $audio_possible_drivers
166108fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
166208fb77edSStefan Weil  --block-drv-rw-whitelist=L
166308fb77edSStefan Weil                           set block driver read-write whitelist
166408fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
166508fb77edSStefan Weil  --block-drv-ro-whitelist=L
166608fb77edSStefan Weil                           set block driver read-only whitelist
166708fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
16685b808275SLluís Vilanova  --enable-trace-backends=B Set trace backend
1669c53eeaf7SStefan Hajnoczi                           Available backends: $trace_backend_list
167008fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
167108fb77edSStefan Weil                           Default:trace-<pid>
1672c23f23b9SMichael Tokarev  --disable-slirp          disable SLIRP userspace network connectivity
1673c23f23b9SMichael Tokarev  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
16745a22ab71SYang Zhong  --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1675c23f23b9SMichael Tokarev  --oss-lib                path to OSS library
1676c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
167708fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
167833c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
167908fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
168008fb77edSStefan Weil  --gcov=GCOV              use specified gcov [$gcov_tool]
1681c23f23b9SMichael Tokarev  --disable-blobs          disable installing provided firmware blobs
1682c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1683c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1684a1c5e949SDaniel P. Berrange  --tls-priority           default TLS protocol/cipher priority string
1685c12d66aaSLin Ma  --enable-gprof           QEMU profiling with gprof
1686c12d66aaSLin Ma  --enable-profiler        profiler support
1687c12d66aaSLin Ma  --enable-debug-stack-usage
1688c12d66aaSLin Ma                           track the maximum stack usage of stacks created by qemu_alloc_stack
1689c23f23b9SMichael Tokarev
1690c23f23b9SMichael TokarevOptional features, enabled with --enable-FEATURE and
1691c23f23b9SMichael Tokarevdisabled with --disable-FEATURE, default is enabled if available:
1692c23f23b9SMichael Tokarev
1693c23f23b9SMichael Tokarev  system          all system emulation targets
1694c23f23b9SMichael Tokarev  user            supported user emulation targets
1695c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1696c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1697c23f23b9SMichael Tokarev  docs            build documentation
1698c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1699c23f23b9SMichael Tokarev  guest-agent-msi build guest agent Windows MSI installation package
1700c23f23b9SMichael Tokarev  pie             Position Independent Executables
1701c23f23b9SMichael Tokarev  modules         modules support
1702c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1703c23f23b9SMichael Tokarev  debug-info      debugging information
1704c23f23b9SMichael Tokarev  sparse          sparse checker
1705c23f23b9SMichael Tokarev
1706ddbb0d09SDaniel P. Berrange  gnutls          GNUTLS cryptography support
170791bfcdb0SDaniel P. Berrange  nettle          nettle cryptography support
170891bfcdb0SDaniel P. Berrange  gcrypt          libgcrypt cryptography support
17098953caf3SDaniel P. Berrange  auth-pam        PAM access control
1710c23f23b9SMichael Tokarev  sdl             SDL UI
1711a442fe2fSDaniel P. Berrangé  sdl_image       SDL Image support for icons
1712c23f23b9SMichael Tokarev  gtk             gtk UI
1713c23f23b9SMichael Tokarev  vte             vte support for the gtk UI
1714c23f23b9SMichael Tokarev  curses          curses UI
1715c23f23b9SMichael Tokarev  vnc             VNC UI support
1716c23f23b9SMichael Tokarev  vnc-sasl        SASL encryption for VNC server
1717c23f23b9SMichael Tokarev  vnc-jpeg        JPEG lossy compression for VNC server
1718c23f23b9SMichael Tokarev  vnc-png         PNG compression for VNC server
1719c23f23b9SMichael Tokarev  cocoa           Cocoa UI (Mac OS X only)
1720c23f23b9SMichael Tokarev  virtfs          VirtFS
1721fe8fc5aeSPaolo Bonzini  mpath           Multipath persistent reservation passthrough
1722c23f23b9SMichael Tokarev  xen             xen backend driver support
172370c292afSAnthony PERARD  xen-pci-passthrough    PCI passthrough support for Xen
1724c23f23b9SMichael Tokarev  brlapi          BrlAPI (Braile)
1725c23f23b9SMichael Tokarev  curl            curl connectivity
1726a40161cbSPaolo Bonzini  membarrier      membarrier system call (for Linux 4.14+ or Windows)
1727c23f23b9SMichael Tokarev  fdt             fdt device tree
1728c23f23b9SMichael Tokarev  bluez           bluez stack connectivity
1729c23f23b9SMichael Tokarev  kvm             KVM acceleration support
1730b0cb0a66SVincent Palatin  hax             HAX acceleration support
1731c97d6d2cSSergio Andres Gomez Del Real  hvf             Hypervisor.framework acceleration support
1732d661d9a4SJustin Terry (VM)  whpx            Windows Hypervisor Platform acceleration support
173321ab34c9SMarcel Apfelbaum  rdma            Enable RDMA-based migration
173421ab34c9SMarcel Apfelbaum  pvrdma          Enable PVRDMA support
1735c23f23b9SMichael Tokarev  vde             support for vde network
1736c23f23b9SMichael Tokarev  netmap          support for netmap network
1737c23f23b9SMichael Tokarev  linux-aio       Linux AIO support
1738c23f23b9SMichael Tokarev  cap-ng          libcap-ng support
1739c23f23b9SMichael Tokarev  attr            attr and xattr support
1740299e6f19SPaolo Bonzini  vhost-net       vhost-net kernel acceleration support
1741299e6f19SPaolo Bonzini  vhost-vsock     virtio sockets device support
1742299e6f19SPaolo Bonzini  vhost-scsi      vhost-scsi kernel target support
1743299e6f19SPaolo Bonzini  vhost-crypto    vhost-user-crypto backend support
1744299e6f19SPaolo Bonzini  vhost-kernel    vhost kernel backend support
1745299e6f19SPaolo Bonzini  vhost-user      vhost-user backend support
1746c23f23b9SMichael Tokarev  spice           spice
1747c23f23b9SMichael Tokarev  rbd             rados block device (rbd)
1748c23f23b9SMichael Tokarev  libiscsi        iscsi support
1749c23f23b9SMichael Tokarev  libnfs          nfs support
17507b02f544SMarc-André Lureau  smartcard       smartcard support (libcacard)
1751c23f23b9SMichael Tokarev  libusb          libusb (for usb passthrough)
1752ed1701c6SDr. David Alan Gilbert  live-block-migration   Block migration in the main migration stream
1753c23f23b9SMichael Tokarev  usb-redir       usb network redirection support
1754c23f23b9SMichael Tokarev  lzo             support of lzo compression library
1755c23f23b9SMichael Tokarev  snappy          support of snappy compression library
1756c23f23b9SMichael Tokarev  bzip2           support of bzip2 compression library
1757c23f23b9SMichael Tokarev                  (for reading bzip2-compressed dmg images)
175883bc1f97SJulio Faracco  lzfse           support of lzfse compression library
175983bc1f97SJulio Faracco                  (for reading lzfse-compressed dmg images)
1760c23f23b9SMichael Tokarev  seccomp         seccomp support
1761c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1762c23f23b9SMichael Tokarev  glusterfs       GlusterFS backend
1763c23f23b9SMichael Tokarev  tpm             TPM support
1764c23f23b9SMichael Tokarev  libssh2         ssh block device support
1765c23f23b9SMichael Tokarev  numa            libnuma support
1766ed279a06SKlim Kireev  libxml2         for Parallels image format
1767c23f23b9SMichael Tokarev  tcmalloc        tcmalloc support
17687b01cb97SAlexandre Derumier  jemalloc        jemalloc support
176986583a07SLiam Merwick  avx2            AVX2 optimization support
1770a6b1d4c0SChanglong Xie  replication     replication support
1771c12d66aaSLin Ma  opengl          opengl support
1772c12d66aaSLin Ma  virglrenderer   virgl rendering support
1773c12d66aaSLin Ma  xfsctl          xfsctl support
1774c12d66aaSLin Ma  qom-cast-debug  cast debugging support
17758de73fa8SCleber Rosa  tools           build qemu-io, qemu-nbd and qemu-img tools
1776da92c3ffSAshish Mittal  vxhs            Veritas HyperScale vDisk backend support
17772f740136SJeff Cody  bochs           bochs image format support
17782f740136SJeff Cody  cloop           cloop image format support
17792f740136SJeff Cody  dmg             dmg image format support
17802f740136SJeff Cody  qcow1           qcow v1 image format support
17812f740136SJeff Cody  vdi             vdi image format support
17822f740136SJeff Cody  vvfat           vvfat image format support
17832f740136SJeff Cody  qed             qed image format support
17842f740136SJeff Cody  parallels       parallels image format support
17852f740136SJeff Cody  sheepdog        sheepdog block driver support
1786f0d92b56SLongpeng(Mike)  crypto-afalg    Linux AF_ALG crypto backend driver
17878ca80760SRichard Henderson  capstone        capstone disassembler support
1788ba59fb77SPaolo Bonzini  debug-mutex     mutex debugging support
178917824406SJunyan He  libpmem         libpmem support
179008fb77edSStefan Weil
179108fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1792af5db58eSpbrookEOF
17932d2ad6d0SFam Zhengexit 0
1794af5db58eSpbrookfi
1795af5db58eSpbrook
1796c53eeaf7SStefan Hajnocziif ! has $python; then
1797c53eeaf7SStefan Hajnoczi  error_exit "Python not found. Use --python=/path/to/python"
1798c53eeaf7SStefan Hajnoczifi
1799c53eeaf7SStefan Hajnoczi
1800c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit
1801c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value.
18027f2b5544SEduardo Habkostif ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
18037f2b5544SEduardo Habkost  error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1804c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
1805c53eeaf7SStefan Hajnoczifi
1806c53eeaf7SStefan Hajnoczi
1807755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it
1808755ee70fSCleber Rosapython_version=$($python -V 2>&1 | sed -e 's/Python\ //')
1809755ee70fSCleber Rosa
1810c53eeaf7SStefan Hajnoczi# Suppress writing compiled files
1811c53eeaf7SStefan Hajnoczipython="$python -B"
1812c53eeaf7SStefan Hajnoczi
18139aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
18149aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
18159aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
18169aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
18179aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
18189aae6e54SDaniel Henrique Barbozaif compile_object ; then
18199aae6e54SDaniel Henrique Barboza  : C compiler works ok
18209aae6e54SDaniel Henrique Barbozaelse
18219aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
18229aae6e54SDaniel Henrique Barbozafi
18239aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
18249aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
18259aae6e54SDaniel Henrique Barbozafi
18269aae6e54SDaniel Henrique Barboza
1827359bc95dSPeter Maydell# Now we have handled --enable-tcg-interpreter and know we're not just
1828359bc95dSPeter Maydell# printing the help message, bail out if the host CPU isn't supported.
1829359bc95dSPeter Maydellif test "$ARCH" = "unknown"; then
1830359bc95dSPeter Maydell    if test "$tcg_interpreter" = "yes" ; then
1831359bc95dSPeter Maydell        echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1832359bc95dSPeter Maydell    else
183376ad07a4SPeter Maydell        error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1834359bc95dSPeter Maydell    fi
1835359bc95dSPeter Maydellfi
1836359bc95dSPeter Maydell
18379c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
18389c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
18399c83ffd8SPeter Maydellif test -z "$werror" ; then
1840fd73745dSAlexey Kardashevskiy    if test -e "$source_path/.git" && \
1841e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
18429c83ffd8SPeter Maydell        werror="yes"
18439c83ffd8SPeter Maydell    else
18449c83ffd8SPeter Maydell        werror="no"
18459c83ffd8SPeter Maydell    fi
18469c83ffd8SPeter Maydellfi
18479c83ffd8SPeter Maydell
1848fb59dabdSPeter Maydellif test "$bogus_os" = "yes"; then
1849fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
1850fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
1851fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
1852fb59dabdSPeter Maydell    # host OS we should stop now.
1853951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1854fb59dabdSPeter Maydellfi
1855fb59dabdSPeter Maydell
1856efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
1857efc6c070SThomas Huthcat > $TMPC << EOF
1858efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
1859efc6c070SThomas Huth# ifdef __apple_build_version__
1860efc6c070SThomas Huth#  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1861efc6c070SThomas Huth#   error You need at least XCode Clang v5.1 to compile QEMU
1862efc6c070SThomas Huth#  endif
1863efc6c070SThomas Huth# else
1864efc6c070SThomas Huth#  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1865efc6c070SThomas Huth#   error You need at least Clang v3.4 to compile QEMU
1866efc6c070SThomas Huth#  endif
1867efc6c070SThomas Huth# endif
1868efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1869efc6c070SThomas Huth# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1870efc6c070SThomas Huth#  error You need at least GCC v4.8 to compile QEMU
1871efc6c070SThomas Huth# endif
1872efc6c070SThomas Huth#else
1873efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
1874efc6c070SThomas Huth#endif
1875efc6c070SThomas Huthint main (void) { return 0; }
1876efc6c070SThomas HuthEOF
1877efc6c070SThomas Huthif ! compile_prog "" "" ; then
1878efc6c070SThomas Huth    error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1879efc6c070SThomas Huthfi
1880efc6c070SThomas Huth
18818d05095cSPaolo Bonzinigcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
18828d05095cSPaolo Bonzinigcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1883ac7568bdSDaniel P. Berrangegcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1884435405acSPranith Kumargcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1885b98fcfd8SPaolo Bonzinigcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
188671429097SPeter Maydellgcc_flags="-Wno-string-plus-int $gcc_flags"
18876ca026cbSPeter Maydell# Note that we do not add -Werror to gcc_flags here, because that would
18886ca026cbSPeter Maydell# enable it for all configure tests. If a configure test failed due
18896ca026cbSPeter Maydell# to -Werror this would just silently disable some features,
18906ca026cbSPeter Maydell# so it's too error prone.
189193b25869SJohn Snow
189293b25869SJohn Snowcc_has_warning_flag() {
189393b25869SJohn Snow    write_c_skeleton;
189493b25869SJohn Snow
1895a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
1896a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
1897a1d29d6cSPeter Maydell    # warning options).
189893b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
189993b25869SJohn Snow    compile_prog "-Werror $optflag" ""
190093b25869SJohn Snow}
190193b25869SJohn Snow
190293b25869SJohn Snowfor flag in $gcc_flags; do
190393b25869SJohn Snow    if cc_has_warning_flag $flag ; then
19048d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
19058d05095cSPaolo Bonzini    fi
19068d05095cSPaolo Bonzinidone
19078d05095cSPaolo Bonzini
190863678e17SSteven Noonanif test "$stack_protector" != "no"; then
1909fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
1910fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
1911fccd35a0SRodrigo Rebello{
1912fccd35a0SRodrigo Rebello    char arr[64], *p = arr, *c = argv[0];
1913fccd35a0SRodrigo Rebello    while (*c) {
1914fccd35a0SRodrigo Rebello        *p++ = *c++;
1915fccd35a0SRodrigo Rebello    }
1916fccd35a0SRodrigo Rebello    return 0;
1917fccd35a0SRodrigo Rebello}
1918fccd35a0SRodrigo RebelloEOF
191963678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
19203b463a3fSMiroslav Rezanina  sp_on=0
192163678e17SSteven Noonan  for flag in $gcc_flags; do
1922590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
1923590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
1924590e5dd9SPeter Maydell    if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1925590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
192663678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
19273b463a3fSMiroslav Rezanina      sp_on=1
192863678e17SSteven Noonan      break
192963678e17SSteven Noonan    fi
193063678e17SSteven Noonan  done
19313b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
19323b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
19333b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
19343b463a3fSMiroslav Rezanina    fi
19353b463a3fSMiroslav Rezanina  fi
193637746c5eSMarc-André Lureaufi
193737746c5eSMarc-André Lureau
193820bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for
193920bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}.
194020bc94a2SPaolo Bonzinicat > $TMPC << EOF
194120bc94a2SPaolo Bonzinistruct {
194220bc94a2SPaolo Bonzini  int a[2];
194320bc94a2SPaolo Bonzini} x = {0};
194420bc94a2SPaolo BonziniEOF
194520bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then
194620bc94a2SPaolo Bonzini  :
194720bc94a2SPaolo Bonzinielse
194820bc94a2SPaolo Bonzini  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
194920bc94a2SPaolo Bonzinifi
195020bc94a2SPaolo Bonzini
1951d376e9deSThomas Huth# Static linking is not possible with modules or PIE
195240d6444eSAvi Kivityif test "$static" = "yes" ; then
1953aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
1954aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
1955aa0d1f44SPaolo Bonzini  fi
195640d6444eSAvi Kivity  if test "$pie" = "yes" ; then
195776ad07a4SPeter Maydell    error_exit "static and pie are mutually incompatible"
195840d6444eSAvi Kivity  else
195940d6444eSAvi Kivity    pie="no"
196040d6444eSAvi Kivity  fi
196140d6444eSAvi Kivityfi
196240d6444eSAvi Kivity
1963768b7855SEmilio G. Cota# Unconditional check for compiler __thread support
1964768b7855SEmilio G. Cota  cat > $TMPC << EOF
1965768b7855SEmilio G. Cotastatic __thread int tls_var;
1966768b7855SEmilio G. Cotaint main(void) { return tls_var; }
1967768b7855SEmilio G. CotaEOF
1968768b7855SEmilio G. Cota
1969768b7855SEmilio G. Cotaif ! compile_prog "-Werror" "" ; then
1970768b7855SEmilio G. Cota    error_exit "Your compiler does not support the __thread specifier for " \
1971768b7855SEmilio G. Cota	"Thread-Local Storage (TLS). Please upgrade to a version that does."
1972768b7855SEmilio G. Cotafi
1973768b7855SEmilio G. Cota
197440d6444eSAvi Kivityif test "$pie" = ""; then
197540d6444eSAvi Kivity  case "$cpu-$targetos" in
1976c72b26ecSRichard Henderson    i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
197740d6444eSAvi Kivity      ;;
197840d6444eSAvi Kivity    *)
197940d6444eSAvi Kivity      pie="no"
198040d6444eSAvi Kivity      ;;
198140d6444eSAvi Kivity  esac
198240d6444eSAvi Kivityfi
198340d6444eSAvi Kivity
198440d6444eSAvi Kivityif test "$pie" != "no" ; then
198540d6444eSAvi Kivity  cat > $TMPC << EOF
198621d4a791SAvi Kivity
198721d4a791SAvi Kivity#ifdef __linux__
198821d4a791SAvi Kivity#  define THREAD __thread
198921d4a791SAvi Kivity#else
199021d4a791SAvi Kivity#  define THREAD
199121d4a791SAvi Kivity#endif
199221d4a791SAvi Kivity
199321d4a791SAvi Kivitystatic THREAD int tls_var;
199421d4a791SAvi Kivity
199521d4a791SAvi Kivityint main(void) { return tls_var; }
199621d4a791SAvi Kivity
199740d6444eSAvi KivityEOF
199840d6444eSAvi Kivity  if compile_prog "-fPIE -DPIE" "-pie"; then
199940d6444eSAvi Kivity    QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
200040d6444eSAvi Kivity    LDFLAGS="-pie $LDFLAGS"
200140d6444eSAvi Kivity    pie="yes"
200240d6444eSAvi Kivity    if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
200340d6444eSAvi Kivity      LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
200440d6444eSAvi Kivity    fi
200540d6444eSAvi Kivity  else
200640d6444eSAvi Kivity    if test "$pie" = "yes"; then
200776ad07a4SPeter Maydell      error_exit "PIE not available due to missing toolchain support"
200840d6444eSAvi Kivity    else
200940d6444eSAvi Kivity      echo "Disabling PIE due to missing toolchain support"
201040d6444eSAvi Kivity      pie="no"
201140d6444eSAvi Kivity    fi
201240d6444eSAvi Kivity  fi
201346eef33bSBrad
2014e4a7b344SStefan Hajnoczi  if compile_prog "-Werror -fno-pie" "-nopie"; then
201546eef33bSBrad    CFLAGS_NOPIE="-fno-pie"
201646eef33bSBrad    LDFLAGS_NOPIE="-nopie"
201746eef33bSBrad  fi
201840d6444eSAvi Kivityfi
201940d6444eSAvi Kivity
202009dada40SPaolo Bonzini##########################################
202109dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
202209dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
202309dada40SPaolo Bonzini# specification is necessary
202409dada40SPaolo Bonzini
202509dada40SPaolo Bonziniif test "$cpu" = "i386"; then
202609dada40SPaolo Bonzini  cat > $TMPC << EOF
202709dada40SPaolo Bonzinistatic int sfaa(int *ptr)
202809dada40SPaolo Bonzini{
202909dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
203009dada40SPaolo Bonzini}
203109dada40SPaolo Bonzini
203209dada40SPaolo Bonziniint main(void)
203309dada40SPaolo Bonzini{
203409dada40SPaolo Bonzini  int val = 42;
20351405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
203609dada40SPaolo Bonzini  sfaa(&val);
203709dada40SPaolo Bonzini  return val;
203809dada40SPaolo Bonzini}
203909dada40SPaolo BonziniEOF
204009dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
204109dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
204209dada40SPaolo Bonzini  fi
204309dada40SPaolo Bonzinifi
204409dada40SPaolo Bonzini
204509dada40SPaolo Bonzini#########################################
2046ec530c81Sbellard# Solaris specific configure tool chain decisions
204709dada40SPaolo Bonzini
2048ec530c81Sbellardif test "$solaris" = "yes" ; then
20496792aa11SLoïc Minier  if has $install; then
20506792aa11SLoïc Minier    :
20516792aa11SLoïc Minier  else
205276ad07a4SPeter Maydell    error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
205376ad07a4SPeter Maydell        "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
205476ad07a4SPeter Maydell        "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2055ec530c81Sbellard  fi
205689138857SStefan Weil  if test "$(path_of $install)" = "/usr/sbin/install" ; then
205776ad07a4SPeter Maydell    error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
205876ad07a4SPeter Maydell        "try ginstall from the GNU fileutils available from www.blastwave.org" \
205976ad07a4SPeter Maydell        "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2060ec530c81Sbellard  fi
20616792aa11SLoïc Minier  if has ar; then
20626792aa11SLoïc Minier    :
20636792aa11SLoïc Minier  else
2064ec530c81Sbellard    if test -f /usr/ccs/bin/ar ; then
206576ad07a4SPeter Maydell      error_exit "No path includes ar" \
206676ad07a4SPeter Maydell          "Add /usr/ccs/bin to your path and rerun configure"
2067ec530c81Sbellard    fi
206876ad07a4SPeter Maydell    error_exit "No path includes ar"
2069ec530c81Sbellard  fi
2070ec530c81Sbellardfi
2071ec530c81Sbellard
2072afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
2073d880a3baSPaolo Bonzini    for target in $default_target_list; do
2074d880a3baSPaolo Bonzini        supported_target $target 2>/dev/null && \
2075d880a3baSPaolo Bonzini            target_list="$target_list $target"
2076d880a3baSPaolo Bonzini    done
2077d880a3baSPaolo Bonzini    target_list="${target_list# }"
2078121afa9eSAnthony Liguorielse
207989138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2080d880a3baSPaolo Bonzini    for target in $target_list; do
208125b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
208225b48338SPeter Maydell        # friendly error message than if we let it fall through.
208325b48338SPeter Maydell        case " $default_target_list " in
208425b48338SPeter Maydell            *" $target "*)
208525b48338SPeter Maydell                ;;
208625b48338SPeter Maydell            *)
208725b48338SPeter Maydell                error_exit "Unknown target name '$target'"
208825b48338SPeter Maydell                ;;
208925b48338SPeter Maydell        esac
2090d880a3baSPaolo Bonzini        supported_target $target || exit 1
209125b48338SPeter Maydell    done
2092d880a3baSPaolo Bonzinifi
209325b48338SPeter Maydell
2094f55fe278SPaolo Bonzini# see if system emulation was really requested
2095f55fe278SPaolo Bonzinicase " $target_list " in
2096f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
2097f55fe278SPaolo Bonzini  ;;
2098f55fe278SPaolo Bonzini  *) softmmu=no
2099f55fe278SPaolo Bonzini  ;;
2100f55fe278SPaolo Bonziniesac
21015327cf48Sbellard
2102249247c9SJuan Quintelafeature_not_found() {
2103249247c9SJuan Quintela  feature=$1
210421684af0SStewart Smith  remedy=$2
2105249247c9SJuan Quintela
210676ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
210721684af0SStewart Smith      "configure was not able to find it." \
210821684af0SStewart Smith      "$remedy"
2109249247c9SJuan Quintela}
2110249247c9SJuan Quintela
21117d13299dSbellard# ---
21127d13299dSbellard# big/little endian test
21137d13299dSbellardcat > $TMPC << EOF
211461cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
211561cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
211661cc919fSMike Frysingerextern int foo(short *, short *);
211761cc919fSMike Frysingerint main(int argc, char *argv[]) {
211861cc919fSMike Frysinger    return foo(big_endian, little_endian);
21197d13299dSbellard}
21207d13299dSbellardEOF
21217d13299dSbellard
212261cc919fSMike Frysingerif compile_object ; then
212312f15c91SAlice Frosi    if strings -a $TMPO | grep -q BiGeNdIaN ; then
212461cc919fSMike Frysinger        bigendian="yes"
212512f15c91SAlice Frosi    elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
212661cc919fSMike Frysinger        bigendian="no"
21277d13299dSbellard    else
21287d13299dSbellard        echo big/little test failed
21297d13299dSbellard    fi
21307d13299dSbellardelse
213161cc919fSMike Frysinger    echo big/little test failed
21327d13299dSbellardfi
21337d13299dSbellard
2134b0a47e79SJuan Quintela##########################################
2135a30878e7SPeter Maydell# cocoa implies not SDL or GTK
2136a30878e7SPeter Maydell# (the cocoa UI code currently assumes it is always the active UI
2137a30878e7SPeter Maydell# and doesn't interact well with other UI frontend code)
2138a30878e7SPeter Maydellif test "$cocoa" = "yes"; then
2139a30878e7SPeter Maydell    if test "$sdl" = "yes"; then
2140a30878e7SPeter Maydell        error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2141a30878e7SPeter Maydell    fi
2142a30878e7SPeter Maydell    if test "$gtk" = "yes"; then
2143a30878e7SPeter Maydell        error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2144a30878e7SPeter Maydell    fi
2145a30878e7SPeter Maydell    gtk=no
2146a30878e7SPeter Maydell    sdl=no
2147a30878e7SPeter Maydellfi
2148a30878e7SPeter Maydell
21496b39b063SEric Blake# Some versions of Mac OS X incorrectly define SIZE_MAX
21506b39b063SEric Blakecat > $TMPC << EOF
21516b39b063SEric Blake#include <stdint.h>
21526b39b063SEric Blake#include <stdio.h>
21536b39b063SEric Blakeint main(int argc, char *argv[]) {
21546b39b063SEric Blake    return printf("%zu", SIZE_MAX);
21556b39b063SEric Blake}
21566b39b063SEric BlakeEOF
21576b39b063SEric Blakehave_broken_size_max=no
21586b39b063SEric Blakeif ! compile_object -Werror ; then
21596b39b063SEric Blake    have_broken_size_max=yes
21606b39b063SEric Blakefi
21616b39b063SEric Blake
2162a30878e7SPeter Maydell##########################################
2163015a33bdSGonglei# L2TPV3 probe
2164015a33bdSGonglei
2165015a33bdSGongleicat > $TMPC <<EOF
2166015a33bdSGonglei#include <sys/socket.h>
2167bff6cb72SMichael Tokarev#include <linux/ip.h>
2168015a33bdSGongleiint main(void) { return sizeof(struct mmsghdr); }
2169015a33bdSGongleiEOF
2170015a33bdSGongleiif compile_prog "" "" ; then
2171015a33bdSGonglei  l2tpv3=yes
2172015a33bdSGongleielse
2173015a33bdSGonglei  l2tpv3=no
2174015a33bdSGongleifi
2175015a33bdSGonglei
2176299e6f19SPaolo Bonzini#########################################
2177299e6f19SPaolo Bonzini# vhost interdependencies and host support
2178299e6f19SPaolo Bonzini
2179299e6f19SPaolo Bonzini# vhost backends
2180299e6f19SPaolo Bonzinitest "$vhost_user" = "" && vhost_user=yes
2181299e6f19SPaolo Bonziniif test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2182299e6f19SPaolo Bonzini  error_exit "vhost-user isn't available on win32"
2183299e6f19SPaolo Bonzinifi
2184299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux
2185299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2186299e6f19SPaolo Bonzini  error_exit "vhost-kernel is only available on Linux"
2187299e6f19SPaolo Bonzinifi
2188299e6f19SPaolo Bonzini
2189299e6f19SPaolo Bonzini# vhost-kernel devices
2190299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2191299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2192299e6f19SPaolo Bonzini  error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2193299e6f19SPaolo Bonzinifi
2194299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2195299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2196299e6f19SPaolo Bonzini  error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2197299e6f19SPaolo Bonzinifi
2198299e6f19SPaolo Bonzini
2199299e6f19SPaolo Bonzini# vhost-user backends
2200299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2201299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2202299e6f19SPaolo Bonzini  error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2203299e6f19SPaolo Bonzinifi
2204299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2205299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2206299e6f19SPaolo Bonzini  error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2207299e6f19SPaolo Bonzinifi
2208299e6f19SPaolo Bonzini
2209299e6f19SPaolo Bonzini# OR the vhost-kernel and vhost-user values for simplicity
2210299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then
2211299e6f19SPaolo Bonzini  test "$vhost_net_user" = "yes" && vhost_net=yes
2212299e6f19SPaolo Bonzini  test "$vhost_kernel" = "yes" && vhost_net=yes
2213299e6f19SPaolo Bonzinifi
2214299e6f19SPaolo Bonzini
2215015a33bdSGonglei##########################################
22164d9310f4SDaniel P. Berrange# MinGW / Mingw-w64 localtime_r/gmtime_r check
22174d9310f4SDaniel P. Berrange
22184d9310f4SDaniel P. Berrangeif test "$mingw32" = "yes"; then
22194d9310f4SDaniel P. Berrange    # Some versions of MinGW / Mingw-w64 lack localtime_r
22204d9310f4SDaniel P. Berrange    # and gmtime_r entirely.
22214d9310f4SDaniel P. Berrange    #
22224d9310f4SDaniel P. Berrange    # Some versions of Mingw-w64 define a macro for
22234d9310f4SDaniel P. Berrange    # localtime_r/gmtime_r.
22244d9310f4SDaniel P. Berrange    #
22254d9310f4SDaniel P. Berrange    # Some versions of Mingw-w64 will define functions
22264d9310f4SDaniel P. Berrange    # for localtime_r/gmtime_r, but only if you have
22274d9310f4SDaniel P. Berrange    # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
22284d9310f4SDaniel P. Berrange    # though, unistd.h and pthread.h both define
22294d9310f4SDaniel P. Berrange    # that for you.
22304d9310f4SDaniel P. Berrange    #
22314d9310f4SDaniel P. Berrange    # So this #undef localtime_r and #include <unistd.h>
22324d9310f4SDaniel P. Berrange    # are not in fact redundant.
22334d9310f4SDaniel P. Berrangecat > $TMPC << EOF
22344d9310f4SDaniel P. Berrange#include <unistd.h>
22354d9310f4SDaniel P. Berrange#include <time.h>
22364d9310f4SDaniel P. Berrange#undef localtime_r
22374d9310f4SDaniel P. Berrangeint main(void) { localtime_r(NULL, NULL); return 0; }
22384d9310f4SDaniel P. BerrangeEOF
22394d9310f4SDaniel P. Berrange    if compile_prog "" "" ; then
22404d9310f4SDaniel P. Berrange        localtime_r="yes"
22414d9310f4SDaniel P. Berrange    else
22424d9310f4SDaniel P. Berrange        localtime_r="no"
22434d9310f4SDaniel P. Berrange    fi
22444d9310f4SDaniel P. Berrangefi
22454d9310f4SDaniel P. Berrange
22464d9310f4SDaniel P. Berrange##########################################
2247779ab5e3SStefan Weil# pkg-config probe
2248779ab5e3SStefan Weil
2249779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
225076ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
2251779ab5e3SStefan Weilfi
2252779ab5e3SStefan Weil
2253779ab5e3SStefan Weil##########################################
2254b0a47e79SJuan Quintela# NPTL probe
2255b0a47e79SJuan Quintela
225624cb36a6SPeter Maydellif test "$linux_user" = "yes"; then
2257bd0c5661Spbrook  cat > $TMPC <<EOF
2258bd0c5661Spbrook#include <sched.h>
225930813ceaSpbrook#include <linux/futex.h>
2260182eacc0SStefan Weilint main(void) {
2261bd0c5661Spbrook#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2262bd0c5661Spbrook#error bork
2263bd0c5661Spbrook#endif
2264182eacc0SStefan Weil  return 0;
2265bd0c5661Spbrook}
2266bd0c5661SpbrookEOF
226724cb36a6SPeter Maydell  if ! compile_object ; then
226821684af0SStewart Smith    feature_not_found "nptl" "Install glibc and linux kernel headers."
2269b0a47e79SJuan Quintela  fi
2270bd0c5661Spbrookfi
2271bd0c5661Spbrook
2272ac62922eSbalrog##########################################
2273607dacd0Sqiaonuohan# lzo check
2274607dacd0Sqiaonuohan
2275607dacd0Sqiaonuohanif test "$lzo" != "no" ; then
2276607dacd0Sqiaonuohan    cat > $TMPC << EOF
2277607dacd0Sqiaonuohan#include <lzo/lzo1x.h>
2278607dacd0Sqiaonuohanint main(void) { lzo_version(); return 0; }
2279607dacd0SqiaonuohanEOF
2280607dacd0Sqiaonuohan    if compile_prog "" "-llzo2" ; then
2281607dacd0Sqiaonuohan        libs_softmmu="$libs_softmmu -llzo2"
2282b25c9dffSStefan Weil        lzo="yes"
2283b25c9dffSStefan Weil    else
2284b25c9dffSStefan Weil        if test "$lzo" = "yes"; then
2285b25c9dffSStefan Weil            feature_not_found "liblzo2" "Install liblzo2 devel"
2286b25c9dffSStefan Weil        fi
2287b25c9dffSStefan Weil        lzo="no"
2288b25c9dffSStefan Weil    fi
2289607dacd0Sqiaonuohanfi
2290607dacd0Sqiaonuohan
2291607dacd0Sqiaonuohan##########################################
2292607dacd0Sqiaonuohan# snappy check
2293607dacd0Sqiaonuohan
2294607dacd0Sqiaonuohanif test "$snappy" != "no" ; then
2295607dacd0Sqiaonuohan    cat > $TMPC << EOF
2296607dacd0Sqiaonuohan#include <snappy-c.h>
2297607dacd0Sqiaonuohanint main(void) { snappy_max_compressed_length(4096); return 0; }
2298607dacd0SqiaonuohanEOF
2299607dacd0Sqiaonuohan    if compile_prog "" "-lsnappy" ; then
2300607dacd0Sqiaonuohan        libs_softmmu="$libs_softmmu -lsnappy"
2301b25c9dffSStefan Weil        snappy="yes"
2302b25c9dffSStefan Weil    else
2303b25c9dffSStefan Weil        if test "$snappy" = "yes"; then
2304b25c9dffSStefan Weil            feature_not_found "libsnappy" "Install libsnappy devel"
2305b25c9dffSStefan Weil        fi
2306b25c9dffSStefan Weil        snappy="no"
2307b25c9dffSStefan Weil    fi
2308607dacd0Sqiaonuohanfi
2309607dacd0Sqiaonuohan
2310607dacd0Sqiaonuohan##########################################
23116b383c08SPeter Wu# bzip2 check
23126b383c08SPeter Wu
23136b383c08SPeter Wuif test "$bzip2" != "no" ; then
23146b383c08SPeter Wu    cat > $TMPC << EOF
23156b383c08SPeter Wu#include <bzlib.h>
23166b383c08SPeter Wuint main(void) { BZ2_bzlibVersion(); return 0; }
23176b383c08SPeter WuEOF
23186b383c08SPeter Wu    if compile_prog "" "-lbz2" ; then
23196b383c08SPeter Wu        bzip2="yes"
23206b383c08SPeter Wu    else
23216b383c08SPeter Wu        if test "$bzip2" = "yes"; then
23226b383c08SPeter Wu            feature_not_found "libbzip2" "Install libbzip2 devel"
23236b383c08SPeter Wu        fi
23246b383c08SPeter Wu        bzip2="no"
23256b383c08SPeter Wu    fi
23266b383c08SPeter Wufi
23276b383c08SPeter Wu
23286b383c08SPeter Wu##########################################
232983bc1f97SJulio Faracco# lzfse check
233083bc1f97SJulio Faracco
233183bc1f97SJulio Faraccoif test "$lzfse" != "no" ; then
233283bc1f97SJulio Faracco    cat > $TMPC << EOF
233383bc1f97SJulio Faracco#include <lzfse.h>
233483bc1f97SJulio Faraccoint main(void) { lzfse_decode_scratch_size(); return 0; }
233583bc1f97SJulio FaraccoEOF
233683bc1f97SJulio Faracco    if compile_prog "" "-llzfse" ; then
233783bc1f97SJulio Faracco        lzfse="yes"
233883bc1f97SJulio Faracco    else
233983bc1f97SJulio Faracco        if test "$lzfse" = "yes"; then
234083bc1f97SJulio Faracco            feature_not_found "lzfse" "Install lzfse devel"
234183bc1f97SJulio Faracco        fi
234283bc1f97SJulio Faracco        lzfse="no"
234383bc1f97SJulio Faracco    fi
234483bc1f97SJulio Faraccofi
234583bc1f97SJulio Faracco
234683bc1f97SJulio Faracco##########################################
2347f794573eSEduardo Otubo# libseccomp check
2348f794573eSEduardo Otubo
2349d0699bd3SMarc-André Lureaulibseccomp_minver="2.2.0"
2350f794573eSEduardo Otuboif test "$seccomp" != "no" ; then
2351693e5910SAndrew Jones    case "$cpu" in
2352d0699bd3SMarc-André Lureau    i386|x86_64|mips)
23535ce43972SJames Hogan        ;;
2354693e5910SAndrew Jones    arm|aarch64)
2355693e5910SAndrew Jones        libseccomp_minver="2.2.3"
2356693e5910SAndrew Jones        ;;
23573aa35fcfSThomas Huth    ppc|ppc64|s390x)
23583e684455SMichael Strosaker        libseccomp_minver="2.3.0"
23593e684455SMichael Strosaker        ;;
2360693e5910SAndrew Jones    *)
2361693e5910SAndrew Jones        libseccomp_minver=""
2362693e5910SAndrew Jones        ;;
2363693e5910SAndrew Jones    esac
2364693e5910SAndrew Jones
2365693e5910SAndrew Jones    if test "$libseccomp_minver" != "" &&
2366693e5910SAndrew Jones       $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2367c3883e1fSFam Zheng        seccomp_cflags="$($pkg_config --cflags libseccomp)"
2368c3883e1fSFam Zheng        seccomp_libs="$($pkg_config --libs libseccomp)"
2369f794573eSEduardo Otubo        seccomp="yes"
2370f794573eSEduardo Otubo    else
2371f794573eSEduardo Otubo        if test "$seccomp" = "yes" ; then
2372693e5910SAndrew Jones            if test "$libseccomp_minver" != "" ; then
2373693e5910SAndrew Jones                feature_not_found "libseccomp" \
2374693e5910SAndrew Jones                    "Install libseccomp devel >= $libseccomp_minver"
2375693e5910SAndrew Jones            else
2376693e5910SAndrew Jones                feature_not_found "libseccomp" \
2377693e5910SAndrew Jones                    "libseccomp is not supported for host cpu $cpu"
2378693e5910SAndrew Jones            fi
2379896848f0SEduardo Otubo        fi
2380e84d5956SYann E. MORIN        seccomp="no"
2381f794573eSEduardo Otubo    fi
2382f794573eSEduardo Otubofi
2383f794573eSEduardo Otubo##########################################
2384e37630caSaliguori# xen probe
2385e37630caSaliguori
2386fc321b4bSJuan Quintelaif test "$xen" != "no" ; then
2387c1cdd9d5SJuergen Gross  # Check whether Xen library path is specified via --extra-ldflags to avoid
2388c1cdd9d5SJuergen Gross  # overriding this setting with pkg-config output. If not, try pkg-config
2389c1cdd9d5SJuergen Gross  # to obtain all needed flags.
2390c1cdd9d5SJuergen Gross
2391c1cdd9d5SJuergen Gross  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2392c1cdd9d5SJuergen Gross     $pkg_config --exists xencontrol ; then
2393c1cdd9d5SJuergen Gross    xen_ctrl_version="$(printf '%d%02d%02d' \
2394c1cdd9d5SJuergen Gross      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2395c1cdd9d5SJuergen Gross    xen=yes
2396c1cdd9d5SJuergen Gross    xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2397c1cdd9d5SJuergen Gross    xen_pc="$xen_pc xenevtchn xendevicemodel"
239858ea9a7aSAnthony PERARD    if $pkg_config --exists xentoolcore; then
239958ea9a7aSAnthony PERARD      xen_pc="$xen_pc xentoolcore"
240058ea9a7aSAnthony PERARD    fi
2401c1cdd9d5SJuergen Gross    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2402c1cdd9d5SJuergen Gross    libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2403c1cdd9d5SJuergen Gross  else
2404c1cdd9d5SJuergen Gross
2405b2266beeSJuan Quintela    xen_libs="-lxenstore -lxenctrl -lxenguest"
2406d9506cabSAnthony PERARD    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2407d5b93ddfSAnthony PERARD
240850ced5b3SStefan Weil    # First we test whether Xen headers and libraries are available.
240950ced5b3SStefan Weil    # If no, we are done and there is no Xen support.
241050ced5b3SStefan Weil    # If yes, more tests are run to detect the Xen version.
241150ced5b3SStefan Weil
241250ced5b3SStefan Weil    # Xen (any)
241350ced5b3SStefan Weil    cat > $TMPC <<EOF
241450ced5b3SStefan Weil#include <xenctrl.h>
241550ced5b3SStefan Weilint main(void) {
241650ced5b3SStefan Weil  return 0;
241750ced5b3SStefan Weil}
241850ced5b3SStefan WeilEOF
241950ced5b3SStefan Weil    if ! compile_prog "" "$xen_libs" ; then
242050ced5b3SStefan Weil      # Xen not found
242150ced5b3SStefan Weil      if test "$xen" = "yes" ; then
242221684af0SStewart Smith        feature_not_found "xen" "Install xen devel"
242350ced5b3SStefan Weil      fi
242450ced5b3SStefan Weil      xen=no
242550ced5b3SStefan Weil
2426d5b93ddfSAnthony PERARD    # Xen unstable
242769deef08SPeter Maydell    elif
242869deef08SPeter Maydell        cat > $TMPC <<EOF &&
24292cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API
24302cbf8903SRoss Lagerwall#define __XEN_TOOLS__
24312cbf8903SRoss Lagerwall#include <xendevicemodel.h>
2432d3c49ebbSPaul Durrant#include <xenforeignmemory.h>
24332cbf8903SRoss Lagerwallint main(void) {
24342cbf8903SRoss Lagerwall  xendevicemodel_handle *xd;
2435d3c49ebbSPaul Durrant  xenforeignmemory_handle *xfmem;
24362cbf8903SRoss Lagerwall
24372cbf8903SRoss Lagerwall  xd = xendevicemodel_open(0, 0);
24382cbf8903SRoss Lagerwall  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
24392cbf8903SRoss Lagerwall
2440d3c49ebbSPaul Durrant  xfmem = xenforeignmemory_open(0, 0);
2441d3c49ebbSPaul Durrant  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2442d3c49ebbSPaul Durrant
24432cbf8903SRoss Lagerwall  return 0;
24442cbf8903SRoss Lagerwall}
24452cbf8903SRoss LagerwallEOF
24462cbf8903SRoss Lagerwall        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
24472cbf8903SRoss Lagerwall      then
24482cbf8903SRoss Lagerwall      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
24492cbf8903SRoss Lagerwall      xen_ctrl_version=41100
24502cbf8903SRoss Lagerwall      xen=yes
24512cbf8903SRoss Lagerwall    elif
24522cbf8903SRoss Lagerwall        cat > $TMPC <<EOF &&
24535ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API
24545ba3d756SIgor Druzhinin#include <xenforeignmemory.h>
245558ea9a7aSAnthony PERARD#include <xentoolcore.h>
24565ba3d756SIgor Druzhininint main(void) {
24575ba3d756SIgor Druzhinin  xenforeignmemory_handle *xfmem;
24585ba3d756SIgor Druzhinin
24595ba3d756SIgor Druzhinin  xfmem = xenforeignmemory_open(0, 0);
24605ba3d756SIgor Druzhinin  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
246158ea9a7aSAnthony PERARD  xentoolcore_restrict_all(0);
24625ba3d756SIgor Druzhinin
24635ba3d756SIgor Druzhinin  return 0;
24645ba3d756SIgor Druzhinin}
24655ba3d756SIgor DruzhininEOF
246658ea9a7aSAnthony PERARD        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
24675ba3d756SIgor Druzhinin      then
246858ea9a7aSAnthony PERARD      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
24695ba3d756SIgor Druzhinin      xen_ctrl_version=41000
24705ba3d756SIgor Druzhinin      xen=yes
24715ba3d756SIgor Druzhinin    elif
24725ba3d756SIgor Druzhinin        cat > $TMPC <<EOF &&
2473da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API
2474da8090ccSPaul Durrant#define __XEN_TOOLS__
2475da8090ccSPaul Durrant#include <xendevicemodel.h>
2476da8090ccSPaul Durrantint main(void) {
2477da8090ccSPaul Durrant  xendevicemodel_handle *xd;
2478da8090ccSPaul Durrant
2479da8090ccSPaul Durrant  xd = xendevicemodel_open(0, 0);
2480da8090ccSPaul Durrant  xendevicemodel_close(xd);
2481da8090ccSPaul Durrant
2482da8090ccSPaul Durrant  return 0;
2483da8090ccSPaul Durrant}
2484da8090ccSPaul DurrantEOF
2485da8090ccSPaul Durrant        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2486da8090ccSPaul Durrant      then
2487da8090ccSPaul Durrant      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2488f1167ee6SJuergen Gross      xen_ctrl_version=40900
2489da8090ccSPaul Durrant      xen=yes
2490da8090ccSPaul Durrant    elif
2491da8090ccSPaul Durrant        cat > $TMPC <<EOF &&
24925eeb39c2SIan Campbell/*
24935eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat
24945eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given.
2495b6eb9b45SPaulina Szubarczyk *
2496b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and
2497b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented.
2498b6eb9b45SPaulina Szubarczyk */
2499b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API
2500b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API
2501b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2502b6eb9b45SPaulina Szubarczyk#include <xenctrl.h>
2503b6eb9b45SPaulina Szubarczyk#include <xenstore.h>
2504b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h>
2505b6eb9b45SPaulina Szubarczyk#include <xengnttab.h>
2506b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h>
2507b6eb9b45SPaulina Szubarczyk#include <stdint.h>
2508b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h>
2509b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS)
2510b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined
2511b6eb9b45SPaulina Szubarczyk#endif
2512b6eb9b45SPaulina Szubarczykint main(void) {
2513b6eb9b45SPaulina Szubarczyk  xc_interface *xc = NULL;
2514b6eb9b45SPaulina Szubarczyk  xenforeignmemory_handle *xfmem;
2515b6eb9b45SPaulina Szubarczyk  xenevtchn_handle *xe;
2516b6eb9b45SPaulina Szubarczyk  xengnttab_handle *xg;
2517b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy_segment_t* seg = NULL;
2518b6eb9b45SPaulina Szubarczyk
2519b6eb9b45SPaulina Szubarczyk  xs_daemon_open();
2520b6eb9b45SPaulina Szubarczyk
2521b6eb9b45SPaulina Szubarczyk  xc = xc_interface_open(0, 0, 0);
2522b6eb9b45SPaulina Szubarczyk  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2523b6eb9b45SPaulina Szubarczyk  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2524b6eb9b45SPaulina Szubarczyk  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2525b6eb9b45SPaulina Szubarczyk  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2526b6eb9b45SPaulina Szubarczyk
2527b6eb9b45SPaulina Szubarczyk  xfmem = xenforeignmemory_open(0, 0);
2528b6eb9b45SPaulina Szubarczyk  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2529b6eb9b45SPaulina Szubarczyk
2530b6eb9b45SPaulina Szubarczyk  xe = xenevtchn_open(0, 0);
2531b6eb9b45SPaulina Szubarczyk  xenevtchn_fd(xe);
2532b6eb9b45SPaulina Szubarczyk
2533b6eb9b45SPaulina Szubarczyk  xg = xengnttab_open(0, 0);
2534b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy(xg, 0, seg);
2535b6eb9b45SPaulina Szubarczyk
2536b6eb9b45SPaulina Szubarczyk  return 0;
2537b6eb9b45SPaulina Szubarczyk}
2538b6eb9b45SPaulina SzubarczykEOF
2539b6eb9b45SPaulina Szubarczyk        compile_prog "" "$xen_libs $xen_stable_libs"
2540b6eb9b45SPaulina Szubarczyk      then
2541f1167ee6SJuergen Gross      xen_ctrl_version=40800
2542b6eb9b45SPaulina Szubarczyk      xen=yes
2543b6eb9b45SPaulina Szubarczyk    elif
2544b6eb9b45SPaulina Szubarczyk        cat > $TMPC <<EOF &&
2545b6eb9b45SPaulina Szubarczyk/*
2546b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat
2547b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given.
25485eeb39c2SIan Campbell */
25495eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API
25505eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API
25515eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API
25525eeb39c2SIan Campbell#include <xenctrl.h>
25535eeb39c2SIan Campbell#include <xenstore.h>
25545eeb39c2SIan Campbell#include <xenevtchn.h>
25555eeb39c2SIan Campbell#include <xengnttab.h>
25565eeb39c2SIan Campbell#include <xenforeignmemory.h>
25575eeb39c2SIan Campbell#include <stdint.h>
25585eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h>
25595eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS)
25605eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined
25615eeb39c2SIan Campbell#endif
25625eeb39c2SIan Campbellint main(void) {
25635eeb39c2SIan Campbell  xc_interface *xc = NULL;
25645eeb39c2SIan Campbell  xenforeignmemory_handle *xfmem;
25655eeb39c2SIan Campbell  xenevtchn_handle *xe;
25665eeb39c2SIan Campbell  xengnttab_handle *xg;
25675eeb39c2SIan Campbell
25685eeb39c2SIan Campbell  xs_daemon_open();
25695eeb39c2SIan Campbell
25705eeb39c2SIan Campbell  xc = xc_interface_open(0, 0, 0);
25715eeb39c2SIan Campbell  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
25725eeb39c2SIan Campbell  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
25735eeb39c2SIan Campbell  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
25745eeb39c2SIan Campbell  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
25755eeb39c2SIan Campbell
25765eeb39c2SIan Campbell  xfmem = xenforeignmemory_open(0, 0);
25775eeb39c2SIan Campbell  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
25785eeb39c2SIan Campbell
25795eeb39c2SIan Campbell  xe = xenevtchn_open(0, 0);
25805eeb39c2SIan Campbell  xenevtchn_fd(xe);
25815eeb39c2SIan Campbell
25825eeb39c2SIan Campbell  xg = xengnttab_open(0, 0);
25835eeb39c2SIan Campbell  xengnttab_map_grant_ref(xg, 0, 0, 0);
25845eeb39c2SIan Campbell
25855eeb39c2SIan Campbell  return 0;
25865eeb39c2SIan Campbell}
25875eeb39c2SIan CampbellEOF
25885eeb39c2SIan Campbell        compile_prog "" "$xen_libs $xen_stable_libs"
25895eeb39c2SIan Campbell      then
2590f1167ee6SJuergen Gross      xen_ctrl_version=40701
25915eeb39c2SIan Campbell      xen=yes
2592cdadde39SRoger Pau Monne
2593cdadde39SRoger Pau Monne    # Xen 4.6
2594cdadde39SRoger Pau Monne    elif
2595cdadde39SRoger Pau Monne        cat > $TMPC <<EOF &&
2596cdadde39SRoger Pau Monne#include <xenctrl.h>
2597e108a3c1SAnthony PERARD#include <xenstore.h>
2598d5b93ddfSAnthony PERARD#include <stdint.h>
2599d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
2600d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
2601d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
2602d5b93ddfSAnthony PERARD#endif
2603d5b93ddfSAnthony PERARDint main(void) {
2604d5b93ddfSAnthony PERARD  xc_interface *xc;
2605d5b93ddfSAnthony PERARD  xs_daemon_open();
2606d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
2607d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2608d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
2609b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
26108688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2611d8b441a3SJan Beulich  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
261220a544c7SKonrad Rzeszutek Wilk  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2613d8b441a3SJan Beulich  return 0;
2614d8b441a3SJan Beulich}
2615d8b441a3SJan BeulichEOF
2616d8b441a3SJan Beulich        compile_prog "" "$xen_libs"
2617d8b441a3SJan Beulich      then
2618f1167ee6SJuergen Gross      xen_ctrl_version=40600
2619d8b441a3SJan Beulich      xen=yes
2620d8b441a3SJan Beulich
2621d8b441a3SJan Beulich    # Xen 4.5
2622d8b441a3SJan Beulich    elif
2623d8b441a3SJan Beulich        cat > $TMPC <<EOF &&
2624d8b441a3SJan Beulich#include <xenctrl.h>
2625d8b441a3SJan Beulich#include <xenstore.h>
2626d8b441a3SJan Beulich#include <stdint.h>
2627d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h>
2628d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS)
2629d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined
2630d8b441a3SJan Beulich#endif
2631d8b441a3SJan Beulichint main(void) {
2632d8b441a3SJan Beulich  xc_interface *xc;
2633d8b441a3SJan Beulich  xs_daemon_open();
2634d8b441a3SJan Beulich  xc = xc_interface_open(0, 0, 0);
2635d8b441a3SJan Beulich  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2636d8b441a3SJan Beulich  xc_gnttab_open(NULL, 0);
2637d8b441a3SJan Beulich  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2638d8b441a3SJan Beulich  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
26393996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
26403996e85cSPaul Durrant  return 0;
26413996e85cSPaul Durrant}
26423996e85cSPaul DurrantEOF
26433996e85cSPaul Durrant        compile_prog "" "$xen_libs"
26443996e85cSPaul Durrant      then
2645f1167ee6SJuergen Gross      xen_ctrl_version=40500
26463996e85cSPaul Durrant      xen=yes
26473996e85cSPaul Durrant
26483996e85cSPaul Durrant    elif
26493996e85cSPaul Durrant        cat > $TMPC <<EOF &&
26503996e85cSPaul Durrant#include <xenctrl.h>
26513996e85cSPaul Durrant#include <xenstore.h>
26523996e85cSPaul Durrant#include <stdint.h>
26533996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
26543996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
26553996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
26563996e85cSPaul Durrant#endif
26573996e85cSPaul Durrantint main(void) {
26583996e85cSPaul Durrant  xc_interface *xc;
26593996e85cSPaul Durrant  xs_daemon_open();
26603996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
26613996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
26623996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
26633996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
26643996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
26658688e065SStefano Stabellini  return 0;
26668688e065SStefano Stabellini}
26678688e065SStefano StabelliniEOF
26688688e065SStefano Stabellini        compile_prog "" "$xen_libs"
266969deef08SPeter Maydell      then
2670f1167ee6SJuergen Gross      xen_ctrl_version=40200
26718688e065SStefano Stabellini      xen=yes
26728688e065SStefano Stabellini
2673e37630caSaliguori    else
2674fc321b4bSJuan Quintela      if test "$xen" = "yes" ; then
2675edfb07edSIan Campbell        feature_not_found "xen (unsupported version)" \
2676edfb07edSIan Campbell                          "Install a supported xen (xen 4.2 or newer)"
2677fc321b4bSJuan Quintela      fi
2678fc321b4bSJuan Quintela      xen=no
2679e37630caSaliguori    fi
2680d5b93ddfSAnthony PERARD
2681d5b93ddfSAnthony PERARD    if test "$xen" = yes; then
2682f1167ee6SJuergen Gross      if test $xen_ctrl_version -ge 40701  ; then
26835eeb39c2SIan Campbell        libs_softmmu="$xen_stable_libs $libs_softmmu"
26845eeb39c2SIan Campbell      fi
2685d5b93ddfSAnthony PERARD      libs_softmmu="$xen_libs $libs_softmmu"
2686d5b93ddfSAnthony PERARD    fi
2687e37630caSaliguori  fi
2688c1cdd9d5SJuergen Grossfi
2689e37630caSaliguori
2690eb6fda0fSAnthony PERARDif test "$xen_pci_passthrough" != "no"; then
2691edfb07edSIan Campbell  if test "$xen" = "yes" && test "$linux" = "yes"; then
2692eb6fda0fSAnthony PERARD    xen_pci_passthrough=yes
2693eb6fda0fSAnthony PERARD  else
2694eb6fda0fSAnthony PERARD    if test "$xen_pci_passthrough" = "yes"; then
269576ad07a4SPeter Maydell      error_exit "User requested feature Xen PCI Passthrough" \
269676ad07a4SPeter Maydell          " but this feature requires /sys from Linux"
2697eb6fda0fSAnthony PERARD    fi
2698eb6fda0fSAnthony PERARD    xen_pci_passthrough=no
2699eb6fda0fSAnthony PERARD  fi
2700eb6fda0fSAnthony PERARDfi
2701eb6fda0fSAnthony PERARD
2702e37630caSaliguori##########################################
2703d661d9a4SJustin Terry (VM)# Windows Hypervisor Platform accelerator (WHPX) check
2704d661d9a4SJustin Terry (VM)if test "$whpx" != "no" ; then
2705327fccb2SLucian Petrut    if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2706d661d9a4SJustin Terry (VM)        whpx="yes"
2707d661d9a4SJustin Terry (VM)    else
2708d661d9a4SJustin Terry (VM)        if test "$whpx" = "yes"; then
270953537bb1SJustin Terry (VM) via Qemu-devel            feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2710d661d9a4SJustin Terry (VM)        fi
2711d661d9a4SJustin Terry (VM)        whpx="no"
2712d661d9a4SJustin Terry (VM)    fi
2713d661d9a4SJustin Terry (VM)fi
2714d661d9a4SJustin Terry (VM)
2715d661d9a4SJustin Terry (VM)##########################################
2716dfffc653SJuan Quintela# Sparse probe
2717dfffc653SJuan Quintelaif test "$sparse" != "no" ; then
27180dba6195SLoïc Minier  if has cgcc; then
2719dfffc653SJuan Quintela    sparse=yes
2720dfffc653SJuan Quintela  else
2721dfffc653SJuan Quintela    if test "$sparse" = "yes" ; then
272221684af0SStewart Smith      feature_not_found "sparse" "Install sparse binary"
2723dfffc653SJuan Quintela    fi
2724dfffc653SJuan Quintela    sparse=no
2725dfffc653SJuan Quintela  fi
2726dfffc653SJuan Quintelafi
2727dfffc653SJuan Quintela
2728dfffc653SJuan Quintela##########################################
2729f676c67eSJeremy White# X11 probe
2730f676c67eSJeremy Whiteif $pkg_config --exists "x11"; then
27318781595bSGerd Hoffmann    have_x11=yes
273289138857SStefan Weil    x11_cflags=$($pkg_config --cflags x11)
273389138857SStefan Weil    x11_libs=$($pkg_config --libs x11)
2734f676c67eSJeremy Whitefi
2735f676c67eSJeremy White
2736f676c67eSJeremy White##########################################
2737a4ccabcfSAnthony Liguori# GTK probe
2738a4ccabcfSAnthony Liguori
27395a464e6cSPeter Xuif test "$gtk" != "no"; then
274089d85cdeSDaniel P. Berrangé    gtkpackage="gtk+-3.0"
274189d85cdeSDaniel P. Berrangé    gtkx11package="gtk+-x11-3.0"
274258296cb6SDaniel P. Berrangé    gtkversion="3.14.0"
2743bbbf9bfbSStefan Weil    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
274489138857SStefan Weil        gtk_cflags=$($pkg_config --cflags $gtkpackage)
274589138857SStefan Weil        gtk_libs=$($pkg_config --libs $gtkpackage)
274689138857SStefan Weil        gtk_version=$($pkg_config --modversion $gtkpackage)
27470a337ed0SGerd Hoffmann        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
27488781595bSGerd Hoffmann            need_x11=yes
2749f676c67eSJeremy White            gtk_cflags="$gtk_cflags $x11_cflags"
2750f676c67eSJeremy White            gtk_libs="$gtk_libs $x11_libs"
27510a337ed0SGerd Hoffmann        fi
2752bbbf9bfbSStefan Weil        gtk="yes"
2753bbbf9bfbSStefan Weil    elif test "$gtk" = "yes"; then
27545fe309ffSGerd Hoffmann        feature_not_found "gtk" "Install gtk3-devel"
2755bbbf9bfbSStefan Weil    else
2756bbbf9bfbSStefan Weil        gtk="no"
2757bbbf9bfbSStefan Weil    fi
2758bbbf9bfbSStefan Weilfi
2759bbbf9bfbSStefan Weil
2760ddbb0d09SDaniel P. Berrange
2761ddbb0d09SDaniel P. Berrange##########################################
2762ddbb0d09SDaniel P. Berrange# GNUTLS probe
2763ddbb0d09SDaniel P. Berrange
2764ddbb0d09SDaniel P. Berrangeif test "$gnutls" != "no"; then
2765a0722409SDaniel P. Berrangé    if $pkg_config --exists "gnutls >= 3.1.18"; then
276689138857SStefan Weil        gnutls_cflags=$($pkg_config --cflags gnutls)
276789138857SStefan Weil        gnutls_libs=$($pkg_config --libs gnutls)
2768ddbb0d09SDaniel P. Berrange        libs_softmmu="$gnutls_libs $libs_softmmu"
2769ddbb0d09SDaniel P. Berrange        libs_tools="$gnutls_libs $libs_tools"
2770ddbb0d09SDaniel P. Berrange	QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2771ddbb0d09SDaniel P. Berrange        gnutls="yes"
2772ddbb0d09SDaniel P. Berrange    elif test "$gnutls" = "yes"; then
2773a0722409SDaniel P. Berrangé	feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2774ddbb0d09SDaniel P. Berrange    else
2775ddbb0d09SDaniel P. Berrange        gnutls="no"
2776ddbb0d09SDaniel P. Berrange    fi
2777ddbb0d09SDaniel P. Berrangefi
2778ddbb0d09SDaniel P. Berrange
277991bfcdb0SDaniel P. Berrange
278091bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-gcrypt flag,
278191bfcdb0SDaniel P. Berrange# then mark as disabled if user requested nettle
2782a0722409SDaniel P. Berrangé# explicitly
278391bfcdb0SDaniel P. Berrangeif test -z "$gcrypt"
278491bfcdb0SDaniel P. Berrangethen
2785a0722409SDaniel P. Berrangé    if test "$nettle" = "yes"
278691bfcdb0SDaniel P. Berrange    then
278791bfcdb0SDaniel P. Berrange        gcrypt="no"
278891bfcdb0SDaniel P. Berrange    fi
278991bfcdb0SDaniel P. Berrangefi
279091bfcdb0SDaniel P. Berrange
279191bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-nettle flag,
279291bfcdb0SDaniel P. Berrange# then mark as disabled if user requested gcrypt
2793a0722409SDaniel P. Berrangé# explicitly
279491bfcdb0SDaniel P. Berrangeif test -z "$nettle"
279591bfcdb0SDaniel P. Berrangethen
2796a0722409SDaniel P. Berrangé    if test "$gcrypt" = "yes"
279791bfcdb0SDaniel P. Berrange    then
279891bfcdb0SDaniel P. Berrange        nettle="no"
279991bfcdb0SDaniel P. Berrange    fi
280091bfcdb0SDaniel P. Berrangefi
280191bfcdb0SDaniel P. Berrange
2802dea7a64eSDaniel P. Berrangéhas_libgcrypt() {
280391bfcdb0SDaniel P. Berrange    if ! has "libgcrypt-config"
280491bfcdb0SDaniel P. Berrange    then
280591bfcdb0SDaniel P. Berrange	return 1
280691bfcdb0SDaniel P. Berrange    fi
280791bfcdb0SDaniel P. Berrange
280891bfcdb0SDaniel P. Berrange    if test -n "$cross_prefix"
280991bfcdb0SDaniel P. Berrange    then
281089138857SStefan Weil	host=$(libgcrypt-config --host)
281191bfcdb0SDaniel P. Berrange	if test "$host-" != $cross_prefix
281291bfcdb0SDaniel P. Berrange	then
281391bfcdb0SDaniel P. Berrange	    return 1
281491bfcdb0SDaniel P. Berrange	fi
281591bfcdb0SDaniel P. Berrange    fi
281691bfcdb0SDaniel P. Berrange
2817dea7a64eSDaniel P. Berrangé    maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2818dea7a64eSDaniel P. Berrangé    min=`libgcrypt-config --version | awk -F . '{print $2}'`
2819dea7a64eSDaniel P. Berrangé
2820dea7a64eSDaniel P. Berrangé    if test $maj != 1 || test $min -lt 5
2821dea7a64eSDaniel P. Berrangé    then
2822dea7a64eSDaniel P. Berrangé       return 1
2823dea7a64eSDaniel P. Berrangé    fi
2824dea7a64eSDaniel P. Berrangé
282591bfcdb0SDaniel P. Berrange    return 0
282691bfcdb0SDaniel P. Berrange}
282791bfcdb0SDaniel P. Berrange
2828a0722409SDaniel P. Berrangé
2829a0722409SDaniel P. Berrangéif test "$nettle" != "no"; then
283064dd2f3bSDaniel P. Berrangé    if $pkg_config --exists "nettle >= 2.7.1"; then
2831a0722409SDaniel P. Berrangé        nettle_cflags=$($pkg_config --cflags nettle)
2832a0722409SDaniel P. Berrangé        nettle_libs=$($pkg_config --libs nettle)
2833a0722409SDaniel P. Berrangé        nettle_version=$($pkg_config --modversion nettle)
2834a0722409SDaniel P. Berrangé        libs_softmmu="$nettle_libs $libs_softmmu"
2835a0722409SDaniel P. Berrangé        libs_tools="$nettle_libs $libs_tools"
2836a0722409SDaniel P. Berrangé        QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2837a0722409SDaniel P. Berrangé        nettle="yes"
2838a0722409SDaniel P. Berrangé
2839a0722409SDaniel P. Berrangé        if test -z "$gcrypt"; then
2840a0722409SDaniel P. Berrangé           gcrypt="no"
2841a0722409SDaniel P. Berrangé        fi
2842a0722409SDaniel P. Berrangé    else
2843a0722409SDaniel P. Berrangé        if test "$nettle" = "yes"; then
284464dd2f3bSDaniel P. Berrangé            feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2845a0722409SDaniel P. Berrangé        else
2846a0722409SDaniel P. Berrangé            nettle="no"
2847a0722409SDaniel P. Berrangé        fi
2848a0722409SDaniel P. Berrangé    fi
2849a0722409SDaniel P. Berrangéfi
2850a0722409SDaniel P. Berrangé
285191bfcdb0SDaniel P. Berrangeif test "$gcrypt" != "no"; then
2852dea7a64eSDaniel P. Berrangé    if has_libgcrypt; then
285389138857SStefan Weil        gcrypt_cflags=$(libgcrypt-config --cflags)
285489138857SStefan Weil        gcrypt_libs=$(libgcrypt-config --libs)
285591bfcdb0SDaniel P. Berrange        # Debian has remove -lgpg-error from libgcrypt-config
285691bfcdb0SDaniel P. Berrange        # as it "spreads unnecessary dependencies" which in
285791bfcdb0SDaniel P. Berrange        # turn breaks static builds...
285891bfcdb0SDaniel P. Berrange        if test "$static" = "yes"
285991bfcdb0SDaniel P. Berrange        then
286091bfcdb0SDaniel P. Berrange            gcrypt_libs="$gcrypt_libs -lgpg-error"
286191bfcdb0SDaniel P. Berrange        fi
286262893b67SDaniel P. Berrange        libs_softmmu="$gcrypt_libs $libs_softmmu"
286362893b67SDaniel P. Berrange        libs_tools="$gcrypt_libs $libs_tools"
286462893b67SDaniel P. Berrange        QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
286591bfcdb0SDaniel P. Berrange        gcrypt="yes"
28661f923c70SLongpeng(Mike)
28671f923c70SLongpeng(Mike)        cat > $TMPC << EOF
28681f923c70SLongpeng(Mike)#include <gcrypt.h>
28691f923c70SLongpeng(Mike)int main(void) {
28701f923c70SLongpeng(Mike)  gcry_mac_hd_t handle;
28711f923c70SLongpeng(Mike)  gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
28721f923c70SLongpeng(Mike)                GCRY_MAC_FLAG_SECURE, NULL);
28731f923c70SLongpeng(Mike)  return 0;
28741f923c70SLongpeng(Mike)}
28751f923c70SLongpeng(Mike)EOF
28761f923c70SLongpeng(Mike)        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
28771f923c70SLongpeng(Mike)            gcrypt_hmac=yes
28781f923c70SLongpeng(Mike)        fi
287962893b67SDaniel P. Berrange    else
288091bfcdb0SDaniel P. Berrange        if test "$gcrypt" = "yes"; then
2881dea7a64eSDaniel P. Berrangé            feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
288291bfcdb0SDaniel P. Berrange        else
288391bfcdb0SDaniel P. Berrange            gcrypt="no"
288491bfcdb0SDaniel P. Berrange        fi
288562893b67SDaniel P. Berrange    fi
288662893b67SDaniel P. Berrangefi
288762893b67SDaniel P. Berrange
2888ddbb0d09SDaniel P. Berrange
288991bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" && test "$nettle" = "yes"
289091bfcdb0SDaniel P. Berrangethen
289191bfcdb0SDaniel P. Berrange    error_exit "Only one of gcrypt & nettle can be enabled"
289291bfcdb0SDaniel P. Berrangefi
2893ed754746SDaniel P. Berrange
28949a2fd434SDaniel P. Berrange##########################################
28959a2fd434SDaniel P. Berrange# libtasn1 - only for the TLS creds/session test suite
28969a2fd434SDaniel P. Berrange
28979a2fd434SDaniel P. Berrangetasn1=yes
289890246037SDaniel P. Berrangetasn1_cflags=""
289990246037SDaniel P. Berrangetasn1_libs=""
29009a2fd434SDaniel P. Berrangeif $pkg_config --exists "libtasn1"; then
290189138857SStefan Weil    tasn1_cflags=$($pkg_config --cflags libtasn1)
290289138857SStefan Weil    tasn1_libs=$($pkg_config --libs libtasn1)
29039a2fd434SDaniel P. Berrangeelse
29049a2fd434SDaniel P. Berrange    tasn1=no
29059a2fd434SDaniel P. Berrangefi
29069a2fd434SDaniel P. Berrange
2907ed754746SDaniel P. Berrange
2908bbbf9bfbSStefan Weil##########################################
29098953caf3SDaniel P. Berrange# PAM probe
29108953caf3SDaniel P. Berrange
29118953caf3SDaniel P. Berrangeif test "$auth_pam" != "no"; then
29128953caf3SDaniel P. Berrange    cat > $TMPC <<EOF
29138953caf3SDaniel P. Berrange#include <security/pam_appl.h>
29148953caf3SDaniel P. Berrange#include <stdio.h>
29158953caf3SDaniel P. Berrangeint main(void) {
29168953caf3SDaniel P. Berrange   const char *service_name = "qemu";
29178953caf3SDaniel P. Berrange   const char *user = "frank";
29188953caf3SDaniel P. Berrange   const struct pam_conv *pam_conv = NULL;
29198953caf3SDaniel P. Berrange   pam_handle_t *pamh = NULL;
29208953caf3SDaniel P. Berrange   pam_start(service_name, user, pam_conv, &pamh);
29218953caf3SDaniel P. Berrange   return 0;
29228953caf3SDaniel P. Berrange}
29238953caf3SDaniel P. BerrangeEOF
29248953caf3SDaniel P. Berrange    if compile_prog "" "-lpam" ; then
29258953caf3SDaniel P. Berrange        auth_pam=yes
29268953caf3SDaniel P. Berrange    else
29278953caf3SDaniel P. Berrange        if test "$auth_pam" = "yes"; then
29288953caf3SDaniel P. Berrange            feature_not_found "PAM" "Install PAM development package"
29298953caf3SDaniel P. Berrange        else
29308953caf3SDaniel P. Berrange            auth_pam=no
29318953caf3SDaniel P. Berrange        fi
29328953caf3SDaniel P. Berrange    fi
29338953caf3SDaniel P. Berrangefi
29348953caf3SDaniel P. Berrange
29358953caf3SDaniel P. Berrange##########################################
2936559607eaSDaniel P. Berrange# getifaddrs (for tests/test-io-channel-socket )
2937559607eaSDaniel P. Berrange
2938559607eaSDaniel P. Berrangehave_ifaddrs_h=yes
2939559607eaSDaniel P. Berrangeif ! check_include "ifaddrs.h" ; then
2940559607eaSDaniel P. Berrange  have_ifaddrs_h=no
2941559607eaSDaniel P. Berrangefi
2942559607eaSDaniel P. Berrange
2943559607eaSDaniel P. Berrange##########################################
2944bbbf9bfbSStefan Weil# VTE probe
2945bbbf9bfbSStefan Weil
2946bbbf9bfbSStefan Weilif test "$vte" != "no"; then
2947c6feff9eSCole Robinson    vteminversion="0.32.0"
2948c6feff9eSCole Robinson    if $pkg_config --exists "vte-2.91"; then
2949c6feff9eSCole Robinson      vtepackage="vte-2.91"
2950c6feff9eSCole Robinson    else
2951528de90aSDaniel P. Berrange      vtepackage="vte-2.90"
2952c6feff9eSCole Robinson    fi
2953c6feff9eSCole Robinson    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
295489138857SStefan Weil        vte_cflags=$($pkg_config --cflags $vtepackage)
295589138857SStefan Weil        vte_libs=$($pkg_config --libs $vtepackage)
295689138857SStefan Weil        vteversion=$($pkg_config --modversion $vtepackage)
2957bbbf9bfbSStefan Weil        vte="yes"
2958bbbf9bfbSStefan Weil    elif test "$vte" = "yes"; then
2959c6feff9eSCole Robinson        feature_not_found "vte" "Install libvte-2.90/2.91 devel"
29609e04c683SStefan Weil    else
2961bbbf9bfbSStefan Weil        vte="no"
2962a4ccabcfSAnthony Liguori    fi
2963a4ccabcfSAnthony Liguorifi
2964a4ccabcfSAnthony Liguori
2965a4ccabcfSAnthony Liguori##########################################
296611d9f695Sbellard# SDL probe
296711d9f695Sbellard
29683ec87ffeSPaolo Bonzini# Look for sdl configuration program (pkg-config or sdl-config).  Try
29693ec87ffeSPaolo Bonzini# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
297047c03744SDave Airlie
2971c6093a05SPeter Xusdl_probe ()
2972c6093a05SPeter Xu{
29730015ca5cSDaniel P. Berrangé  if $pkg_config sdl2 --exists; then
29740015ca5cSDaniel P. Berrangé    sdlconfig="$pkg_config sdl2"
297589138857SStefan Weil    sdlversion=$($sdlconfig --modversion 2>/dev/null)
29763ec87ffeSPaolo Bonzini  elif has ${sdl_config}; then
29770015ca5cSDaniel P. Berrangé    sdlconfig="$sdl2_config"
297889138857SStefan Weil    sdlversion=$($sdlconfig --version)
2979a0dfd8a4SLoïc Minier  else
2980a0dfd8a4SLoïc Minier    if test "$sdl" = "yes" ; then
29818f4ea9cdSGerd Hoffmann      feature_not_found "sdl" "Install SDL2-devel"
2982a0dfd8a4SLoïc Minier    fi
2983a0dfd8a4SLoïc Minier    sdl=no
2984c6093a05SPeter Xu    # no need to do the rest
2985c6093a05SPeter Xu    return
29869316f803SPaolo Bonzini  fi
298729e5badaSScott Wood  if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
29883ec87ffeSPaolo Bonzini    echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
29893ec87ffeSPaolo Bonzini  fi
299011d9f695Sbellard
299111d9f695Sbellard  cat > $TMPC << EOF
299211d9f695Sbellard#include <SDL.h>
299311d9f695Sbellard#undef main /* We don't want SDL to override our main() */
299411d9f695Sbellardint main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
299511d9f695SbellardEOF
299689138857SStefan Weil  sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
29972ca5c430SGerd Hoffmann  sdl_cflags="$sdl_cflags -Wno-undef"  # workaround 2.0.8 bug
299874f42e18STeLeMan  if test "$static" = "yes" ; then
29990015ca5cSDaniel P. Berrangé    if $pkg_config sdl2 --exists; then
30000015ca5cSDaniel P. Berrangé      sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
30015f37e6d4SThomas Huth    else
300289138857SStefan Weil      sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
30035f37e6d4SThomas Huth    fi
300474f42e18STeLeMan  else
300589138857SStefan Weil    sdl_libs=$($sdlconfig --libs 2>/dev/null)
300674f42e18STeLeMan  fi
300752166aa0SJuan Quintela  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
300811d9f695Sbellard    sdl=yes
30097c1f25b4Sbellard
301067c274d3SPaolo Bonzini    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3011e633a5c6SEric Blake    if test "$sdl" = "yes" && test "$static" = "yes" ; then
301267c274d3SPaolo Bonzini      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
301389138857SStefan Weil         sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
301489138857SStefan Weil         sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
301511d9f695Sbellard      fi
301652166aa0SJuan Quintela      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
30171ac88f28SJuan Quintela	:
30181ac88f28SJuan Quintela      else
30191ac88f28SJuan Quintela        sdl=no
30207c1f25b4Sbellard      fi
30217c1f25b4Sbellard    fi # static link
3022c4198157SJuan Quintela  else # sdl not found
3023c4198157SJuan Quintela    if test "$sdl" = "yes" ; then
30240015ca5cSDaniel P. Berrangé      feature_not_found "sdl" "Install SDL2 devel"
3025c4198157SJuan Quintela    fi
3026c4198157SJuan Quintela    sdl=no
30277c1f25b4Sbellard  fi # sdl compile test
3028c6093a05SPeter Xu}
3029c6093a05SPeter Xu
3030a442fe2fSDaniel P. Berrangésdl_image_probe ()
3031a442fe2fSDaniel P. Berrangé{
3032a442fe2fSDaniel P. Berrangé    if test "$sdl_image" != "no" ; then
3033a442fe2fSDaniel P. Berrangé        if $pkg_config SDL2_image --exists; then
3034a442fe2fSDaniel P. Berrangé            if test "$static" = "yes"; then
3035a442fe2fSDaniel P. Berrangé                sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3036a442fe2fSDaniel P. Berrangé            else
3037a442fe2fSDaniel P. Berrangé                sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3038a442fe2fSDaniel P. Berrangé            fi
3039a442fe2fSDaniel P. Berrangé            sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3040a442fe2fSDaniel P. Berrangé            sdl_image=yes
3041a442fe2fSDaniel P. Berrangé
3042a442fe2fSDaniel P. Berrangé            sdl_cflags="$sdl_cflags $sdl_image_cflags"
3043a442fe2fSDaniel P. Berrangé            sdl_libs="$sdl_libs $sdl_image_libs"
3044a442fe2fSDaniel P. Berrangé        else
3045a442fe2fSDaniel P. Berrangé            if test "$sdl_image" = "yes" ; then
3046a442fe2fSDaniel P. Berrangé                feature_not_found "sdl_image" "Install SDL Image devel"
3047a442fe2fSDaniel P. Berrangé            else
3048a442fe2fSDaniel P. Berrangé                sdl_image=no
3049a442fe2fSDaniel P. Berrangé            fi
3050a442fe2fSDaniel P. Berrangé        fi
3051a442fe2fSDaniel P. Berrangé    fi
3052a442fe2fSDaniel P. Berrangé}
3053a442fe2fSDaniel P. Berrangé
3054c6093a05SPeter Xuif test "$sdl" != "no" ; then
3055c6093a05SPeter Xu  sdl_probe
3056fd677642Sthsfi
305711d9f695Sbellard
30585368a422Saliguoriif test "$sdl" = "yes" ; then
3059a442fe2fSDaniel P. Berrangé  sdl_image_probe
3060a442fe2fSDaniel P. Berrangéelse
3061a442fe2fSDaniel P. Berrangé  if test "$sdl_image" = "yes"; then
3062a442fe2fSDaniel P. Berrangé    echo "warning: SDL Image requested, but SDL is not available, disabling"
3063a442fe2fSDaniel P. Berrangé  fi
3064a442fe2fSDaniel P. Berrangé  sdl_image=no
3065a442fe2fSDaniel P. Berrangéfi
3066a442fe2fSDaniel P. Berrangé
3067a442fe2fSDaniel P. Berrangéif test "$sdl" = "yes" ; then
30685368a422Saliguori  cat > $TMPC <<EOF
30695368a422Saliguori#include <SDL.h>
30705368a422Saliguori#if defined(SDL_VIDEO_DRIVER_X11)
30715368a422Saliguori#include <X11/XKBlib.h>
30725368a422Saliguori#else
30735368a422Saliguori#error No x11 support
30745368a422Saliguori#endif
30755368a422Saliguoriint main(void) { return 0; }
30765368a422SaliguoriEOF
3077f676c67eSJeremy White  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
30788781595bSGerd Hoffmann    need_x11=yes
3079f676c67eSJeremy White    sdl_cflags="$sdl_cflags $x11_cflags"
3080f676c67eSJeremy White    sdl_libs="$sdl_libs $x11_libs"
30815368a422Saliguori  fi
30825368a422Saliguorifi
30835368a422Saliguori
30848f28f3fbSths##########################################
30852da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
30862da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
30872da776dbSMichael R. Hines  cat > $TMPC <<EOF
30882da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
30892da776dbSMichael R. Hinesint main(void) { return 0; }
30902da776dbSMichael R. HinesEOF
3091ef6d4ccdSYuval Shaia  rdma_libs="-lrdmacm -libverbs -libumad"
30922da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
30932da776dbSMichael R. Hines    rdma="yes"
3094ef6d4ccdSYuval Shaia    libs_softmmu="$libs_softmmu $rdma_libs"
30952da776dbSMichael R. Hines  else
30962da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
30972da776dbSMichael R. Hines        error_exit \
3098ef6d4ccdSYuval Shaia            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
30992da776dbSMichael R. Hines            " Your options:" \
3100ef6d4ccdSYuval Shaia            "  (1) Fast: Install infiniband packages (devel) from your distro." \
31012da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
31022da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
31032da776dbSMichael R. Hines    fi
31042da776dbSMichael R. Hines    rdma="no"
31052da776dbSMichael R. Hines  fi
31062da776dbSMichael R. Hinesfi
31072da776dbSMichael R. Hines
310821ab34c9SMarcel Apfelbaum##########################################
310921ab34c9SMarcel Apfelbaum# PVRDMA detection
311021ab34c9SMarcel Apfelbaum
311121ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF &&
311221ab34c9SMarcel Apfelbaum#include <sys/mman.h>
311321ab34c9SMarcel Apfelbaum
311421ab34c9SMarcel Apfelbaumint
311521ab34c9SMarcel Apfelbaummain(void)
311621ab34c9SMarcel Apfelbaum{
311721ab34c9SMarcel Apfelbaum    char buf = 0;
311821ab34c9SMarcel Apfelbaum    void *addr = &buf;
311921ab34c9SMarcel Apfelbaum    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
312021ab34c9SMarcel Apfelbaum
312121ab34c9SMarcel Apfelbaum    return 0;
312221ab34c9SMarcel Apfelbaum}
312321ab34c9SMarcel ApfelbaumEOF
312421ab34c9SMarcel Apfelbaum
312521ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then
312621ab34c9SMarcel Apfelbaum    case "$pvrdma" in
312721ab34c9SMarcel Apfelbaum    "")
312821ab34c9SMarcel Apfelbaum        if compile_prog "" ""; then
312921ab34c9SMarcel Apfelbaum            pvrdma="yes"
313021ab34c9SMarcel Apfelbaum        else
313121ab34c9SMarcel Apfelbaum            pvrdma="no"
313221ab34c9SMarcel Apfelbaum        fi
313321ab34c9SMarcel Apfelbaum        ;;
313421ab34c9SMarcel Apfelbaum    "yes")
313521ab34c9SMarcel Apfelbaum        if ! compile_prog "" ""; then
313621ab34c9SMarcel Apfelbaum            error_exit "PVRDMA is not supported since mremap is not implemented"
313721ab34c9SMarcel Apfelbaum        fi
313821ab34c9SMarcel Apfelbaum        pvrdma="yes"
313921ab34c9SMarcel Apfelbaum        ;;
314021ab34c9SMarcel Apfelbaum    "no")
314121ab34c9SMarcel Apfelbaum        pvrdma="no"
314221ab34c9SMarcel Apfelbaum        ;;
314321ab34c9SMarcel Apfelbaum    esac
314421ab34c9SMarcel Apfelbaumelse
314521ab34c9SMarcel Apfelbaum    if test "$pvrdma" = "yes" ; then
314621ab34c9SMarcel Apfelbaum        error_exit "PVRDMA requires rdma suppport"
314721ab34c9SMarcel Apfelbaum    fi
314821ab34c9SMarcel Apfelbaum    pvrdma="no"
314921ab34c9SMarcel Apfelbaumfi
315095c6bff3SBenoît Canet
315195c6bff3SBenoît Canet##########################################
31522f9606b3Saliguori# VNC SASL detection
3153e633a5c6SEric Blakeif test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
31542f9606b3Saliguori  cat > $TMPC <<EOF
31552f9606b3Saliguori#include <sasl/sasl.h>
31562f9606b3Saliguori#include <stdio.h>
31572f9606b3Saliguoriint main(void) { sasl_server_init(NULL, "qemu"); return 0; }
31582f9606b3SaliguoriEOF
31592f9606b3Saliguori  # Assuming Cyrus-SASL installed in /usr prefix
31602f9606b3Saliguori  vnc_sasl_cflags=""
31612f9606b3Saliguori  vnc_sasl_libs="-lsasl2"
316252166aa0SJuan Quintela  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3163ea784e3bSJuan Quintela    vnc_sasl=yes
3164fa838301SJuan Quintela    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3165ca273d58SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
31662f9606b3Saliguori  else
3167ea784e3bSJuan Quintela    if test "$vnc_sasl" = "yes" ; then
316821684af0SStewart Smith      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3169ea784e3bSJuan Quintela    fi
3170ea784e3bSJuan Quintela    vnc_sasl=no
31712f9606b3Saliguori  fi
31722f9606b3Saliguorifi
31732f9606b3Saliguori
31742f9606b3Saliguori##########################################
31752f6f5c7aSCorentin Chary# VNC JPEG detection
3176e633a5c6SEric Blakeif test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
31772f6f5c7aSCorentin Charycat > $TMPC <<EOF
31782f6f5c7aSCorentin Chary#include <stdio.h>
31792f6f5c7aSCorentin Chary#include <jpeglib.h>
31802f6f5c7aSCorentin Charyint main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
31812f6f5c7aSCorentin CharyEOF
31822f6f5c7aSCorentin Chary    vnc_jpeg_cflags=""
31832f6f5c7aSCorentin Chary    vnc_jpeg_libs="-ljpeg"
31842f6f5c7aSCorentin Chary  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
31852f6f5c7aSCorentin Chary    vnc_jpeg=yes
31862f6f5c7aSCorentin Chary    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3187ca273d58SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
31882f6f5c7aSCorentin Chary  else
31892f6f5c7aSCorentin Chary    if test "$vnc_jpeg" = "yes" ; then
319021684af0SStewart Smith      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
31912f6f5c7aSCorentin Chary    fi
31922f6f5c7aSCorentin Chary    vnc_jpeg=no
31932f6f5c7aSCorentin Chary  fi
31942f6f5c7aSCorentin Charyfi
31952f6f5c7aSCorentin Chary
31962f6f5c7aSCorentin Chary##########################################
3197efe556adSCorentin Chary# VNC PNG detection
3198e633a5c6SEric Blakeif test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3199efe556adSCorentin Charycat > $TMPC <<EOF
3200efe556adSCorentin Chary//#include <stdio.h>
3201efe556adSCorentin Chary#include <png.h>
3202832ce9c2SScott Wood#include <stddef.h>
3203efe556adSCorentin Charyint main(void) {
3204efe556adSCorentin Chary    png_structp png_ptr;
3205efe556adSCorentin Chary    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
32067edc3fedSPeter Maydell    return png_ptr != 0;
3207efe556adSCorentin Chary}
3208efe556adSCorentin CharyEOF
320965d5d3f9SStefan Weil  if $pkg_config libpng --exists; then
321089138857SStefan Weil    vnc_png_cflags=$($pkg_config libpng --cflags)
321189138857SStefan Weil    vnc_png_libs=$($pkg_config libpng --libs)
32129af8025eSBrad  else
3213efe556adSCorentin Chary    vnc_png_cflags=""
3214efe556adSCorentin Chary    vnc_png_libs="-lpng"
32159af8025eSBrad  fi
3216efe556adSCorentin Chary  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3217efe556adSCorentin Chary    vnc_png=yes
3218efe556adSCorentin Chary    libs_softmmu="$vnc_png_libs $libs_softmmu"
32199af8025eSBrad    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3220efe556adSCorentin Chary  else
3221efe556adSCorentin Chary    if test "$vnc_png" = "yes" ; then
322221684af0SStewart Smith      feature_not_found "vnc-png" "Install libpng devel"
3223efe556adSCorentin Chary    fi
3224efe556adSCorentin Chary    vnc_png=no
3225efe556adSCorentin Chary  fi
3226efe556adSCorentin Charyfi
3227efe556adSCorentin Chary
3228efe556adSCorentin Chary##########################################
32296a021536SGerd Hoffmann# xkbcommon probe
32306a021536SGerd Hoffmannif test "$xkbcommon" != "no" ; then
32316a021536SGerd Hoffmann  if $pkg_config xkbcommon --exists; then
32326a021536SGerd Hoffmann    xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
32336a021536SGerd Hoffmann    xkbcommon_libs=$($pkg_config xkbcommon --libs)
32346a021536SGerd Hoffmann    xkbcommon=yes
32356a021536SGerd Hoffmann  else
32366a021536SGerd Hoffmann    if test "$xkbcommon" = "yes" ; then
32376a021536SGerd Hoffmann      feature_not_found "xkbcommon" "Install libxkbcommon-devel"
32386a021536SGerd Hoffmann    fi
32396a021536SGerd Hoffmann    xkbcommon=no
32406a021536SGerd Hoffmann  fi
32416a021536SGerd Hoffmannfi
32426a021536SGerd Hoffmann
324376655d6dSaliguori
324476655d6dSaliguori##########################################
3245c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c
3246dce512deSChristoph Hellwigif test "$xfs" != "no" ; then
3247dce512deSChristoph Hellwig  cat > $TMPC << EOF
3248ffc41d10SStefan Weil#include <stddef.h>  /* NULL */
3249dce512deSChristoph Hellwig#include <xfs/xfs.h>
3250dce512deSChristoph Hellwigint main(void)
3251dce512deSChristoph Hellwig{
3252dce512deSChristoph Hellwig    xfsctl(NULL, 0, 0, NULL);
3253dce512deSChristoph Hellwig    return 0;
3254dce512deSChristoph Hellwig}
3255dce512deSChristoph HellwigEOF
3256dce512deSChristoph Hellwig  if compile_prog "" "" ; then
3257dce512deSChristoph Hellwig    xfs="yes"
3258dce512deSChristoph Hellwig  else
3259dce512deSChristoph Hellwig    if test "$xfs" = "yes" ; then
326021684af0SStewart Smith      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3261dce512deSChristoph Hellwig    fi
3262dce512deSChristoph Hellwig    xfs=no
3263dce512deSChristoph Hellwig  fi
3264dce512deSChristoph Hellwigfi
3265dce512deSChristoph Hellwig
3266dce512deSChristoph Hellwig##########################################
32678a16d273Sths# vde libraries probe
3268dfb278bdSJuan Quintelaif test "$vde" != "no" ; then
32694baae0acSJuan Quintela  vde_libs="-lvdeplug"
32708a16d273Sths  cat > $TMPC << EOF
32718a16d273Sths#include <libvdeplug.h>
32724a7f0e06Spbrookint main(void)
32734a7f0e06Spbrook{
32744a7f0e06Spbrook    struct vde_open_args a = {0, 0, 0};
3275fea08e08SPeter Maydell    char s[] = "";
3276fea08e08SPeter Maydell    vde_open(s, s, &a);
32774a7f0e06Spbrook    return 0;
32784a7f0e06Spbrook}
32798a16d273SthsEOF
328052166aa0SJuan Quintela  if compile_prog "" "$vde_libs" ; then
32814baae0acSJuan Quintela    vde=yes
3282dfb278bdSJuan Quintela  else
3283dfb278bdSJuan Quintela    if test "$vde" = "yes" ; then
328421684af0SStewart Smith      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3285dfb278bdSJuan Quintela    fi
3286dfb278bdSJuan Quintela    vde=no
32878a16d273Sths  fi
32888a16d273Sthsfi
32898a16d273Sths
32908a16d273Sths##########################################
32910a985b37SVincenzo Maffione# netmap support probe
32920a985b37SVincenzo Maffione# Apart from looking for netmap headers, we make sure that the host API version
32930a985b37SVincenzo Maffione# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
32940a985b37SVincenzo Maffione# a minor/major version number. Minor new features will be marked with values up
32950a985b37SVincenzo Maffione# to 15, and if something happens that requires a change to the backend we will
32960a985b37SVincenzo Maffione# move above 15, submit the backend fixes and modify this two bounds.
329758952137SVincenzo Maffioneif test "$netmap" != "no" ; then
329858952137SVincenzo Maffione  cat > $TMPC << EOF
329958952137SVincenzo Maffione#include <inttypes.h>
330058952137SVincenzo Maffione#include <net/if.h>
330158952137SVincenzo Maffione#include <net/netmap.h>
330258952137SVincenzo Maffione#include <net/netmap_user.h>
33030a985b37SVincenzo Maffione#if (NETMAP_API < 11) || (NETMAP_API > 15)
33040a985b37SVincenzo Maffione#error
33050a985b37SVincenzo Maffione#endif
330658952137SVincenzo Maffioneint main(void) { return 0; }
330758952137SVincenzo MaffioneEOF
330858952137SVincenzo Maffione  if compile_prog "" "" ; then
330958952137SVincenzo Maffione    netmap=yes
331058952137SVincenzo Maffione  else
331158952137SVincenzo Maffione    if test "$netmap" = "yes" ; then
331258952137SVincenzo Maffione      feature_not_found "netmap"
331358952137SVincenzo Maffione    fi
331458952137SVincenzo Maffione    netmap=no
331558952137SVincenzo Maffione  fi
331658952137SVincenzo Maffionefi
331758952137SVincenzo Maffione
331858952137SVincenzo Maffione##########################################
331947e98658SCorey Bryant# libcap-ng library probe
332047e98658SCorey Bryantif test "$cap_ng" != "no" ; then
332147e98658SCorey Bryant  cap_libs="-lcap-ng"
332247e98658SCorey Bryant  cat > $TMPC << EOF
332347e98658SCorey Bryant#include <cap-ng.h>
332447e98658SCorey Bryantint main(void)
332547e98658SCorey Bryant{
332647e98658SCorey Bryant    capng_capability_to_name(CAPNG_EFFECTIVE);
332747e98658SCorey Bryant    return 0;
332847e98658SCorey Bryant}
332947e98658SCorey BryantEOF
333047e98658SCorey Bryant  if compile_prog "" "$cap_libs" ; then
333147e98658SCorey Bryant    cap_ng=yes
333247e98658SCorey Bryant    libs_tools="$cap_libs $libs_tools"
333347e98658SCorey Bryant  else
333447e98658SCorey Bryant    if test "$cap_ng" = "yes" ; then
333521684af0SStewart Smith      feature_not_found "cap_ng" "Install libcap-ng devel"
333647e98658SCorey Bryant    fi
333747e98658SCorey Bryant    cap_ng=no
333847e98658SCorey Bryant  fi
333947e98658SCorey Bryantfi
334047e98658SCorey Bryant
334147e98658SCorey Bryant##########################################
3342c2de5c91Smalc# Sound support libraries probe
33438f28f3fbSths
334489138857SStefan Weilaudio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3345c2de5c91Smalcfor drv in $audio_drv_list; do
3346c2de5c91Smalc    case $drv in
3347e42975a1SGerd Hoffmann    alsa | try-alsa)
3348c80a867fSGerd Hoffmann    if $pkg_config alsa --exists; then
3349c80a867fSGerd Hoffmann        alsa_libs=$($pkg_config alsa --libs)
3350e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3351e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3352e42975a1SGerd Hoffmann        fi
3353e42975a1SGerd Hoffmann    else
3354e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3355e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3356c80a867fSGerd Hoffmann        else
3357c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3358c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3359c80a867fSGerd Hoffmann        fi
3360e42975a1SGerd Hoffmann    fi
3361c2de5c91Smalc    ;;
3362c2de5c91Smalc
3363e42975a1SGerd Hoffmann    pa | try-pa)
3364c80a867fSGerd Hoffmann    if $pkg_config libpulse --exists; then
3365c80a867fSGerd Hoffmann        pulse_libs=$($pkg_config libpulse --libs)
336667f86e8eSJuan Quintela        audio_pt_int="yes"
3367e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3368e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3369e42975a1SGerd Hoffmann        fi
3370e42975a1SGerd Hoffmann    else
3371e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3372e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3373c80a867fSGerd Hoffmann        else
3374c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3375c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3376c80a867fSGerd Hoffmann        fi
3377e42975a1SGerd Hoffmann    fi
3378b8e59f18Smalc    ;;
3379b8e59f18Smalc
3380373967b2SGerd Hoffmann    sdl)
3381373967b2SGerd Hoffmann    if test "$sdl" = "no"; then
3382373967b2SGerd Hoffmann        error_exit "sdl not found or disabled, can not use sdl audio driver"
3383373967b2SGerd Hoffmann    fi
3384373967b2SGerd Hoffmann    ;;
3385373967b2SGerd Hoffmann
3386e42975a1SGerd Hoffmann    try-sdl)
3387e42975a1SGerd Hoffmann    if test "$sdl" = "no"; then
3388e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3389e42975a1SGerd Hoffmann    else
3390e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3391e42975a1SGerd Hoffmann    fi
3392e42975a1SGerd Hoffmann    ;;
3393e42975a1SGerd Hoffmann
3394997e690aSJuan Quintela    coreaudio)
3395b1149911SFam Zheng      coreaudio_libs="-framework CoreAudio"
3396997e690aSJuan Quintela    ;;
3397997e690aSJuan Quintela
3398a4bf6780SJuan Quintela    dsound)
3399b1149911SFam Zheng      dsound_libs="-lole32 -ldxguid"
3400d5631638Smalc      audio_win_int="yes"
3401a4bf6780SJuan Quintela    ;;
3402a4bf6780SJuan Quintela
3403a4bf6780SJuan Quintela    oss)
3404b1149911SFam Zheng      oss_libs="$oss_lib"
3405a4bf6780SJuan Quintela    ;;
3406a4bf6780SJuan Quintela
3407e4c63a6aSmalc    *)
34081c9b2a52Smalc    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
340976ad07a4SPeter Maydell        error_exit "Unknown driver '$drv' selected" \
341076ad07a4SPeter Maydell            "Possible drivers are: $audio_possible_drivers"
3411e4c63a6aSmalc    }
3412e4c63a6aSmalc    ;;
3413c2de5c91Smalc    esac
3414c2de5c91Smalcdone
34158f28f3fbSths
34164d3b6f6eSbalrog##########################################
34172e4d9fb1Saurel32# BrlAPI probe
34182e4d9fb1Saurel32
34194ffcedb6SJuan Quintelaif test "$brlapi" != "no" ; then
3420eb82284fSJuan Quintela  brlapi_libs="-lbrlapi"
34212e4d9fb1Saurel32  cat > $TMPC << EOF
34222e4d9fb1Saurel32#include <brlapi.h>
3423832ce9c2SScott Wood#include <stddef.h>
34242e4d9fb1Saurel32int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
34252e4d9fb1Saurel32EOF
342652166aa0SJuan Quintela  if compile_prog "" "$brlapi_libs" ; then
34272e4d9fb1Saurel32    brlapi=yes
34284ffcedb6SJuan Quintela  else
34294ffcedb6SJuan Quintela    if test "$brlapi" = "yes" ; then
343021684af0SStewart Smith      feature_not_found "brlapi" "Install brlapi devel"
34314ffcedb6SJuan Quintela    fi
34324ffcedb6SJuan Quintela    brlapi=no
3433eb82284fSJuan Quintela  fi
3434eb82284fSJuan Quintelafi
34352e4d9fb1Saurel32
34362e4d9fb1Saurel32##########################################
34374d3b6f6eSbalrog# curses probe
3438a3605bf6SMichael Tokarevif test "$curses" != "no" ; then
3439e095e2f3SStefan Weil  if test "$mingw32" = "yes" ; then
34408ddc5bf9SSamuel Thibault    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
34418ddc5bf9SSamuel Thibault    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3442e095e2f3SStefan Weil  else
34437c703002SSamuel Thibault    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
34448ddc5bf9SSamuel Thibault    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3445e095e2f3SStefan Weil  fi
3446c584a6d0SJuan Quintela  curses_found=no
34474d3b6f6eSbalrog  cat > $TMPC << EOF
34488ddc5bf9SSamuel Thibault#include <locale.h>
34494d3b6f6eSbalrog#include <curses.h>
34508ddc5bf9SSamuel Thibault#include <wchar.h>
3451ef9a2524SStefan Weilint main(void) {
34528ddc5bf9SSamuel Thibault  wchar_t wch = L'w';
34538ddc5bf9SSamuel Thibault  setlocale(LC_ALL, "");
3454ef9a2524SStefan Weil  resize_term(0, 0);
34558ddc5bf9SSamuel Thibault  addwstr(L"wide chars\n");
34568ddc5bf9SSamuel Thibault  addnwstr(&wch, 1);
34577c703002SSamuel Thibault  add_wch(WACS_DEGREE);
3458271f37abSKamil Rytarowski  return 0;
3459ef9a2524SStefan Weil}
34604d3b6f6eSbalrogEOF
3461ecbe251fSVadim Evard  IFS=:
34628ddc5bf9SSamuel Thibault  for curses_inc in $curses_inc_list; do
3463b01a4fd3SPeter Maydell    # Make sure we get the wide character prototypes
3464b01a4fd3SPeter Maydell    curses_inc="-DNCURSES_WIDECHAR $curses_inc"
34657c703002SSamuel Thibault    IFS=:
34668ddc5bf9SSamuel Thibault    for curses_lib in $curses_lib_list; do
3467ecbe251fSVadim Evard      unset IFS
34688ddc5bf9SSamuel Thibault      if compile_prog "$curses_inc" "$curses_lib" ; then
3469c584a6d0SJuan Quintela        curses_found=yes
34704f78ef9aSJuan Quintela        break
34714d3b6f6eSbalrog      fi
34724f78ef9aSJuan Quintela    done
34737c703002SSamuel Thibault    if test "$curses_found" = yes ; then
34747c703002SSamuel Thibault      break
34757c703002SSamuel Thibault    fi
34768ddc5bf9SSamuel Thibault  done
3477ecbe251fSVadim Evard  unset IFS
3478c584a6d0SJuan Quintela  if test "$curses_found" = "yes" ; then
3479c584a6d0SJuan Quintela    curses=yes
3480c584a6d0SJuan Quintela  else
3481c584a6d0SJuan Quintela    if test "$curses" = "yes" ; then
348221684af0SStewart Smith      feature_not_found "curses" "Install ncurses devel"
3483c584a6d0SJuan Quintela    fi
3484c584a6d0SJuan Quintela    curses=no
3485c584a6d0SJuan Quintela  fi
34864f78ef9aSJuan Quintelafi
34874d3b6f6eSbalrog
3488414f0dabSblueswir1##########################################
3489769ce76dSAlexander Graf# curl probe
3490a3605bf6SMichael Tokarevif test "$curl" != "no" ; then
349165d5d3f9SStefan Weil  if $pkg_config libcurl --exists; then
3492a8bd70adSPaolo Bonzini    curlconfig="$pkg_config libcurl"
34934e2b0658SPaolo Bonzini  else
34944e2b0658SPaolo Bonzini    curlconfig=curl-config
34954e2b0658SPaolo Bonzini  fi
3496769ce76dSAlexander Graf  cat > $TMPC << EOF
3497769ce76dSAlexander Graf#include <curl/curl.h>
34980b862cedSPeter Maydellint main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3499769ce76dSAlexander GrafEOF
350089138857SStefan Weil  curl_cflags=$($curlconfig --cflags 2>/dev/null)
350189138857SStefan Weil  curl_libs=$($curlconfig --libs 2>/dev/null)
3502b1d5a277SJuan Quintela  if compile_prog "$curl_cflags" "$curl_libs" ; then
3503769ce76dSAlexander Graf    curl=yes
3504788c8196SJuan Quintela  else
3505788c8196SJuan Quintela    if test "$curl" = "yes" ; then
350621684af0SStewart Smith      feature_not_found "curl" "Install libcurl devel"
3507788c8196SJuan Quintela    fi
3508788c8196SJuan Quintela    curl=no
3509769ce76dSAlexander Graf  fi
3510769ce76dSAlexander Graffi # test "$curl"
3511769ce76dSAlexander Graf
3512769ce76dSAlexander Graf##########################################
3513fb599c9aSbalrog# bluez support probe
3514a20a6f46SJuan Quintelaif test "$bluez" != "no" ; then
3515e820e3f4Sbalrog  cat > $TMPC << EOF
3516e820e3f4Sbalrog#include <bluetooth/bluetooth.h>
3517e820e3f4Sbalrogint main(void) { return bt_error(0); }
3518e820e3f4SbalrogEOF
351989138857SStefan Weil  bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
352089138857SStefan Weil  bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
352152166aa0SJuan Quintela  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3522a20a6f46SJuan Quintela    bluez=yes
3523e482d56aSJuan Quintela    libs_softmmu="$bluez_libs $libs_softmmu"
3524e820e3f4Sbalrog  else
3525a20a6f46SJuan Quintela    if test "$bluez" = "yes" ; then
352621684af0SStewart Smith      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3527a20a6f46SJuan Quintela    fi
3528e820e3f4Sbalrog    bluez="no"
3529e820e3f4Sbalrog  fi
3530fb599c9aSbalrogfi
3531fb599c9aSbalrog
3532fb599c9aSbalrog##########################################
3533e18df141SAnthony Liguori# glib support probe
3534a52d28afSPaolo Bonzini
3535e7b3af81SDaniel P. Berrangéglib_req_ver=2.40
3536aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
3537aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
3538a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
3539aa0d1f44SPaolo Bonzinifi
3540e26110cfSFam Zheng
35414eaf7202SSameeh Jubran# This workaround is required due to a bug in pkg-config file for glib as it
35424eaf7202SSameeh Jubran# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
35434eaf7202SSameeh Jubran
3544e633a5c6SEric Blakeif test "$static" = yes && test "$mingw32" = yes; then
35454eaf7202SSameeh Jubran    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
35464eaf7202SSameeh Jubranfi
35474eaf7202SSameeh Jubran
3548aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
3549e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
355089138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
355189138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
35524a058899SMarc-André Lureau        QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
355314015304SAnthony Liguori        LIBS="$glib_libs $LIBS"
3554957f1f99SMichael Roth        libs_qga="$glib_libs $libs_qga"
3555e18df141SAnthony Liguori    else
3556e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3557e26110cfSFam Zheng    fi
3558e26110cfSFam Zhengdone
3559e26110cfSFam Zheng
3560f876b765SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3561f876b765SMarc-André Lureau    gio=yes
3562f876b765SMarc-André Lureau    gio_cflags=$($pkg_config --cflags gio-2.0)
3563f876b765SMarc-André Lureau    gio_libs=$($pkg_config --libs gio-2.0)
3564f876b765SMarc-André Lureauelse
3565f876b765SMarc-André Lureau    gio=no
3566f876b765SMarc-André Lureaufi
3567f876b765SMarc-André Lureau
3568977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
3569977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
3570977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
3571977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
3572977a82abSDaniel P. Berrangecat > $TMPC <<EOF
3573977a82abSDaniel P. Berrange#include <glib.h>
3574977a82abSDaniel P. Berrange#include <unistd.h>
3575977a82abSDaniel P. Berrange
3576977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
3577977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3578977a82abSDaniel P. Berrange
3579977a82abSDaniel P. Berrangeint main(void) {
3580977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3581977a82abSDaniel P. Berrange   return 0;
3582977a82abSDaniel P. Berrange}
3583977a82abSDaniel P. BerrangeEOF
3584977a82abSDaniel P. Berrange
35855919e032SStefan Weilif ! compile_prog "$CFLAGS" "$LIBS" ; then
3586977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3587977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
3588977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
3589977a82abSDaniel P. Berrange	       "build target"
3590977a82abSDaniel P. Berrangefi
3591977a82abSDaniel P. Berrange
3592bbbf2e04SJohn Snow# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3593bbbf2e04SJohn Snowcat > $TMPC << EOF
3594bbbf2e04SJohn Snow#include <glib.h>
3595bbbf2e04SJohn Snowint main(void) { return 0; }
3596bbbf2e04SJohn SnowEOF
3597bbbf2e04SJohn Snowif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3598bbbf2e04SJohn Snow    if cc_has_warning_flag "-Wno-unknown-attributes"; then
3599bbbf2e04SJohn Snow        glib_cflags="-Wno-unknown-attributes $glib_cflags"
3600bbbf2e04SJohn Snow        CFLAGS="-Wno-unknown-attributes $CFLAGS"
3601bbbf2e04SJohn Snow    fi
3602bbbf2e04SJohn Snowfi
3603bbbf2e04SJohn Snow
36046a1f42bdSStefan Weil#########################################
36056a1f42bdSStefan Weil# zlib check
36066a1f42bdSStefan Weil
36076a1f42bdSStefan Weilif test "$zlib" != "no" ; then
36086a1f42bdSStefan Weil    if $pkg_config --exists zlib; then
36096a1f42bdSStefan Weil        zlib_cflags=$($pkg_config --cflags zlib)
36106a1f42bdSStefan Weil        zlib_libs=$($pkg_config --libs zlib)
36116a1f42bdSStefan Weil        QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
36126a1f42bdSStefan Weil        LIBS="$zlib_libs $LIBS"
36136a1f42bdSStefan Weil    else
36146a1f42bdSStefan Weil        cat > $TMPC << EOF
36156a1f42bdSStefan Weil#include <zlib.h>
36166a1f42bdSStefan Weilint main(void) { zlibVersion(); return 0; }
36176a1f42bdSStefan WeilEOF
36186a1f42bdSStefan Weil        if compile_prog "" "-lz" ; then
36196a1f42bdSStefan Weil            LIBS="$LIBS -lz"
36206a1f42bdSStefan Weil        else
36216a1f42bdSStefan Weil            error_exit "zlib check failed" \
36226a1f42bdSStefan Weil                "Make sure to have the zlib libs and headers installed."
36236a1f42bdSStefan Weil        fi
36246a1f42bdSStefan Weil    fi
36256a1f42bdSStefan Weilfi
36266a1f42bdSStefan Weil
3627e26110cfSFam Zheng##########################################
3628e26110cfSFam Zheng# SHA command probe for modules
3629e26110cfSFam Zhengif test "$modules" = yes; then
3630e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
3631e26110cfSFam Zheng    for c in $shacmd_probe; do
36328ccefb91SFam Zheng        if has $c; then
3633e26110cfSFam Zheng            shacmd="$c"
3634e26110cfSFam Zheng            break
3635e26110cfSFam Zheng        fi
3636e26110cfSFam Zheng    done
3637e26110cfSFam Zheng    if test "$shacmd" = ""; then
3638e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3639e26110cfSFam Zheng    fi
3640e18df141SAnthony Liguorifi
3641e18df141SAnthony Liguori
3642e18df141SAnthony Liguori##########################################
3643e2134eb9SGerd Hoffmann# pixman support probe
3644e2134eb9SGerd Hoffmann
3645e633a5c6SEric Blakeif test "$want_tools" = "no" && test "$softmmu" = "no"; then
364674880fe2SRobert Schiele  pixman_cflags=
364774880fe2SRobert Schiele  pixman_libs=
364835c4e86cSGerd Hoffmannelif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
364989138857SStefan Weil  pixman_cflags=$($pkg_config --cflags pixman-1)
365089138857SStefan Weil  pixman_libs=$($pkg_config --libs pixman-1)
3651e2134eb9SGerd Hoffmannelse
3652c12b6d70SGerd Hoffmann  error_exit "pixman >= 0.21.8 not present." \
3653c12b6d70SGerd Hoffmann      "Please install the pixman devel package."
3654e2134eb9SGerd Hoffmannfi
3655e2134eb9SGerd Hoffmann
3656e2134eb9SGerd Hoffmann##########################################
3657fe8fc5aeSPaolo Bonzini# libmpathpersist probe
3658fe8fc5aeSPaolo Bonzini
3659fe8fc5aeSPaolo Bonziniif test "$mpath" != "no" ; then
36601b0578f5SMurilo Opsfelder Araujo  # probe for the new API
3661fe8fc5aeSPaolo Bonzini  cat > $TMPC <<EOF
3662fe8fc5aeSPaolo Bonzini#include <libudev.h>
3663fe8fc5aeSPaolo Bonzini#include <mpath_persist.h>
3664fe8fc5aeSPaolo Bonziniunsigned mpath_mx_alloc_len = 1024;
3665fe8fc5aeSPaolo Bonziniint logsink;
3666b3f1c8c4SPaolo Bonzinistatic struct config *multipath_conf;
3667b3f1c8c4SPaolo Bonziniextern struct udev *udev;
3668b3f1c8c4SPaolo Bonziniextern struct config *get_multipath_config(void);
3669b3f1c8c4SPaolo Bonziniextern void put_multipath_config(struct config *conf);
3670b3f1c8c4SPaolo Bonzinistruct udev *udev;
3671b3f1c8c4SPaolo Bonzinistruct config *get_multipath_config(void) { return multipath_conf; }
3672b3f1c8c4SPaolo Bonzinivoid put_multipath_config(struct config *conf) { }
3673b3f1c8c4SPaolo Bonzini
3674fe8fc5aeSPaolo Bonziniint main(void) {
3675b3f1c8c4SPaolo Bonzini    udev = udev_new();
3676b3f1c8c4SPaolo Bonzini    multipath_conf = mpath_lib_init();
3677fe8fc5aeSPaolo Bonzini    return 0;
3678fe8fc5aeSPaolo Bonzini}
3679fe8fc5aeSPaolo BonziniEOF
3680fe8fc5aeSPaolo Bonzini  if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3681fe8fc5aeSPaolo Bonzini    mpathpersist=yes
36821b0578f5SMurilo Opsfelder Araujo    mpathpersist_new_api=yes
36831b0578f5SMurilo Opsfelder Araujo  else
36841b0578f5SMurilo Opsfelder Araujo    # probe for the old API
36851b0578f5SMurilo Opsfelder Araujo    cat > $TMPC <<EOF
36861b0578f5SMurilo Opsfelder Araujo#include <libudev.h>
36871b0578f5SMurilo Opsfelder Araujo#include <mpath_persist.h>
36881b0578f5SMurilo Opsfelder Araujounsigned mpath_mx_alloc_len = 1024;
36891b0578f5SMurilo Opsfelder Araujoint logsink;
36901b0578f5SMurilo Opsfelder Araujoint main(void) {
36911b0578f5SMurilo Opsfelder Araujo    struct udev *udev = udev_new();
36921b0578f5SMurilo Opsfelder Araujo    mpath_lib_init(udev);
36931b0578f5SMurilo Opsfelder Araujo    return 0;
36941b0578f5SMurilo Opsfelder Araujo}
36951b0578f5SMurilo Opsfelder AraujoEOF
36961b0578f5SMurilo Opsfelder Araujo    if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
36971b0578f5SMurilo Opsfelder Araujo      mpathpersist=yes
36981b0578f5SMurilo Opsfelder Araujo      mpathpersist_new_api=no
3699fe8fc5aeSPaolo Bonzini    else
3700fe8fc5aeSPaolo Bonzini      mpathpersist=no
3701fe8fc5aeSPaolo Bonzini    fi
37021b0578f5SMurilo Opsfelder Araujo  fi
3703fe8fc5aeSPaolo Bonzinielse
3704fe8fc5aeSPaolo Bonzini  mpathpersist=no
3705fe8fc5aeSPaolo Bonzinifi
3706fe8fc5aeSPaolo Bonzini
3707fe8fc5aeSPaolo Bonzini##########################################
370817bff52bSM. Mohan Kumar# libcap probe
370917bff52bSM. Mohan Kumar
371017bff52bSM. Mohan Kumarif test "$cap" != "no" ; then
371117bff52bSM. Mohan Kumar  cat > $TMPC <<EOF
371217bff52bSM. Mohan Kumar#include <stdio.h>
371317bff52bSM. Mohan Kumar#include <sys/capability.h>
3714cc939743SStefan Weilint main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
371517bff52bSM. Mohan KumarEOF
371617bff52bSM. Mohan Kumar  if compile_prog "" "-lcap" ; then
371717bff52bSM. Mohan Kumar    cap=yes
371817bff52bSM. Mohan Kumar  else
371917bff52bSM. Mohan Kumar    cap=no
372017bff52bSM. Mohan Kumar  fi
372117bff52bSM. Mohan Kumarfi
372217bff52bSM. Mohan Kumar
372317bff52bSM. Mohan Kumar##########################################
3724e5d355d1Saliguori# pthread probe
37254b29ec41SBradPTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
37263c529d93Saliguori
3727e5d355d1Saliguoripthread=no
3728414f0dabSblueswir1cat > $TMPC << EOF
37293c529d93Saliguori#include <pthread.h>
37307a42bbe4SStefan Weilstatic void *f(void *p) { return NULL; }
37317a42bbe4SStefan Weilint main(void) {
37327a42bbe4SStefan Weil  pthread_t thread;
37337a42bbe4SStefan Weil  pthread_create(&thread, 0, f, 0);
37347a42bbe4SStefan Weil  return 0;
37357a42bbe4SStefan Weil}
3736414f0dabSblueswir1EOF
3737bd00d539SAndreas Färberif compile_prog "" "" ; then
3738bd00d539SAndreas Färber  pthread=yes
3739bd00d539SAndreas Färberelse
3740de65fe0fSSebastian Herbszt  for pthread_lib in $PTHREADLIBS_LIST; do
374152166aa0SJuan Quintela    if compile_prog "" "$pthread_lib" ; then
3742e5d355d1Saliguori      pthread=yes
3743e3c56761SPeter Portante      found=no
3744e3c56761SPeter Portante      for lib_entry in $LIBS; do
3745e3c56761SPeter Portante        if test "$lib_entry" = "$pthread_lib"; then
3746e3c56761SPeter Portante          found=yes
3747e3c56761SPeter Portante          break
3748e3c56761SPeter Portante        fi
3749e3c56761SPeter Portante      done
3750e3c56761SPeter Portante      if test "$found" = "no"; then
37515572b539SJuan Quintela        LIBS="$pthread_lib $LIBS"
375214ab3aa7SMarc-André Lureau        libs_qga="$pthread_lib $libs_qga"
3753e3c56761SPeter Portante      fi
3754409437e1SDaniel P. Berrange      PTHREAD_LIB="$pthread_lib"
3755de65fe0fSSebastian Herbszt      break
3756414f0dabSblueswir1    fi
3757de65fe0fSSebastian Herbszt  done
3758bd00d539SAndreas Färberfi
3759414f0dabSblueswir1
3760e633a5c6SEric Blakeif test "$mingw32" != yes && test "$pthread" = no; then
376176ad07a4SPeter Maydell  error_exit "pthread check failed" \
376276ad07a4SPeter Maydell      "Make sure to have the pthread libs and headers installed."
3763e5d355d1Saliguorifi
3764e5d355d1Saliguori
3765479a5747SRoman Bolshakov# check for pthread_setname_np with thread id
3766479a5747SRoman Bolshakovpthread_setname_np_w_tid=no
37675c312079SDr. David Alan Gilbertcat > $TMPC << EOF
37685c312079SDr. David Alan Gilbert#include <pthread.h>
37695c312079SDr. David Alan Gilbert
37705c312079SDr. David Alan Gilbertstatic void *f(void *p) { return NULL; }
37715c312079SDr. David Alan Gilbertint main(void)
37725c312079SDr. David Alan Gilbert{
37735c312079SDr. David Alan Gilbert    pthread_t thread;
37745c312079SDr. David Alan Gilbert    pthread_create(&thread, 0, f, 0);
37755c312079SDr. David Alan Gilbert    pthread_setname_np(thread, "QEMU");
37765c312079SDr. David Alan Gilbert    return 0;
37775c312079SDr. David Alan Gilbert}
37785c312079SDr. David Alan GilbertEOF
37795c312079SDr. David Alan Gilbertif compile_prog "" "$pthread_lib" ; then
3780479a5747SRoman Bolshakov  pthread_setname_np_w_tid=yes
3781479a5747SRoman Bolshakovfi
3782479a5747SRoman Bolshakov
3783479a5747SRoman Bolshakov# check for pthread_setname_np without thread id
3784479a5747SRoman Bolshakovpthread_setname_np_wo_tid=no
3785479a5747SRoman Bolshakovcat > $TMPC << EOF
3786479a5747SRoman Bolshakov#include <pthread.h>
3787479a5747SRoman Bolshakov
3788479a5747SRoman Bolshakovstatic void *f(void *p) { pthread_setname_np("QEMU"); }
3789479a5747SRoman Bolshakovint main(void)
3790479a5747SRoman Bolshakov{
3791479a5747SRoman Bolshakov    pthread_t thread;
3792479a5747SRoman Bolshakov    pthread_create(&thread, 0, f, 0);
3793479a5747SRoman Bolshakov    return 0;
3794479a5747SRoman Bolshakov}
3795479a5747SRoman BolshakovEOF
3796479a5747SRoman Bolshakovif compile_prog "" "$pthread_lib" ; then
3797479a5747SRoman Bolshakov  pthread_setname_np_wo_tid=yes
37985c312079SDr. David Alan Gilbertfi
37995c312079SDr. David Alan Gilbert
3800bf9298b9Saliguori##########################################
3801f27aaf4bSChristian Brunner# rbd probe
3802f27aaf4bSChristian Brunnerif test "$rbd" != "no" ; then
3803f27aaf4bSChristian Brunner  cat > $TMPC <<EOF
3804f27aaf4bSChristian Brunner#include <stdio.h>
3805ad32e9c0SJosh Durgin#include <rbd/librbd.h>
3806f27aaf4bSChristian Brunnerint main(void) {
3807ad32e9c0SJosh Durgin    rados_t cluster;
3808ad32e9c0SJosh Durgin    rados_create(&cluster, NULL);
3809f27aaf4bSChristian Brunner    return 0;
3810f27aaf4bSChristian Brunner}
3811f27aaf4bSChristian BrunnerEOF
3812ad32e9c0SJosh Durgin  rbd_libs="-lrbd -lrados"
3813f27aaf4bSChristian Brunner  if compile_prog "" "$rbd_libs" ; then
3814f27aaf4bSChristian Brunner    rbd=yes
3815f27aaf4bSChristian Brunner  else
3816f27aaf4bSChristian Brunner    if test "$rbd" = "yes" ; then
381721684af0SStewart Smith      feature_not_found "rados block device" "Install librbd/ceph devel"
3818f27aaf4bSChristian Brunner    fi
3819f27aaf4bSChristian Brunner    rbd=no
3820f27aaf4bSChristian Brunner  fi
3821f27aaf4bSChristian Brunnerfi
3822f27aaf4bSChristian Brunner
3823f27aaf4bSChristian Brunner##########################################
38240a12ec87SRichard W.M. Jones# libssh2 probe
38254fc16838SRichard W.M. Jonesmin_libssh2_version=1.2.8
38260a12ec87SRichard W.M. Jonesif test "$libssh2" != "no" ; then
382765d5d3f9SStefan Weil  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
382889138857SStefan Weil    libssh2_cflags=$($pkg_config libssh2 --cflags)
382989138857SStefan Weil    libssh2_libs=$($pkg_config libssh2 --libs)
38300a12ec87SRichard W.M. Jones    libssh2=yes
38310a12ec87SRichard W.M. Jones  else
38320a12ec87SRichard W.M. Jones    if test "$libssh2" = "yes" ; then
38334fc16838SRichard W.M. Jones      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
38340a12ec87SRichard W.M. Jones    fi
38350a12ec87SRichard W.M. Jones    libssh2=no
38360a12ec87SRichard W.M. Jones  fi
38370a12ec87SRichard W.M. Jonesfi
38380a12ec87SRichard W.M. Jones
38390a12ec87SRichard W.M. Jones##########################################
38409a2d462eSRichard W.M. Jones# libssh2_sftp_fsync probe
38419a2d462eSRichard W.M. Jones
38429a2d462eSRichard W.M. Jonesif test "$libssh2" = "yes"; then
38439a2d462eSRichard W.M. Jones  cat > $TMPC <<EOF
38449a2d462eSRichard W.M. Jones#include <stdio.h>
38459a2d462eSRichard W.M. Jones#include <libssh2.h>
38469a2d462eSRichard W.M. Jones#include <libssh2_sftp.h>
38479a2d462eSRichard W.M. Jonesint main(void) {
38489a2d462eSRichard W.M. Jones    LIBSSH2_SESSION *session;
38499a2d462eSRichard W.M. Jones    LIBSSH2_SFTP *sftp;
38509a2d462eSRichard W.M. Jones    LIBSSH2_SFTP_HANDLE *sftp_handle;
38519a2d462eSRichard W.M. Jones    session = libssh2_session_init ();
38529a2d462eSRichard W.M. Jones    sftp = libssh2_sftp_init (session);
38539a2d462eSRichard W.M. Jones    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
38549a2d462eSRichard W.M. Jones    libssh2_sftp_fsync (sftp_handle);
38559a2d462eSRichard W.M. Jones    return 0;
38569a2d462eSRichard W.M. Jones}
38579a2d462eSRichard W.M. JonesEOF
38589a2d462eSRichard W.M. Jones  # libssh2_cflags/libssh2_libs defined in previous test.
38599a2d462eSRichard W.M. Jones  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
38609a2d462eSRichard W.M. Jones    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
38619a2d462eSRichard W.M. Jones  fi
38629a2d462eSRichard W.M. Jonesfi
38639a2d462eSRichard W.M. Jones
38649a2d462eSRichard W.M. Jones##########################################
38655c6c3a6cSChristoph Hellwig# linux-aio probe
38665c6c3a6cSChristoph Hellwig
38675c6c3a6cSChristoph Hellwigif test "$linux_aio" != "no" ; then
38685c6c3a6cSChristoph Hellwig  cat > $TMPC <<EOF
38695c6c3a6cSChristoph Hellwig#include <libaio.h>
38705c6c3a6cSChristoph Hellwig#include <sys/eventfd.h>
3871832ce9c2SScott Wood#include <stddef.h>
38725c6c3a6cSChristoph Hellwigint main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
38735c6c3a6cSChristoph HellwigEOF
38745c6c3a6cSChristoph Hellwig  if compile_prog "" "-laio" ; then
38755c6c3a6cSChristoph Hellwig    linux_aio=yes
38765c6c3a6cSChristoph Hellwig  else
38775c6c3a6cSChristoph Hellwig    if test "$linux_aio" = "yes" ; then
387821684af0SStewart Smith      feature_not_found "linux AIO" "Install libaio devel"
38795c6c3a6cSChristoph Hellwig    fi
38803cfcae3cSLuiz Capitulino    linux_aio=no
38815c6c3a6cSChristoph Hellwig  fi
38825c6c3a6cSChristoph Hellwigfi
38835c6c3a6cSChristoph Hellwig
38845c6c3a6cSChristoph Hellwig##########################################
38857aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX
38863b8acc11SPaolo Bonzini
38877aaa6a16SPaolo Bonziniif test "$tpm" = ""; then
38887aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes"; then
38897aaa6a16SPaolo Bonzini    tpm=no
38903b8acc11SPaolo Bonzini  else
38917aaa6a16SPaolo Bonzini    tpm=yes
38927aaa6a16SPaolo Bonzini  fi
38937aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then
38947aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes" ; then
38957aaa6a16SPaolo Bonzini    error_exit "TPM emulation only available on POSIX systems"
38967aaa6a16SPaolo Bonzini  fi
38973b8acc11SPaolo Bonzinifi
38983b8acc11SPaolo Bonzini
38993b8acc11SPaolo Bonzini##########################################
3900758e8e38SVenkateswararao Jujjuri (JV)# attr probe
3901758e8e38SVenkateswararao Jujjuri (JV)
3902758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" != "no" ; then
3903758e8e38SVenkateswararao Jujjuri (JV)  cat > $TMPC <<EOF
3904758e8e38SVenkateswararao Jujjuri (JV)#include <stdio.h>
3905758e8e38SVenkateswararao Jujjuri (JV)#include <sys/types.h>
3906f2338fb4SPavel Borzenkov#ifdef CONFIG_LIBATTR
3907f2338fb4SPavel Borzenkov#include <attr/xattr.h>
3908f2338fb4SPavel Borzenkov#else
39094f26f2b6SAvi Kivity#include <sys/xattr.h>
3910f2338fb4SPavel Borzenkov#endif
3911758e8e38SVenkateswararao Jujjuri (JV)int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3912758e8e38SVenkateswararao Jujjuri (JV)EOF
39134f26f2b6SAvi Kivity  if compile_prog "" "" ; then
39144f26f2b6SAvi Kivity    attr=yes
39154f26f2b6SAvi Kivity  # Older distros have <attr/xattr.h>, and need -lattr:
3916f2338fb4SPavel Borzenkov  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3917758e8e38SVenkateswararao Jujjuri (JV)    attr=yes
3918758e8e38SVenkateswararao Jujjuri (JV)    LIBS="-lattr $LIBS"
39194f26f2b6SAvi Kivity    libattr=yes
3920758e8e38SVenkateswararao Jujjuri (JV)  else
3921758e8e38SVenkateswararao Jujjuri (JV)    if test "$attr" = "yes" ; then
392221684af0SStewart Smith      feature_not_found "ATTR" "Install libc6 or libattr devel"
3923758e8e38SVenkateswararao Jujjuri (JV)    fi
3924758e8e38SVenkateswararao Jujjuri (JV)    attr=no
3925758e8e38SVenkateswararao Jujjuri (JV)  fi
3926758e8e38SVenkateswararao Jujjuri (JV)fi
3927758e8e38SVenkateswararao Jujjuri (JV)
3928758e8e38SVenkateswararao Jujjuri (JV)##########################################
3929bf9298b9Saliguori# iovec probe
3930bf9298b9Saliguoricat > $TMPC <<EOF
3931db34f0b3Sblueswir1#include <sys/types.h>
3932bf9298b9Saliguori#include <sys/uio.h>
3933db34f0b3Sblueswir1#include <unistd.h>
3934f91f9beeSStefan Weilint main(void) { return sizeof(struct iovec); }
3935bf9298b9SaliguoriEOF
3936bf9298b9Saliguoriiovec=no
393752166aa0SJuan Quintelaif compile_prog "" "" ; then
3938bf9298b9Saliguori  iovec=yes
3939bf9298b9Saliguorifi
3940bf9298b9Saliguori
3941f652e6afSaurel32##########################################
3942ceb42de8Saliguori# preadv probe
3943ceb42de8Saliguoricat > $TMPC <<EOF
3944ceb42de8Saliguori#include <sys/types.h>
3945ceb42de8Saliguori#include <sys/uio.h>
3946ceb42de8Saliguori#include <unistd.h>
3947c075a723SBlue Swirlint main(void) { return preadv(0, 0, 0, 0); }
3948ceb42de8SaliguoriEOF
3949ceb42de8Saliguoripreadv=no
395052166aa0SJuan Quintelaif compile_prog "" "" ; then
3951ceb42de8Saliguori  preadv=yes
3952ceb42de8Saliguorifi
3953ceb42de8Saliguori
3954ceb42de8Saliguori##########################################
3955f652e6afSaurel32# fdt probe
3956e169e1e1SPeter Maydell# fdt support is mandatory for at least some target architectures,
3957e169e1e1SPeter Maydell# so insist on it if we're building those system emulators.
3958e169e1e1SPeter Maydellfdt_required=no
3959e169e1e1SPeter Maydellfor target in $target_list; do
3960e169e1e1SPeter Maydell  case $target in
3961a666409fSKONRAD Frederic    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
3962e169e1e1SPeter Maydell      fdt_required=yes
3963e169e1e1SPeter Maydell    ;;
3964e169e1e1SPeter Maydell  esac
3965e169e1e1SPeter Maydelldone
3966e169e1e1SPeter Maydell
3967e169e1e1SPeter Maydellif test "$fdt_required" = "yes"; then
3968e169e1e1SPeter Maydell  if test "$fdt" = "no"; then
3969e169e1e1SPeter Maydell    error_exit "fdt disabled but some requested targets require it." \
3970e169e1e1SPeter Maydell      "You can turn off fdt only if you also disable all the system emulation" \
3971e169e1e1SPeter Maydell      "targets which need it (by specifying a cut down --target-list)."
3972e169e1e1SPeter Maydell  fi
3973e169e1e1SPeter Maydell  fdt=yes
3974e169e1e1SPeter Maydellfi
3975e169e1e1SPeter Maydell
39762df87df7SJuan Quintelaif test "$fdt" != "no" ; then
3977b41af4baSJuan Quintela  fdt_libs="-lfdt"
397896ce6545SPeter Crosthwaite  # explicitly check for libfdt_env.h as it is missing in some stable installs
39796e85fce0SPaul Burton  # and test for required functions to make sure we are on a version >= 1.4.2
3980f652e6afSaurel32  cat > $TMPC << EOF
398131ce0adbSThomas Huth#include <libfdt.h>
398296ce6545SPeter Crosthwaite#include <libfdt_env.h>
3983fea35ca4SAlexey Kardashevskiyint main(void) { fdt_check_full(NULL, 0); return 0; }
3984f652e6afSaurel32EOF
398552166aa0SJuan Quintela  if compile_prog "" "$fdt_libs" ; then
3986a540f158SPeter Crosthwaite    # system DTC is good - use it
3987e3971d61SPhilippe Mathieu-Daudé    fdt=system
3988aef45d51SDaniel P. Berrange  else
3989aef45d51SDaniel P. Berrange      # have GIT checkout, so activate dtc submodule
3990aef45d51SDaniel P. Berrange      if test -e "${source_path}/.git" ; then
3991aef45d51SDaniel P. Berrange          git_submodules="${git_submodules} dtc"
3992aef45d51SDaniel P. Berrange      fi
3993aef45d51SDaniel P. Berrange      if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3994e3971d61SPhilippe Mathieu-Daudé          fdt=git
3995a540f158SPeter Crosthwaite          mkdir -p dtc
3996cab00a5aSMichael S. Tsirkin          if [ "$pwd_is_source_path" != "y" ] ; then
3997a540f158SPeter Crosthwaite              symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3998a540f158SPeter Crosthwaite              symlink "$source_path/dtc/scripts" "dtc/scripts"
39992df87df7SJuan Quintela          fi
4000a540f158SPeter Crosthwaite          fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
40018a99e9a3SPhilippe Mathieu-Daudé          fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
40028a99e9a3SPhilippe Mathieu-Daudé          fdt_libs="$fdt_libs"
4003a540f158SPeter Crosthwaite      elif test "$fdt" = "yes" ; then
4004aef45d51SDaniel P. Berrange          # Not a git build & no libfdt found, prompt for system install
4005aef45d51SDaniel P. Berrange          error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4006aef45d51SDaniel P. Berrange                     "Please install the DTC (libfdt) devel package"
4007a540f158SPeter Crosthwaite      else
4008a540f158SPeter Crosthwaite          # don't have and don't want
4009de3a354aSMichael Walle          fdt_libs=
40102df87df7SJuan Quintela          fdt=no
4011f652e6afSaurel32      fi
4012f652e6afSaurel32  fi
4013aef45d51SDaniel P. Berrangefi
4014f652e6afSaurel32
4015a540f158SPeter Crosthwaitelibs_softmmu="$libs_softmmu $fdt_libs"
4016a540f158SPeter Crosthwaite
401720ff075bSMichael Walle##########################################
4018fb719563SOGAWA Hirofumi# opengl probe (for sdl2, gtk, milkymist-tmu2)
4019b1546f32SGerd Hoffmann
4020da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
40214939a1dfSMichael Tokarev  opengl_pkgs="epoxy gbm"
40225f9b1e35SGerd Hoffmann  if $pkg_config $opengl_pkgs; then
40235f9b1e35SGerd Hoffmann    opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
40245f9b1e35SGerd Hoffmann    opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4025da076ffeSGerd Hoffmann    opengl=yes
4026925a0400SGerd Hoffmann    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4027925a0400SGerd Hoffmann        gtk_gl="yes"
4028925a0400SGerd Hoffmann    fi
4029cc720a5dSGerd Hoffmann    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
403020ff075bSMichael Walle  else
4031da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
4032dcf30025SGerd Hoffmann      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
403320ff075bSMichael Walle    fi
4034f676c67eSJeremy White    opengl_cflags=""
4035da076ffeSGerd Hoffmann    opengl_libs=""
4036da076ffeSGerd Hoffmann    opengl=no
403720ff075bSMichael Walle  fi
403820ff075bSMichael Wallefi
403920ff075bSMichael Walle
4040014cb152SGerd Hoffmannif test "$opengl" = "yes"; then
4041014cb152SGerd Hoffmann  cat > $TMPC << EOF
4042014cb152SGerd Hoffmann#include <epoxy/egl.h>
4043014cb152SGerd Hoffmann#ifndef EGL_MESA_image_dma_buf_export
4044014cb152SGerd Hoffmann# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4045014cb152SGerd Hoffmann#endif
4046014cb152SGerd Hoffmannint main(void) { return 0; }
4047014cb152SGerd HoffmannEOF
4048014cb152SGerd Hoffmann  if compile_prog "" "" ; then
4049014cb152SGerd Hoffmann    opengl_dmabuf=yes
4050014cb152SGerd Hoffmann  fi
4051014cb152SGerd Hoffmannfi
4052c9a12e75SChrysostomos Nanakos
4053e633a5c6SEric Blakeif test "$opengl" = "yes" && test "$have_x11" = "yes"; then
405499e1a93bSPhilippe Mathieu-Daudé  for target in $target_list; do
405599e1a93bSPhilippe Mathieu-Daudé    case $target in
405699e1a93bSPhilippe Mathieu-Daudé      lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
405799e1a93bSPhilippe Mathieu-Daudé        need_x11=yes
405899e1a93bSPhilippe Mathieu-Daudé      ;;
405999e1a93bSPhilippe Mathieu-Daudé    esac
406099e1a93bSPhilippe Mathieu-Daudé  done
406199e1a93bSPhilippe Mathieu-Daudéfi
406299e1a93bSPhilippe Mathieu-Daudé
4063ed279a06SKlim Kireev##########################################
4064ed279a06SKlim Kireev# libxml2 probe
4065ed279a06SKlim Kireevif test "$libxml2" != "no" ; then
4066ed279a06SKlim Kireev    if $pkg_config --exists libxml-2.0; then
4067ed279a06SKlim Kireev        libxml2="yes"
4068ed279a06SKlim Kireev        libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4069ed279a06SKlim Kireev        libxml2_libs=$($pkg_config --libs libxml-2.0)
4070ed279a06SKlim Kireev    else
4071ed279a06SKlim Kireev        if test "$libxml2" = "yes"; then
4072ed279a06SKlim Kireev            feature_not_found "libxml2" "Install libxml2 devel"
4073ed279a06SKlim Kireev        fi
4074ed279a06SKlim Kireev        libxml2="no"
4075ed279a06SKlim Kireev    fi
4076ed279a06SKlim Kireevfi
4077c9a12e75SChrysostomos Nanakos
4078eb100396SBharata B Rao##########################################
4079eb100396SBharata B Rao# glusterfs probe
4080eb100396SBharata B Raoif test "$glusterfs" != "no" ; then
408165d5d3f9SStefan Weil  if $pkg_config --atleast-version=3 glusterfs-api; then
4082e01bee08SBharata B Rao    glusterfs="yes"
408389138857SStefan Weil    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
408489138857SStefan Weil    glusterfs_libs=$($pkg_config --libs glusterfs-api)
4085d85fa9ebSJeff Cody    if $pkg_config --atleast-version=4 glusterfs-api; then
4086d85fa9ebSJeff Cody      glusterfs_xlator_opt="yes"
4087d85fa9ebSJeff Cody    fi
408865d5d3f9SStefan Weil    if $pkg_config --atleast-version=5 glusterfs-api; then
40890c14fb47SBharata B Rao      glusterfs_discard="yes"
40900c14fb47SBharata B Rao    fi
40917c815372SBharata B Rao    if $pkg_config --atleast-version=6 glusterfs-api; then
4092df3a429aSNiels de Vos      glusterfs_fallocate="yes"
40937c815372SBharata B Rao      glusterfs_zerofill="yes"
40947c815372SBharata B Rao    fi
4095*e014dbe7SPrasanna Kumar Kalever    cat > $TMPC << EOF
4096*e014dbe7SPrasanna Kumar Kalever#include <glusterfs/api/glfs.h>
4097*e014dbe7SPrasanna Kumar Kalever
4098*e014dbe7SPrasanna Kumar Kaleverint
4099*e014dbe7SPrasanna Kumar Kalevermain(void)
4100*e014dbe7SPrasanna Kumar Kalever{
4101*e014dbe7SPrasanna Kumar Kalever	/* new glfs_ftruncate() passes two additional args */
4102*e014dbe7SPrasanna Kumar Kalever	return glfs_ftruncate(NULL, 0, NULL, NULL);
4103*e014dbe7SPrasanna Kumar Kalever}
4104*e014dbe7SPrasanna Kumar KaleverEOF
4105*e014dbe7SPrasanna Kumar Kalever    if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4106*e014dbe7SPrasanna Kumar Kalever      glusterfs_ftruncate_has_stat="yes"
4107*e014dbe7SPrasanna Kumar Kalever    fi
4108eb100396SBharata B Rao  else
4109eb100396SBharata B Rao    if test "$glusterfs" = "yes" ; then
41108efc9363SHu Tao      feature_not_found "GlusterFS backend support" \
41118efc9363SHu Tao          "Install glusterfs-api devel >= 3"
4112eb100396SBharata B Rao    fi
4113e01bee08SBharata B Rao    glusterfs="no"
4114eb100396SBharata B Rao  fi
4115eb100396SBharata B Raofi
4116eb100396SBharata B Rao
411739386ac7Saurel32# Check for inotify functions when we are building linux-user
41183b3f24adSaurel32# emulator.  This is done because older glibc versions don't
41193b3f24adSaurel32# have syscall stubs for these implemented.  In that case we
41203b3f24adSaurel32# don't provide them even if kernel supports them.
41213b3f24adSaurel32#
41223b3f24adSaurel32inotify=no
41233b3f24adSaurel32cat > $TMPC << EOF
41243b3f24adSaurel32#include <sys/inotify.h>
41253b3f24adSaurel32
41263b3f24adSaurel32int
41273b3f24adSaurel32main(void)
41283b3f24adSaurel32{
41293b3f24adSaurel32	/* try to start inotify */
41308690e420Saurel32	return inotify_init();
41313b3f24adSaurel32}
41323b3f24adSaurel32EOF
413352166aa0SJuan Quintelaif compile_prog "" "" ; then
41343b3f24adSaurel32  inotify=yes
41353b3f24adSaurel32fi
41363b3f24adSaurel32
4137c05c7a73SRiku Voipioinotify1=no
4138c05c7a73SRiku Voipiocat > $TMPC << EOF
4139c05c7a73SRiku Voipio#include <sys/inotify.h>
4140c05c7a73SRiku Voipio
4141c05c7a73SRiku Voipioint
4142c05c7a73SRiku Voipiomain(void)
4143c05c7a73SRiku Voipio{
4144c05c7a73SRiku Voipio    /* try to start inotify */
4145c05c7a73SRiku Voipio    return inotify_init1(0);
4146c05c7a73SRiku Voipio}
4147c05c7a73SRiku VoipioEOF
4148c05c7a73SRiku Voipioif compile_prog "" "" ; then
4149c05c7a73SRiku Voipio  inotify1=yes
4150c05c7a73SRiku Voipiofi
4151c05c7a73SRiku Voipio
4152099d6b0fSRiku Voipio# check if pipe2 is there
4153099d6b0fSRiku Voipiopipe2=no
4154099d6b0fSRiku Voipiocat > $TMPC << EOF
4155099d6b0fSRiku Voipio#include <unistd.h>
4156099d6b0fSRiku Voipio#include <fcntl.h>
4157099d6b0fSRiku Voipio
4158099d6b0fSRiku Voipioint main(void)
4159099d6b0fSRiku Voipio{
4160099d6b0fSRiku Voipio    int pipefd[2];
41619bca8162SBruce Rogers    return pipe2(pipefd, O_CLOEXEC);
4162099d6b0fSRiku Voipio}
4163099d6b0fSRiku VoipioEOF
416452166aa0SJuan Quintelaif compile_prog "" "" ; then
4165099d6b0fSRiku Voipio  pipe2=yes
4166099d6b0fSRiku Voipiofi
4167099d6b0fSRiku Voipio
416840ff6d7eSKevin Wolf# check if accept4 is there
416940ff6d7eSKevin Wolfaccept4=no
417040ff6d7eSKevin Wolfcat > $TMPC << EOF
417140ff6d7eSKevin Wolf#include <sys/socket.h>
417240ff6d7eSKevin Wolf#include <stddef.h>
417340ff6d7eSKevin Wolf
417440ff6d7eSKevin Wolfint main(void)
417540ff6d7eSKevin Wolf{
417640ff6d7eSKevin Wolf    accept4(0, NULL, NULL, SOCK_CLOEXEC);
417740ff6d7eSKevin Wolf    return 0;
417840ff6d7eSKevin Wolf}
417940ff6d7eSKevin WolfEOF
418040ff6d7eSKevin Wolfif compile_prog "" "" ; then
418140ff6d7eSKevin Wolf  accept4=yes
418240ff6d7eSKevin Wolffi
418340ff6d7eSKevin Wolf
41843ce34dfbSvibisreenivasan# check if tee/splice is there. vmsplice was added same time.
41853ce34dfbSvibisreenivasansplice=no
41863ce34dfbSvibisreenivasancat > $TMPC << EOF
41873ce34dfbSvibisreenivasan#include <unistd.h>
41883ce34dfbSvibisreenivasan#include <fcntl.h>
41893ce34dfbSvibisreenivasan#include <limits.h>
41903ce34dfbSvibisreenivasan
41913ce34dfbSvibisreenivasanint main(void)
41923ce34dfbSvibisreenivasan{
419366ea0f22SStefan Weil    int len, fd = 0;
41943ce34dfbSvibisreenivasan    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
41953ce34dfbSvibisreenivasan    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
41963ce34dfbSvibisreenivasan    return 0;
41973ce34dfbSvibisreenivasan}
41983ce34dfbSvibisreenivasanEOF
419952166aa0SJuan Quintelaif compile_prog "" "" ; then
42003ce34dfbSvibisreenivasan  splice=yes
42013ce34dfbSvibisreenivasanfi
42023ce34dfbSvibisreenivasan
4203dcc38d1cSMarcelo Tosatti##########################################
4204a99d57bbSWanlong Gao# libnuma probe
4205a99d57bbSWanlong Gao
4206a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
4207a99d57bbSWanlong Gao  cat > $TMPC << EOF
4208a99d57bbSWanlong Gao#include <numa.h>
4209a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
4210a99d57bbSWanlong GaoEOF
4211a99d57bbSWanlong Gao
4212a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
4213a99d57bbSWanlong Gao    numa=yes
4214a99d57bbSWanlong Gao    libs_softmmu="-lnuma $libs_softmmu"
4215a99d57bbSWanlong Gao  else
4216a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
4217a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
4218a99d57bbSWanlong Gao    fi
4219a99d57bbSWanlong Gao    numa=no
4220a99d57bbSWanlong Gao  fi
4221a99d57bbSWanlong Gaofi
4222a99d57bbSWanlong Gao
42237b01cb97SAlexandre Derumierif test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
42247b01cb97SAlexandre Derumier    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
42257b01cb97SAlexandre Derumier    exit 1
42267b01cb97SAlexandre Derumierfi
42277b01cb97SAlexandre Derumier
42285a22ab71SYang Zhong# Even if malloc_trim() is available, these non-libc memory allocators
42295a22ab71SYang Zhong# do not support it.
42305a22ab71SYang Zhongif test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
42315a22ab71SYang Zhong    if test "$malloc_trim" = "yes" ; then
42325a22ab71SYang Zhong        echo "Disabling malloc_trim with non-libc memory allocator"
42335a22ab71SYang Zhong    fi
42345a22ab71SYang Zhong    malloc_trim="no"
42355a22ab71SYang Zhongfi
42365a22ab71SYang Zhong
42375a22ab71SYang Zhong#######################################
42385a22ab71SYang Zhong# malloc_trim
42395a22ab71SYang Zhong
42405a22ab71SYang Zhongif test "$malloc_trim" != "no" ; then
42415a22ab71SYang Zhong    cat > $TMPC << EOF
42425a22ab71SYang Zhong#include <malloc.h>
42435a22ab71SYang Zhongint main(void) { malloc_trim(0); return 0; }
42445a22ab71SYang ZhongEOF
42455a22ab71SYang Zhong    if compile_prog "" "" ; then
42465a22ab71SYang Zhong        malloc_trim="yes"
42475a22ab71SYang Zhong    else
42485a22ab71SYang Zhong        malloc_trim="no"
42495a22ab71SYang Zhong    fi
42505a22ab71SYang Zhongfi
42515a22ab71SYang Zhong
4252a99d57bbSWanlong Gao##########################################
42532847b469SFam Zheng# tcmalloc probe
42542847b469SFam Zheng
42552847b469SFam Zhengif test "$tcmalloc" = "yes" ; then
42562847b469SFam Zheng  cat > $TMPC << EOF
42572847b469SFam Zheng#include <stdlib.h>
42582847b469SFam Zhengint main(void) { malloc(1); return 0; }
42592847b469SFam ZhengEOF
42602847b469SFam Zheng
42612847b469SFam Zheng  if compile_prog "" "-ltcmalloc" ; then
42622847b469SFam Zheng    LIBS="-ltcmalloc $LIBS"
42632847b469SFam Zheng  else
42642847b469SFam Zheng    feature_not_found "tcmalloc" "install gperftools devel"
42652847b469SFam Zheng  fi
42662847b469SFam Zhengfi
42672847b469SFam Zheng
42682847b469SFam Zheng##########################################
42697b01cb97SAlexandre Derumier# jemalloc probe
42707b01cb97SAlexandre Derumier
42717b01cb97SAlexandre Derumierif test "$jemalloc" = "yes" ; then
42727b01cb97SAlexandre Derumier  cat > $TMPC << EOF
42737b01cb97SAlexandre Derumier#include <stdlib.h>
42747b01cb97SAlexandre Derumierint main(void) { malloc(1); return 0; }
42757b01cb97SAlexandre DerumierEOF
42767b01cb97SAlexandre Derumier
42777b01cb97SAlexandre Derumier  if compile_prog "" "-ljemalloc" ; then
42787b01cb97SAlexandre Derumier    LIBS="-ljemalloc $LIBS"
42797b01cb97SAlexandre Derumier  else
42807b01cb97SAlexandre Derumier    feature_not_found "jemalloc" "install jemalloc devel"
42817b01cb97SAlexandre Derumier  fi
42827b01cb97SAlexandre Derumierfi
42837b01cb97SAlexandre Derumier
42847b01cb97SAlexandre Derumier##########################################
4285dcc38d1cSMarcelo Tosatti# signalfd probe
4286dcc38d1cSMarcelo Tosattisignalfd="no"
4287dcc38d1cSMarcelo Tosatticat > $TMPC << EOF
4288dcc38d1cSMarcelo Tosatti#include <unistd.h>
4289dcc38d1cSMarcelo Tosatti#include <sys/syscall.h>
4290dcc38d1cSMarcelo Tosatti#include <signal.h>
4291dcc38d1cSMarcelo Tosattiint main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4292dcc38d1cSMarcelo TosattiEOF
4293dcc38d1cSMarcelo Tosatti
4294dcc38d1cSMarcelo Tosattiif compile_prog "" "" ; then
4295dcc38d1cSMarcelo Tosatti  signalfd=yes
4296dcc38d1cSMarcelo Tosattifi
4297dcc38d1cSMarcelo Tosatti
4298d339d766SRichard W.M. Jones# check if optreset global is declared by <getopt.h>
4299d339d766SRichard W.M. Jonesoptreset="no"
4300d339d766SRichard W.M. Jonescat > $TMPC << EOF
4301d339d766SRichard W.M. Jones#include <getopt.h>
4302d339d766SRichard W.M. Jonesint main(void) { return optreset; }
4303d339d766SRichard W.M. JonesEOF
4304d339d766SRichard W.M. Jones
4305d339d766SRichard W.M. Jonesif compile_prog "" "" ; then
4306d339d766SRichard W.M. Jones  optreset=yes
4307d339d766SRichard W.M. Jonesfi
4308d339d766SRichard W.M. Jones
4309c2882b96SRiku Voipio# check if eventfd is supported
4310c2882b96SRiku Voipioeventfd=no
4311c2882b96SRiku Voipiocat > $TMPC << EOF
4312c2882b96SRiku Voipio#include <sys/eventfd.h>
4313c2882b96SRiku Voipio
4314c2882b96SRiku Voipioint main(void)
4315c2882b96SRiku Voipio{
431655cc7f3eSStefan Weil    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4317c2882b96SRiku Voipio}
4318c2882b96SRiku VoipioEOF
4319c2882b96SRiku Voipioif compile_prog "" "" ; then
4320c2882b96SRiku Voipio  eventfd=yes
4321c2882b96SRiku Voipiofi
4322c2882b96SRiku Voipio
4323751bcc39SMarc-André Lureau# check if memfd is supported
4324751bcc39SMarc-André Lureaumemfd=no
4325751bcc39SMarc-André Lureaucat > $TMPC << EOF
432675e5b70eSPaolo Bonzini#include <sys/mman.h>
4327751bcc39SMarc-André Lureau
4328751bcc39SMarc-André Lureauint main(void)
4329751bcc39SMarc-André Lureau{
4330751bcc39SMarc-André Lureau    return memfd_create("foo", MFD_ALLOW_SEALING);
4331751bcc39SMarc-André Lureau}
4332751bcc39SMarc-André LureauEOF
4333751bcc39SMarc-André Lureauif compile_prog "" "" ; then
4334751bcc39SMarc-André Lureau  memfd=yes
4335751bcc39SMarc-André Lureaufi
4336751bcc39SMarc-André Lureau
4337955727d2SCortland Tölva# check for usbfs
4338955727d2SCortland Tölvahave_usbfs=no
4339955727d2SCortland Tölvaif test "$linux_user" = "yes"; then
434096566d09SThomas Petazzoni  cat > $TMPC << EOF
434196566d09SThomas Petazzoni#include <linux/usbdevice_fs.h>
434296566d09SThomas Petazzoni
434396566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES
434496566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined"
434596566d09SThomas Petazzoni#endif
434696566d09SThomas Petazzoni
434796566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM
434896566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined"
434996566d09SThomas Petazzoni#endif
435096566d09SThomas Petazzoni
435196566d09SThomas Petazzoniint main(void)
435296566d09SThomas Petazzoni{
435396566d09SThomas Petazzoni    return 0;
435496566d09SThomas Petazzoni}
435596566d09SThomas PetazzoniEOF
435696566d09SThomas Petazzoni  if compile_prog "" ""; then
4357955727d2SCortland Tölva    have_usbfs=yes
4358955727d2SCortland Tölva  fi
4359955727d2SCortland Tölvafi
4360751bcc39SMarc-André Lureau
4361d0927938SUlrich Hecht# check for fallocate
4362d0927938SUlrich Hechtfallocate=no
4363d0927938SUlrich Hechtcat > $TMPC << EOF
4364d0927938SUlrich Hecht#include <fcntl.h>
4365d0927938SUlrich Hecht
4366d0927938SUlrich Hechtint main(void)
4367d0927938SUlrich Hecht{
4368d0927938SUlrich Hecht    fallocate(0, 0, 0, 0);
4369d0927938SUlrich Hecht    return 0;
4370d0927938SUlrich Hecht}
4371d0927938SUlrich HechtEOF
43728fb03151SPeter Maydellif compile_prog "" "" ; then
4373d0927938SUlrich Hecht  fallocate=yes
4374d0927938SUlrich Hechtfi
4375d0927938SUlrich Hecht
43763d4fa43eSKusanagi Kouichi# check for fallocate hole punching
43773d4fa43eSKusanagi Kouichifallocate_punch_hole=no
43783d4fa43eSKusanagi Kouichicat > $TMPC << EOF
43793d4fa43eSKusanagi Kouichi#include <fcntl.h>
43803d4fa43eSKusanagi Kouichi#include <linux/falloc.h>
43813d4fa43eSKusanagi Kouichi
43823d4fa43eSKusanagi Kouichiint main(void)
43833d4fa43eSKusanagi Kouichi{
43843d4fa43eSKusanagi Kouichi    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
43853d4fa43eSKusanagi Kouichi    return 0;
43863d4fa43eSKusanagi Kouichi}
43873d4fa43eSKusanagi KouichiEOF
43883d4fa43eSKusanagi Kouichiif compile_prog "" "" ; then
43893d4fa43eSKusanagi Kouichi  fallocate_punch_hole=yes
43903d4fa43eSKusanagi Kouichifi
43913d4fa43eSKusanagi Kouichi
4392b953f075SDenis V. Lunev# check that fallocate supports range zeroing inside the file
4393b953f075SDenis V. Lunevfallocate_zero_range=no
4394b953f075SDenis V. Lunevcat > $TMPC << EOF
4395b953f075SDenis V. Lunev#include <fcntl.h>
4396b953f075SDenis V. Lunev#include <linux/falloc.h>
4397b953f075SDenis V. Lunev
4398b953f075SDenis V. Lunevint main(void)
4399b953f075SDenis V. Lunev{
4400b953f075SDenis V. Lunev    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4401b953f075SDenis V. Lunev    return 0;
4402b953f075SDenis V. Lunev}
4403b953f075SDenis V. LunevEOF
4404b953f075SDenis V. Lunevif compile_prog "" "" ; then
4405b953f075SDenis V. Lunev  fallocate_zero_range=yes
4406b953f075SDenis V. Lunevfi
4407b953f075SDenis V. Lunev
4408ed911435SKevin Wolf# check for posix_fallocate
4409ed911435SKevin Wolfposix_fallocate=no
4410ed911435SKevin Wolfcat > $TMPC << EOF
4411ed911435SKevin Wolf#include <fcntl.h>
4412ed911435SKevin Wolf
4413ed911435SKevin Wolfint main(void)
4414ed911435SKevin Wolf{
4415ed911435SKevin Wolf    posix_fallocate(0, 0, 0);
4416ed911435SKevin Wolf    return 0;
4417ed911435SKevin Wolf}
4418ed911435SKevin WolfEOF
4419ed911435SKevin Wolfif compile_prog "" "" ; then
4420ed911435SKevin Wolf    posix_fallocate=yes
4421ed911435SKevin Wolffi
4422ed911435SKevin Wolf
4423c727f47dSPeter Maydell# check for sync_file_range
4424c727f47dSPeter Maydellsync_file_range=no
4425c727f47dSPeter Maydellcat > $TMPC << EOF
4426c727f47dSPeter Maydell#include <fcntl.h>
4427c727f47dSPeter Maydell
4428c727f47dSPeter Maydellint main(void)
4429c727f47dSPeter Maydell{
4430c727f47dSPeter Maydell    sync_file_range(0, 0, 0, 0);
4431c727f47dSPeter Maydell    return 0;
4432c727f47dSPeter Maydell}
4433c727f47dSPeter MaydellEOF
44348fb03151SPeter Maydellif compile_prog "" "" ; then
4435c727f47dSPeter Maydell  sync_file_range=yes
4436c727f47dSPeter Maydellfi
4437c727f47dSPeter Maydell
4438dace20dcSPeter Maydell# check for linux/fiemap.h and FS_IOC_FIEMAP
4439dace20dcSPeter Maydellfiemap=no
4440dace20dcSPeter Maydellcat > $TMPC << EOF
4441dace20dcSPeter Maydell#include <sys/ioctl.h>
4442dace20dcSPeter Maydell#include <linux/fs.h>
4443dace20dcSPeter Maydell#include <linux/fiemap.h>
4444dace20dcSPeter Maydell
4445dace20dcSPeter Maydellint main(void)
4446dace20dcSPeter Maydell{
4447dace20dcSPeter Maydell    ioctl(0, FS_IOC_FIEMAP, 0);
4448dace20dcSPeter Maydell    return 0;
4449dace20dcSPeter Maydell}
4450dace20dcSPeter MaydellEOF
44518fb03151SPeter Maydellif compile_prog "" "" ; then
4452dace20dcSPeter Maydell  fiemap=yes
4453dace20dcSPeter Maydellfi
4454dace20dcSPeter Maydell
4455d0927938SUlrich Hecht# check for dup3
4456d0927938SUlrich Hechtdup3=no
4457d0927938SUlrich Hechtcat > $TMPC << EOF
4458d0927938SUlrich Hecht#include <unistd.h>
4459d0927938SUlrich Hecht
4460d0927938SUlrich Hechtint main(void)
4461d0927938SUlrich Hecht{
4462d0927938SUlrich Hecht    dup3(0, 0, 0);
4463d0927938SUlrich Hecht    return 0;
4464d0927938SUlrich Hecht}
4465d0927938SUlrich HechtEOF
446678f5d726SJan Kiszkaif compile_prog "" "" ; then
4467d0927938SUlrich Hecht  dup3=yes
4468d0927938SUlrich Hechtfi
4469d0927938SUlrich Hecht
44704e0c6529SAlex Bligh# check for ppoll support
44714e0c6529SAlex Blighppoll=no
44724e0c6529SAlex Blighcat > $TMPC << EOF
44734e0c6529SAlex Bligh#include <poll.h>
44744e0c6529SAlex Bligh
44754e0c6529SAlex Blighint main(void)
44764e0c6529SAlex Bligh{
44774e0c6529SAlex Bligh    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
44784e0c6529SAlex Bligh    ppoll(&pfd, 1, 0, 0);
44794e0c6529SAlex Bligh    return 0;
44804e0c6529SAlex Bligh}
44814e0c6529SAlex BlighEOF
44824e0c6529SAlex Blighif compile_prog "" "" ; then
44834e0c6529SAlex Bligh  ppoll=yes
44844e0c6529SAlex Blighfi
44854e0c6529SAlex Bligh
4486cd758dd0SAlex Bligh# check for prctl(PR_SET_TIMERSLACK , ... ) support
4487cd758dd0SAlex Blighprctl_pr_set_timerslack=no
4488cd758dd0SAlex Blighcat > $TMPC << EOF
4489cd758dd0SAlex Bligh#include <sys/prctl.h>
4490cd758dd0SAlex Bligh
4491cd758dd0SAlex Blighint main(void)
4492cd758dd0SAlex Bligh{
4493cd758dd0SAlex Bligh    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4494cd758dd0SAlex Bligh    return 0;
4495cd758dd0SAlex Bligh}
4496cd758dd0SAlex BlighEOF
4497cd758dd0SAlex Blighif compile_prog "" "" ; then
4498cd758dd0SAlex Bligh  prctl_pr_set_timerslack=yes
4499cd758dd0SAlex Blighfi
4500cd758dd0SAlex Bligh
45013b6edd16SPeter Maydell# check for epoll support
45023b6edd16SPeter Maydellepoll=no
45033b6edd16SPeter Maydellcat > $TMPC << EOF
45043b6edd16SPeter Maydell#include <sys/epoll.h>
45053b6edd16SPeter Maydell
45063b6edd16SPeter Maydellint main(void)
45073b6edd16SPeter Maydell{
45083b6edd16SPeter Maydell    epoll_create(0);
45093b6edd16SPeter Maydell    return 0;
45103b6edd16SPeter Maydell}
45113b6edd16SPeter MaydellEOF
45128fb03151SPeter Maydellif compile_prog "" "" ; then
45133b6edd16SPeter Maydell  epoll=yes
45143b6edd16SPeter Maydellfi
45153b6edd16SPeter Maydell
4516227f0214SPeter Maydell# epoll_create1 is a later addition
4517227f0214SPeter Maydell# so we must check separately for its presence
45183b6edd16SPeter Maydellepoll_create1=no
45193b6edd16SPeter Maydellcat > $TMPC << EOF
45203b6edd16SPeter Maydell#include <sys/epoll.h>
45213b6edd16SPeter Maydell
45223b6edd16SPeter Maydellint main(void)
45233b6edd16SPeter Maydell{
452419e83f6bSPeter Maydell    /* Note that we use epoll_create1 as a value, not as
452519e83f6bSPeter Maydell     * a function being called. This is necessary so that on
452619e83f6bSPeter Maydell     * old SPARC glibc versions where the function was present in
452719e83f6bSPeter Maydell     * the library but not declared in the header file we will
452819e83f6bSPeter Maydell     * fail the configure check. (Otherwise we will get a compiler
452919e83f6bSPeter Maydell     * warning but not an error, and will proceed to fail the
453019e83f6bSPeter Maydell     * qemu compile where we compile with -Werror.)
453119e83f6bSPeter Maydell     */
4532c075a723SBlue Swirl    return (int)(uintptr_t)&epoll_create1;
45333b6edd16SPeter Maydell}
45343b6edd16SPeter MaydellEOF
45358fb03151SPeter Maydellif compile_prog "" "" ; then
45363b6edd16SPeter Maydell  epoll_create1=yes
45373b6edd16SPeter Maydellfi
45383b6edd16SPeter Maydell
4539a8fd1abaSPeter Maydell# check for sendfile support
4540a8fd1abaSPeter Maydellsendfile=no
4541a8fd1abaSPeter Maydellcat > $TMPC << EOF
4542a8fd1abaSPeter Maydell#include <sys/sendfile.h>
4543a8fd1abaSPeter Maydell
4544a8fd1abaSPeter Maydellint main(void)
4545a8fd1abaSPeter Maydell{
4546a8fd1abaSPeter Maydell    return sendfile(0, 0, 0, 0);
4547a8fd1abaSPeter Maydell}
4548a8fd1abaSPeter MaydellEOF
4549a8fd1abaSPeter Maydellif compile_prog "" "" ; then
4550a8fd1abaSPeter Maydell  sendfile=yes
4551a8fd1abaSPeter Maydellfi
4552a8fd1abaSPeter Maydell
455351834341SRiku Voipio# check for timerfd support (glibc 2.8 and newer)
455451834341SRiku Voipiotimerfd=no
455551834341SRiku Voipiocat > $TMPC << EOF
455651834341SRiku Voipio#include <sys/timerfd.h>
455751834341SRiku Voipio
455851834341SRiku Voipioint main(void)
455951834341SRiku Voipio{
456051834341SRiku Voipio    return(timerfd_create(CLOCK_REALTIME, 0));
456151834341SRiku Voipio}
456251834341SRiku VoipioEOF
456351834341SRiku Voipioif compile_prog "" "" ; then
456451834341SRiku Voipio  timerfd=yes
456551834341SRiku Voipiofi
456651834341SRiku Voipio
45679af5c906SRiku Voipio# check for setns and unshare support
45689af5c906SRiku Voipiosetns=no
45699af5c906SRiku Voipiocat > $TMPC << EOF
45709af5c906SRiku Voipio#include <sched.h>
45719af5c906SRiku Voipio
45729af5c906SRiku Voipioint main(void)
45739af5c906SRiku Voipio{
45749af5c906SRiku Voipio    int ret;
45759af5c906SRiku Voipio    ret = setns(0, 0);
45769af5c906SRiku Voipio    ret = unshare(0);
45779af5c906SRiku Voipio    return ret;
45789af5c906SRiku Voipio}
45799af5c906SRiku VoipioEOF
45809af5c906SRiku Voipioif compile_prog "" "" ; then
45819af5c906SRiku Voipio  setns=yes
45829af5c906SRiku Voipiofi
45839af5c906SRiku Voipio
458438860a03SAleksandar Markovic# clock_adjtime probe
458538860a03SAleksandar Markovicclock_adjtime=no
458638860a03SAleksandar Markoviccat > $TMPC <<EOF
458738860a03SAleksandar Markovic#include <time.h>
458838860a03SAleksandar Markovic
458938860a03SAleksandar Markovicint main(void)
459038860a03SAleksandar Markovic{
459138860a03SAleksandar Markovic    return clock_adjtime(0, 0);
459238860a03SAleksandar Markovic}
459338860a03SAleksandar MarkovicEOF
459438860a03SAleksandar Markovicclock_adjtime=no
459538860a03SAleksandar Markovicif compile_prog "" "" ; then
459638860a03SAleksandar Markovic  clock_adjtime=yes
459738860a03SAleksandar Markovicfi
459838860a03SAleksandar Markovic
45995a03cd00SAleksandar Markovic# syncfs probe
46005a03cd00SAleksandar Markovicsyncfs=no
46015a03cd00SAleksandar Markoviccat > $TMPC <<EOF
46025a03cd00SAleksandar Markovic#include <unistd.h>
46035a03cd00SAleksandar Markovic
46045a03cd00SAleksandar Markovicint main(void)
46055a03cd00SAleksandar Markovic{
46065a03cd00SAleksandar Markovic    return syncfs(0);
46075a03cd00SAleksandar Markovic}
46085a03cd00SAleksandar MarkovicEOF
46095a03cd00SAleksandar Markovicsyncfs=no
46105a03cd00SAleksandar Markovicif compile_prog "" "" ; then
46115a03cd00SAleksandar Markovic  syncfs=yes
46125a03cd00SAleksandar Markovicfi
46135a03cd00SAleksandar Markovic
46145f71eac0SPeter Maydell# Check we have a new enough version of sphinx-build
46155f71eac0SPeter Maydellhas_sphinx_build() {
46165f71eac0SPeter Maydell    # This is a bit awkward but works: create a trivial document and
46175f71eac0SPeter Maydell    # try to run it with our configuration file (which enforces a
46185f71eac0SPeter Maydell    # version requirement). This will fail if either
46195f71eac0SPeter Maydell    # sphinx-build doesn't exist at all or if it is too old.
46205f71eac0SPeter Maydell    mkdir -p "$TMPDIR1/sphinx"
46215f71eac0SPeter Maydell    touch "$TMPDIR1/sphinx/index.rst"
46225f71eac0SPeter Maydell    sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
46235f71eac0SPeter Maydell}
46245f71eac0SPeter Maydell
4625cc8ae6deSpbrook# Check if tools are available to build documentation.
4626a25dba17SJuan Quintelaif test "$docs" != "no" ; then
46275f71eac0SPeter Maydell  if has makeinfo && has pod2man && has_sphinx_build; then
4628a25dba17SJuan Quintela    docs=yes
462983a3ab8bSJuan Quintela  else
4630a25dba17SJuan Quintela    if test "$docs" = "yes" ; then
46315f71eac0SPeter Maydell      feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
463283a3ab8bSJuan Quintela    fi
4633a25dba17SJuan Quintela    docs=no
463483a3ab8bSJuan Quintela  fi
4635cc8ae6deSpbrookfi
4636cc8ae6deSpbrook
4637f514f41cSStefan Weil# Search for bswap_32 function
46386ae9a1f4SJuan Quintelabyteswap_h=no
46396ae9a1f4SJuan Quintelacat > $TMPC << EOF
46406ae9a1f4SJuan Quintela#include <byteswap.h>
46416ae9a1f4SJuan Quintelaint main(void) { return bswap_32(0); }
46426ae9a1f4SJuan QuintelaEOF
464352166aa0SJuan Quintelaif compile_prog "" "" ; then
46446ae9a1f4SJuan Quintela  byteswap_h=yes
46456ae9a1f4SJuan Quintelafi
46466ae9a1f4SJuan Quintela
464775f13596SStefan Weil# Search for bswap32 function
46486ae9a1f4SJuan Quintelabswap_h=no
46496ae9a1f4SJuan Quintelacat > $TMPC << EOF
46506ae9a1f4SJuan Quintela#include <sys/endian.h>
46516ae9a1f4SJuan Quintela#include <sys/types.h>
46526ae9a1f4SJuan Quintela#include <machine/bswap.h>
46536ae9a1f4SJuan Quintelaint main(void) { return bswap32(0); }
46546ae9a1f4SJuan QuintelaEOF
465552166aa0SJuan Quintelaif compile_prog "" "" ; then
46566ae9a1f4SJuan Quintela  bswap_h=yes
46576ae9a1f4SJuan Quintelafi
46586ae9a1f4SJuan Quintela
4659da93a1fdSaliguori##########################################
4660e49ab19fSPeter Lieven# Do we have libiscsi >= 1.9.0
4661c589b249SRonnie Sahlbergif test "$libiscsi" != "no" ; then
4662e49ab19fSPeter Lieven  if $pkg_config --atleast-version=1.9.0 libiscsi; then
46633c33ea96SPaolo Bonzini    libiscsi="yes"
4664ca871ec8SStefan Weil    libiscsi_cflags=$($pkg_config --cflags libiscsi)
4665ca871ec8SStefan Weil    libiscsi_libs=$($pkg_config --libs libiscsi)
4666c589b249SRonnie Sahlberg  else
4667c589b249SRonnie Sahlberg    if test "$libiscsi" = "yes" ; then
4668e49ab19fSPeter Lieven      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4669c589b249SRonnie Sahlberg    fi
4670c589b249SRonnie Sahlberg    libiscsi="no"
4671c589b249SRonnie Sahlberg  fi
4672c589b249SRonnie Sahlbergfi
4673c589b249SRonnie Sahlberg
4674c589b249SRonnie Sahlberg##########################################
46758bacde8dSNatanael Copa# Do we need libm
46768bacde8dSNatanael Copacat > $TMPC << EOF
46778bacde8dSNatanael Copa#include <math.h>
4678f80ea986SAlexey Kardashevskiyint main(int argc, char **argv) { return isnan(sin((double)argc)); }
46798bacde8dSNatanael CopaEOF
46808bacde8dSNatanael Copaif compile_prog "" "" ; then
46818bacde8dSNatanael Copa  :
46828bacde8dSNatanael Copaelif compile_prog "" "-lm" ; then
46838bacde8dSNatanael Copa  LIBS="-lm $LIBS"
46848bacde8dSNatanael Copa  libs_qga="-lm $libs_qga"
46858bacde8dSNatanael Copaelse
468676ad07a4SPeter Maydell  error_exit "libm check failed"
46878bacde8dSNatanael Copafi
46888bacde8dSNatanael Copa
46898bacde8dSNatanael Copa##########################################
4690da93a1fdSaliguori# Do we need librt
46918bacde8dSNatanael Copa# uClibc provides 2 versions of clock_gettime(), one with realtime
46928bacde8dSNatanael Copa# support and one without. This means that the clock_gettime() don't
46938bacde8dSNatanael Copa# need -lrt. We still need it for timer_create() so we check for this
46948bacde8dSNatanael Copa# function in addition.
4695da93a1fdSaliguoricat > $TMPC <<EOF
4696da93a1fdSaliguori#include <signal.h>
4697da93a1fdSaliguori#include <time.h>
46988bacde8dSNatanael Copaint main(void) {
46998bacde8dSNatanael Copa  timer_create(CLOCK_REALTIME, NULL, NULL);
47008bacde8dSNatanael Copa  return clock_gettime(CLOCK_REALTIME, NULL);
47018bacde8dSNatanael Copa}
4702da93a1fdSaliguoriEOF
4703da93a1fdSaliguori
470452166aa0SJuan Quintelaif compile_prog "" "" ; then
470507ffa4bdSJuan Quintela  :
47068bacde8dSNatanael Copa# we need pthread for static linking. use previous pthread test result
470718e588b1SRick Liuelif compile_prog "" "$pthread_lib -lrt" ; then
470818e588b1SRick Liu  LIBS="$LIBS -lrt"
470918e588b1SRick Liu  libs_qga="$libs_qga -lrt"
4710da93a1fdSaliguorifi
4711da93a1fdSaliguori
4712d99e97e6SThomas Huth# Check whether we need to link libutil for openpty()
4713d99e97e6SThomas Huthcat > $TMPC << EOF
4714d99e97e6SThomas Huthextern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4715d99e97e6SThomas Huthint main(void) { return openpty(0, 0, 0, 0, 0); }
4716d99e97e6SThomas HuthEOF
4717d99e97e6SThomas Huth
4718d99e97e6SThomas Huthif ! compile_prog "" "" ; then
4719d99e97e6SThomas Huth  if compile_prog "" "-lutil" ; then
47206362a53fSJuan Quintela    libs_softmmu="-lutil $libs_softmmu"
4721d99e97e6SThomas Huth    libs_tools="-lutil $libs_tools"
4722d99e97e6SThomas Huth  fi
47236362a53fSJuan Quintelafi
47246362a53fSJuan Quintela
4725de5071c5SBlue Swirl##########################################
4726cd4ec0b4SGerd Hoffmann# spice probe
4727cd4ec0b4SGerd Hoffmannif test "$spice" != "no" ; then
4728cd4ec0b4SGerd Hoffmann  cat > $TMPC << EOF
4729cd4ec0b4SGerd Hoffmann#include <spice.h>
4730cd4ec0b4SGerd Hoffmannint main(void) { spice_server_new(); return 0; }
4731cd4ec0b4SGerd HoffmannEOF
4732710fc4f5SJiri Denemark  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4733710fc4f5SJiri Denemark  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
47341b63665cSMarc-André Lureau  if $pkg_config --atleast-version=0.12.5 spice-server && \
473565d5d3f9SStefan Weil     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4736cd4ec0b4SGerd Hoffmann     compile_prog "$spice_cflags" "$spice_libs" ; then
4737cd4ec0b4SGerd Hoffmann    spice="yes"
4738cd4ec0b4SGerd Hoffmann    libs_softmmu="$libs_softmmu $spice_libs"
4739cd4ec0b4SGerd Hoffmann    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
47402e0e3c39SAlon Levy    spice_protocol_version=$($pkg_config --modversion spice-protocol)
47412e0e3c39SAlon Levy    spice_server_version=$($pkg_config --modversion spice-server)
4742cd4ec0b4SGerd Hoffmann  else
4743cd4ec0b4SGerd Hoffmann    if test "$spice" = "yes" ; then
47448efc9363SHu Tao      feature_not_found "spice" \
47451b63665cSMarc-André Lureau          "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4746cd4ec0b4SGerd Hoffmann    fi
4747cd4ec0b4SGerd Hoffmann    spice="no"
4748cd4ec0b4SGerd Hoffmann  fi
4749cd4ec0b4SGerd Hoffmannfi
4750cd4ec0b4SGerd Hoffmann
47517b02f544SMarc-André Lureau# check for smartcard support
47527b02f544SMarc-André Lureauif test "$smartcard" != "no"; then
47530f5c642dSMichal Privoznik    if $pkg_config --atleast-version=2.5.1 libcacard; then
47547b02f544SMarc-André Lureau        libcacard_cflags=$($pkg_config --cflags libcacard)
47557b02f544SMarc-André Lureau        libcacard_libs=$($pkg_config --libs libcacard)
47567b02f544SMarc-André Lureau        smartcard="yes"
4757111a38b0SRobert Relyea    else
47587b02f544SMarc-André Lureau        if test "$smartcard" = "yes"; then
47597b02f544SMarc-André Lureau            feature_not_found "smartcard" "Install libcacard devel"
4760111a38b0SRobert Relyea        fi
47617b02f544SMarc-André Lureau        smartcard="no"
4762111a38b0SRobert Relyea    fi
4763111a38b0SRobert Relyeafi
4764111a38b0SRobert Relyea
47652b2325ffSGerd Hoffmann# check for libusb
47662b2325ffSGerd Hoffmannif test "$libusb" != "no" ; then
476765d5d3f9SStefan Weil    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
47682b2325ffSGerd Hoffmann        libusb="yes"
4769ca871ec8SStefan Weil        libusb_cflags=$($pkg_config --cflags libusb-1.0)
4770ca871ec8SStefan Weil        libusb_libs=$($pkg_config --libs libusb-1.0)
47712b2325ffSGerd Hoffmann    else
47722b2325ffSGerd Hoffmann        if test "$libusb" = "yes"; then
47738efc9363SHu Tao            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
47742b2325ffSGerd Hoffmann        fi
47752b2325ffSGerd Hoffmann        libusb="no"
47762b2325ffSGerd Hoffmann    fi
47772b2325ffSGerd Hoffmannfi
47782b2325ffSGerd Hoffmann
477969354a83SHans de Goede# check for usbredirparser for usb network redirection support
478069354a83SHans de Goedeif test "$usb_redir" != "no" ; then
478165d5d3f9SStefan Weil    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
478269354a83SHans de Goede        usb_redir="yes"
4783ca871ec8SStefan Weil        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4784ca871ec8SStefan Weil        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
478569354a83SHans de Goede    else
478669354a83SHans de Goede        if test "$usb_redir" = "yes"; then
478721684af0SStewart Smith            feature_not_found "usb-redir" "Install usbredir devel"
478869354a83SHans de Goede        fi
478969354a83SHans de Goede        usb_redir="no"
479069354a83SHans de Goede    fi
479169354a83SHans de Goedefi
479269354a83SHans de Goede
4793cd4ec0b4SGerd Hoffmann##########################################
4794d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
4795d9840e25STomoki Sekiyama
4796e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4797e633a5c6SEric Blake        test "$vss_win32_sdk" != "no" ; then
4798d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
4799690604f6SMichael Roth    "")   vss_win32_include="-isystem $source_path" ;;
4800d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4801d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4802690604f6SMichael Roth          vss_win32_include="-isystem $source_path/.sdk/vss"
4803d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4804d9840e25STomoki Sekiyama	  ;;
4805690604f6SMichael Roth    *)    vss_win32_include="-isystem $vss_win32_sdk"
4806d9840e25STomoki Sekiyama  esac
4807d9840e25STomoki Sekiyama  cat > $TMPC << EOF
4808d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
4809d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
4810d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
4811d9840e25STomoki SekiyamaEOF
4812d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
4813d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
4814d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4815315d3184SFam Zheng    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4816f33ca81fSMichael Roth    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4817d9840e25STomoki Sekiyama  else
4818d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
4819d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
4820d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4821d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4822d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4823d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
4824d9840e25STomoki Sekiyama      feature_not_found "VSS support"
4825d9840e25STomoki Sekiyama    fi
4826d9840e25STomoki Sekiyama    guest_agent_with_vss="no"
4827d9840e25STomoki Sekiyama  fi
4828d9840e25STomoki Sekiyamafi
4829d9840e25STomoki Sekiyama
4830d9840e25STomoki Sekiyama##########################################
4831d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
4832d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
4833d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
4834d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
4835d9840e25STomoki Sekiyama
4836e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4837e633a5c6SEric Blake        test "$guest_agent_with_vss" = "yes" ; then
4838d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
4839d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
4840d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4841d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
4842d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4843d9840e25STomoki Sekiyama    else
4844d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
4845d9840e25STomoki Sekiyama    fi
4846d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
4847d9840e25STomoki Sekiyama    win_sdk=""
4848d9840e25STomoki Sekiyama  fi
4849d9840e25STomoki Sekiyamafi
4850d9840e25STomoki Sekiyama
4851d9840e25STomoki Sekiyama##########################################
485250cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h
4853e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
485450cbebb9SMichael Roth  cat > $TMPC << EOF
485550cbebb9SMichael Roth#include <windows.h>
485650cbebb9SMichael Roth#include <ntddscsi.h>
485750cbebb9SMichael Rothint main(void) {
485850cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS)
485950cbebb9SMichael Roth#error Missing required ioctl definitions
486050cbebb9SMichael Roth#endif
486150cbebb9SMichael Roth  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
486250cbebb9SMichael Roth  return addr.Lun;
486350cbebb9SMichael Roth}
486450cbebb9SMichael RothEOF
486550cbebb9SMichael Roth  if compile_prog "" "" ; then
486650cbebb9SMichael Roth    guest_agent_ntddscsi=yes
4867c54e1eb4SMichael Roth    libs_qga="-lsetupapi $libs_qga"
486850cbebb9SMichael Roth  fi
486950cbebb9SMichael Rothfi
487050cbebb9SMichael Roth
487150cbebb9SMichael Roth##########################################
48729d9e1521SGerd Hoffmann# virgl renderer probe
48739d9e1521SGerd Hoffmann
48749d9e1521SGerd Hoffmannif test "$virglrenderer" != "no" ; then
48759d9e1521SGerd Hoffmann  cat > $TMPC << EOF
48769d9e1521SGerd Hoffmann#include <virglrenderer.h>
48779d9e1521SGerd Hoffmannint main(void) { virgl_renderer_poll(); return 0; }
48789d9e1521SGerd HoffmannEOF
48799d9e1521SGerd Hoffmann  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
48809d9e1521SGerd Hoffmann  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
488147479c55SMarc-André Lureau  virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
48829d9e1521SGerd Hoffmann  if $pkg_config virglrenderer >/dev/null 2>&1 && \
48839d9e1521SGerd Hoffmann     compile_prog "$virgl_cflags" "$virgl_libs" ; then
48849d9e1521SGerd Hoffmann    virglrenderer="yes"
48859d9e1521SGerd Hoffmann  else
48869d9e1521SGerd Hoffmann    if test "$virglrenderer" = "yes" ; then
48879d9e1521SGerd Hoffmann      feature_not_found "virglrenderer"
48889d9e1521SGerd Hoffmann    fi
48899d9e1521SGerd Hoffmann    virglrenderer="no"
48909d9e1521SGerd Hoffmann  fi
48919d9e1521SGerd Hoffmannfi
48929d9e1521SGerd Hoffmann
48939d9e1521SGerd Hoffmann##########################################
48948ca80760SRichard Henderson# capstone
48958ca80760SRichard Henderson
4896e219c499SRichard Hendersoncase "$capstone" in
4897e219c499SRichard Henderson  "" | yes)
48988ca80760SRichard Henderson    if $pkg_config capstone; then
4899e219c499SRichard Henderson      capstone=system
4900e633a5c6SEric Blake    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4901e219c499SRichard Henderson      capstone=git
4902e219c499SRichard Henderson    elif test -e "${source_path}/capstone/Makefile" ; then
4903e219c499SRichard Henderson      capstone=internal
4904e219c499SRichard Henderson    elif test -z "$capstone" ; then
4905e219c499SRichard Henderson      capstone=no
4906e219c499SRichard Henderson    else
4907e219c499SRichard Henderson      feature_not_found "capstone" "Install capstone devel or git submodule"
4908e219c499SRichard Henderson    fi
4909e219c499SRichard Henderson    ;;
4910e219c499SRichard Henderson
4911e219c499SRichard Henderson  system)
4912e219c499SRichard Henderson    if ! $pkg_config capstone; then
4913e219c499SRichard Henderson      feature_not_found "capstone" "Install capstone devel"
4914e219c499SRichard Henderson    fi
4915e219c499SRichard Henderson    ;;
4916e219c499SRichard Hendersonesac
4917e219c499SRichard Henderson
4918e219c499SRichard Hendersoncase "$capstone" in
4919e219c499SRichard Henderson  git | internal)
4920e219c499SRichard Henderson    if test "$capstone" = git; then
4921e219c499SRichard Henderson      git_submodules="${git_submodules} capstone"
4922e219c499SRichard Henderson    fi
4923e219c499SRichard Henderson    mkdir -p capstone
4924e219c499SRichard Henderson    QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4925e219c499SRichard Henderson    if test "$mingw32" = "yes"; then
4926e219c499SRichard Henderson      LIBCAPSTONE=capstone.lib
4927e219c499SRichard Henderson    else
4928e219c499SRichard Henderson      LIBCAPSTONE=libcapstone.a
4929e219c499SRichard Henderson    fi
4930e219c499SRichard Henderson    LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4931e219c499SRichard Henderson    ;;
4932e219c499SRichard Henderson
4933e219c499SRichard Henderson  system)
49348ca80760SRichard Henderson    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
49358ca80760SRichard Henderson    LIBS="$($pkg_config --libs capstone) $LIBS"
4936e219c499SRichard Henderson    ;;
4937e219c499SRichard Henderson
4938e219c499SRichard Henderson  no)
4939e219c499SRichard Henderson    ;;
4940e219c499SRichard Henderson  *)
4941e219c499SRichard Henderson    error_exit "Unknown state for capstone: $capstone"
4942e219c499SRichard Henderson    ;;
4943e219c499SRichard Hendersonesac
49448ca80760SRichard Henderson
49458ca80760SRichard Henderson##########################################
49465f6b9e8fSBlue Swirl# check if we have fdatasync
49475f6b9e8fSBlue Swirl
49485f6b9e8fSBlue Swirlfdatasync=no
49495f6b9e8fSBlue Swirlcat > $TMPC << EOF
49505f6b9e8fSBlue Swirl#include <unistd.h>
4951d1722a27SAlexandre Raymondint main(void) {
4952d1722a27SAlexandre Raymond#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4953d1722a27SAlexandre Raymondreturn fdatasync(0);
4954d1722a27SAlexandre Raymond#else
4955e172fe11SStefan Weil#error Not supported
4956d1722a27SAlexandre Raymond#endif
4957d1722a27SAlexandre Raymond}
49585f6b9e8fSBlue SwirlEOF
49595f6b9e8fSBlue Swirlif compile_prog "" "" ; then
49605f6b9e8fSBlue Swirl    fdatasync=yes
49615f6b9e8fSBlue Swirlfi
49625f6b9e8fSBlue Swirl
496394a420b1SStefan Hajnoczi##########################################
4964e78815a5SAndreas Färber# check if we have madvise
4965e78815a5SAndreas Färber
4966e78815a5SAndreas Färbermadvise=no
4967e78815a5SAndreas Färbercat > $TMPC << EOF
4968e78815a5SAndreas Färber#include <sys/types.h>
4969e78815a5SAndreas Färber#include <sys/mman.h>
4970832ce9c2SScott Wood#include <stddef.h>
4971e78815a5SAndreas Färberint main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4972e78815a5SAndreas FärberEOF
4973e78815a5SAndreas Färberif compile_prog "" "" ; then
4974e78815a5SAndreas Färber    madvise=yes
4975e78815a5SAndreas Färberfi
4976e78815a5SAndreas Färber
4977e78815a5SAndreas Färber##########################################
4978e78815a5SAndreas Färber# check if we have posix_madvise
4979e78815a5SAndreas Färber
4980e78815a5SAndreas Färberposix_madvise=no
4981e78815a5SAndreas Färbercat > $TMPC << EOF
4982e78815a5SAndreas Färber#include <sys/mman.h>
4983832ce9c2SScott Wood#include <stddef.h>
4984e78815a5SAndreas Färberint main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4985e78815a5SAndreas FärberEOF
4986e78815a5SAndreas Färberif compile_prog "" "" ; then
4987e78815a5SAndreas Färber    posix_madvise=yes
4988e78815a5SAndreas Färberfi
4989e78815a5SAndreas Färber
4990e78815a5SAndreas Färber##########################################
49919bc5a719SAndreas Gustafsson# check if we have posix_memalign()
49929bc5a719SAndreas Gustafsson
49939bc5a719SAndreas Gustafssonposix_memalign=no
49949bc5a719SAndreas Gustafssoncat > $TMPC << EOF
49959bc5a719SAndreas Gustafsson#include <stdlib.h>
49969bc5a719SAndreas Gustafssonint main(void) {
49979bc5a719SAndreas Gustafsson    void *p;
49989bc5a719SAndreas Gustafsson    return posix_memalign(&p, 8, 8);
49999bc5a719SAndreas Gustafsson}
50009bc5a719SAndreas GustafssonEOF
50019bc5a719SAndreas Gustafssonif compile_prog "" "" ; then
50029bc5a719SAndreas Gustafsson    posix_memalign=yes
50039bc5a719SAndreas Gustafssonfi
50049bc5a719SAndreas Gustafsson
50059bc5a719SAndreas Gustafsson##########################################
50060a852417SPaul Durrant# check if we have posix_syslog
50070a852417SPaul Durrant
50080a852417SPaul Durrantposix_syslog=no
50090a852417SPaul Durrantcat > $TMPC << EOF
50100a852417SPaul Durrant#include <syslog.h>
50110a852417SPaul Durrantint main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
50120a852417SPaul DurrantEOF
50130a852417SPaul Durrantif compile_prog "" "" ; then
50140a852417SPaul Durrant    posix_syslog=yes
50150a852417SPaul Durrantfi
50160a852417SPaul Durrant
50170a852417SPaul Durrant##########################################
5018401bc051SPeter Maydell# check if we have sem_timedwait
5019401bc051SPeter Maydell
5020401bc051SPeter Maydellsem_timedwait=no
5021401bc051SPeter Maydellcat > $TMPC << EOF
5022401bc051SPeter Maydell#include <semaphore.h>
5023401bc051SPeter Maydellint main(void) { return sem_timedwait(0, 0); }
5024401bc051SPeter MaydellEOF
5025401bc051SPeter Maydellif compile_prog "" "" ; then
5026401bc051SPeter Maydell    sem_timedwait=yes
5027401bc051SPeter Maydellfi
5028401bc051SPeter Maydell
5029401bc051SPeter Maydell##########################################
50305c99fa37SKeno Fischer# check if we have strchrnul
50315c99fa37SKeno Fischer
50325c99fa37SKeno Fischerstrchrnul=no
50335c99fa37SKeno Fischercat > $TMPC << EOF
50345c99fa37SKeno Fischer#include <string.h>
50355c99fa37SKeno Fischerint main(void);
50365c99fa37SKeno Fischer// Use a haystack that the compiler shouldn't be able to constant fold
50375c99fa37SKeno Fischerchar *haystack = (char*)&main;
50385c99fa37SKeno Fischerint main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
50395c99fa37SKeno FischerEOF
50405c99fa37SKeno Fischerif compile_prog "" "" ; then
50415c99fa37SKeno Fischer    strchrnul=yes
50425c99fa37SKeno Fischerfi
50435c99fa37SKeno Fischer
50445c99fa37SKeno Fischer##########################################
504594a420b1SStefan Hajnoczi# check if trace backend exists
504694a420b1SStefan Hajnoczi
50475b808275SLluís Vilanova$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
504894a420b1SStefan Hajnocziif test "$?" -ne 0 ; then
50495b808275SLluís Vilanova  error_exit "invalid trace backends" \
50505b808275SLluís Vilanova      "Please choose supported trace backends."
505194a420b1SStefan Hajnoczifi
505294a420b1SStefan Hajnoczi
50537e24e92aSStefan Hajnoczi##########################################
50547e24e92aSStefan Hajnoczi# For 'ust' backend, test if ust headers are present
50555b808275SLluís Vilanovaif have_backend "ust"; then
50567e24e92aSStefan Hajnoczi  cat > $TMPC << EOF
5057bf15f63cSMohamad Gebai#include <lttng/tracepoint.h>
50587e24e92aSStefan Hajnocziint main(void) { return 0; }
50597e24e92aSStefan HajnocziEOF
5060c79ed23dSFrancis Deslauriers  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5061bf15f63cSMohamad Gebai    if $pkg_config lttng-ust --exists; then
506289138857SStefan Weil      lttng_ust_libs=$($pkg_config --libs lttng-ust)
50637e24e92aSStefan Hajnoczi    else
5064c79ed23dSFrancis Deslauriers      lttng_ust_libs="-llttng-ust -ldl"
5065bf15f63cSMohamad Gebai    fi
5066bf15f63cSMohamad Gebai    if $pkg_config liburcu-bp --exists; then
506789138857SStefan Weil      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5068bf15f63cSMohamad Gebai    else
5069bf15f63cSMohamad Gebai      urcu_bp_libs="-lurcu-bp"
5070bf15f63cSMohamad Gebai    fi
5071bf15f63cSMohamad Gebai
5072bf15f63cSMohamad Gebai    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5073bf15f63cSMohamad Gebai    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5074bf15f63cSMohamad Gebai  else
5075bf15f63cSMohamad Gebai    error_exit "Trace backend 'ust' missing lttng-ust header files"
50767e24e92aSStefan Hajnoczi  fi
50777e24e92aSStefan Hajnoczifi
5078b3d08c02SDaniel P. Berrange
5079b3d08c02SDaniel P. Berrange##########################################
5080b3d08c02SDaniel P. Berrange# For 'dtrace' backend, test if 'dtrace' command is present
50815b808275SLluís Vilanovaif have_backend "dtrace"; then
5082b3d08c02SDaniel P. Berrange  if ! has 'dtrace' ; then
508376ad07a4SPeter Maydell    error_exit "dtrace command is not found in PATH $PATH"
5084b3d08c02SDaniel P. Berrange  fi
5085c276b17dSDaniel P. Berrange  trace_backend_stap="no"
5086c276b17dSDaniel P. Berrange  if has 'stap' ; then
5087c276b17dSDaniel P. Berrange    trace_backend_stap="yes"
5088c276b17dSDaniel P. Berrange  fi
5089b3d08c02SDaniel P. Berrangefi
5090b3d08c02SDaniel P. Berrange
50917e24e92aSStefan Hajnoczi##########################################
5092519175a2SAlex Barcelo# check and set a backend for coroutine
5093d0e2fce5SAneesh Kumar K.V
50947c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
509533c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows
509633c53c54SDaniel P. Berrange# specific one.
50977c2acc70SPeter Maydell
50987c2acc70SPeter Maydellucontext_works=no
5099d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
5100d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
5101d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
5102cdf84806SPeter Maydell#ifdef __stub_makecontext
5103cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
5104cdf84806SPeter Maydell#endif
510575cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
5106d0e2fce5SAneesh Kumar K.VEOF
5107d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
51087c2acc70SPeter Maydell    ucontext_works=yes
5109d0e2fce5SAneesh Kumar K.V  fi
5110519175a2SAlex Barcelofi
51117c2acc70SPeter Maydell
51127c2acc70SPeter Maydellif test "$coroutine" = ""; then
51137c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
51147c2acc70SPeter Maydell    coroutine=win32
51157c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
51167c2acc70SPeter Maydell    coroutine=ucontext
5117519175a2SAlex Barcelo  else
51187c2acc70SPeter Maydell    coroutine=sigaltstack
51197c2acc70SPeter Maydell  fi
51207c2acc70SPeter Maydellelse
51217c2acc70SPeter Maydell  case $coroutine in
51227c2acc70SPeter Maydell  windows)
51237c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
51247c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
51257c2acc70SPeter Maydell    fi
51267c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
51277c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
51287c2acc70SPeter Maydell    coroutine=win32
51297c2acc70SPeter Maydell    ;;
51307c2acc70SPeter Maydell  ucontext)
51317c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
51327c2acc70SPeter Maydell      feature_not_found "ucontext"
51337c2acc70SPeter Maydell    fi
51347c2acc70SPeter Maydell    ;;
513533c53c54SDaniel P. Berrange  sigaltstack)
51367c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
51377c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
51387c2acc70SPeter Maydell    fi
51397c2acc70SPeter Maydell    ;;
51407c2acc70SPeter Maydell  *)
514176ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
51427c2acc70SPeter Maydell    ;;
51437c2acc70SPeter Maydell  esac
5144d0e2fce5SAneesh Kumar K.Vfi
5145d0e2fce5SAneesh Kumar K.V
514670c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then
514770c60c08SStefan Hajnoczi  coroutine_pool=yes
514870c60c08SStefan Hajnoczifi
514970c60c08SStefan Hajnoczi
51507d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then
51517d992e4dSPeter Lieven  if test "$coroutine_pool" = "yes"; then
51527d992e4dSPeter Lieven    echo "WARN: disabling coroutine pool for stack usage debugging"
51537d992e4dSPeter Lieven    coroutine_pool=no
51547d992e4dSPeter Lieven  fi
51557d992e4dSPeter Lievenfi
51567d992e4dSPeter Lieven
51577d992e4dSPeter Lieven
5158d0e2fce5SAneesh Kumar K.V##########################################
5159d2042378SAneesh Kumar K.V# check if we have open_by_handle_at
5160d2042378SAneesh Kumar K.V
51614e1797f9SStefan Weilopen_by_handle_at=no
5162d2042378SAneesh Kumar K.Vcat > $TMPC << EOF
5163d2042378SAneesh Kumar K.V#include <fcntl.h>
5164acc55ba8SStefan Weil#if !defined(AT_EMPTY_PATH)
5165acc55ba8SStefan Weil# error missing definition
5166acc55ba8SStefan Weil#else
516775cafad7SStefan Weilint main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5168acc55ba8SStefan Weil#endif
5169d2042378SAneesh Kumar K.VEOF
5170d2042378SAneesh Kumar K.Vif compile_prog "" "" ; then
5171d2042378SAneesh Kumar K.V    open_by_handle_at=yes
5172d2042378SAneesh Kumar K.Vfi
5173d2042378SAneesh Kumar K.V
5174e06a765eSHarsh Prateek Bora########################################
5175e06a765eSHarsh Prateek Bora# check if we have linux/magic.h
5176e06a765eSHarsh Prateek Bora
5177e06a765eSHarsh Prateek Boralinux_magic_h=no
5178e06a765eSHarsh Prateek Boracat > $TMPC << EOF
5179e06a765eSHarsh Prateek Bora#include <linux/magic.h>
5180e06a765eSHarsh Prateek Boraint main(void) {
518175cafad7SStefan Weil  return 0;
5182e06a765eSHarsh Prateek Bora}
5183e06a765eSHarsh Prateek BoraEOF
5184e06a765eSHarsh Prateek Boraif compile_prog "" "" ; then
5185e06a765eSHarsh Prateek Bora    linux_magic_h=yes
5186e06a765eSHarsh Prateek Borafi
5187e06a765eSHarsh Prateek Bora
51888ab1bf12SLuiz Capitulino########################################
5189c95e3080SKevin Wolf# check whether we can disable warning option with a pragma (this is needed
5190c95e3080SKevin Wolf# to silence warnings in the headers of some versions of external libraries).
5191c95e3080SKevin Wolf# This test has to be compiled with -Werror as otherwise an unknown pragma is
5192c95e3080SKevin Wolf# only a warning.
5193c95e3080SKevin Wolf#
5194c95e3080SKevin Wolf# If we can't selectively disable warning in the code, disable -Werror so that
5195c95e3080SKevin Wolf# the build doesn't fail anyway.
5196c95e3080SKevin Wolf
519706d71fa1SPeter Maydellpragma_disable_unused_but_set=no
519806d71fa1SPeter Maydellcat > $TMPC << EOF
5199e6f53fd5SMarkus Armbruster#pragma GCC diagnostic push
5200c95e3080SKevin Wolf#pragma GCC diagnostic ignored "-Wstrict-prototypes"
5201e6f53fd5SMarkus Armbruster#pragma GCC diagnostic pop
5202c95e3080SKevin Wolf
520306d71fa1SPeter Maydellint main(void) {
520406d71fa1SPeter Maydell    return 0;
520506d71fa1SPeter Maydell}
520606d71fa1SPeter MaydellEOF
520706d71fa1SPeter Maydellif compile_prog "-Werror" "" ; then
5208cc6e3ca9SGerd Hoffmann    pragma_diagnostic_available=yes
5209c95e3080SKevin Wolfelse
5210c95e3080SKevin Wolf    werror=no
521106d71fa1SPeter Maydellfi
521206d71fa1SPeter Maydell
521306d71fa1SPeter Maydell########################################
5214541be927SChristian Borntraeger# check if we have valgrind/valgrind.h
52153f4349dcSKevin Wolf
52163f4349dcSKevin Wolfvalgrind_h=no
52173f4349dcSKevin Wolfcat > $TMPC << EOF
52183f4349dcSKevin Wolf#include <valgrind/valgrind.h>
52193f4349dcSKevin Wolfint main(void) {
52203f4349dcSKevin Wolf  return 0;
52213f4349dcSKevin Wolf}
52223f4349dcSKevin WolfEOF
52233f4349dcSKevin Wolfif compile_prog "" "" ; then
52243f4349dcSKevin Wolf    valgrind_h=yes
52253f4349dcSKevin Wolffi
52263f4349dcSKevin Wolf
52273f4349dcSKevin Wolf########################################
52288ab1bf12SLuiz Capitulino# check if environ is declared
52298ab1bf12SLuiz Capitulino
52308ab1bf12SLuiz Capitulinohas_environ=no
52318ab1bf12SLuiz Capitulinocat > $TMPC << EOF
52328ab1bf12SLuiz Capitulino#include <unistd.h>
52338ab1bf12SLuiz Capitulinoint main(void) {
5234c075a723SBlue Swirl    environ = 0;
52358ab1bf12SLuiz Capitulino    return 0;
52368ab1bf12SLuiz Capitulino}
52378ab1bf12SLuiz CapitulinoEOF
52388ab1bf12SLuiz Capitulinoif compile_prog "" "" ; then
52398ab1bf12SLuiz Capitulino    has_environ=yes
52408ab1bf12SLuiz Capitulinofi
52418ab1bf12SLuiz Capitulino
524276a347e1SRichard Henderson########################################
524376a347e1SRichard Henderson# check if cpuid.h is usable.
524476a347e1SRichard Henderson
524576a347e1SRichard Hendersoncat > $TMPC << EOF
524676a347e1SRichard Henderson#include <cpuid.h>
524776a347e1SRichard Hendersonint main(void) {
5248774d566cSPeter Maydell    unsigned a, b, c, d;
5249774d566cSPeter Maydell    int max = __get_cpuid_max(0, 0);
5250774d566cSPeter Maydell
5251774d566cSPeter Maydell    if (max >= 1) {
5252774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
5253774d566cSPeter Maydell    }
5254774d566cSPeter Maydell
5255774d566cSPeter Maydell    if (max >= 7) {
5256774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
5257774d566cSPeter Maydell    }
5258774d566cSPeter Maydell
525976a347e1SRichard Henderson    return 0;
526076a347e1SRichard Henderson}
526176a347e1SRichard HendersonEOF
526276a347e1SRichard Hendersonif compile_prog "" "" ; then
526376a347e1SRichard Henderson    cpuid_h=yes
526476a347e1SRichard Hendersonfi
526576a347e1SRichard Henderson
52665dd89908SRichard Henderson##########################################
52675dd89908SRichard Henderson# avx2 optimization requirement check
52685dd89908SRichard Henderson#
52695dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable,
52705dd89908SRichard Henderson# since we won't be able to select the new routines.
52715dd89908SRichard Henderson
5272e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
52735dd89908SRichard Henderson  cat > $TMPC << EOF
52745dd89908SRichard Henderson#pragma GCC push_options
52755dd89908SRichard Henderson#pragma GCC target("avx2")
52765dd89908SRichard Henderson#include <cpuid.h>
52775dd89908SRichard Henderson#include <immintrin.h>
52785dd89908SRichard Hendersonstatic int bar(void *a) {
52795dd89908SRichard Henderson    __m256i x = *(__m256i *)a;
52805dd89908SRichard Henderson    return _mm256_testz_si256(x, x);
52815dd89908SRichard Henderson}
52825dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); }
52835dd89908SRichard HendersonEOF
52845dd89908SRichard Henderson  if compile_object "" ; then
52855dd89908SRichard Henderson    avx2_opt="yes"
528686583a07SLiam Merwick  else
528786583a07SLiam Merwick    avx2_opt="no"
52885dd89908SRichard Henderson  fi
52895dd89908SRichard Hendersonfi
52905dd89908SRichard Henderson
5291f540166bSRichard Henderson########################################
5292f540166bSRichard Henderson# check if __[u]int128_t is usable.
5293f540166bSRichard Henderson
5294f540166bSRichard Hendersonint128=no
5295f540166bSRichard Hendersoncat > $TMPC << EOF
5296f540166bSRichard Henderson__int128_t a;
5297f540166bSRichard Henderson__uint128_t b;
5298f540166bSRichard Hendersonint main (void) {
5299f540166bSRichard Henderson  a = a + b;
5300f540166bSRichard Henderson  b = a * b;
5301464e3671SPeter Maydell  a = a * a;
5302f540166bSRichard Henderson  return 0;
5303f540166bSRichard Henderson}
5304f540166bSRichard HendersonEOF
5305f540166bSRichard Hendersonif compile_prog "" "" ; then
5306f540166bSRichard Henderson    int128=yes
5307f540166bSRichard Hendersonfi
530876a347e1SRichard Henderson
53097ebee43eSRichard Henderson#########################################
53107ebee43eSRichard Henderson# See if 128-bit atomic operations are supported.
53117ebee43eSRichard Henderson
53127ebee43eSRichard Hendersonatomic128=no
53137ebee43eSRichard Hendersonif test "$int128" = "yes"; then
53147ebee43eSRichard Henderson  cat > $TMPC << EOF
53157ebee43eSRichard Hendersonint main(void)
53167ebee43eSRichard Henderson{
53177ebee43eSRichard Henderson  unsigned __int128 x = 0, y = 0;
53187ebee43eSRichard Henderson  y = __atomic_load_16(&x, 0);
53197ebee43eSRichard Henderson  __atomic_store_16(&x, y, 0);
53207ebee43eSRichard Henderson  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
53217ebee43eSRichard Henderson  return 0;
53227ebee43eSRichard Henderson}
53237ebee43eSRichard HendersonEOF
53247ebee43eSRichard Henderson  if compile_prog "" "" ; then
53257ebee43eSRichard Henderson    atomic128=yes
53267ebee43eSRichard Henderson  fi
53277ebee43eSRichard Hendersonfi
53287ebee43eSRichard Henderson
5329e6cd4bb5SRichard Hendersoncmpxchg128=no
5330e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then
5331e6cd4bb5SRichard Henderson  cat > $TMPC << EOF
5332e6cd4bb5SRichard Hendersonint main(void)
5333e6cd4bb5SRichard Henderson{
5334e6cd4bb5SRichard Henderson  unsigned __int128 x = 0, y = 0;
5335e6cd4bb5SRichard Henderson  __sync_val_compare_and_swap_16(&x, y, x);
5336e6cd4bb5SRichard Henderson  return 0;
5337e6cd4bb5SRichard Henderson}
5338e6cd4bb5SRichard HendersonEOF
5339e6cd4bb5SRichard Henderson  if compile_prog "" "" ; then
5340e6cd4bb5SRichard Henderson    cmpxchg128=yes
5341e6cd4bb5SRichard Henderson  fi
5342e6cd4bb5SRichard Hendersonfi
5343e6cd4bb5SRichard Henderson
5344df79b996SRichard Henderson#########################################
5345df79b996SRichard Henderson# See if 64-bit atomic operations are supported.
5346df79b996SRichard Henderson# Note that without __atomic builtins, we can only
5347df79b996SRichard Henderson# assume atomic loads/stores max at pointer size.
5348df79b996SRichard Henderson
5349df79b996SRichard Hendersoncat > $TMPC << EOF
5350df79b996SRichard Henderson#include <stdint.h>
5351df79b996SRichard Hendersonint main(void)
5352df79b996SRichard Henderson{
5353df79b996SRichard Henderson  uint64_t x = 0, y = 0;
5354df79b996SRichard Henderson#ifdef __ATOMIC_RELAXED
5355df79b996SRichard Henderson  y = __atomic_load_8(&x, 0);
5356df79b996SRichard Henderson  __atomic_store_8(&x, y, 0);
5357df79b996SRichard Henderson  __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5358df79b996SRichard Henderson  __atomic_exchange_8(&x, y, 0);
5359df79b996SRichard Henderson  __atomic_fetch_add_8(&x, y, 0);
5360df79b996SRichard Henderson#else
5361df79b996SRichard Henderson  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5362df79b996SRichard Henderson  __sync_lock_test_and_set(&x, y);
5363df79b996SRichard Henderson  __sync_val_compare_and_swap(&x, y, 0);
5364df79b996SRichard Henderson  __sync_fetch_and_add(&x, y);
5365df79b996SRichard Henderson#endif
5366df79b996SRichard Henderson  return 0;
5367df79b996SRichard Henderson}
5368df79b996SRichard HendersonEOF
5369df79b996SRichard Hendersonif compile_prog "" "" ; then
5370df79b996SRichard Henderson  atomic64=yes
5371df79b996SRichard Hendersonfi
5372df79b996SRichard Henderson
53731e6e9acaSRichard Henderson########################################
5374db432672SRichard Henderson# See if 16-byte vector operations are supported.
5375db432672SRichard Henderson# Even without a vector unit the compiler may expand these.
5376db432672SRichard Henderson# There is a bug in old GCC for PPC that crashes here.
5377db432672SRichard Henderson# Unfortunately it's the system compiler for Centos 7.
5378db432672SRichard Henderson
5379db432672SRichard Hendersoncat > $TMPC << EOF
5380db432672SRichard Hendersontypedef unsigned char U1 __attribute__((vector_size(16)));
5381db432672SRichard Hendersontypedef unsigned short U2 __attribute__((vector_size(16)));
5382db432672SRichard Hendersontypedef unsigned int U4 __attribute__((vector_size(16)));
5383db432672SRichard Hendersontypedef unsigned long long U8 __attribute__((vector_size(16)));
5384db432672SRichard Hendersontypedef signed char S1 __attribute__((vector_size(16)));
5385db432672SRichard Hendersontypedef signed short S2 __attribute__((vector_size(16)));
5386db432672SRichard Hendersontypedef signed int S4 __attribute__((vector_size(16)));
5387db432672SRichard Hendersontypedef signed long long S8 __attribute__((vector_size(16)));
5388db432672SRichard Hendersonstatic U1 a1, b1;
5389db432672SRichard Hendersonstatic U2 a2, b2;
5390db432672SRichard Hendersonstatic U4 a4, b4;
5391db432672SRichard Hendersonstatic U8 a8, b8;
5392db432672SRichard Hendersonstatic S1 c1;
5393db432672SRichard Hendersonstatic S2 c2;
5394db432672SRichard Hendersonstatic S4 c4;
5395db432672SRichard Hendersonstatic S8 c8;
5396db432672SRichard Hendersonstatic int i;
539774912f6dSLaurent Viviervoid helper(void *d, void *a, int shift, int i);
539874912f6dSLaurent Viviervoid helper(void *d, void *a, int shift, int i)
539974912f6dSLaurent Vivier{
540074912f6dSLaurent Vivier  *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
540174912f6dSLaurent Vivier  *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
540274912f6dSLaurent Vivier  *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
540374912f6dSLaurent Vivier  *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
540474912f6dSLaurent Vivier}
5405db432672SRichard Hendersonint main(void)
5406db432672SRichard Henderson{
5407db432672SRichard Henderson  a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5408db432672SRichard Henderson  a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5409db432672SRichard Henderson  a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5410db432672SRichard Henderson  a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5411db432672SRichard Henderson  a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5412db432672SRichard Henderson  a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5413db432672SRichard Henderson  a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5414db432672SRichard Henderson  a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5415db432672SRichard Henderson  c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5416db432672SRichard Henderson  return 0;
5417db432672SRichard Henderson}
5418db432672SRichard HendersonEOF
5419db432672SRichard Henderson
5420db432672SRichard Hendersonvector16=no
5421db432672SRichard Hendersonif compile_prog "" "" ; then
5422db432672SRichard Henderson  vector16=yes
5423db432672SRichard Hendersonfi
5424db432672SRichard Henderson
5425db432672SRichard Henderson########################################
54261e6e9acaSRichard Henderson# check if getauxval is available.
54271e6e9acaSRichard Henderson
54281e6e9acaSRichard Hendersongetauxval=no
54291e6e9acaSRichard Hendersoncat > $TMPC << EOF
54301e6e9acaSRichard Henderson#include <sys/auxv.h>
54311e6e9acaSRichard Hendersonint main(void) {
54321e6e9acaSRichard Henderson  return getauxval(AT_HWCAP) == 0;
54331e6e9acaSRichard Henderson}
54341e6e9acaSRichard HendersonEOF
54351e6e9acaSRichard Hendersonif compile_prog "" "" ; then
54361e6e9acaSRichard Henderson    getauxval=yes
54371e6e9acaSRichard Hendersonfi
54381e6e9acaSRichard Henderson
5439fd0e6053SJohn Snow########################################
5440fd0e6053SJohn Snow# check if ccache is interfering with
5441fd0e6053SJohn Snow# semantic analysis of macros
5442fd0e6053SJohn Snow
54435e4dfd3dSJohn Snowunset CCACHE_CPP2
5444fd0e6053SJohn Snowccache_cpp2=no
5445fd0e6053SJohn Snowcat > $TMPC << EOF
5446fd0e6053SJohn Snowstatic const int Z = 1;
5447fd0e6053SJohn Snow#define fn() ({ Z; })
5448fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
5449fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
5450fd0e6053SJohn Snow#define ID(X) (X)
5451fd0e6053SJohn Snowint main(int argc, char *argv[])
5452fd0e6053SJohn Snow{
5453fd0e6053SJohn Snow    int x = 0, y = 0;
5454fd0e6053SJohn Snow    x = ID(x);
5455fd0e6053SJohn Snow    x = fn();
5456fd0e6053SJohn Snow    fn();
5457fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
5458fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
5459fd0e6053SJohn Snow    return 0;
5460fd0e6053SJohn Snow}
5461fd0e6053SJohn SnowEOF
5462fd0e6053SJohn Snow
5463fd0e6053SJohn Snowif ! compile_object "-Werror"; then
5464fd0e6053SJohn Snow    ccache_cpp2=yes
5465fd0e6053SJohn Snowfi
5466fd0e6053SJohn Snow
5467b553a042SJohn Snow#################################################
5468b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
5469b553a042SJohn Snow
5470b553a042SJohn Snowif test "$fortify_source" != "no"; then
5471b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5472b553a042SJohn Snow    fortify_source="no";
5473e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
5474cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5475b553a042SJohn Snow    fortify_source="no";
5476b553a042SJohn Snow  else
5477b553a042SJohn Snow    fortify_source="yes"
5478b553a042SJohn Snow  fi
5479b553a042SJohn Snowfi
5480b553a042SJohn Snow
54811efad060SFam Zheng###############################################
54821efad060SFam Zheng# Check if copy_file_range is provided by glibc
54831efad060SFam Zhenghave_copy_file_range=no
54841efad060SFam Zhengcat > $TMPC << EOF
54851efad060SFam Zheng#include <unistd.h>
54861efad060SFam Zhengint main(void) {
54871efad060SFam Zheng  copy_file_range(0, NULL, 0, NULL, 0, 0);
54881efad060SFam Zheng  return 0;
54891efad060SFam Zheng}
54901efad060SFam ZhengEOF
54911efad060SFam Zhengif compile_prog "" "" ; then
54921efad060SFam Zheng    have_copy_file_range=yes
54931efad060SFam Zhengfi
54941efad060SFam Zheng
5495d2042378SAneesh Kumar K.V##########################################
5496277abf15SJan Vesely# check if struct fsxattr is available via linux/fs.h
5497277abf15SJan Vesely
5498277abf15SJan Veselyhave_fsxattr=no
5499277abf15SJan Veselycat > $TMPC << EOF
5500277abf15SJan Vesely#include <linux/fs.h>
5501277abf15SJan Veselystruct fsxattr foo;
5502277abf15SJan Veselyint main(void) {
5503277abf15SJan Vesely  return 0;
5504277abf15SJan Vesely}
5505277abf15SJan VeselyEOF
5506277abf15SJan Veselyif compile_prog "" "" ; then
5507277abf15SJan Vesely    have_fsxattr=yes
5508277abf15SJan Veselyfi
5509277abf15SJan Vesely
5510b66e10e4SPeter Maydell##########################################
5511a40161cbSPaolo Bonzini# check for usable membarrier system call
5512a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then
5513a40161cbSPaolo Bonzini    have_membarrier=no
5514a40161cbSPaolo Bonzini    if test "$mingw32" = "yes" ; then
5515a40161cbSPaolo Bonzini        have_membarrier=yes
5516a40161cbSPaolo Bonzini    elif test "$linux" = "yes" ; then
5517a40161cbSPaolo Bonzini        cat > $TMPC << EOF
5518a40161cbSPaolo Bonzini    #include <linux/membarrier.h>
5519a40161cbSPaolo Bonzini    #include <sys/syscall.h>
5520a40161cbSPaolo Bonzini    #include <unistd.h>
5521a40161cbSPaolo Bonzini    #include <stdlib.h>
5522a40161cbSPaolo Bonzini    int main(void) {
5523a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5524a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5525a40161cbSPaolo Bonzini	exit(0);
5526a40161cbSPaolo Bonzini    }
5527a40161cbSPaolo BonziniEOF
5528a40161cbSPaolo Bonzini        if compile_prog "" "" ; then
5529a40161cbSPaolo Bonzini            have_membarrier=yes
5530a40161cbSPaolo Bonzini        fi
5531a40161cbSPaolo Bonzini    fi
5532a40161cbSPaolo Bonzini    if test "$have_membarrier" = "no"; then
5533a40161cbSPaolo Bonzini      feature_not_found "membarrier" "membarrier system call not available"
5534a40161cbSPaolo Bonzini    fi
5535a40161cbSPaolo Bonzinielse
5536a40161cbSPaolo Bonzini    # Do not enable it by default even for Mingw32, because it doesn't
5537a40161cbSPaolo Bonzini    # work on Wine.
5538a40161cbSPaolo Bonzini    membarrier=no
5539a40161cbSPaolo Bonzinifi
5540a40161cbSPaolo Bonzini
5541a40161cbSPaolo Bonzini##########################################
5542b66e10e4SPeter Maydell# check if rtnetlink.h exists and is useful
5543575b22b1SLaurent Vivierhave_rtnetlink=no
5544575b22b1SLaurent Viviercat > $TMPC << EOF
5545575b22b1SLaurent Vivier#include <linux/rtnetlink.h>
5546575b22b1SLaurent Vivierint main(void) {
5547575b22b1SLaurent Vivier  return IFLA_PROTO_DOWN;
5548575b22b1SLaurent Vivier}
5549575b22b1SLaurent VivierEOF
5550575b22b1SLaurent Vivierif compile_prog "" "" ; then
5551575b22b1SLaurent Vivier    have_rtnetlink=yes
5552575b22b1SLaurent Vivierfi
5553575b22b1SLaurent Vivier
55546a02c806SStefan Hajnoczi##########################################
55556a02c806SStefan Hajnoczi# check for usable AF_VSOCK environment
55566a02c806SStefan Hajnoczihave_af_vsock=no
55576a02c806SStefan Hajnoczicat > $TMPC << EOF
55586a02c806SStefan Hajnoczi#include <errno.h>
55596a02c806SStefan Hajnoczi#include <sys/types.h>
55606a02c806SStefan Hajnoczi#include <sys/socket.h>
55616a02c806SStefan Hajnoczi#if !defined(AF_VSOCK)
55626a02c806SStefan Hajnoczi# error missing AF_VSOCK flag
55636a02c806SStefan Hajnoczi#endif
55646a02c806SStefan Hajnoczi#include <linux/vm_sockets.h>
55656a02c806SStefan Hajnocziint main(void) {
55666a02c806SStefan Hajnoczi    int sock, ret;
55676a02c806SStefan Hajnoczi    struct sockaddr_vm svm;
55686a02c806SStefan Hajnoczi    socklen_t len = sizeof(svm);
55696a02c806SStefan Hajnoczi    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
55706a02c806SStefan Hajnoczi    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
55716a02c806SStefan Hajnoczi    if ((ret == -1) && (errno == ENOTCONN)) {
55726a02c806SStefan Hajnoczi        return 0;
55736a02c806SStefan Hajnoczi    }
55746a02c806SStefan Hajnoczi    return -1;
55756a02c806SStefan Hajnoczi}
55766a02c806SStefan HajnocziEOF
55776a02c806SStefan Hajnocziif compile_prog "" "" ; then
55786a02c806SStefan Hajnoczi    have_af_vsock=yes
55796a02c806SStefan Hajnoczifi
55806a02c806SStefan Hajnoczi
5581f0d92b56SLongpeng(Mike)##########################################
5582f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment
5583f0d92b56SLongpeng(Mike)hava_afalg=no
5584f0d92b56SLongpeng(Mike)cat > $TMPC << EOF
5585f0d92b56SLongpeng(Mike)#include <errno.h>
5586f0d92b56SLongpeng(Mike)#include <sys/types.h>
5587f0d92b56SLongpeng(Mike)#include <sys/socket.h>
5588f0d92b56SLongpeng(Mike)#include <linux/if_alg.h>
5589f0d92b56SLongpeng(Mike)int main(void) {
5590f0d92b56SLongpeng(Mike)    int sock;
5591f0d92b56SLongpeng(Mike)    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5592f0d92b56SLongpeng(Mike)    return sock;
5593f0d92b56SLongpeng(Mike)}
5594f0d92b56SLongpeng(Mike)EOF
5595f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then
5596f0d92b56SLongpeng(Mike)    have_afalg=yes
5597f0d92b56SLongpeng(Mike)fi
5598f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes"
5599f0d92b56SLongpeng(Mike)then
5600f0d92b56SLongpeng(Mike)    if test "$have_afalg" != "yes"
5601f0d92b56SLongpeng(Mike)    then
5602f0d92b56SLongpeng(Mike)	error_exit "AF_ALG requested but could not be detected"
5603f0d92b56SLongpeng(Mike)    fi
5604f0d92b56SLongpeng(Mike)fi
5605f0d92b56SLongpeng(Mike)
5606f0d92b56SLongpeng(Mike)
56076969ec6cSJames Clarke#################################################
5608c97d6d2cSSergio Andres Gomez Del Real# Check to see if we have the Hypervisor framework
5609d2d08522SPeter Maydellif [ "$darwin" = "yes" ] ; then
5610c97d6d2cSSergio Andres Gomez Del Real  cat > $TMPC << EOF
5611c97d6d2cSSergio Andres Gomez Del Real#include <Hypervisor/hv.h>
5612c97d6d2cSSergio Andres Gomez Del Realint main() { return 0;}
5613c97d6d2cSSergio Andres Gomez Del RealEOF
5614c97d6d2cSSergio Andres Gomez Del Real  if ! compile_object ""; then
5615c97d6d2cSSergio Andres Gomez Del Real    hvf='no'
5616c97d6d2cSSergio Andres Gomez Del Real  else
5617c97d6d2cSSergio Andres Gomez Del Real    hvf='yes'
5618c97d6d2cSSergio Andres Gomez Del Real    LDFLAGS="-framework Hypervisor $LDFLAGS"
5619c97d6d2cSSergio Andres Gomez Del Real  fi
5620c97d6d2cSSergio Andres Gomez Del Realfi
5621c97d6d2cSSergio Andres Gomez Del Real
5622c97d6d2cSSergio Andres Gomez Del Real#################################################
56236969ec6cSJames Clarke# Sparc implicitly links with --relax, which is
56246969ec6cSJames Clarke# incompatible with -r, so --no-relax should be
56256969ec6cSJames Clarke# given. It does no harm to give it on other
56266969ec6cSJames Clarke# platforms too.
56276969ec6cSJames Clarke
56286969ec6cSJames Clarke# Note: the prototype is needed since QEMU_CFLAGS
56296969ec6cSJames Clarke#       contains -Wmissing-prototypes
56306969ec6cSJames Clarkecat > $TMPC << EOF
56316969ec6cSJames Clarkeextern int foo(void);
56326969ec6cSJames Clarkeint foo(void) { return 0; }
56336969ec6cSJames ClarkeEOF
56346969ec6cSJames Clarkeif ! compile_object ""; then
56356969ec6cSJames Clarke  error_exit "Failed to compile object file for LD_REL_FLAGS test"
56366969ec6cSJames Clarkefi
56377ecf44a5SPaolo Bonzinifor i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
56387ecf44a5SPaolo Bonzini  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
56397ecf44a5SPaolo Bonzini    LD_REL_FLAGS=$i
56407ecf44a5SPaolo Bonzini    break
56417ecf44a5SPaolo Bonzini  fi
56427ecf44a5SPaolo Bonzinidone
56437ecf44a5SPaolo Bonziniif test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
56447ecf44a5SPaolo Bonzini  feature_not_found "modules" "Cannot find how to build relocatable objects"
56456969ec6cSJames Clarkefi
56466969ec6cSJames Clarke
5647277abf15SJan Vesely##########################################
56484d04351fSChristopher Covington# check for sysmacros.h
56494d04351fSChristopher Covington
56504d04351fSChristopher Covingtonhave_sysmacros=no
56514d04351fSChristopher Covingtoncat > $TMPC << EOF
56524d04351fSChristopher Covington#include <sys/sysmacros.h>
56534d04351fSChristopher Covingtonint main(void) {
56544d04351fSChristopher Covington    return makedev(0, 0);
56554d04351fSChristopher Covington}
56564d04351fSChristopher CovingtonEOF
56574d04351fSChristopher Covingtonif compile_prog "" "" ; then
56584d04351fSChristopher Covington    have_sysmacros=yes
56594d04351fSChristopher Covingtonfi
56604d04351fSChristopher Covington
56614d04351fSChristopher Covington##########################################
5662da92c3ffSAshish Mittal# Veritas HyperScale block driver VxHS
5663da92c3ffSAshish Mittal# Check if libvxhs is installed
5664da92c3ffSAshish Mittal
5665da92c3ffSAshish Mittalif test "$vxhs" != "no" ; then
5666da92c3ffSAshish Mittal  cat > $TMPC <<EOF
5667da92c3ffSAshish Mittal#include <stdint.h>
5668da92c3ffSAshish Mittal#include <qnio/qnio_api.h>
5669da92c3ffSAshish Mittal
5670da92c3ffSAshish Mittalvoid *vxhs_callback;
5671da92c3ffSAshish Mittal
5672da92c3ffSAshish Mittalint main(void) {
5673da92c3ffSAshish Mittal    iio_init(QNIO_VERSION, vxhs_callback);
5674da92c3ffSAshish Mittal    return 0;
5675da92c3ffSAshish Mittal}
5676da92c3ffSAshish MittalEOF
5677da92c3ffSAshish Mittal  vxhs_libs="-lvxhs -lssl"
5678da92c3ffSAshish Mittal  if compile_prog "" "$vxhs_libs" ; then
5679da92c3ffSAshish Mittal    vxhs=yes
5680da92c3ffSAshish Mittal  else
5681da92c3ffSAshish Mittal    if test "$vxhs" = "yes" ; then
5682da92c3ffSAshish Mittal      feature_not_found "vxhs block device" "Install libvxhs See github"
5683da92c3ffSAshish Mittal    fi
5684da92c3ffSAshish Mittal    vxhs=no
5685da92c3ffSAshish Mittal  fi
5686da92c3ffSAshish Mittalfi
5687da92c3ffSAshish Mittal
5688da92c3ffSAshish Mittal##########################################
568949e00a18SAndreas Grapentin# check for _Static_assert()
569049e00a18SAndreas Grapentin
569149e00a18SAndreas Grapentinhave_static_assert=no
569249e00a18SAndreas Grapentincat > $TMPC << EOF
569349e00a18SAndreas Grapentin_Static_assert(1, "success");
569449e00a18SAndreas Grapentinint main(void) {
569549e00a18SAndreas Grapentin    return 0;
569649e00a18SAndreas Grapentin}
569749e00a18SAndreas GrapentinEOF
569849e00a18SAndreas Grapentinif compile_prog "" "" ; then
569949e00a18SAndreas Grapentin    have_static_assert=yes
570049e00a18SAndreas Grapentinfi
570149e00a18SAndreas Grapentin
570249e00a18SAndreas Grapentin##########################################
5703e674605fSTomáš Golembiovský# check for utmpx.h, it is missing e.g. on OpenBSD
5704e674605fSTomáš Golembiovský
5705e674605fSTomáš Golembiovskýhave_utmpx=no
5706e674605fSTomáš Golembiovskýcat > $TMPC << EOF
5707e674605fSTomáš Golembiovský#include <utmpx.h>
5708e674605fSTomáš Golembiovskýstruct utmpx user_info;
5709e674605fSTomáš Golembiovskýint main(void) {
5710e674605fSTomáš Golembiovský    return 0;
5711e674605fSTomáš Golembiovský}
5712e674605fSTomáš GolembiovskýEOF
5713e674605fSTomáš Golembiovskýif compile_prog "" "" ; then
5714e674605fSTomáš Golembiovský    have_utmpx=yes
5715e674605fSTomáš Golembiovskýfi
5716e674605fSTomáš Golembiovský
5717e674605fSTomáš Golembiovský##########################################
5718247724cbSMarc-André Lureau# checks for sanitizers
5719247724cbSMarc-André Lureau
5720247724cbSMarc-André Lureauhave_asan=no
5721247724cbSMarc-André Lureauhave_ubsan=no
5722d83414e1SMarc-André Lureauhave_asan_iface_h=no
5723d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
5724247724cbSMarc-André Lureau
5725247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
5726b9f44da2SMarc-André Lureau  write_c_skeleton
5727247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5728247724cbSMarc-André Lureau      have_asan=yes
5729247724cbSMarc-André Lureau  fi
5730b9f44da2SMarc-André Lureau
5731b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
5732b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
5733b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5734b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
5735b9f44da2SMarc-André Lureau#include <stdlib.h>
5736b9f44da2SMarc-André Lureauint main(void) {
5737b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
5738b9f44da2SMarc-André Lureau    return *(int *)(tmp + 2);
5739b9f44da2SMarc-André Lureau}
5740b9f44da2SMarc-André LureauEOF
5741247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5742247724cbSMarc-André Lureau      have_ubsan=yes
5743247724cbSMarc-André Lureau  fi
5744d83414e1SMarc-André Lureau
5745d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
5746d83414e1SMarc-André Lureau      have_asan_iface_h=yes
5747d83414e1SMarc-André Lureau  fi
5748d83414e1SMarc-André Lureau
5749d83414e1SMarc-André Lureau  cat > $TMPC << EOF
5750d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
5751d83414e1SMarc-André Lureauint main(void) {
5752d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
5753d83414e1SMarc-André Lureau  return 0;
5754d83414e1SMarc-André Lureau}
5755d83414e1SMarc-André LureauEOF
5756d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5757d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
5758d83414e1SMarc-André Lureau  fi
5759247724cbSMarc-André Lureaufi
5760247724cbSMarc-André Lureau
5761247724cbSMarc-André Lureau##########################################
576251a12b51SAlex Bennée# Docker and cross-compiler support
576351a12b51SAlex Bennée#
576451a12b51SAlex Bennée# This is specifically for building test
576551a12b51SAlex Bennée# cases for foreign architectures, not
576651a12b51SAlex Bennée# cross-compiling QEMU itself.
576751a12b51SAlex Bennée
576851a12b51SAlex Bennéeif has "docker"; then
576951a12b51SAlex Bennée    docker=$($python $source_path/tests/docker/docker.py probe)
577051a12b51SAlex Bennéefi
577151a12b51SAlex Bennée
577251a12b51SAlex Bennée##########################################
577317824406SJunyan He# check for libpmem
577417824406SJunyan He
577517824406SJunyan Heif test "$libpmem" != "no"; then
577617824406SJunyan He	if $pkg_config --exists "libpmem"; then
577717824406SJunyan He		libpmem="yes"
577817824406SJunyan He		libpmem_libs=$($pkg_config --libs libpmem)
577917824406SJunyan He		libpmem_cflags=$($pkg_config --cflags libpmem)
578017824406SJunyan He		libs_softmmu="$libs_softmmu $libpmem_libs"
578117824406SJunyan He		QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
578217824406SJunyan He	else
578317824406SJunyan He		if test "$libpmem" = "yes" ; then
578417824406SJunyan He			feature_not_found "libpmem" "Install nvml or pmdk"
578517824406SJunyan He		fi
578617824406SJunyan He		libpmem="no"
578717824406SJunyan He	fi
578817824406SJunyan Hefi
578917824406SJunyan He
579017824406SJunyan He##########################################
5791675b9b53SMarc-André Lureau# check for slirp
5792675b9b53SMarc-André Lureau
5793675b9b53SMarc-André Lureaucase "$slirp" in
5794675b9b53SMarc-André Lureau  "" | yes)
5795675b9b53SMarc-André Lureau    if $pkg_config slirp; then
5796675b9b53SMarc-André Lureau      slirp=system
5797675b9b53SMarc-André Lureau    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5798675b9b53SMarc-André Lureau      slirp=git
5799675b9b53SMarc-André Lureau    elif test -e "${source_path}/slirp/Makefile" ; then
5800675b9b53SMarc-André Lureau      slirp=internal
5801675b9b53SMarc-André Lureau    elif test -z "$slirp" ; then
5802675b9b53SMarc-André Lureau      slirp=no
5803675b9b53SMarc-André Lureau    else
5804675b9b53SMarc-André Lureau      feature_not_found "slirp" "Install slirp devel or git submodule"
5805675b9b53SMarc-André Lureau    fi
5806675b9b53SMarc-André Lureau    ;;
5807675b9b53SMarc-André Lureau
5808675b9b53SMarc-André Lureau  system)
5809675b9b53SMarc-André Lureau    if ! $pkg_config slirp; then
5810675b9b53SMarc-André Lureau      feature_not_found "slirp" "Install slirp devel"
5811675b9b53SMarc-André Lureau    fi
5812675b9b53SMarc-André Lureau    ;;
5813675b9b53SMarc-André Lureauesac
5814675b9b53SMarc-André Lureau
5815675b9b53SMarc-André Lureaucase "$slirp" in
5816675b9b53SMarc-André Lureau  git | internal)
5817675b9b53SMarc-André Lureau    if test "$slirp" = git; then
5818675b9b53SMarc-André Lureau      git_submodules="${git_submodules} slirp"
5819675b9b53SMarc-André Lureau    fi
5820675b9b53SMarc-André Lureau    mkdir -p slirp
5821675b9b53SMarc-André Lureau    slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5822675b9b53SMarc-André Lureau    slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5823675b9b53SMarc-André Lureau    ;;
5824675b9b53SMarc-André Lureau
5825675b9b53SMarc-André Lureau  system)
5826675b9b53SMarc-André Lureau    slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5827675b9b53SMarc-André Lureau    slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5828675b9b53SMarc-André Lureau    slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5829675b9b53SMarc-André Lureau    ;;
5830675b9b53SMarc-André Lureau
5831675b9b53SMarc-André Lureau  no)
5832675b9b53SMarc-André Lureau    ;;
5833675b9b53SMarc-André Lureau  *)
5834675b9b53SMarc-André Lureau    error_exit "Unknown state for slirp: $slirp"
5835675b9b53SMarc-André Lureau    ;;
5836675b9b53SMarc-André Lureauesac
5837675b9b53SMarc-André Lureau
5838675b9b53SMarc-André Lureau
5839675b9b53SMarc-André Lureau##########################################
5840e86ecd4bSJuan Quintela# End of CC checks
5841e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
5842e86ecd4bSJuan Quintela
5843d83414e1SMarc-André Lureauwrite_c_skeleton
5844d83414e1SMarc-André Lureau
58451d728c39SBlue Swirlif test "$gcov" = "yes" ; then
58461d728c39SBlue Swirl  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
58471d728c39SBlue Swirl  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5848b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then
5849e600cdf3SMichal Privoznik  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
585048e56d50SPaolo Bonzinielif test "$debug" = "no"; then
5851ce278618SPeter Maydell  CFLAGS="-O2 $CFLAGS"
5852e86ecd4bSJuan Quintelafi
5853a316e378SJuan Quintela
5854247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
5855247724cbSMarc-André Lureau  CFLAGS="-fsanitize=address $CFLAGS"
5856d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
5857d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
5858d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
5859d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
5860d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
5861d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
5862d83414e1SMarc-André Lureau  fi
5863247724cbSMarc-André Lureaufi
5864247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
5865247724cbSMarc-André Lureau  CFLAGS="-fsanitize=undefined $CFLAGS"
5866247724cbSMarc-André Lureaufi
5867247724cbSMarc-André Lureau
58686542aa9cSPeter Lieven##########################################
58696542aa9cSPeter Lieven# Do we have libnfs
58706542aa9cSPeter Lievenif test "$libnfs" != "no" ; then
5871b7d769c9SPeter Lieven  if $pkg_config --atleast-version=1.9.3 libnfs; then
58726542aa9cSPeter Lieven    libnfs="yes"
58736542aa9cSPeter Lieven    libnfs_libs=$($pkg_config --libs libnfs)
58746542aa9cSPeter Lieven  else
58756542aa9cSPeter Lieven    if test "$libnfs" = "yes" ; then
58768efc9363SHu Tao      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
58776542aa9cSPeter Lieven    fi
58786542aa9cSPeter Lieven    libnfs="no"
58796542aa9cSPeter Lieven  fi
58806542aa9cSPeter Lievenfi
58811d728c39SBlue Swirl
58823efac6ebSTomáš Golembiovský##########################################
58833efac6ebSTomáš Golembiovský# Do we have libudev
58843efac6ebSTomáš Golembiovskýif test "$libudev" != "no" ; then
58853efac6ebSTomáš Golembiovský  if $pkg_config libudev && test "$static" != "yes"; then
58863efac6ebSTomáš Golembiovský    libudev="yes"
58873efac6ebSTomáš Golembiovský    libudev_libs=$($pkg_config --libs libudev)
58883efac6ebSTomáš Golembiovský  else
58893efac6ebSTomáš Golembiovský    libudev="no"
58903efac6ebSTomáš Golembiovský  fi
58913efac6ebSTomáš Golembiovskýfi
58923efac6ebSTomáš Golembiovský
58936ca026cbSPeter Maydell# Now we've finished running tests it's OK to add -Werror to the compiler flags
58946ca026cbSPeter Maydellif test "$werror" = "yes"; then
58956ca026cbSPeter Maydell    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
58966ca026cbSPeter Maydellfi
58976ca026cbSPeter Maydell
5898e86ecd4bSJuan Quintelaif test "$solaris" = "no" ; then
5899e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
59001156c669SJuan Quintela        LDFLAGS="-Wl,--warn-common $LDFLAGS"
5901e86ecd4bSJuan Quintela    fi
5902e86ecd4bSJuan Quintelafi
5903e86ecd4bSJuan Quintela
590494dd53c5SGerd Hoffmann# test if pod2man has --utf8 option
590594dd53c5SGerd Hoffmannif pod2man --help | grep -q utf8; then
590694dd53c5SGerd Hoffmann    POD2MAN="pod2man --utf8"
590794dd53c5SGerd Hoffmannelse
590894dd53c5SGerd Hoffmann    POD2MAN="pod2man"
590994dd53c5SGerd Hoffmannfi
591094dd53c5SGerd Hoffmann
5911952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
5912952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
5913952afb71SBlue Swirl    for flag in --dynamicbase --no-seh --nxcompat; do
5914e9a3591fSChristian Borntraeger        if ld_has $flag ; then
5915952afb71SBlue Swirl            LDFLAGS="-Wl,$flag $LDFLAGS"
5916952afb71SBlue Swirl        fi
5917952afb71SBlue Swirl    done
5918952afb71SBlue Swirlfi
5919952afb71SBlue Swirl
59207776ea6bSPhilippe Mathieu-Daudé# Disable OpenBSD W^X if available
59217776ea6bSPhilippe Mathieu-Daudéif test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
59227776ea6bSPhilippe Mathieu-Daudé    cat > $TMPC <<EOF
59237776ea6bSPhilippe Mathieu-Daudé    int main(void) { return 0; }
59247776ea6bSPhilippe Mathieu-DaudéEOF
59257776ea6bSPhilippe Mathieu-Daudé    wx_ldflags="-Wl,-z,wxneeded"
59267776ea6bSPhilippe Mathieu-Daudé    if compile_prog "" "$wx_ldflags"; then
59277776ea6bSPhilippe Mathieu-Daudé        QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
59287776ea6bSPhilippe Mathieu-Daudé    fi
59297776ea6bSPhilippe Mathieu-Daudéfi
59307776ea6bSPhilippe Mathieu-Daudé
593110ea68b3SEduardo Habkostqemu_confdir=$sysconfdir$confsuffix
5932e26110cfSFam Zhengqemu_moddir=$libdir$confsuffix
5933528ae5b8SEduardo Habkostqemu_datadir=$datadir$confsuffix
5934834574eaSAnthony Liguoriqemu_localedir="$datadir/locale"
5935a8260d38SDaniel P. Berrangéqemu_icondir="$datadir/icons"
593667ea9546SDaniel P. Berrangéqemu_desktopdir="$datadir/applications"
59375a67135aSbellard
5938e0580342SKamil Rytarowski# We can only support ivshmem if we have eventfd
5939e0580342SKamil Rytarowskiif [ "$eventfd" = "yes" ]; then
5940e0580342SKamil Rytarowski  ivshmem=yes
5941e0580342SKamil Rytarowskifi
5942e0580342SKamil Rytarowski
59434b1c11fdSDaniel P. Berrangetools=""
59444b1c11fdSDaniel P. Berrangeif test "$want_tools" = "yes" ; then
594572d277a7SGerd Hoffmann  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
59464b1c11fdSDaniel P. Berrange  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
59474b1c11fdSDaniel P. Berrange    tools="qemu-nbd\$(EXESUF) $tools"
5948b1449edbSKamil Rytarowski  fi
5949b1449edbSKamil Rytarowski  if [ "$ivshmem" = "yes" ]; then
5950a75eb03bSDavid Marchand    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
59514b1c11fdSDaniel P. Berrange  fi
59521b9d35f3SViktor Prutyanov  if [ "$curl" = "yes" ]; then
59531b9d35f3SViktor Prutyanov      tools="elf2dmp\$(EXESUF) $tools"
59543fa2d384SViktor Prutyanov  fi
59554b1c11fdSDaniel P. Berrangefi
59564b1c11fdSDaniel P. Berrangeif test "$softmmu" = yes ; then
5957b855f8d1SPaolo Bonzini  if test "$linux" = yes; then
5958b855f8d1SPaolo Bonzini    if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5959983eef5aSMeador Inge      virtfs=yes
596017bff52bSM. Mohan Kumar      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5961983eef5aSMeador Inge    else
5962983eef5aSMeador Inge      if test "$virtfs" = yes; then
5963b855f8d1SPaolo Bonzini        error_exit "VirtFS requires libcap devel and libattr devel"
5964983eef5aSMeador Inge      fi
596517500370SAndreas Färber      virtfs=no
5966983eef5aSMeador Inge    fi
5967fe8fc5aeSPaolo Bonzini    if test "$mpath" != no && test "$mpathpersist" = yes ; then
5968fe8fc5aeSPaolo Bonzini      mpath=yes
5969fe8fc5aeSPaolo Bonzini    else
5970fe8fc5aeSPaolo Bonzini      if test "$mpath" = yes; then
5971fe8fc5aeSPaolo Bonzini        error_exit "Multipath requires libmpathpersist devel"
5972fe8fc5aeSPaolo Bonzini      fi
5973fe8fc5aeSPaolo Bonzini      mpath=no
5974fe8fc5aeSPaolo Bonzini    fi
5975b855f8d1SPaolo Bonzini    tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5976b855f8d1SPaolo Bonzini  else
5977b855f8d1SPaolo Bonzini    if test "$virtfs" = yes; then
5978b855f8d1SPaolo Bonzini      error_exit "VirtFS is supported only on Linux"
5979b855f8d1SPaolo Bonzini    fi
5980b855f8d1SPaolo Bonzini    virtfs=no
5981fe8fc5aeSPaolo Bonzini    if test "$mpath" = yes; then
5982fe8fc5aeSPaolo Bonzini      error_exit "Multipath is supported only on Linux"
5983fe8fc5aeSPaolo Bonzini    fi
5984fe8fc5aeSPaolo Bonzini    mpath=no
598517bff52bSM. Mohan Kumar  fi
59866a021536SGerd Hoffmann  if test "$xkbcommon" = "yes"; then
59876a021536SGerd Hoffmann    tools="qemu-keymap\$(EXESUF) $tools"
59886a021536SGerd Hoffmann  fi
5989ff69fd8cSLaurent Vivierfi
59909d6bc27bSMichael Roth
59919d6bc27bSMichael Roth# Probe for guest agent support/options
59929d6bc27bSMichael Roth
5993e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
5994b39297aeSTomoki Sekiyama  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5995fafcaf1dSMichael Roth      tools="qemu-ga $tools"
5996e8ef31a3SMichael Tokarev      guest_agent=yes
5997e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
5998e8ef31a3SMichael Tokarev      guest_agent=no
5999e8ef31a3SMichael Tokarev  else
6000e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
6001ca35f780SPaolo Bonzini  fi
60024b1c11fdSDaniel P. Berrangefi
6003ca35f780SPaolo Bonzini
60049d6bc27bSMichael Roth# Guest agent Window MSI  package
60059d6bc27bSMichael Roth
60069d6bc27bSMichael Rothif test "$guest_agent" != yes; then
60079d6bc27bSMichael Roth  if test "$guest_agent_msi" = yes; then
60089d6bc27bSMichael Roth    error_exit "MSI guest agent package requires guest agent enabled"
60099d6bc27bSMichael Roth  fi
60109d6bc27bSMichael Roth  guest_agent_msi=no
60119d6bc27bSMichael Rothelif test "$mingw32" != "yes"; then
60129d6bc27bSMichael Roth  if test "$guest_agent_msi" = "yes"; then
60139d6bc27bSMichael Roth    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
60149d6bc27bSMichael Roth  fi
60159d6bc27bSMichael Roth  guest_agent_msi=no
60169d6bc27bSMichael Rothelif ! has wixl; then
60179d6bc27bSMichael Roth  if test "$guest_agent_msi" = "yes"; then
60189d6bc27bSMichael Roth    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
60199d6bc27bSMichael Roth  fi
60209d6bc27bSMichael Roth  guest_agent_msi=no
60211a34904eSMichael Rothelse
60221a34904eSMichael Roth  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
60231a34904eSMichael Roth  # disabled explicitly
60241a34904eSMichael Roth  if test "$guest_agent_msi" != "no"; then
60251a34904eSMichael Roth    guest_agent_msi=yes
60261a34904eSMichael Roth  fi
60279d6bc27bSMichael Rothfi
60289d6bc27bSMichael Roth
60291a34904eSMichael Rothif test "$guest_agent_msi" = "yes"; then
60309d6bc27bSMichael Roth  if test "$guest_agent_with_vss" = "yes"; then
60319d6bc27bSMichael Roth    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
60329d6bc27bSMichael Roth  fi
60339d6bc27bSMichael Roth
60349d6bc27bSMichael Roth  if test "$QEMU_GA_MANUFACTURER" = ""; then
60359d6bc27bSMichael Roth    QEMU_GA_MANUFACTURER=QEMU
60369d6bc27bSMichael Roth  fi
60379d6bc27bSMichael Roth
60389d6bc27bSMichael Roth  if test "$QEMU_GA_DISTRO" = ""; then
60399d6bc27bSMichael Roth    QEMU_GA_DISTRO=Linux
60409d6bc27bSMichael Roth  fi
60419d6bc27bSMichael Roth
60429d6bc27bSMichael Roth  if test "$QEMU_GA_VERSION" = ""; then
604389138857SStefan Weil      QEMU_GA_VERSION=$(cat $source_path/VERSION)
60449d6bc27bSMichael Roth  fi
60459d6bc27bSMichael Roth
604689138857SStefan Weil  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
60479d6bc27bSMichael Roth
60489d6bc27bSMichael Roth  case "$cpu" in
60499d6bc27bSMichael Roth  x86_64)
60509d6bc27bSMichael Roth    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
60519d6bc27bSMichael Roth    ;;
60529d6bc27bSMichael Roth  i386)
60539d6bc27bSMichael Roth    QEMU_GA_MSI_ARCH="-D Arch=32"
60549d6bc27bSMichael Roth    ;;
60559d6bc27bSMichael Roth  *)
60569d6bc27bSMichael Roth    error_exit "CPU $cpu not supported for building installation package"
60579d6bc27bSMichael Roth    ;;
60589d6bc27bSMichael Roth  esac
60599d6bc27bSMichael Rothfi
60609d6bc27bSMichael Roth
6061ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
6062ca35f780SPaolo Bonziniroms=
6063e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6064e633a5c6SEric Blake        test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6065e633a5c6SEric Blake        test "$softmmu" = yes ; then
6066e57218b6SPeter Maydell    # Different host OS linkers have different ideas about the name of the ELF
6067c65d5e4eSBrad Smith    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6068c65d5e4eSBrad Smith    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6069c65d5e4eSBrad Smith    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6070e57218b6SPeter Maydell        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6071e57218b6SPeter Maydell            ld_i386_emulation="$emu"
6072ca35f780SPaolo Bonzini            roms="optionrom"
6073e57218b6SPeter Maydell            break
6074e57218b6SPeter Maydell        fi
6075e57218b6SPeter Maydell    done
6076ca35f780SPaolo Bonzinifi
6077e633a5c6SEric Blakeif test "$cpu" = "ppc64" && test "$targetos" != "Darwin" ; then
607839ac8455SDavid Gibson  roms="$roms spapr-rtas"
607939ac8455SDavid Gibsonfi
6080ca35f780SPaolo Bonzini
60812e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
60829933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
60832e33c3f8SThomas Huth  write_c_skeleton
60842e33c3f8SThomas Huth  if compile_prog "-march=z900" ""; then
60859933c305SChristian Borntraeger    roms="$roms s390-ccw"
60869933c305SChristian Borntraeger  fi
60872e33c3f8SThomas Huthfi
60889933c305SChristian Borntraeger
6089964c6fa1SRichard Henderson# Probe for the need for relocating the user-only binary.
609092fe2ba8SPeter Maydellif ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
6091964c6fa1SRichard Henderson  textseg_addr=
6092964c6fa1SRichard Henderson  case "$cpu" in
6093479eb121SRichard Henderson    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6094479eb121SRichard Henderson      # ??? Rationale for choosing this address
6095964c6fa1SRichard Henderson      textseg_addr=0x60000000
6096964c6fa1SRichard Henderson      ;;
6097964c6fa1SRichard Henderson    mips)
6098479eb121SRichard Henderson      # A 256M aligned address, high in the address space, with enough
6099479eb121SRichard Henderson      # room for the code_gen_buffer above it before the stack.
6100479eb121SRichard Henderson      textseg_addr=0x60000000
6101964c6fa1SRichard Henderson      ;;
6102964c6fa1SRichard Henderson  esac
6103964c6fa1SRichard Henderson  if [ -n "$textseg_addr" ]; then
6104964c6fa1SRichard Henderson    cat > $TMPC <<EOF
6105964c6fa1SRichard Henderson    int main(void) { return 0; }
6106964c6fa1SRichard HendersonEOF
6107964c6fa1SRichard Henderson    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6108964c6fa1SRichard Henderson    if ! compile_prog "" "$textseg_ldflags"; then
6109964c6fa1SRichard Henderson      # In case ld does not support -Ttext-segment, edit the default linker
6110964c6fa1SRichard Henderson      # script via sed to set the .text start addr.  This is needed on FreeBSD
6111964c6fa1SRichard Henderson      # at least.
611292fe2ba8SPeter Maydell      if ! $ld --verbose >/dev/null 2>&1; then
611392fe2ba8SPeter Maydell        error_exit \
611492fe2ba8SPeter Maydell            "We need to link the QEMU user mode binaries at a" \
611592fe2ba8SPeter Maydell            "specific text address. Unfortunately your linker" \
611692fe2ba8SPeter Maydell            "doesn't support either the -Ttext-segment option or" \
611792fe2ba8SPeter Maydell            "printing the default linker script with --verbose." \
611892fe2ba8SPeter Maydell            "If you don't want the user mode binaries, pass the" \
611992fe2ba8SPeter Maydell            "--disable-user option to configure."
612092fe2ba8SPeter Maydell      fi
612192fe2ba8SPeter Maydell
6122964c6fa1SRichard Henderson      $ld --verbose | sed \
6123964c6fa1SRichard Henderson        -e '1,/==================================================/d' \
6124964c6fa1SRichard Henderson        -e '/==================================================/,$d' \
6125964c6fa1SRichard Henderson        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6126964c6fa1SRichard Henderson        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6127964c6fa1SRichard Henderson      textseg_ldflags="-Wl,-T../config-host.ld"
6128964c6fa1SRichard Henderson    fi
6129964c6fa1SRichard Henderson  fi
6130964c6fa1SRichard Hendersonfi
6131964c6fa1SRichard Henderson
613211cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler.
613311cde1c8SBruno 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.
613411cde1c8SBruno Dominguezif has $cxx; then
613511cde1c8SBruno Dominguez    cat > $TMPC <<EOF
613611cde1c8SBruno Dominguezint c_function(void);
613711cde1c8SBruno Dominguezint main(void) { return c_function(); }
613811cde1c8SBruno DominguezEOF
613911cde1c8SBruno Dominguez
614011cde1c8SBruno Dominguez    compile_object
614111cde1c8SBruno Dominguez
614211cde1c8SBruno Dominguez    cat > $TMPCXX <<EOF
614311cde1c8SBruno Dominguezextern "C" {
614411cde1c8SBruno Dominguez   int c_function(void);
614511cde1c8SBruno Dominguez}
614611cde1c8SBruno Dominguezint c_function(void) { return 42; }
614711cde1c8SBruno DominguezEOF
614811cde1c8SBruno Dominguez
614911cde1c8SBruno Dominguez    update_cxxflags
615011cde1c8SBruno Dominguez
615111cde1c8SBruno Dominguez    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
615211cde1c8SBruno Dominguez        # C++ compiler $cxx works ok with C compiler $cc
615311cde1c8SBruno Dominguez        :
615411cde1c8SBruno Dominguez    else
615511cde1c8SBruno Dominguez        echo "C++ compiler $cxx does not work with C compiler $cc"
615611cde1c8SBruno Dominguez        echo "Disabling C++ specific optional code"
615711cde1c8SBruno Dominguez        cxx=
615811cde1c8SBruno Dominguez    fi
615911cde1c8SBruno Dominguezelse
616011cde1c8SBruno Dominguez    echo "No C++ compiler available; disabling C++ specific optional code"
616111cde1c8SBruno Dominguez    cxx=
616211cde1c8SBruno Dominguezfi
616311cde1c8SBruno Dominguez
616402d34f62SCole Robinsonecho_version() {
616502d34f62SCole Robinson    if test "$1" = "yes" ; then
616602d34f62SCole Robinson        echo "($2)"
616702d34f62SCole Robinson    fi
616802d34f62SCole Robinson}
616902d34f62SCole Robinson
617050e12060SJan Kiszka# prepend pixman and ftd flags after all config tests are done
617150e12060SJan KiszkaQEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
61728a99e9a3SPhilippe Mathieu-DaudéQEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
617350e12060SJan Kiszkalibs_softmmu="$pixman_libs $libs_softmmu"
61745ca9388aSGerd Hoffmann
61757d13299dSbellardecho "Install prefix    $prefix"
617689138857SStefan Weilecho "BIOS directory    $(eval echo $qemu_datadir)"
61773d5eecabSGerd Hoffmannecho "firmware path     $(eval echo $firmwarepath)"
617889138857SStefan Weilecho "binary directory  $(eval echo $bindir)"
617989138857SStefan Weilecho "library directory $(eval echo $libdir)"
618089138857SStefan Weilecho "module directory  $(eval echo $qemu_moddir)"
618189138857SStefan Weilecho "libexec directory $(eval echo $libexecdir)"
618289138857SStefan Weilecho "include directory $(eval echo $includedir)"
618389138857SStefan Weilecho "config directory  $(eval echo $sysconfdir)"
618411d9f695Sbellardif test "$mingw32" = "no" ; then
618589138857SStefan Weilecho "local state directory   $(eval echo $local_statedir)"
618689138857SStefan Weilecho "Manual directory  $(eval echo $mandir)"
618743ce4dfeSbellardecho "ELF interp prefix $interp_prefix"
61885a699bbbSLaszlo Ersekelse
61895a699bbbSLaszlo Ersekecho "local state directory   queried at runtime"
6190d9840e25STomoki Sekiyamaecho "Windows SDK       $win_sdk"
619111d9f695Sbellardfi
61925a67135aSbellardecho "Source path       $source_path"
6193cc84d63aSDaniel P. Berrangeecho "GIT binary        $git"
6194aef45d51SDaniel P. Berrangeecho "GIT submodules    $git_submodules"
61957d13299dSbellardecho "C compiler        $cc"
619683469015Sbellardecho "Host C compiler   $host_cc"
619783f73fceSTomoki Sekiyamaecho "C++ compiler      $cxx"
61983c4a4d0dSPeter Maydellecho "Objective-C compiler $objcc"
619945d285abSPeter Maydellecho "ARFLAGS           $ARFLAGS"
62000c439cbfSJuan Quintelaecho "CFLAGS            $CFLAGS"
6201a558ee17SJuan Quintelaecho "QEMU_CFLAGS       $QEMU_CFLAGS"
62020c439cbfSJuan Quintelaecho "LDFLAGS           $LDFLAGS"
62038a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS      $QEMU_LDFLAGS"
62047d13299dSbellardecho "make              $make"
62056a882643Spbrookecho "install           $install"
6206755ee70fSCleber Rosaecho "python            $python ($python_version)"
6207675b9b53SMarc-André Lureauecho "slirp support     $slirp $(echo_version $slirp $slirp_version)"
6208675b9b53SMarc-André Lureauif test "$slirp" != "no" ; then
6209e2d8830eSBrad    echo "smbd              $smbd"
6210e2d8830eSBradfi
621117969268SFam Zhengecho "module support    $modules"
6212a98fd896Sbellardecho "host CPU          $cpu"
6213de83cd02Sbellardecho "host big endian   $bigendian"
621497a847bcSbellardecho "target list       $target_list"
62157d13299dSbellardecho "gprof enabled     $gprof"
621603b4fe7dSaliguoriecho "sparse enabled    $sparse"
62171625af87Saliguoriecho "strip binaries    $strip_opt"
621805c2a3e7Sbellardecho "profiler          $profiler"
621943ce4dfeSbellardecho "static build      $static"
62205b0753e0Sbellardif test "$darwin" = "yes" ; then
62215b0753e0Sbellard    echo "Cocoa support     $cocoa"
62225b0753e0Sbellardfi
622389138857SStefan Weilecho "SDL support       $sdl $(echo_version $sdl $sdlversion)"
6224a442fe2fSDaniel P. Berrangéecho "SDL image support $sdl_image"
622589138857SStefan Weilecho "GTK support       $gtk $(echo_version $gtk $gtk_version)"
6226925a0400SGerd Hoffmannecho "GTK GL support    $gtk_gl"
622789138857SStefan Weilecho "VTE support       $vte $(echo_version $vte $vteversion)"
6228a1c5e949SDaniel P. Berrangeecho "TLS priority      $tls_priority"
6229ddbb0d09SDaniel P. Berrangeecho "GNUTLS support    $gnutls"
623091bfcdb0SDaniel P. Berrangeecho "libgcrypt         $gcrypt"
623189138857SStefan Weilecho "nettle            $nettle $(echo_version $nettle $nettle_version)"
62329a2fd434SDaniel P. Berrangeecho "libtasn1          $tasn1"
62338953caf3SDaniel P. Berrangeecho "PAM               $auth_pam"
62344d3b6f6eSbalrogecho "curses support    $curses"
623547479c55SMarc-André Lureauecho "virgl support     $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6236769ce76dSAlexander Grafecho "curl support      $curl"
623767b915a5Sbellardecho "mingw32 support   $mingw32"
62380c58ac1cSmalcecho "Audio drivers     $audio_drv_list"
6239b64ec4e4SFam Zhengecho "Block whitelist (rw) $block_drv_rw_whitelist"
6240b64ec4e4SFam Zhengecho "Block whitelist (ro) $block_drv_ro_whitelist"
6241983eef5aSMeador Ingeecho "VirtFS support    $virtfs"
6242fe8fc5aeSPaolo Bonziniecho "Multipath support $mpath"
6243821601eaSJes Sorensenecho "VNC support       $vnc"
6244821601eaSJes Sorensenif test "$vnc" = "yes" ; then
62452f9606b3Saliguori    echo "VNC SASL support  $vnc_sasl"
62462f6f5c7aSCorentin Chary    echo "VNC JPEG support  $vnc_jpeg"
6247efe556adSCorentin Chary    echo "VNC PNG support   $vnc_png"
6248821601eaSJes Sorensenfi
62493142255cSblueswir1if test -n "$sparc_cpu"; then
62503142255cSblueswir1    echo "Target Sparc Arch $sparc_cpu"
62513142255cSblueswir1fi
6252e37630caSaliguoriecho "xen support       $xen"
62533996e85cSPaul Durrantif test "$xen" = "yes" ; then
62543996e85cSPaul Durrant  echo "xen ctrl version  $xen_ctrl_version"
62553996e85cSPaul Durrantfi
62562e4d9fb1Saurel32echo "brlapi support    $brlapi"
6257a20a6f46SJuan Quintelaecho "bluez  support    $bluez"
6258a25dba17SJuan Quintelaecho "Documentation     $docs"
625940d6444eSAvi Kivityecho "PIE               $pie"
62608a16d273Sthsecho "vde support       $vde"
626158952137SVincenzo Maffioneecho "netmap support    $netmap"
62625c6c3a6cSChristoph Hellwigecho "Linux AIO support $linux_aio"
6263758e8e38SVenkateswararao Jujjuri (JV)echo "ATTR/XATTR support $attr"
626477755340Sthsecho "Install blobs     $blobs"
6265b31a0277SJuan Quintelaecho "KVM support       $kvm"
6266b0cb0a66SVincent Palatinecho "HAX support       $hax"
6267c97d6d2cSSergio Andres Gomez Del Realecho "HVF support       $hvf"
6268d661d9a4SJustin Terry (VM)echo "WHPX support      $whpx"
6269b3f6ea7eSPaolo Bonziniecho "TCG support       $tcg"
6270b3f6ea7eSPaolo Bonziniif test "$tcg" = "yes" ; then
6271b3f6ea7eSPaolo Bonzini    echo "TCG debug enabled $debug_tcg"
62729195b2c2SStefan Weil    echo "TCG interpreter   $tcg_interpreter"
6273b3f6ea7eSPaolo Bonzinifi
62745a22ab71SYang Zhongecho "malloc trim support $malloc_trim"
6275b3f6ea7eSPaolo Bonziniecho "RDMA support      $rdma"
627621ab34c9SMarcel Apfelbaumecho "PVRDMA support    $pvrdma"
6277f652e6afSaurel32echo "fdt support       $fdt"
6278a40161cbSPaolo Bonziniecho "membarrier        $membarrier"
6279ceb42de8Saliguoriecho "preadv support    $preadv"
62805f6b9e8fSBlue Swirlecho "fdatasync         $fdatasync"
6281e78815a5SAndreas Färberecho "madvise           $madvise"
6282e78815a5SAndreas Färberecho "posix_madvise     $posix_madvise"
62839bc5a719SAndreas Gustafssonecho "posix_memalign    $posix_memalign"
628447e98658SCorey Bryantecho "libcap-ng support $cap_ng"
6285d5970055SMichael S. Tsirkinecho "vhost-net support $vhost_net"
6286042cea27SGongleiecho "vhost-crypto support $vhost_crypto"
62875e9be92dSNicholas Bellingerecho "vhost-scsi support $vhost_scsi"
6288fc0b9b0eSStefan Hajnocziecho "vhost-vsock support $vhost_vsock"
6289e6a74868SMarc-André Lureauecho "vhost-user support $vhost_user"
62905b808275SLluís Vilanovaecho "Trace backends    $trace_backends"
6291713572a7SMarc-André Lureauif have_backend "simple"; then
62929410b56cSPrerna Saxenaecho "Trace output file $trace_file-<pid>"
6293e00e36fbSStefan Weilfi
629489138857SStefan Weilecho "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6295f27aaf4bSChristian Brunnerecho "rbd support       $rbd"
6296dce512deSChristoph Hellwigecho "xfsctl support    $xfs"
62977b02f544SMarc-André Lureauecho "smartcard support $smartcard"
62982b2325ffSGerd Hoffmannecho "libusb            $libusb"
629969354a83SHans de Goedeecho "usb net redir     $usb_redir"
6300da076ffeSGerd Hoffmannecho "OpenGL support    $opengl"
6301014cb152SGerd Hoffmannecho "OpenGL dmabufs    $opengl_dmabuf"
6302c589b249SRonnie Sahlbergecho "libiscsi support  $libiscsi"
63036542aa9cSPeter Lievenecho "libnfs support    $libnfs"
6304d138cee9SMichael Rothecho "build guest agent $guest_agent"
6305d9840e25STomoki Sekiyamaecho "QGA VSS support   $guest_agent_with_vss"
630650cbebb9SMichael Rothecho "QGA w32 disk info $guest_agent_ntddscsi"
63074c875d89SMichael Rothecho "QGA MSI support   $guest_agent_msi"
6308f794573eSEduardo Otuboecho "seccomp support   $seccomp"
63097c2acc70SPeter Maydellecho "coroutine backend $coroutine"
631070c60c08SStefan Hajnocziecho "coroutine pool    $coroutine_pool"
63117d992e4dSPeter Lievenecho "debug stack usage $debug_stack_usage"
6312ba59fb77SPaolo Bonziniecho "mutex debugging   $debug_mutex"
6313f0d92b56SLongpeng(Mike)echo "crypto afalg      $crypto_afalg"
6314eb100396SBharata B Raoecho "GlusterFS support $glusterfs"
63151d728c39SBlue Swirlecho "gcov              $gcov_tool"
63161d728c39SBlue Swirlecho "gcov enabled      $gcov"
6317ab214c29SStefan Bergerecho "TPM support       $tpm"
63180a12ec87SRichard W.M. Jonesecho "libssh2 support   $libssh2"
63193b8acc11SPaolo Bonziniecho "TPM passthrough   $tpm_passthrough"
6320f4ede81eSAmarnath Valluriecho "TPM emulator      $tpm_emulator"
63213556c233SPaolo Bonziniecho "QOM debugging     $qom_cast_debug"
6322ed1701c6SDr. David Alan Gilbertecho "Live block migration $live_block_migration"
6323607dacd0Sqiaonuohanecho "lzo support       $lzo"
6324607dacd0Sqiaonuohanecho "snappy support    $snappy"
63256b383c08SPeter Wuecho "bzip2 support     $bzip2"
632683bc1f97SJulio Faraccoecho "lzfse support     $lzfse"
6327a99d57bbSWanlong Gaoecho "NUMA host support $numa"
6328ed279a06SKlim Kireevecho "libxml2           $libxml2"
63292847b469SFam Zhengecho "tcmalloc support  $tcmalloc"
63307b01cb97SAlexandre Derumierecho "jemalloc support  $jemalloc"
633199f2dbd3SLiang Liecho "avx2 optimization $avx2_opt"
6332a6b1d4c0SChanglong Xieecho "replication support $replication"
6333da92c3ffSAshish Mittalecho "VxHS block device $vxhs"
63342f740136SJeff Codyecho "bochs support     $bochs"
63352f740136SJeff Codyecho "cloop support     $cloop"
63362f740136SJeff Codyecho "dmg support       $dmg"
63372f740136SJeff Codyecho "qcow v1 support   $qcow1"
63382f740136SJeff Codyecho "vdi support       $vdi"
63392f740136SJeff Codyecho "vvfat support     $vvfat"
63402f740136SJeff Codyecho "qed support       $qed"
63412f740136SJeff Codyecho "parallels support $parallels"
63422f740136SJeff Codyecho "sheepdog support  $sheepdog"
63438ca80760SRichard Hendersonecho "capstone          $capstone"
634451a12b51SAlex Bennéeecho "docker            $docker"
634517824406SJunyan Heecho "libpmem support   $libpmem"
63463efac6ebSTomáš Golembiovskýecho "libudev           $libudev"
6347f3494749SPaolo Bonziniecho "default devices   $default_devices"
634867b915a5Sbellard
6349898be3e0SPeter Maydellif test "$supported_cpu" = "no"; then
6350898be3e0SPeter Maydell    echo
6351898be3e0SPeter Maydell    echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6352898be3e0SPeter Maydell    echo
6353898be3e0SPeter Maydell    echo "CPU host architecture $cpu support is not currently maintained."
6354898be3e0SPeter Maydell    echo "The QEMU project intends to remove support for this host CPU in"
6355898be3e0SPeter Maydell    echo "a future release if nobody volunteers to maintain it and to"
6356898be3e0SPeter Maydell    echo "provide a build host for our continuous integration setup."
6357898be3e0SPeter Maydell    echo "configure has succeeded and you can continue to build, but"
6358898be3e0SPeter Maydell    echo "if you care about QEMU on this platform you should contact"
6359898be3e0SPeter Maydell    echo "us upstream at qemu-devel@nongnu.org."
6360898be3e0SPeter Maydellfi
6361898be3e0SPeter Maydell
6362898be3e0SPeter Maydellif test "$supported_os" = "no"; then
6363898be3e0SPeter Maydell    echo
6364898be3e0SPeter Maydell    echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6365898be3e0SPeter Maydell    echo
6366c50126aaSPeter Maydell    echo "Host OS $targetos support is not currently maintained."
6367c50126aaSPeter Maydell    echo "The QEMU project intends to remove support for this host OS in"
6368898be3e0SPeter Maydell    echo "a future release if nobody volunteers to maintain it and to"
6369898be3e0SPeter Maydell    echo "provide a build host for our continuous integration setup."
6370898be3e0SPeter Maydell    echo "configure has succeeded and you can continue to build, but"
6371898be3e0SPeter Maydell    echo "if you care about QEMU on this platform you should contact"
6372898be3e0SPeter Maydell    echo "us upstream at qemu-devel@nongnu.org."
6373898be3e0SPeter Maydellfi
6374898be3e0SPeter Maydell
637598ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
637697a847bcSbellard
6377dbd99ae3SStefan Weilecho "# Automatically generated by configure - do not modify" >config-all-disas.mak
6378dbd99ae3SStefan Weil
637998ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
638098ec69acSJuan Quintelaecho >> $config_host_mak
638198ec69acSJuan Quintela
6382e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
638399d7cc75SPaolo Bonziniecho "prefix=$prefix" >> $config_host_mak
638499d7cc75SPaolo Bonziniecho "bindir=$bindir" >> $config_host_mak
63853aa5d2beSAlon Levyecho "libdir=$libdir" >> $config_host_mak
63868bf188aaSMichael Tokarevecho "libexecdir=$libexecdir" >> $config_host_mak
63870f94d6daSAlon Levyecho "includedir=$includedir" >> $config_host_mak
638899d7cc75SPaolo Bonziniecho "mandir=$mandir" >> $config_host_mak
638999d7cc75SPaolo Bonziniecho "sysconfdir=$sysconfdir" >> $config_host_mak
639022d07038SEduardo Habkostecho "qemu_confdir=$qemu_confdir" >> $config_host_mak
63919afa52ceSEduardo Habkostecho "qemu_datadir=$qemu_datadir" >> $config_host_mak
63923d5eecabSGerd Hoffmannecho "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
63939afa52ceSEduardo Habkostecho "qemu_docdir=$qemu_docdir" >> $config_host_mak
6394e26110cfSFam Zhengecho "qemu_moddir=$qemu_moddir" >> $config_host_mak
63955a699bbbSLaszlo Ersekif test "$mingw32" = "no" ; then
6396785c23aeSLuiz Capitulino  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
63975a699bbbSLaszlo Ersekfi
6398f354b1a1SMichael Tokarevecho "qemu_helperdir=$libexecdir" >> $config_host_mak
6399834574eaSAnthony Liguoriecho "qemu_localedir=$qemu_localedir" >> $config_host_mak
6400a8260d38SDaniel P. Berrangéecho "qemu_icondir=$qemu_icondir" >> $config_host_mak
640167ea9546SDaniel P. Berrangéecho "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6402f544a488SPaolo Bonziniecho "libs_softmmu=$libs_softmmu" >> $config_host_mak
6403cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
6404aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6405f62bbee5SDaniel P. Berrangeecho "GIT_UPDATE=$git_update" >> $config_host_mak
6406804edf29SJuan Quintela
640798ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak
6408727e5283SPaolo Bonzini
6409f3494749SPaolo Bonziniif test "$default_devices" = "yes" ; then
6410f3494749SPaolo Bonzini  echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6411f3494749SPaolo Bonzinielse
6412f3494749SPaolo Bonzini  echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6413f3494749SPaolo Bonzinifi
6414f8393946Saurel32if test "$debug_tcg" = "yes" ; then
64152358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6416f8393946Saurel32fi
64171625af87Saliguoriif test "$strip_opt" = "yes" ; then
641852ba784dSHollis Blanchard  echo "STRIP=${strip}" >> $config_host_mak
64191625af87Saliguorifi
64207d13299dSbellardif test "$bigendian" = "yes" ; then
6421e2542fe2SJuan Quintela  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
642297a847bcSbellardfi
642367b915a5Sbellardif test "$mingw32" = "yes" ; then
642498ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
642589138857SStefan Weil  rc_version=$(cat $source_path/VERSION)
64269fe6de94SBlue Swirl  version_major=${rc_version%%.*}
64279fe6de94SBlue Swirl  rc_version=${rc_version#*.}
64289fe6de94SBlue Swirl  version_minor=${rc_version%%.*}
64299fe6de94SBlue Swirl  rc_version=${rc_version#*.}
64309fe6de94SBlue Swirl  version_subminor=${rc_version%%.*}
64319fe6de94SBlue Swirl  version_micro=0
64329fe6de94SBlue Swirl  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
64339fe6de94SBlue Swirl  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6434d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
6435d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6436f33ca81fSMichael Roth    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6437d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6438d9840e25STomoki Sekiyama  fi
643950cbebb9SMichael Roth  if test "$guest_agent_ntddscsi" = "yes" ; then
644076dc75caSTomáš Golembiovský    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
644150cbebb9SMichael Roth  fi
64421a34904eSMichael Roth  if test "$guest_agent_msi" = "yes"; then
64439dacf32dSYossi Hindin    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
64449dacf32dSYossi Hindin    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
64459dacf32dSYossi Hindin    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
64469dacf32dSYossi Hindin    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
64479dacf32dSYossi Hindin    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
64489dacf32dSYossi Hindin    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
64499dacf32dSYossi Hindin    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
64509dacf32dSYossi Hindin  fi
6451210fa556Spbrookelse
645235f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
6453210fa556Spbrookfi
6454128ab2ffSblueswir1
6455dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
6456dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
6457dffcb71cSMark McLoughlinfi
6458dffcb71cSMark McLoughlin
645983fb7adfSbellardif test "$darwin" = "yes" ; then
646098ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
646183fb7adfSbellardfi
6462b29fe3edSmalc
6463ec530c81Sbellardif test "$solaris" = "yes" ; then
646498ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
6465ec530c81Sbellardfi
6466179cf400SAndreas Färberif test "$haiku" = "yes" ; then
6467179cf400SAndreas Färber  echo "CONFIG_HAIKU=y" >> $config_host_mak
6468179cf400SAndreas Färberfi
646997a847bcSbellardif test "$static" = "yes" ; then
647098ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
647197a847bcSbellardfi
64721ba16968SStefan Weilif test "$profiler" = "yes" ; then
64732358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
647405c2a3e7Sbellardfi
6475675b9b53SMarc-André Lureauif test "$slirp" != "no"; then
647698ec69acSJuan Quintela  echo "CONFIG_SLIRP=y" >> $config_host_mak
6477e2d8830eSBrad  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6478675b9b53SMarc-André Lureau  echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6479675b9b53SMarc-André Lureau  echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6480675b9b53SMarc-André Lureaufi
6481675b9b53SMarc-André Lureauif [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6482675b9b53SMarc-André Lureau    echo "config-host.h: subdir-slirp" >> $config_host_mak
6483c20709aaSbellardfi
64848a16d273Sthsif test "$vde" = "yes" ; then
648598ec69acSJuan Quintela  echo "CONFIG_VDE=y" >> $config_host_mak
6486e2ad6f16SFam Zheng  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
64878a16d273Sthsfi
648858952137SVincenzo Maffioneif test "$netmap" = "yes" ; then
648958952137SVincenzo Maffione  echo "CONFIG_NETMAP=y" >> $config_host_mak
649058952137SVincenzo Maffionefi
6491015a33bdSGongleiif test "$l2tpv3" = "yes" ; then
6492015a33bdSGonglei  echo "CONFIG_L2TPV3=y" >> $config_host_mak
6493015a33bdSGongleifi
649447e98658SCorey Bryantif test "$cap_ng" = "yes" ; then
649547e98658SCorey Bryant  echo "CONFIG_LIBCAP=y" >> $config_host_mak
649647e98658SCorey Bryantfi
64972358a494SJuan Quintelaecho "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
64980c58ac1cSmalcfor drv in $audio_drv_list; do
64991ef1ec2aSGerd Hoffmann    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6500ce3dc033SGerd Hoffmann    case "$drv" in
6501051c7d5cSGerd Hoffmann	alsa | oss | pa | sdl)
6502ce3dc033SGerd Hoffmann	    echo "$def=m" >> $config_host_mak ;;
6503ce3dc033SGerd Hoffmann	*)
6504ce3dc033SGerd Hoffmann	    echo "$def=y" >> $config_host_mak ;;
6505ce3dc033SGerd Hoffmann    esac
65060c58ac1cSmalcdone
6507b1149911SFam Zhengecho "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6508b1149911SFam Zhengecho "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6509b1149911SFam Zhengecho "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6510b1149911SFam Zhengecho "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6511b1149911SFam Zhengecho "OSS_LIBS=$oss_libs" >> $config_host_mak
651267f86e8eSJuan Quintelaif test "$audio_pt_int" = "yes" ; then
651367f86e8eSJuan Quintela  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
651467f86e8eSJuan Quintelafi
6515d5631638Smalcif test "$audio_win_int" = "yes" ; then
6516d5631638Smalc  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6517d5631638Smalcfi
6518b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6519b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6520821601eaSJes Sorensenif test "$vnc" = "yes" ; then
6521821601eaSJes Sorensen  echo "CONFIG_VNC=y" >> $config_host_mak
6522821601eaSJes Sorensenfi
65232f9606b3Saliguoriif test "$vnc_sasl" = "yes" ; then
652498ec69acSJuan Quintela  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
65252f9606b3Saliguorifi
6526821601eaSJes Sorensenif test "$vnc_jpeg" = "yes" ; then
65272f6f5c7aSCorentin Chary  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
65282f6f5c7aSCorentin Charyfi
6529821601eaSJes Sorensenif test "$vnc_png" = "yes" ; then
6530efe556adSCorentin Chary  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6531efe556adSCorentin Charyfi
65326a021536SGerd Hoffmannif test "$xkbcommon" = "yes" ; then
65336a021536SGerd Hoffmann  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
65346a021536SGerd Hoffmann  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
65356a021536SGerd Hoffmannfi
6536dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then
6537dce512deSChristoph Hellwig  echo "CONFIG_XFS=y" >> $config_host_mak
6538dce512deSChristoph Hellwigfi
653989138857SStefan Weilqemu_version=$(head $source_path/VERSION)
654098ec69acSJuan Quintelaecho "VERSION=$qemu_version" >>$config_host_mak
65412358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
654298ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
65432b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
6544a25dba17SJuan Quintelaif [ "$docs" = "yes" ] ; then
654598ec69acSJuan Quintela  echo "BUILD_DOCS=yes" >> $config_host_mak
6546cc8ae6deSpbrookfi
654717969268SFam Zhengif test "$modules" = "yes"; then
6548e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
6549e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
655089138857SStefan Weil  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
655117969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
655217969268SFam Zhengfi
6553e633a5c6SEric Blakeif test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
65548781595bSGerd Hoffmann  echo "CONFIG_X11=y" >> $config_host_mak
65558781595bSGerd Hoffmann  echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
65568781595bSGerd Hoffmann  echo "X11_LIBS=$x11_libs" >> $config_host_mak
65578781595bSGerd Hoffmannfi
65581ac88f28SJuan Quintelaif test "$sdl" = "yes" ; then
655996400a14SGerd Hoffmann  echo "CONFIG_SDL=m" >> $config_host_mak
65608ad3a7ddSJuan Quintela  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
65618ecc89f6SFam Zheng  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6562a442fe2fSDaniel P. Berrangé  if test "$sdl_image" = "yes" ; then
6563a442fe2fSDaniel P. Berrangé      echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6564a442fe2fSDaniel P. Berrangé  fi
656549ecc3faSbellardfi
656649ecc3faSbellardif test "$cocoa" = "yes" ; then
656798ec69acSJuan Quintela  echo "CONFIG_COCOA=y" >> $config_host_mak
656849ecc3faSbellardfi
65694d3b6f6eSbalrogif test "$curses" = "yes" ; then
65702373f7d5SGerd Hoffmann  echo "CONFIG_CURSES=m" >> $config_host_mak
65712373f7d5SGerd Hoffmann  echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
65722373f7d5SGerd Hoffmann  echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6573ab4e5602SJan Kiszkafi
6574099d6b0fSRiku Voipioif test "$pipe2" = "yes" ; then
65752358a494SJuan Quintela  echo "CONFIG_PIPE2=y" >> $config_host_mak
6576099d6b0fSRiku Voipiofi
657740ff6d7eSKevin Wolfif test "$accept4" = "yes" ; then
657840ff6d7eSKevin Wolf  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
657940ff6d7eSKevin Wolffi
65803ce34dfbSvibisreenivasanif test "$splice" = "yes" ; then
65812358a494SJuan Quintela  echo "CONFIG_SPLICE=y" >> $config_host_mak
65823ce34dfbSvibisreenivasanfi
6583c2882b96SRiku Voipioif test "$eventfd" = "yes" ; then
6584c2882b96SRiku Voipio  echo "CONFIG_EVENTFD=y" >> $config_host_mak
6585c2882b96SRiku Voipiofi
6586751bcc39SMarc-André Lureauif test "$memfd" = "yes" ; then
6587751bcc39SMarc-André Lureau  echo "CONFIG_MEMFD=y" >> $config_host_mak
6588751bcc39SMarc-André Lureaufi
6589955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then
6590955727d2SCortland Tölva  echo "CONFIG_USBFS=y" >> $config_host_mak
6591955727d2SCortland Tölvafi
6592d0927938SUlrich Hechtif test "$fallocate" = "yes" ; then
6593d0927938SUlrich Hecht  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6594d0927938SUlrich Hechtfi
65953d4fa43eSKusanagi Kouichiif test "$fallocate_punch_hole" = "yes" ; then
65963d4fa43eSKusanagi Kouichi  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
65973d4fa43eSKusanagi Kouichifi
6598b953f075SDenis V. Lunevif test "$fallocate_zero_range" = "yes" ; then
6599b953f075SDenis V. Lunev  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6600b953f075SDenis V. Lunevfi
6601ed911435SKevin Wolfif test "$posix_fallocate" = "yes" ; then
6602ed911435SKevin Wolf  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6603ed911435SKevin Wolffi
6604c727f47dSPeter Maydellif test "$sync_file_range" = "yes" ; then
6605c727f47dSPeter Maydell  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6606c727f47dSPeter Maydellfi
6607dace20dcSPeter Maydellif test "$fiemap" = "yes" ; then
6608dace20dcSPeter Maydell  echo "CONFIG_FIEMAP=y" >> $config_host_mak
6609dace20dcSPeter Maydellfi
6610d0927938SUlrich Hechtif test "$dup3" = "yes" ; then
6611d0927938SUlrich Hecht  echo "CONFIG_DUP3=y" >> $config_host_mak
6612d0927938SUlrich Hechtfi
66134e0c6529SAlex Blighif test "$ppoll" = "yes" ; then
66144e0c6529SAlex Bligh  echo "CONFIG_PPOLL=y" >> $config_host_mak
66154e0c6529SAlex Blighfi
6616cd758dd0SAlex Blighif test "$prctl_pr_set_timerslack" = "yes" ; then
6617cd758dd0SAlex Bligh  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6618cd758dd0SAlex Blighfi
66193b6edd16SPeter Maydellif test "$epoll" = "yes" ; then
66203b6edd16SPeter Maydell  echo "CONFIG_EPOLL=y" >> $config_host_mak
66213b6edd16SPeter Maydellfi
66223b6edd16SPeter Maydellif test "$epoll_create1" = "yes" ; then
66233b6edd16SPeter Maydell  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
66243b6edd16SPeter Maydellfi
6625a8fd1abaSPeter Maydellif test "$sendfile" = "yes" ; then
6626a8fd1abaSPeter Maydell  echo "CONFIG_SENDFILE=y" >> $config_host_mak
6627a8fd1abaSPeter Maydellfi
662851834341SRiku Voipioif test "$timerfd" = "yes" ; then
662951834341SRiku Voipio  echo "CONFIG_TIMERFD=y" >> $config_host_mak
663051834341SRiku Voipiofi
66319af5c906SRiku Voipioif test "$setns" = "yes" ; then
66329af5c906SRiku Voipio  echo "CONFIG_SETNS=y" >> $config_host_mak
66339af5c906SRiku Voipiofi
663438860a03SAleksandar Markovicif test "$clock_adjtime" = "yes" ; then
663538860a03SAleksandar Markovic  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
663638860a03SAleksandar Markovicfi
66375a03cd00SAleksandar Markovicif test "$syncfs" = "yes" ; then
66385a03cd00SAleksandar Markovic  echo "CONFIG_SYNCFS=y" >> $config_host_mak
66395a03cd00SAleksandar Markovicfi
66403b3f24adSaurel32if test "$inotify" = "yes" ; then
66412358a494SJuan Quintela  echo "CONFIG_INOTIFY=y" >> $config_host_mak
66423b3f24adSaurel32fi
6643c05c7a73SRiku Voipioif test "$inotify1" = "yes" ; then
6644c05c7a73SRiku Voipio  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6645c05c7a73SRiku Voipiofi
6646401bc051SPeter Maydellif test "$sem_timedwait" = "yes" ; then
6647401bc051SPeter Maydell  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6648401bc051SPeter Maydellfi
66495c99fa37SKeno Fischerif test "$strchrnul" = "yes" ; then
66505c99fa37SKeno Fischer  echo "HAVE_STRCHRNUL=y" >> $config_host_mak
66515c99fa37SKeno Fischerfi
66526ae9a1f4SJuan Quintelaif test "$byteswap_h" = "yes" ; then
66536ae9a1f4SJuan Quintela  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
66546ae9a1f4SJuan Quintelafi
66556ae9a1f4SJuan Quintelaif test "$bswap_h" = "yes" ; then
66566ae9a1f4SJuan Quintela  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
66576ae9a1f4SJuan Quintelafi
6658769ce76dSAlexander Grafif test "$curl" = "yes" ; then
6659d3399d7cSFam Zheng  echo "CONFIG_CURL=m" >> $config_host_mak
6660b1d5a277SJuan Quintela  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
66616ebc91e5SFam Zheng  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6662769ce76dSAlexander Graffi
66632e4d9fb1Saurel32if test "$brlapi" = "yes" ; then
666498ec69acSJuan Quintela  echo "CONFIG_BRLAPI=y" >> $config_host_mak
66658eca2889SFam Zheng  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
66662e4d9fb1Saurel32fi
6667fb599c9aSbalrogif test "$bluez" = "yes" ; then
666898ec69acSJuan Quintela  echo "CONFIG_BLUEZ=y" >> $config_host_mak
6669ef7635ecSJuan Quintela  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6670fb599c9aSbalrogfi
6671a4ccabcfSAnthony Liguoriif test "$gtk" = "yes" ; then
6672e0fb129cSGerd Hoffmann  echo "CONFIG_GTK=m" >> $config_host_mak
6673a4ccabcfSAnthony Liguori  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6674014cb152SGerd Hoffmann  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6675925a0400SGerd Hoffmann  if test "$gtk_gl" = "yes" ; then
6676925a0400SGerd Hoffmann    echo "CONFIG_GTK_GL=y" >> $config_host_mak
6677925a0400SGerd Hoffmann  fi
6678bbbf9bfbSStefan Weilfi
6679f876b765SMarc-André Lureauif test "$gio" = "yes" ; then
6680f876b765SMarc-André Lureau    echo "CONFIG_GIO=y" >> $config_host_mak
6681f876b765SMarc-André Lureau    echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6682f876b765SMarc-André Lureau    echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6683f876b765SMarc-André Lureaufi
6684a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6685ddbb0d09SDaniel P. Berrangeif test "$gnutls" = "yes" ; then
6686ddbb0d09SDaniel P. Berrange  echo "CONFIG_GNUTLS=y" >> $config_host_mak
6687ddbb0d09SDaniel P. Berrangefi
668891bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" ; then
668991bfcdb0SDaniel P. Berrange  echo "CONFIG_GCRYPT=y" >> $config_host_mak
66901f923c70SLongpeng(Mike)  if test "$gcrypt_hmac" = "yes" ; then
66911f923c70SLongpeng(Mike)    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
66921f923c70SLongpeng(Mike)  fi
669362893b67SDaniel P. Berrangefi
669491bfcdb0SDaniel P. Berrangeif test "$nettle" = "yes" ; then
669591bfcdb0SDaniel P. Berrange  echo "CONFIG_NETTLE=y" >> $config_host_mak
6696becaeb72SRadim Krčmář  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6697ed754746SDaniel P. Berrangefi
66989a2fd434SDaniel P. Berrangeif test "$tasn1" = "yes" ; then
66999a2fd434SDaniel P. Berrange  echo "CONFIG_TASN1=y" >> $config_host_mak
67009a2fd434SDaniel P. Berrangefi
67018953caf3SDaniel P. Berrangeif test "$auth_pam" = "yes" ; then
67028953caf3SDaniel P. Berrange    echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
67038953caf3SDaniel P. Berrangefi
6704559607eaSDaniel P. Berrangeif test "$have_ifaddrs_h" = "yes" ; then
6705559607eaSDaniel P. Berrange    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6706559607eaSDaniel P. Berrangefi
67076b39b063SEric Blakeif test "$have_broken_size_max" = "yes" ; then
67086b39b063SEric Blake    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
67096b39b063SEric Blakefi
6710277abf15SJan Vesely
6711277abf15SJan Vesely# Work around a system header bug with some kernel/XFS header
6712277abf15SJan Vesely# versions where they both try to define 'struct fsxattr':
6713277abf15SJan Vesely# xfs headers will not try to redefine structs from linux headers
6714277abf15SJan Vesely# if this macro is set.
6715277abf15SJan Veselyif test "$have_fsxattr" = "yes" ; then
6716277abf15SJan Vesely    echo "HAVE_FSXATTR=y" >> $config_host_mak
6717277abf15SJan Veselyfi
67181efad060SFam Zhengif test "$have_copy_file_range" = "yes" ; then
67191efad060SFam Zheng    echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
67201efad060SFam Zhengfi
6721bbbf9bfbSStefan Weilif test "$vte" = "yes" ; then
6722bbbf9bfbSStefan Weil  echo "CONFIG_VTE=y" >> $config_host_mak
6723a4ccabcfSAnthony Liguori  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6724e0fb129cSGerd Hoffmann  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6725a4ccabcfSAnthony Liguorifi
67269d9e1521SGerd Hoffmannif test "$virglrenderer" = "yes" ; then
67279d9e1521SGerd Hoffmann  echo "CONFIG_VIRGL=y" >> $config_host_mak
67289d9e1521SGerd Hoffmann  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
67299d9e1521SGerd Hoffmann  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
67309d9e1521SGerd Hoffmannfi
6731e37630caSaliguoriif test "$xen" = "yes" ; then
67326dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6733d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6734e37630caSaliguorifi
67355c6c3a6cSChristoph Hellwigif test "$linux_aio" = "yes" ; then
67365c6c3a6cSChristoph Hellwig  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
67375c6c3a6cSChristoph Hellwigfi
6738758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" = "yes" ; then
6739758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_ATTR=y" >> $config_host_mak
6740758e8e38SVenkateswararao Jujjuri (JV)fi
67414f26f2b6SAvi Kivityif test "$libattr" = "yes" ; then
67424f26f2b6SAvi Kivity  echo "CONFIG_LIBATTR=y" >> $config_host_mak
67434f26f2b6SAvi Kivityfi
6744983eef5aSMeador Ingeif test "$virtfs" = "yes" ; then
6745758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_VIRTFS=y" >> $config_host_mak
6746758e8e38SVenkateswararao Jujjuri (JV)fi
6747fe8fc5aeSPaolo Bonziniif test "$mpath" = "yes" ; then
6748fe8fc5aeSPaolo Bonzini  echo "CONFIG_MPATH=y" >> $config_host_mak
67491b0578f5SMurilo Opsfelder Araujo  if test "$mpathpersist_new_api" = "yes"; then
67501b0578f5SMurilo Opsfelder Araujo    echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
67511b0578f5SMurilo Opsfelder Araujo  fi
6752fe8fc5aeSPaolo Bonzinifi
67535e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
67545e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
67555e9be92dSNicholas Bellingerfi
6756af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then
6757af3bba76SPaolo Bonzini  echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6758af3bba76SPaolo Bonzinifi
6759af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then
676056f41de7SPaolo Bonzini  echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
676103ce5744SNikolay Nikolaevfi
6762042cea27SGongleiif test "$vhost_crypto" = "yes" ; then
6763042cea27SGonglei  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6764042cea27SGongleifi
6765fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then
6766fc0b9b0eSStefan Hajnoczi  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6767fc0b9b0eSStefan Hajnoczifi
6768299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then
6769299e6f19SPaolo Bonzini  echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6770299e6f19SPaolo Bonzinifi
6771e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then
6772e6a74868SMarc-André Lureau  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6773e6a74868SMarc-André Lureaufi
677477755340Sthsif test "$blobs" = "yes" ; then
677598ec69acSJuan Quintela  echo "INSTALL_BLOBS=yes" >> $config_host_mak
677677755340Sthsfi
6777bf9298b9Saliguoriif test "$iovec" = "yes" ; then
67782358a494SJuan Quintela  echo "CONFIG_IOVEC=y" >> $config_host_mak
6779bf9298b9Saliguorifi
6780ceb42de8Saliguoriif test "$preadv" = "yes" ; then
67812358a494SJuan Quintela  echo "CONFIG_PREADV=y" >> $config_host_mak
6782ceb42de8Saliguorifi
6783e3971d61SPhilippe Mathieu-Daudéif test "$fdt" != "no" ; then
67843f0855b1SJuan Quintela  echo "CONFIG_FDT=y" >> $config_host_mak
6785f652e6afSaurel32fi
6786a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then
6787a40161cbSPaolo Bonzini  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6788a40161cbSPaolo Bonzinifi
6789dcc38d1cSMarcelo Tosattiif test "$signalfd" = "yes" ; then
6790dcc38d1cSMarcelo Tosatti  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6791dcc38d1cSMarcelo Tosattifi
6792d339d766SRichard W.M. Jonesif test "$optreset" = "yes" ; then
6793d339d766SRichard W.M. Jones  echo "HAVE_OPTRESET=y" >> $config_host_mak
6794d339d766SRichard W.M. Jonesfi
6795b3f6ea7eSPaolo Bonziniif test "$tcg" = "yes"; then
6796b3f6ea7eSPaolo Bonzini  echo "CONFIG_TCG=y" >> $config_host_mak
67979195b2c2SStefan Weil  if test "$tcg_interpreter" = "yes" ; then
67989195b2c2SStefan Weil    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
67999195b2c2SStefan Weil  fi
6800b3f6ea7eSPaolo Bonzinifi
68015f6b9e8fSBlue Swirlif test "$fdatasync" = "yes" ; then
68025f6b9e8fSBlue Swirl  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
68035f6b9e8fSBlue Swirlfi
6804e78815a5SAndreas Färberif test "$madvise" = "yes" ; then
6805e78815a5SAndreas Färber  echo "CONFIG_MADVISE=y" >> $config_host_mak
6806e78815a5SAndreas Färberfi
6807e78815a5SAndreas Färberif test "$posix_madvise" = "yes" ; then
6808e78815a5SAndreas Färber  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6809e78815a5SAndreas Färberfi
68109bc5a719SAndreas Gustafssonif test "$posix_memalign" = "yes" ; then
68119bc5a719SAndreas Gustafsson  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
68129bc5a719SAndreas Gustafssonfi
681397a847bcSbellard
6814cd4ec0b4SGerd Hoffmannif test "$spice" = "yes" ; then
6815cd4ec0b4SGerd Hoffmann  echo "CONFIG_SPICE=y" >> $config_host_mak
6816cd4ec0b4SGerd Hoffmannfi
6817cd4ec0b4SGerd Hoffmann
68187b02f544SMarc-André Lureauif test "$smartcard" = "yes" ; then
68197b02f544SMarc-André Lureau  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
68207b62bf5aSFam Zheng  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
68217b62bf5aSFam Zheng  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6822111a38b0SRobert Relyeafi
6823111a38b0SRobert Relyea
68242b2325ffSGerd Hoffmannif test "$libusb" = "yes" ; then
68252b2325ffSGerd Hoffmann  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6826b878b652SFam Zheng  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6827b878b652SFam Zheng  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
68282b2325ffSGerd Hoffmannfi
68292b2325ffSGerd Hoffmann
683069354a83SHans de Goedeif test "$usb_redir" = "yes" ; then
683169354a83SHans de Goede  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6832cc7923fcSFam Zheng  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6833cc7923fcSFam Zheng  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
683469354a83SHans de Goedefi
683569354a83SHans de Goede
6836da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
6837da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
6838da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6839014cb152SGerd Hoffmann  if test "$opengl_dmabuf" = "yes" ; then
6840014cb152SGerd Hoffmann    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6841014cb152SGerd Hoffmann  fi
684220ff075bSMichael Wallefi
684320ff075bSMichael Walle
68445a22ab71SYang Zhongif test "$malloc_trim" = "yes" ; then
68455a22ab71SYang Zhong  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
68465a22ab71SYang Zhongfi
68475a22ab71SYang Zhong
684899f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then
684999f2dbd3SLiang Li  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
685099f2dbd3SLiang Lifi
685199f2dbd3SLiang Li
6852607dacd0Sqiaonuohanif test "$lzo" = "yes" ; then
6853607dacd0Sqiaonuohan  echo "CONFIG_LZO=y" >> $config_host_mak
6854607dacd0Sqiaonuohanfi
6855607dacd0Sqiaonuohan
6856607dacd0Sqiaonuohanif test "$snappy" = "yes" ; then
6857607dacd0Sqiaonuohan  echo "CONFIG_SNAPPY=y" >> $config_host_mak
6858607dacd0Sqiaonuohanfi
6859607dacd0Sqiaonuohan
68606b383c08SPeter Wuif test "$bzip2" = "yes" ; then
68616b383c08SPeter Wu  echo "CONFIG_BZIP2=y" >> $config_host_mak
68626b383c08SPeter Wu  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
68636b383c08SPeter Wufi
68646b383c08SPeter Wu
686583bc1f97SJulio Faraccoif test "$lzfse" = "yes" ; then
686683bc1f97SJulio Faracco  echo "CONFIG_LZFSE=y" >> $config_host_mak
686783bc1f97SJulio Faracco  echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
686883bc1f97SJulio Faraccofi
686983bc1f97SJulio Faracco
6870c589b249SRonnie Sahlbergif test "$libiscsi" = "yes" ; then
6871d3399d7cSFam Zheng  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
68726ebc91e5SFam Zheng  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
68736ebc91e5SFam Zheng  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6874c589b249SRonnie Sahlbergfi
6875c589b249SRonnie Sahlberg
68766542aa9cSPeter Lievenif test "$libnfs" = "yes" ; then
68774be4879fSColin Lord  echo "CONFIG_LIBNFS=m" >> $config_host_mak
68784be4879fSColin Lord  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
68796542aa9cSPeter Lievenfi
68806542aa9cSPeter Lieven
6881f794573eSEduardo Otuboif test "$seccomp" = "yes"; then
6882f794573eSEduardo Otubo  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6883c3883e1fSFam Zheng  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6884c3883e1fSFam Zheng  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6885f794573eSEduardo Otubofi
6886f794573eSEduardo Otubo
688783fb7adfSbellard# XXX: suppress that
68887d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
68892358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
68907d3505c5Sbellardfi
68917d3505c5Sbellard
68924d9310f4SDaniel P. Berrangeif test "$localtime_r" = "yes" ; then
68934d9310f4SDaniel P. Berrange  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
68944d9310f4SDaniel P. Berrangefi
68953556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
68963556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
68973556c233SPaolo Bonzinifi
6898f27aaf4bSChristian Brunnerif test "$rbd" = "yes" ; then
6899d3399d7cSFam Zheng  echo "CONFIG_RBD=m" >> $config_host_mak
69006ebc91e5SFam Zheng  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
69016ebc91e5SFam Zheng  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6902f27aaf4bSChristian Brunnerfi
690320ff6c80SAnthony Liguori
69047c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
690570c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
690670c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
690770c60c08SStefan Hajnoczielse
690870c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
690970c60c08SStefan Hajnoczifi
6910d0e2fce5SAneesh Kumar K.V
69117d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then
69127d992e4dSPeter Lieven  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
69137d992e4dSPeter Lievenfi
69147d992e4dSPeter Lieven
6915f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then
6916f0d92b56SLongpeng(Mike)  echo "CONFIG_AF_ALG=y" >> $config_host_mak
6917f0d92b56SLongpeng(Mike)fi
6918f0d92b56SLongpeng(Mike)
6919d2042378SAneesh Kumar K.Vif test "$open_by_handle_at" = "yes" ; then
6920d2042378SAneesh Kumar K.V  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6921d2042378SAneesh Kumar K.Vfi
6922d2042378SAneesh Kumar K.V
6923e06a765eSHarsh Prateek Boraif test "$linux_magic_h" = "yes" ; then
6924e06a765eSHarsh Prateek Bora  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6925e06a765eSHarsh Prateek Borafi
6926e06a765eSHarsh Prateek Bora
6927cc6e3ca9SGerd Hoffmannif test "$pragma_diagnostic_available" = "yes" ; then
6928cc6e3ca9SGerd Hoffmann  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
692906d71fa1SPeter Maydellfi
693006d71fa1SPeter Maydell
69313f4349dcSKevin Wolfif test "$valgrind_h" = "yes" ; then
69323f4349dcSKevin Wolf  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
69333f4349dcSKevin Wolffi
69343f4349dcSKevin Wolf
6935d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
6936d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6937d83414e1SMarc-André Lureaufi
6938d83414e1SMarc-André Lureau
69398ab1bf12SLuiz Capitulinoif test "$has_environ" = "yes" ; then
69408ab1bf12SLuiz Capitulino  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
69418ab1bf12SLuiz Capitulinofi
69428ab1bf12SLuiz Capitulino
694376a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
694476a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
694576a347e1SRichard Hendersonfi
694676a347e1SRichard Henderson
6947f540166bSRichard Hendersonif test "$int128" = "yes" ; then
6948f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
6949f540166bSRichard Hendersonfi
6950f540166bSRichard Henderson
69517ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then
69527ebee43eSRichard Henderson  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
69537ebee43eSRichard Hendersonfi
69547ebee43eSRichard Henderson
6955e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then
6956e6cd4bb5SRichard Henderson  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6957e6cd4bb5SRichard Hendersonfi
6958e6cd4bb5SRichard Henderson
6959df79b996SRichard Hendersonif test "$atomic64" = "yes" ; then
6960df79b996SRichard Henderson  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6961df79b996SRichard Hendersonfi
6962df79b996SRichard Henderson
6963db432672SRichard Hendersonif test "$vector16" = "yes" ; then
6964db432672SRichard Henderson  echo "CONFIG_VECTOR16=y" >> $config_host_mak
6965db432672SRichard Hendersonfi
6966db432672SRichard Henderson
69671e6e9acaSRichard Hendersonif test "$getauxval" = "yes" ; then
69681e6e9acaSRichard Henderson  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
69691e6e9acaSRichard Hendersonfi
69701e6e9acaSRichard Henderson
6971eb100396SBharata B Raoif test "$glusterfs" = "yes" ; then
6972d3399d7cSFam Zheng  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
69736ebc91e5SFam Zheng  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
69746ebc91e5SFam Zheng  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6975eb100396SBharata B Raofi
6976eb100396SBharata B Rao
6977d85fa9ebSJeff Codyif test "$glusterfs_xlator_opt" = "yes" ; then
6978d85fa9ebSJeff Cody  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6979d85fa9ebSJeff Codyfi
6980d85fa9ebSJeff Cody
69810c14fb47SBharata B Raoif test "$glusterfs_discard" = "yes" ; then
69820c14fb47SBharata B Rao  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
69830c14fb47SBharata B Raofi
69840c14fb47SBharata B Rao
6985df3a429aSNiels de Vosif test "$glusterfs_fallocate" = "yes" ; then
6986df3a429aSNiels de Vos  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6987df3a429aSNiels de Vosfi
6988df3a429aSNiels de Vos
69897c815372SBharata B Raoif test "$glusterfs_zerofill" = "yes" ; then
69907c815372SBharata B Rao  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
69917c815372SBharata B Raofi
69927c815372SBharata B Rao
6993*e014dbe7SPrasanna Kumar Kaleverif test "$glusterfs_ftruncate_has_stat" = "yes" ; then
6994*e014dbe7SPrasanna Kumar Kalever  echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
6995*e014dbe7SPrasanna Kumar Kaleverfi
6996*e014dbe7SPrasanna Kumar Kalever
69970a12ec87SRichard W.M. Jonesif test "$libssh2" = "yes" ; then
6998d3399d7cSFam Zheng  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
69996ebc91e5SFam Zheng  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
70006ebc91e5SFam Zheng  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
70010a12ec87SRichard W.M. Jonesfi
70020a12ec87SRichard W.M. Jones
7003ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then
7004ed1701c6SDr. David Alan Gilbert  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7005ed1701c6SDr. David Alan Gilbertfi
7006ed1701c6SDr. David Alan Gilbert
70073b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
70083b8acc11SPaolo Bonzini  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
7009f4ede81eSAmarnath Valluri  # TPM passthrough support?
70103b8acc11SPaolo Bonzini  if test "$tpm_passthrough" = "yes"; then
70113b8acc11SPaolo Bonzini    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
70123b8acc11SPaolo Bonzini  fi
7013f4ede81eSAmarnath Valluri  # TPM emulator support?
7014f4ede81eSAmarnath Valluri  if test "$tpm_emulator" = "yes"; then
7015f4ede81eSAmarnath Valluri    echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
7016f4ede81eSAmarnath Valluri  fi
70173b8acc11SPaolo Bonzinifi
70183b8acc11SPaolo Bonzini
70195b808275SLluís Vilanovaecho "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
70205b808275SLluís Vilanovaif have_backend "nop"; then
70216d8a764eSLluís  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
702222890ab5SPrerna Saxenafi
70235b808275SLluís Vilanovaif have_backend "simple"; then
70246d8a764eSLluís  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
70256d8a764eSLluís  # Set the appropriate trace file.
7026953ffe0fSAndreas Färber  trace_file="\"$trace_file-\" FMT_pid"
70279410b56cSPrerna Saxenafi
7028ed7f5f1dSPaolo Bonziniif have_backend "log"; then
7029ed7f5f1dSPaolo Bonzini  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
70306d8a764eSLluísfi
70315b808275SLluís Vilanovaif have_backend "ust"; then
70326d8a764eSLluís  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
70336d8a764eSLluísfi
70345b808275SLluís Vilanovaif have_backend "dtrace"; then
70356d8a764eSLluís  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
70366d8a764eSLluís  if test "$trace_backend_stap" = "yes" ; then
70376d8a764eSLluís    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
70386d8a764eSLluís  fi
7039c276b17dSDaniel P. Berrangefi
70405b808275SLluís Vilanovaif have_backend "ftrace"; then
7041781e9545SEiichi Tsukata  if test "$linux" = "yes" ; then
7042781e9545SEiichi Tsukata    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7043781e9545SEiichi Tsukata  else
704421684af0SStewart Smith    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7045781e9545SEiichi Tsukata  fi
7046781e9545SEiichi Tsukatafi
70470a852417SPaul Durrantif have_backend "syslog"; then
70480a852417SPaul Durrant  if test "$posix_syslog" = "yes" ; then
70490a852417SPaul Durrant    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
70500a852417SPaul Durrant  else
70510a852417SPaul Durrant    feature_not_found "syslog(trace backend)" "syslog not available"
70520a852417SPaul Durrant  fi
70530a852417SPaul Durrantfi
70549410b56cSPrerna Saxenaecho "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
70559410b56cSPrerna Saxena
70562da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
70572da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
7058392fb643SFam Zheng  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
70592da776dbSMichael R. Hinesfi
70602da776dbSMichael R. Hines
706121ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then
706221ab34c9SMarcel Apfelbaum  echo "CONFIG_PVRDMA=y" >> $config_host_mak
706321ab34c9SMarcel Apfelbaumfi
706421ab34c9SMarcel Apfelbaum
7065575b22b1SLaurent Vivierif test "$have_rtnetlink" = "yes" ; then
7066575b22b1SLaurent Vivier  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7067575b22b1SLaurent Vivierfi
7068575b22b1SLaurent Vivier
7069ed279a06SKlim Kireevif test "$libxml2" = "yes" ; then
7070ed279a06SKlim Kireev  echo "CONFIG_LIBXML2=y" >> $config_host_mak
7071ed279a06SKlim Kireev  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7072ed279a06SKlim Kireev  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7073ed279a06SKlim Kireevfi
7074ed279a06SKlim Kireev
7075a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then
7076a6b1d4c0SChanglong Xie  echo "CONFIG_REPLICATION=y" >> $config_host_mak
7077a6b1d4c0SChanglong Xiefi
7078a6b1d4c0SChanglong Xie
70796a02c806SStefan Hajnocziif test "$have_af_vsock" = "yes" ; then
70806a02c806SStefan Hajnoczi  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
70816a02c806SStefan Hajnoczifi
70826a02c806SStefan Hajnoczi
70834d04351fSChristopher Covingtonif test "$have_sysmacros" = "yes" ; then
70844d04351fSChristopher Covington  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
70854d04351fSChristopher Covingtonfi
70864d04351fSChristopher Covington
708749e00a18SAndreas Grapentinif test "$have_static_assert" = "yes" ; then
708849e00a18SAndreas Grapentin  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
708949e00a18SAndreas Grapentinfi
709049e00a18SAndreas Grapentin
7091e674605fSTomáš Golembiovskýif test "$have_utmpx" = "yes" ; then
7092e674605fSTomáš Golembiovský  echo "HAVE_UTMPX=y" >> $config_host_mak
7093e674605fSTomáš Golembiovskýfi
7094e674605fSTomáš Golembiovský
7095e0580342SKamil Rytarowskiif test "$ivshmem" = "yes" ; then
7096e0580342SKamil Rytarowski  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7097e0580342SKamil Rytarowskifi
7098e219c499SRichard Hendersonif test "$capstone" != "no" ; then
70998ca80760SRichard Henderson  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
71008ca80760SRichard Hendersonfi
7101ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then
7102ba59fb77SPaolo Bonzini  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7103ba59fb77SPaolo Bonzinifi
7104e0580342SKamil Rytarowski
71055c312079SDr. David Alan Gilbert# Hold two types of flag:
71065c312079SDr. David Alan Gilbert#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
71075c312079SDr. David Alan Gilbert#                                     a thread we have a handle to
7108479a5747SRoman Bolshakov#   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
71095c312079SDr. David Alan Gilbert#                                     platform
7110479a5747SRoman Bolshakovif test "$pthread_setname_np_w_tid" = "yes" ; then
71115c312079SDr. David Alan Gilbert  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7112479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7113479a5747SRoman Bolshakovelif test "$pthread_setname_np_wo_tid" = "yes" ; then
7114479a5747SRoman Bolshakov  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7115479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
71165c312079SDr. David Alan Gilbertfi
71175c312079SDr. David Alan Gilbert
7118da92c3ffSAshish Mittalif test "$vxhs" = "yes" ; then
7119da92c3ffSAshish Mittal  echo "CONFIG_VXHS=y" >> $config_host_mak
7120da92c3ffSAshish Mittal  echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7121da92c3ffSAshish Mittalfi
7122da92c3ffSAshish Mittal
712317824406SJunyan Heif test "$libpmem" = "yes" ; then
712417824406SJunyan He  echo "CONFIG_LIBPMEM=y" >> $config_host_mak
712517824406SJunyan Hefi
712617824406SJunyan He
71272f740136SJeff Codyif test "$bochs" = "yes" ; then
71282f740136SJeff Cody  echo "CONFIG_BOCHS=y" >> $config_host_mak
71292f740136SJeff Codyfi
71302f740136SJeff Codyif test "$cloop" = "yes" ; then
71312f740136SJeff Cody  echo "CONFIG_CLOOP=y" >> $config_host_mak
71322f740136SJeff Codyfi
71332f740136SJeff Codyif test "$dmg" = "yes" ; then
71342f740136SJeff Cody  echo "CONFIG_DMG=y" >> $config_host_mak
71352f740136SJeff Codyfi
71362f740136SJeff Codyif test "$qcow1" = "yes" ; then
71372f740136SJeff Cody  echo "CONFIG_QCOW1=y" >> $config_host_mak
71382f740136SJeff Codyfi
71392f740136SJeff Codyif test "$vdi" = "yes" ; then
71402f740136SJeff Cody  echo "CONFIG_VDI=y" >> $config_host_mak
71412f740136SJeff Codyfi
71422f740136SJeff Codyif test "$vvfat" = "yes" ; then
71432f740136SJeff Cody  echo "CONFIG_VVFAT=y" >> $config_host_mak
71442f740136SJeff Codyfi
71452f740136SJeff Codyif test "$qed" = "yes" ; then
71462f740136SJeff Cody  echo "CONFIG_QED=y" >> $config_host_mak
71472f740136SJeff Codyfi
71482f740136SJeff Codyif test "$parallels" = "yes" ; then
71492f740136SJeff Cody  echo "CONFIG_PARALLELS=y" >> $config_host_mak
71502f740136SJeff Codyfi
71512f740136SJeff Codyif test "$sheepdog" = "yes" ; then
71522f740136SJeff Cody  echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
71532f740136SJeff Codyfi
71542f740136SJeff Cody
71555b5e3037SPaolo Bonziniif test "$tcg_interpreter" = "yes"; then
71569edc19c9SMichael S. Tsirkin  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
71575b5e3037SPaolo Bonzinielif test "$ARCH" = "sparc64" ; then
71589edc19c9SMichael S. Tsirkin  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
71595b5e3037SPaolo Bonzinielif test "$ARCH" = "s390x" ; then
71609edc19c9SMichael S. Tsirkin  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
7161e633a5c6SEric Blakeelif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
71629edc19c9SMichael S. Tsirkin  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
716340d964b5SRichard Hendersonelif test "$ARCH" = "ppc64" ; then
71649edc19c9SMichael S. Tsirkin  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7165e633a5c6SEric Blakeelif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7166c4f80543SAlistair Francis  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
71675b5e3037SPaolo Bonzinielse
71689edc19c9SMichael S. Tsirkin  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
71695b5e3037SPaolo Bonzinifi
71709edc19c9SMichael S. TsirkinQEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
71715b5e3037SPaolo Bonzini
717298ec69acSJuan Quintelaecho "TOOLS=$tools" >> $config_host_mak
717398ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
7174804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
7175804edf29SJuan Quintelaecho "INSTALL=$install" >> $config_host_mak
71761901cb14SBradecho "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
71771901cb14SBradecho "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
71781901cb14SBradecho "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
717921655882SPaolo Bonziniecho "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7180c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
7181755ee70fSCleber Rosaecho "PYTHON_VERSION=$python_version" >> $config_host_mak
7182804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
7183a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
7184a31a8642SMichael S. Tsirkin  echo "IASL=$iasl" >> $config_host_mak
7185a31a8642SMichael S. Tsirkinfi
7186804edf29SJuan Quintelaecho "HOST_CC=$host_cc" >> $config_host_mak
718783f73fceSTomoki Sekiyamaecho "CXX=$cxx" >> $config_host_mak
71883c4a4d0dSPeter Maydellecho "OBJCC=$objcc" >> $config_host_mak
7189804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
719045d285abSPeter Maydellecho "ARFLAGS=$ARFLAGS" >> $config_host_mak
7191cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak
71925f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak
71933dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
7194804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
7195804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
71969f81aeb5SAlistair Francisecho "RANLIB=$ranlib" >> $config_host_mak
71974852ee95SStefan Weilecho "NM=$nm" >> $config_host_mak
71989fe6de94SBlue Swirlecho "WINDRES=$windres" >> $config_host_mak
7199e2a2ed06SJuan Quintelaecho "CFLAGS=$CFLAGS" >> $config_host_mak
720046eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7201a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
720211cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7203f9728943SPaolo Bonziniecho "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7204e39f0062SPaolo Bonziniif test "$sparse" = "yes" ; then
7205e39f0062SPaolo Bonzini  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
720680fd48dfSChristian Borntraeger  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
72072944d742SGerd Hoffmann  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
7208e39f0062SPaolo Bonzini  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
7209e39f0062SPaolo Bonzini  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7210e39f0062SPaolo Bonzinifi
721142da6041SGerd Hoffmannif test "$cross_prefix" != ""; then
721242da6041SGerd Hoffmann  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
721342da6041SGerd Hoffmannelse
721442da6041SGerd Hoffmann  echo "AUTOCONF_HOST := "                             >> $config_host_mak
721542da6041SGerd Hoffmannfi
7216e2a2ed06SJuan Quintelaecho "LDFLAGS=$LDFLAGS" >> $config_host_mak
721746eef33bSBradecho "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
72188a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
72196969ec6cSJames Clarkeecho "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7220e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
722173da375eSJuan Quintelaecho "LIBS+=$LIBS" >> $config_host_mak
72223e2e0e6bSJuan Quintelaecho "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7223409437e1SDaniel P. Berrangeecho "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7224804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
722517969268SFam Zhengecho "DSOSUF=$DSOSUF" >> $config_host_mak
722617969268SFam Zhengecho "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7227957f1f99SMichael Rothecho "LIBS_QGA+=$libs_qga" >> $config_host_mak
722890246037SDaniel P. Berrangeecho "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
722990246037SDaniel P. Berrangeecho "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
723094dd53c5SGerd Hoffmannecho "POD2MAN=$POD2MAN" >> $config_host_mak
72311d728c39SBlue Swirlif test "$gcov" = "yes" ; then
72321d728c39SBlue Swirl  echo "CONFIG_GCOV=y" >> $config_host_mak
72331d728c39SBlue Swirl  echo "GCOV=$gcov_tool" >> $config_host_mak
72341d728c39SBlue Swirlfi
7235804edf29SJuan Quintela
723651a12b51SAlex Bennéeif test "$docker" != "no"; then
723751a12b51SAlex Bennée    echo "HAVE_USER_DOCKER=y" >> $config_host_mak
723851a12b51SAlex Bennéefi
723951a12b51SAlex Bennée
72403efac6ebSTomáš Golembiovskýif test "$libudev" != "no"; then
72413efac6ebSTomáš Golembiovský    echo "CONFIG_LIBUDEV=y" >> $config_host_mak
72423efac6ebSTomáš Golembiovský    echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
72433efac6ebSTomáš Golembiovskýfi
72443efac6ebSTomáš Golembiovský
72456efd7517SPeter Maydell# use included Linux headers
72466efd7517SPeter Maydellif test "$linux" = "yes" ; then
7247a307beb6SAndreas Färber  mkdir -p linux-headers
72486efd7517SPeter Maydell  case "$cpu" in
7249c72b26ecSRichard Henderson  i386|x86_64|x32)
725008312a63SPeter Maydell    linux_arch=x86
72516efd7517SPeter Maydell    ;;
7252a69dc537SThomas Huth  ppc|ppc64)
725308312a63SPeter Maydell    linux_arch=powerpc
72546efd7517SPeter Maydell    ;;
72556efd7517SPeter Maydell  s390x)
725608312a63SPeter Maydell    linux_arch=s390
725708312a63SPeter Maydell    ;;
72581f080313SClaudio Fontana  aarch64)
72591f080313SClaudio Fontana    linux_arch=arm64
72601f080313SClaudio Fontana    ;;
7261222e7d11SSanjay Lal  mips64)
7262222e7d11SSanjay Lal    linux_arch=mips
7263222e7d11SSanjay Lal    ;;
726408312a63SPeter Maydell  *)
726508312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
726608312a63SPeter Maydell    linux_arch="$cpu"
72676efd7517SPeter Maydell    ;;
72686efd7517SPeter Maydell  esac
726908312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
727008312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
727108312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
727208312a63SPeter Maydell    fi
72736efd7517SPeter Maydellfi
72746efd7517SPeter Maydell
727597a847bcSbellardfor target in $target_list; do
727697a847bcSbellardtarget_dir="$target"
727725be210fSJuan Quintelaconfig_target_mak=$target_dir/config-target.mak
727889138857SStefan Weiltarget_name=$(echo $target | cut -d '-' -f 1)
727997a847bcSbellardtarget_bigendian="no"
72801f3d3c8fSJuan Quintela
7281c1799a84SPaolo Bonzinicase "$target_name" in
7282a69dc537SThomas Huth  armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7283ea2d6a39SJuan Quintela  target_bigendian=yes
7284ea2d6a39SJuan Quintela  ;;
7285ea2d6a39SJuan Quintelaesac
728697a847bcSbellardtarget_softmmu="no"
7287997344f3Sbellardtarget_user_only="no"
7288831b7825Sthstarget_linux_user="no"
728984778508Sblueswir1target_bsd_user="no"
72909e407a85Spbrookcase "$target" in
7291c1799a84SPaolo Bonzini  ${target_name}-softmmu)
72929e407a85Spbrook    target_softmmu="yes"
72939e407a85Spbrook    ;;
7294c1799a84SPaolo Bonzini  ${target_name}-linux-user)
72959e407a85Spbrook    target_user_only="yes"
72969e407a85Spbrook    target_linux_user="yes"
72979e407a85Spbrook    ;;
7298c1799a84SPaolo Bonzini  ${target_name}-bsd-user)
729984778508Sblueswir1    target_user_only="yes"
730084778508Sblueswir1    target_bsd_user="yes"
730184778508Sblueswir1    ;;
73029e407a85Spbrook  *)
730376ad07a4SPeter Maydell    error_exit "Target '$target' not recognised"
73049e407a85Spbrook    exit 1
73059e407a85Spbrook    ;;
73069e407a85Spbrookesac
7307831b7825Sths
7308d75402b5SAlex Bennéetarget_compiler=""
7309d75402b5SAlex Bennéetarget_compiler_static=""
7310716a507cSAlex Bennéetarget_compiler_cflags=""
7311d75402b5SAlex Bennée
731297a847bcSbellardmkdir -p $target_dir
731325be210fSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_target_mak
731497a847bcSbellard
7315e5fe0c52Spbrookbflt="no"
7316ca759f9eSAlex Bennéemttcg="no"
731789138857SStefan Weilinterp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
731856aebc89Spbrookgdb_xml_files=""
73197ba1e619Saliguori
7320c1799a84SPaolo BonziniTARGET_ARCH="$target_name"
73216acff7daSJuan QuintelaTARGET_BASE_ARCH=""
7322e6e91b9cSJuan QuintelaTARGET_ABI_DIR=""
7323e73aae67SJuan Quintela
7324c1799a84SPaolo Bonzinicase "$target_name" in
73252408a527Saurel32  i386)
73260a7fa00aSEmilio G. Cota    mttcg="yes"
73277b0f97baSDoug Gale	gdb_xml_files="i386-32bit.xml"
7328d75402b5SAlex Bennée    target_compiler=$cross_cc_i386
7329716a507cSAlex Bennée    target_compiler_cflags=$cross_cc_ccflags_i386
73302408a527Saurel32  ;;
73312408a527Saurel32  x86_64)
73326acff7daSJuan Quintela    TARGET_BASE_ARCH=i386
73330a7fa00aSEmilio G. Cota    mttcg="yes"
73347b0f97baSDoug Gale	gdb_xml_files="i386-64bit.xml"
7335d75402b5SAlex Bennée    target_compiler=$cross_cc_x86_64
73362408a527Saurel32  ;;
73372408a527Saurel32  alpha)
73385ee4f3c2SRichard Henderson    mttcg="yes"
7339d75402b5SAlex Bennée    target_compiler=$cross_cc_alpha
73402408a527Saurel32  ;;
73412408a527Saurel32  arm|armeb)
7342b498c8a0SJuan Quintela    TARGET_ARCH=arm
7343e5fe0c52Spbrook    bflt="yes"
7344ca759f9eSAlex Bennée    mttcg="yes"
734556aebc89Spbrook    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7346d75402b5SAlex Bennée    target_compiler=$cross_cc_arm
7347d422b2bcSAlex Bennée    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
73482408a527Saurel32  ;;
7349722dd7beSMichael Weiser  aarch64|aarch64_be)
7350722dd7beSMichael Weiser    TARGET_ARCH=aarch64
73516a49fa95SAlexander Graf    TARGET_BASE_ARCH=arm
73526a49fa95SAlexander Graf    bflt="yes"
7353ca759f9eSAlex Bennée    mttcg="yes"
73548f95ce2eSPeter Maydell    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7355d75402b5SAlex Bennée    target_compiler=$cross_cc_aarch64
7356d422b2bcSAlex Bennée    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
73576a49fa95SAlexander Graf  ;;
73582408a527Saurel32  cris)
7359d75402b5SAlex Bennée    target_compiler=$cross_cc_cris
73602408a527Saurel32  ;;
736161766fe9SRichard Henderson  hppa)
73627b93dab5SRichard Henderson    mttcg="yes"
7363d75402b5SAlex Bennée    target_compiler=$cross_cc_hppa
736461766fe9SRichard Henderson  ;;
7365613a22c9SMichael Walle  lm32)
7366d75402b5SAlex Bennée    target_compiler=$cross_cc_lm32
7367613a22c9SMichael Walle  ;;
73682408a527Saurel32  m68k)
73690938cda5Saurel32    bflt="yes"
73705a4526b2SLaurent Vivier    gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7371d75402b5SAlex Bennée    target_compiler=$cross_cc_m68k
73722408a527Saurel32  ;;
7373877fdc12SEdgar E. Iglesias  microblaze|microblazeel)
7374877fdc12SEdgar E. Iglesias    TARGET_ARCH=microblaze
737572b675caSEdgar E. Iglesias    bflt="yes"
7376be73ef64SEdgar E. Iglesias    echo "TARGET_ABI32=y" >> $config_target_mak
7377d75402b5SAlex Bennée    target_compiler=$cross_cc_microblaze
737872b675caSEdgar E. Iglesias  ;;
73792408a527Saurel32  mips|mipsel)
73800454728cSAleksandar Markovic    mttcg="yes"
7381b498c8a0SJuan Quintela    TARGET_ARCH=mips
7382d75402b5SAlex Bennée    target_compiler=$cross_cc_mips
738325be210fSJuan Quintela    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
73842408a527Saurel32  ;;
73852408a527Saurel32  mipsn32|mipsn32el)
73860454728cSAleksandar Markovic    mttcg="yes"
7387597e2cecSRichard Henderson    TARGET_ARCH=mips64
73886acff7daSJuan Quintela    TARGET_BASE_ARCH=mips
7389d75402b5SAlex Bennée    target_compiler=$cross_cc_mipsn32
739025be210fSJuan Quintela    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7391597e2cecSRichard Henderson    echo "TARGET_ABI32=y" >> $config_target_mak
73922408a527Saurel32  ;;
73932408a527Saurel32  mips64|mips64el)
73940454728cSAleksandar Markovic    mttcg="yes"
7395b498c8a0SJuan Quintela    TARGET_ARCH=mips64
73966acff7daSJuan Quintela    TARGET_BASE_ARCH=mips
7397d75402b5SAlex Bennée    target_compiler=$cross_cc_mips64
739825be210fSJuan Quintela    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
73992408a527Saurel32  ;;
7400d15a9c23SAnthony Green  moxie)
7401d75402b5SAlex Bennée    target_compiler=$cross_cc_moxie
7402d15a9c23SAnthony Green  ;;
7403e671711cSMarek Vasut  nios2)
7404d75402b5SAlex Bennée    target_compiler=$cross_cc_nios2
7405e671711cSMarek Vasut  ;;
74064a09d0bbSRichard Henderson  or1k)
7407d75402b5SAlex Bennée    target_compiler=$cross_cc_or1k
7408e67db06eSJia Liu    TARGET_ARCH=openrisc
7409e67db06eSJia Liu    TARGET_BASE_ARCH=openrisc
7410e67db06eSJia Liu  ;;
74112408a527Saurel32  ppc)
7412c8b3532dSaurel32    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7413d75402b5SAlex Bennée    target_compiler=$cross_cc_powerpc
74142408a527Saurel32  ;;
74152408a527Saurel32  ppc64)
74166acff7daSJuan Quintela    TARGET_BASE_ARCH=ppc
7417e6e91b9cSJuan Quintela    TARGET_ABI_DIR=ppc
7418f0b0685dSNikunj A Dadhania    mttcg=yes
74191438eff3SAnton Blanchard    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7420d75402b5SAlex Bennée    target_compiler=$cross_cc_ppc64
74212408a527Saurel32  ;;
74229c35126cSDoug Kwan  ppc64le)
74239c35126cSDoug Kwan    TARGET_ARCH=ppc64
74249c35126cSDoug Kwan    TARGET_BASE_ARCH=ppc
74259c35126cSDoug Kwan    TARGET_ABI_DIR=ppc
7426f0b0685dSNikunj A Dadhania    mttcg=yes
74271438eff3SAnton Blanchard    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7428d75402b5SAlex Bennée    target_compiler=$cross_cc_ppc64le
74299c35126cSDoug Kwan  ;;
74302408a527Saurel32  ppc64abi32)
7431b498c8a0SJuan Quintela    TARGET_ARCH=ppc64
74326acff7daSJuan Quintela    TARGET_BASE_ARCH=ppc
7433e6e91b9cSJuan Quintela    TARGET_ABI_DIR=ppc
743425be210fSJuan Quintela    echo "TARGET_ABI32=y" >> $config_target_mak
74351438eff3SAnton Blanchard    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7436d75402b5SAlex Bennée    target_compiler=$cross_cc_ppc64abi32
74372408a527Saurel32  ;;
743825fa194bSMichael Clark  riscv32)
743925fa194bSMichael Clark    TARGET_BASE_ARCH=riscv
744025fa194bSMichael Clark    TARGET_ABI_DIR=riscv
744125fa194bSMichael Clark    mttcg=yes
7442d75402b5SAlex Bennée    target_compiler=$cross_cc_riscv32
744325fa194bSMichael Clark  ;;
744425fa194bSMichael Clark  riscv64)
744525fa194bSMichael Clark    TARGET_BASE_ARCH=riscv
744625fa194bSMichael Clark    TARGET_ABI_DIR=riscv
744725fa194bSMichael Clark    mttcg=yes
7448d75402b5SAlex Bennée    target_compiler=$cross_cc_riscv64
744925fa194bSMichael Clark  ;;
74502408a527Saurel32  sh4|sh4eb)
7451b498c8a0SJuan Quintela    TARGET_ARCH=sh4
74524dbed897Spbrook    bflt="yes"
7453d75402b5SAlex Bennée    target_compiler=$cross_cc_sh4
74542408a527Saurel32  ;;
74552408a527Saurel32  sparc)
7456d75402b5SAlex Bennée    target_compiler=$cross_cc_sparc
74572408a527Saurel32  ;;
74582408a527Saurel32  sparc64)
74596acff7daSJuan Quintela    TARGET_BASE_ARCH=sparc
7460d75402b5SAlex Bennée    target_compiler=$cross_cc_sparc64
74612408a527Saurel32  ;;
74622408a527Saurel32  sparc32plus)
7463b498c8a0SJuan Quintela    TARGET_ARCH=sparc64
74646acff7daSJuan Quintela    TARGET_BASE_ARCH=sparc
7465e6e91b9cSJuan Quintela    TARGET_ABI_DIR=sparc
7466d75402b5SAlex Bennée    target_compiler=$cross_cc_sparc32plus
746725be210fSJuan Quintela    echo "TARGET_ABI32=y" >> $config_target_mak
74682408a527Saurel32  ;;
746924e804ecSAlexander Graf  s390x)
747063685bc4SDavid Hildenbrand    mttcg=yes
747186158a2aSChristian 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"
7472d75402b5SAlex Bennée    target_compiler=$cross_cc_s390x
747324e804ecSAlexander Graf  ;;
7474444e06b1SChen Gang  tilegx)
7475d75402b5SAlex Bennée    target_compiler=$cross_cc_tilegx
7476444e06b1SChen Gang  ;;
74775ecaa4edSPeter Crosthwaite  tricore)
7478d75402b5SAlex Bennée    target_compiler=$cross_cc_tricore
74795ecaa4edSPeter Crosthwaite  ;;
7480d2fbca94SGuan Xuetao  unicore32)
7481d75402b5SAlex Bennée    target_compiler=$cross_cc_unicore32
7482d2fbca94SGuan Xuetao  ;;
7483cfa550c6SMax Filippov  xtensa|xtensaeb)
7484cfa550c6SMax Filippov    TARGET_ARCH=xtensa
748502e33e9fSMax Filippov    bflt="yes"
74869fb40342SMax Filippov    mttcg="yes"
7487d75402b5SAlex Bennée    target_compiler=$cross_cc_xtensa
7488cfa550c6SMax Filippov  ;;
74892408a527Saurel32  *)
749076ad07a4SPeter Maydell    error_exit "Unsupported target CPU"
74912408a527Saurel32  ;;
74922408a527Saurel32esac
74935e8861a0SPaolo Bonzini# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
74945e8861a0SPaolo Bonziniif [ "$TARGET_BASE_ARCH" = "" ]; then
74955e8861a0SPaolo Bonzini  TARGET_BASE_ARCH=$TARGET_ARCH
74965e8861a0SPaolo Bonzinifi
74975e8861a0SPaolo Bonzini
7498d75402b5SAlex Bennée# Do we have a cross compiler for this target?
7499d75402b5SAlex Bennéeif has $target_compiler; then
7500d75402b5SAlex Bennée
7501d75402b5SAlex Bennée    write_c_skeleton
7502d75402b5SAlex Bennée
7503716a507cSAlex Bennée    if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7504d75402b5SAlex Bennée        # For host systems we might get away with building without -static
7505716a507cSAlex Bennée        if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7506d75402b5SAlex Bennée            target_compiler=""
7507d75402b5SAlex Bennée        else
7508d75402b5SAlex Bennée            enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7509d75402b5SAlex Bennée            target_compiler_static="n"
7510d75402b5SAlex Bennée        fi
7511d75402b5SAlex Bennée    else
7512d75402b5SAlex Bennée        enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7513d75402b5SAlex Bennée        target_compiler_static="y"
7514d75402b5SAlex Bennée    fi
7515d75402b5SAlex Bennéeelse
7516d75402b5SAlex Bennée    target_compiler=""
7517d75402b5SAlex Bennéefi
7518d75402b5SAlex Bennée
75195e8861a0SPaolo Bonzinisymlink "$source_path/Makefile.target" "$target_dir/Makefile"
75205e8861a0SPaolo Bonzini
752199afc91dSDaniel P. Berrangeupper() {
752299afc91dSDaniel P. Berrange    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
752399afc91dSDaniel P. Berrange}
752499afc91dSDaniel P. Berrange
752589138857SStefan Weiltarget_arch_name="$(upper $TARGET_ARCH)"
752625be210fSJuan Quintelaecho "TARGET_$target_arch_name=y" >> $config_target_mak
7527c1799a84SPaolo Bonziniecho "TARGET_NAME=$target_name" >> $config_target_mak
752825be210fSJuan Quintelaecho "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7529e6e91b9cSJuan Quintelaif [ "$TARGET_ABI_DIR" = "" ]; then
7530e6e91b9cSJuan Quintela  TARGET_ABI_DIR=$TARGET_ARCH
7531e6e91b9cSJuan Quintelafi
753225be210fSJuan Quintelaecho "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7533adfc3e91SStacey Sonif [ "$HOST_VARIANT_DIR" != "" ]; then
7534adfc3e91SStacey Son    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7535adfc3e91SStacey Sonfi
75363b6b7550SPaolo Bonzini
75373b6b7550SPaolo Bonziniif supported_xen_target $target; then
753825be210fSJuan Quintela    echo "CONFIG_XEN=y" >> $config_target_mak
7539e0e312f3SPaolo Bonzini    echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
7540eb6fda0fSAnthony PERARD    if test "$xen_pci_passthrough" = yes; then
7541eb6fda0fSAnthony PERARD        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7542eb6fda0fSAnthony PERARD    fi
7543e0e312f3SPaolo Bonzinielse
7544e0e312f3SPaolo Bonzini    echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
7545432d268cSJun Nakajimafi
75463b6b7550SPaolo Bonziniif supported_kvm_target $target; then
754725be210fSJuan Quintela    echo "CONFIG_KVM=y" >> $config_target_mak
7548e0e312f3SPaolo Bonzini    echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7549e0e312f3SPaolo Bonzinielse
7550e0e312f3SPaolo Bonzini    echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
7551c59249f9SJuan Quintelafi
75523b6b7550SPaolo Bonziniif supported_hax_target $target; then
7553b0cb0a66SVincent Palatin    echo "CONFIG_HAX=y" >> $config_target_mak
7554b0cb0a66SVincent Palatinfi
7555c97d6d2cSSergio Andres Gomez Del Realif supported_hvf_target $target; then
7556c97d6d2cSSergio Andres Gomez Del Real    echo "CONFIG_HVF=y" >> $config_target_mak
7557c97d6d2cSSergio Andres Gomez Del Realfi
7558d661d9a4SJustin Terry (VM)if supported_whpx_target $target; then
7559d661d9a4SJustin Terry (VM)    echo "CONFIG_WHPX=y" >> $config_target_mak
7560d661d9a4SJustin Terry (VM)fi
7561de83cd02Sbellardif test "$target_bigendian" = "yes" ; then
756225be210fSJuan Quintela  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
756397a847bcSbellardfi
756497a847bcSbellardif test "$target_softmmu" = "yes" ; then
756525be210fSJuan Quintela  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7566ca759f9eSAlex Bennée  if test "$mttcg" = "yes" ; then
7567ca759f9eSAlex Bennée    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7568ca759f9eSAlex Bennée  fi
7569de83cd02Sbellardfi
7570997344f3Sbellardif test "$target_user_only" = "yes" ; then
757125be210fSJuan Quintela  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7572a2c80be9SStefan Weil  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7573997344f3Sbellardfi
7574831b7825Sthsif test "$target_linux_user" = "yes" ; then
757525be210fSJuan Quintela  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7576831b7825Sthsfi
757756aebc89Spbrooklist=""
757856aebc89Spbrookif test ! -z "$gdb_xml_files" ; then
757956aebc89Spbrook  for x in $gdb_xml_files; do
758056aebc89Spbrook    list="$list $source_path/gdb-xml/$x"
758156aebc89Spbrook  done
758225be210fSJuan Quintela  echo "TARGET_XML_FILES=$list" >> $config_target_mak
75833d0f1517SJuan Quintelafi
7584de83cd02Sbellard
7585e633a5c6SEric Blakeif test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
758625be210fSJuan Quintela  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7587e5fe0c52Spbrookfi
758884778508Sblueswir1if test "$target_bsd_user" = "yes" ; then
758925be210fSJuan Quintela  echo "CONFIG_BSD_USER=y" >> $config_target_mak
759084778508Sblueswir1fi
75915b0753e0Sbellard
7592d75402b5SAlex Bennéeif test -n "$target_compiler"; then
7593d75402b5SAlex Bennée  echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7594d75402b5SAlex Bennée
7595d75402b5SAlex Bennée  if test -n "$target_compiler_static"; then
7596d75402b5SAlex Bennée      echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7597d75402b5SAlex Bennée  fi
7598716a507cSAlex Bennée
7599716a507cSAlex Bennée  if test -n "$target_compiler_cflags"; then
7600716a507cSAlex Bennée      echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7601d75402b5SAlex Bennée  fi
7602716a507cSAlex Bennéefi
7603716a507cSAlex Bennée
7604d75402b5SAlex Bennée
76054afddb55SJuan Quintela# generate QEMU_CFLAGS/LDFLAGS for targets
7606fa282484SJuan Quintela
76074afddb55SJuan Quintelacflags=""
7608fa282484SJuan Quintelaldflags=""
76099b8e111fSJuan Quintela
7610c765fcacSPeter Crosthwaitedisas_config() {
7611c765fcacSPeter Crosthwaite  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7612c765fcacSPeter Crosthwaite  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7613c765fcacSPeter Crosthwaite}
7614c765fcacSPeter Crosthwaite
761564656024SJuan Quintelafor i in $ARCH $TARGET_BASE_ARCH ; do
761664656024SJuan Quintela  case "$i" in
761764656024SJuan Quintela  alpha)
7618c765fcacSPeter Crosthwaite    disas_config "ALPHA"
761964656024SJuan Quintela  ;;
762082295d8aSRichard Henderson  aarch64)
762182295d8aSRichard Henderson    if test -n "${cxx}"; then
7622c765fcacSPeter Crosthwaite      disas_config "ARM_A64"
762382295d8aSRichard Henderson    fi
762482295d8aSRichard Henderson  ;;
762564656024SJuan Quintela  arm)
7626c765fcacSPeter Crosthwaite    disas_config "ARM"
7627999b53ecSClaudio Fontana    if test -n "${cxx}"; then
7628c765fcacSPeter Crosthwaite      disas_config "ARM_A64"
7629999b53ecSClaudio Fontana    fi
763064656024SJuan Quintela  ;;
763164656024SJuan Quintela  cris)
7632c765fcacSPeter Crosthwaite    disas_config "CRIS"
763364656024SJuan Quintela  ;;
7634429b31a2SRichard Henderson  hppa)
7635429b31a2SRichard Henderson    disas_config "HPPA"
7636429b31a2SRichard Henderson  ;;
7637c72b26ecSRichard Henderson  i386|x86_64|x32)
7638c765fcacSPeter Crosthwaite    disas_config "I386"
763964656024SJuan Quintela  ;;
764079368f49SMichael Walle  lm32)
7641c765fcacSPeter Crosthwaite    disas_config "LM32"
764279368f49SMichael Walle  ;;
764364656024SJuan Quintela  m68k)
7644c765fcacSPeter Crosthwaite    disas_config "M68K"
764564656024SJuan Quintela  ;;
7646877fdc12SEdgar E. Iglesias  microblaze*)
7647c765fcacSPeter Crosthwaite    disas_config "MICROBLAZE"
764864656024SJuan Quintela  ;;
764964656024SJuan Quintela  mips*)
7650c765fcacSPeter Crosthwaite    disas_config "MIPS"
765189a955e8SAleksandar Markovic    if test -n "${cxx}"; then
765289a955e8SAleksandar Markovic      disas_config "NANOMIPS"
765389a955e8SAleksandar Markovic    fi
765464656024SJuan Quintela  ;;
7655d15a9c23SAnthony Green  moxie*)
7656c765fcacSPeter Crosthwaite    disas_config "MOXIE"
7657d15a9c23SAnthony Green  ;;
7658e671711cSMarek Vasut  nios2)
7659e671711cSMarek Vasut    disas_config "NIOS2"
7660e671711cSMarek Vasut  ;;
76614a09d0bbSRichard Henderson  or1k)
7662c765fcacSPeter Crosthwaite    disas_config "OPENRISC"
7663e67db06eSJia Liu  ;;
766464656024SJuan Quintela  ppc*)
7665c765fcacSPeter Crosthwaite    disas_config "PPC"
766664656024SJuan Quintela  ;;
7667c4f80543SAlistair Francis  riscv*)
766825fa194bSMichael Clark    disas_config "RISCV"
766925fa194bSMichael Clark  ;;
767024e804ecSAlexander Graf  s390*)
7671c765fcacSPeter Crosthwaite    disas_config "S390"
767264656024SJuan Quintela  ;;
767364656024SJuan Quintela  sh4)
7674c765fcacSPeter Crosthwaite    disas_config "SH4"
767564656024SJuan Quintela  ;;
767664656024SJuan Quintela  sparc*)
7677c765fcacSPeter Crosthwaite    disas_config "SPARC"
767864656024SJuan Quintela  ;;
7679cfa550c6SMax Filippov  xtensa*)
7680c765fcacSPeter Crosthwaite    disas_config "XTENSA"
7681cfa550c6SMax Filippov  ;;
768264656024SJuan Quintela  esac
768364656024SJuan Quinteladone
76849195b2c2SStefan Weilif test "$tcg_interpreter" = "yes" ; then
7685c765fcacSPeter Crosthwaite  disas_config "TCI"
76869195b2c2SStefan Weilfi
768764656024SJuan Quintela
76886ee7126fSJuan Quintelacase "$ARCH" in
76896ee7126fSJuan Quintelaalpha)
76906ee7126fSJuan Quintela  # Ensure there's only a single GP
76916ee7126fSJuan Quintela  cflags="-msmall-data $cflags"
76926ee7126fSJuan Quintela;;
76936ee7126fSJuan Quintelaesac
76946ee7126fSJuan Quintela
7695d02c1db3SJuan Quintelaif test "$gprof" = "yes" ; then
76960acf7dedSPhilippe Mathieu-Daudé  echo "TARGET_GPROF=y" >> $config_target_mak
7697d02c1db3SJuan Quintela  if test "$target_linux_user" = "yes" ; then
7698d02c1db3SJuan Quintela    cflags="-p $cflags"
7699d02c1db3SJuan Quintela    ldflags="-p $ldflags"
7700d02c1db3SJuan Quintela  fi
7701d02c1db3SJuan Quintela  if test "$target_softmmu" = "yes" ; then
7702d02c1db3SJuan Quintela    ldflags="-p $ldflags"
770325be210fSJuan Quintela    echo "GPROF_CFLAGS=-p" >> $config_target_mak
7704d02c1db3SJuan Quintela  fi
7705d02c1db3SJuan Quintelafi
7706d02c1db3SJuan Quintela
7707e633a5c6SEric Blakeif test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
7708964c6fa1SRichard Henderson  ldflags="$ldflags $textseg_ldflags"
7709fa282484SJuan Quintelafi
7710fa282484SJuan Quintela
7711e9a3591fSChristian Borntraeger# Newer kernels on s390 check for an S390_PGSTE program header and
7712e9a3591fSChristian Borntraeger# enable the pgste page table extensions in that case. This makes
7713e9a3591fSChristian Borntraeger# the vm.allocate_pgste sysctl unnecessary. We enable this program
7714e9a3591fSChristian Borntraeger# header if
7715e9a3591fSChristian Borntraeger#  - we build on s390x
7716e9a3591fSChristian Borntraeger#  - we build the system emulation for s390x (qemu-system-s390x)
7717e9a3591fSChristian Borntraeger#  - KVM is enabled
7718e9a3591fSChristian Borntraeger#  - the linker supports --s390-pgste
7719e633a5c6SEric Blakeif test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7720e633a5c6SEric Blake        test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
7721e9a3591fSChristian Borntraeger    if ld_has --s390-pgste ; then
7722e9a3591fSChristian Borntraeger        ldflags="-Wl,--s390-pgste $ldflags"
7723e9a3591fSChristian Borntraeger    fi
7724e9a3591fSChristian Borntraegerfi
7725e9a3591fSChristian Borntraeger
772625be210fSJuan Quintelaecho "LDFLAGS+=$ldflags" >> $config_target_mak
772725be210fSJuan Quintelaecho "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7728fa282484SJuan Quintela
772997a847bcSbellarddone # for target in $targets
77307d13299dSbellard
7731d75402b5SAlex Bennéeif test -n "$enabled_cross_compilers"; then
7732d75402b5SAlex Bennée    echo
7733d75402b5SAlex Bennée    echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7734d75402b5SAlex Bennéefi
7735d75402b5SAlex Bennée
7736e3971d61SPhilippe Mathieu-Daudéif [ "$fdt" = "git" ]; then
7737a540f158SPeter Crosthwaite  echo "config-host.h: subdir-dtc" >> $config_host_mak
7738a540f158SPeter Crosthwaitefi
7739e219c499SRichard Hendersonif [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7740e219c499SRichard Henderson  echo "config-host.h: subdir-capstone" >> $config_host_mak
7741e219c499SRichard Hendersonfi
7742e219c499SRichard Hendersonif test -n "$LIBCAPSTONE"; then
7743e219c499SRichard Henderson  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7744e219c499SRichard Hendersonfi
7745a540f158SPeter Crosthwaite
7746a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
7747a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
7748a99d57bbSWanlong Gaofi
7749a99d57bbSWanlong Gao
7750fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
7751fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
7752fd0e6053SJohn Snowfi
7753fd0e6053SJohn Snow
7754e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now.
7755e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree;
7756e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree
7757e29e5c6eSPeter Maydell# (these can be both files and directories).
7758e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This
7759e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is
7760e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun
7761e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and
7762e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own
7763e29e5c6eSPeter Maydell# directory and symlink the directory instead.
7764b1fb9a63SFam ZhengDIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7765fc281c80SEmanuele Giuseppe EspositoDIRS="$DIRS tests/fp tests/qgraph"
7766b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi"
77679933c305SChristian BorntraegerDIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
77682d9f27d2SAnthony LiguoriDIRS="$DIRS roms/seabios roms/vgabios"
7769fe07b62cSPhilippe Mathieu-DaudéLINKS="Makefile tests/tcg/Makefile"
7770e29e5c6eSPeter MaydellLINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7771e29e5c6eSPeter MaydellLINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7772e29e5c6eSPeter MaydellLINKS="$LINKS tests/fp/Makefile"
7773e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7774e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7775e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile"
7776e29e5c6eSPeter MaydellLINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7777e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp"
7778e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
777939950353SPeter MaydellLINKS="$LINKS tests/acceptance tests/data"
778039950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check"
77818f8fd9edSCleber RosaLINKS="$LINKS python"
7782753d11f2SRichard Hendersonfor bios_file in \
7783753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
7784225a9ab8SAlexey Kardashevskiy    $source_path/pc-bios/*.lid \
77855acc2ec0SGerd Hoffmann    $source_path/pc-bios/*.aml \
7786753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
7787753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
7788e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
7789753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
77904e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
7791753d11f2SRichard Henderson    $source_path/pc-bios/palcode-*
7792753d11f2SRichard Hendersondo
7793e29e5c6eSPeter Maydell    LINKS="$LINKS pc-bios/$(basename $bios_file)"
77947ea78b74SJan Kiszkadone
7795d1807a4fSPaolo Bonzinimkdir -p $DIRS
7796e29e5c6eSPeter Maydellfor f in $LINKS ; do
7797cab00a5aSMichael S. Tsirkin    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7798f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
7799f9245e10SPeter Maydell    fi
78007d13299dSbellarddone
78011ad2134fSPaul Brook
7802c34ebfdcSAnthony Liguori# temporary config to build submodules
78032d9f27d2SAnthony Liguorifor rom in seabios vgabios ; do
7804c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
780537116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
7806c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7807cdbd727cSRichard Henderson    echo "AS=$as" >> $config_mak
78085f6f0e27SRichard Henderson    echo "CCAS=$ccas" >> $config_mak
7809c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
7810c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
78113dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
7812c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
7813a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
7814c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
78159f81aeb5SAlistair Francis    echo "RANLIB=$ranlib" >> $config_mak
7816c34ebfdcSAnthony Liguoridone
7817c34ebfdcSAnthony Liguori
781876c7560aSMax Reitz# set up qemu-iotests in this build directory
781976c7560aSMax Reitziotests_common_env="tests/qemu-iotests/common.env"
782076c7560aSMax Reitz
782176c7560aSMax Reitzecho "# Automatically generated by configure - do not modify" > "$iotests_common_env"
782276c7560aSMax Reitzecho >> "$iotests_common_env"
782376c7560aSMax Reitzecho "export PYTHON='$python'" >> "$iotests_common_env"
782476c7560aSMax Reitz
7825dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
7826dc655404SMichael S. Tsirkincat <<EOD >config.status
7827dc655404SMichael S. Tsirkin#!/bin/sh
7828dc655404SMichael S. Tsirkin# Generated by configure.
7829dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
7830dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
7831dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
7832dc655404SMichael S. TsirkinEOD
7833e811da7fSDaniel P. Berrangé
7834e811da7fSDaniel P. Berrangépreserve_env() {
7835e811da7fSDaniel P. Berrangé    envname=$1
7836e811da7fSDaniel P. Berrangé
7837e811da7fSDaniel P. Berrangé    eval envval=\$$envname
7838e811da7fSDaniel P. Berrangé
7839e811da7fSDaniel P. Berrangé    if test -n "$envval"
7840e811da7fSDaniel P. Berrangé    then
7841e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
7842e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
7843e811da7fSDaniel P. Berrangé    else
7844e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
7845e811da7fSDaniel P. Berrangé    fi
7846e811da7fSDaniel P. Berrangé}
7847e811da7fSDaniel P. Berrangé
7848e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
7849e811da7fSDaniel P. Berrangé# features/build target configure will detect
7850e811da7fSDaniel P. Berrangépreserve_env AR
7851e811da7fSDaniel P. Berrangépreserve_env AS
7852e811da7fSDaniel P. Berrangépreserve_env CC
7853e811da7fSDaniel P. Berrangépreserve_env CPP
7854e811da7fSDaniel P. Berrangépreserve_env CXX
7855e811da7fSDaniel P. Berrangépreserve_env INSTALL
7856e811da7fSDaniel P. Berrangépreserve_env LD
7857e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
7858e811da7fSDaniel P. Berrangépreserve_env LIBTOOL
7859e811da7fSDaniel P. Berrangépreserve_env MAKE
7860e811da7fSDaniel P. Berrangépreserve_env NM
7861e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
7862e811da7fSDaniel P. Berrangépreserve_env PATH
7863e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
7864e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
7865e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
7866e811da7fSDaniel P. Berrangépreserve_env PYTHON
7867e811da7fSDaniel P. Berrangépreserve_env SDL_CONFIG
7868e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
7869e811da7fSDaniel P. Berrangépreserve_env SMBD
7870e811da7fSDaniel P. Berrangépreserve_env STRIP
7871e811da7fSDaniel P. Berrangépreserve_env WINDRES
7872e811da7fSDaniel P. Berrangé
7873dc655404SMichael S. Tsirkinprintf "exec" >>config.status
7874dc655404SMichael S. Tsirkinprintf " '%s'" "$0" "$@" >>config.status
7875cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
7876dc655404SMichael S. Tsirkinchmod +x config.status
7877dc655404SMichael S. Tsirkin
78788cd05ab6SPeter Maydellrm -r "$TMPDIR1"
7879