xref: /openbmc/qemu/configure (revision 73362fc0b0c2d94e795a509f859e592572a09bfd)
17d13299dSbellard#!/bin/sh
27d13299dSbellard#
33ef693a0Sbellard# qemu configure script (c) 2003 Fabrice Bellard
47d13299dSbellard#
58cd05ab6SPeter Maydell
699519e67SCornelia Huck# Unset some variables known to interfere with behavior of common tools,
799519e67SCornelia Huck# just as autoconf does.
899519e67SCornelia HuckCLICOLOR_FORCE= GREP_OPTIONS=
999519e67SCornelia Huckunset CLICOLOR_FORCE GREP_OPTIONS
1099519e67SCornelia Huck
115e4dfd3dSJohn Snow# Don't allow CCACHE, if present, to use cached results of compile tests!
125e4dfd3dSJohn Snowexport CCACHE_RECACHE=yes
135e4dfd3dSJohn Snow
14dedad027SDaniel P. Berrangé# make source path absolute
15dedad027SDaniel P. Berrangésource_path=$(cd "$(dirname -- "$0")"; pwd)
16dedad027SDaniel P. Berrangé
17dedad027SDaniel P. Berrangéif test "$PWD" = "$source_path"
18dedad027SDaniel P. Berrangéthen
19dedad027SDaniel P. Berrangé    echo "Using './build' as the directory for build output"
20dedad027SDaniel P. Berrangé
21dedad027SDaniel P. Berrangé    MARKER=build/auto-created-by-configure
22dedad027SDaniel P. Berrangé
23dedad027SDaniel P. Berrangé    if test -e build
24dedad027SDaniel P. Berrangé    then
25dedad027SDaniel P. Berrangé        if test -f $MARKER
26dedad027SDaniel P. Berrangé        then
27dedad027SDaniel P. Berrangé           rm -rf build
28dedad027SDaniel P. Berrangé        else
29dedad027SDaniel P. Berrangé            echo "ERROR: ./build dir already exists and was not previously created by configure"
30dedad027SDaniel P. Berrangé            exit 1
31dedad027SDaniel P. Berrangé        fi
32dedad027SDaniel P. Berrangé    fi
33dedad027SDaniel P. Berrangé
34dedad027SDaniel P. Berrangé    mkdir build
35dedad027SDaniel P. Berrangé    touch $MARKER
36dedad027SDaniel P. Berrangé
37dedad027SDaniel P. Berrangé    cat > GNUmakefile <<'EOF'
38dedad027SDaniel P. Berrangé# This file is auto-generated by configure to support in-source tree
39dedad027SDaniel P. Berrangé# 'make' command invocation
40dedad027SDaniel P. Berrangé
41dedad027SDaniel P. Berrangéifeq ($(MAKECMDGOALS),)
42dedad027SDaniel P. Berrangérecurse: all
43dedad027SDaniel P. Berrangéendif
44dedad027SDaniel P. Berrangé
45dedad027SDaniel P. Berrangé.NOTPARALLEL: %
46dedad027SDaniel P. Berrangé%: force
47dedad027SDaniel P. Berrangé	@echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48dedad027SDaniel P. Berrangé	@$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49dedad027SDaniel P. Berrangé	@if test "$(MAKECMDGOALS)" = "distclean" && \
50dedad027SDaniel P. Berrangé	    test -e build/auto-created-by-configure ; \
51dedad027SDaniel P. Berrangé	then \
52dedad027SDaniel P. Berrangé	    rm -rf build GNUmakefile ; \
53dedad027SDaniel P. Berrangé	fi
54dedad027SDaniel P. Berrangéforce: ;
55dedad027SDaniel P. Berrangé.PHONY: force
56dedad027SDaniel P. BerrangéGNUmakefile: ;
57dedad027SDaniel P. Berrangé
58dedad027SDaniel P. BerrangéEOF
59dedad027SDaniel P. Berrangé    cd build
60dedad027SDaniel P. Berrangé    exec $source_path/configure "$@"
61dedad027SDaniel P. Berrangéfi
62dedad027SDaniel P. Berrangé
638cd05ab6SPeter Maydell# Temporary directory used for files created while
648cd05ab6SPeter Maydell# configure runs. Since it is in the build directory
658cd05ab6SPeter Maydell# we can safely blow away any previous version of it
668cd05ab6SPeter Maydell# (and we need not jump through hoops to try to delete
678cd05ab6SPeter Maydell# it when configure exits.)
688cd05ab6SPeter MaydellTMPDIR1="config-temp"
698cd05ab6SPeter Maydellrm -rf "${TMPDIR1}"
708cd05ab6SPeter Maydellmkdir -p "${TMPDIR1}"
718cd05ab6SPeter Maydellif [ $? -ne 0 ]; then
728cd05ab6SPeter Maydell    echo "ERROR: failed to create temporary directory"
738cd05ab6SPeter Maydell    exit 1
747d13299dSbellardfi
757d13299dSbellard
768cd05ab6SPeter MaydellTMPB="qemu-conf"
778cd05ab6SPeter MaydellTMPC="${TMPDIR1}/${TMPB}.c"
7866518bf6SDon SlutzTMPO="${TMPDIR1}/${TMPB}.o"
799c83ffd8SPeter MaydellTMPCXX="${TMPDIR1}/${TMPB}.cxx"
808cd05ab6SPeter MaydellTMPE="${TMPDIR1}/${TMPB}.exe"
8126fffe29SEmilio G. CotaTMPTXT="${TMPDIR1}/${TMPB}.txt"
827d13299dSbellard
83da1d85e3SGerd Hoffmannrm -f config.log
849ac81bbbSmalc
85b48e3611SPeter Maydell# Print a helpful header at the top of config.log
86b48e3611SPeter Maydellecho "# QEMU configure log $(date)" >> config.log
87979ae168SPeter Maydellprintf "# Configured with:" >> config.log
88979ae168SPeter Maydellprintf " '%s'" "$0" "$@" >> config.log
89979ae168SPeter Maydellecho >> config.log
90b48e3611SPeter Maydellecho "#" >> config.log
91b48e3611SPeter Maydell
92d880a3baSPaolo Bonziniprint_error() {
93d880a3baSPaolo Bonzini    (echo
9476ad07a4SPeter Maydell    echo "ERROR: $1"
9576ad07a4SPeter Maydell    while test -n "$2"; do
9676ad07a4SPeter Maydell        echo "       $2"
9776ad07a4SPeter Maydell        shift
9876ad07a4SPeter Maydell    done
99d880a3baSPaolo Bonzini    echo) >&2
100d880a3baSPaolo Bonzini}
101d880a3baSPaolo Bonzini
102d880a3baSPaolo Bonzinierror_exit() {
103d880a3baSPaolo Bonzini    print_error "$@"
10476ad07a4SPeter Maydell    exit 1
10576ad07a4SPeter Maydell}
10676ad07a4SPeter Maydell
1079c83ffd8SPeter Maydelldo_compiler() {
1089c83ffd8SPeter Maydell    # Run the compiler, capturing its output to the log. First argument
1099c83ffd8SPeter Maydell    # is compiler binary to execute.
1109c83ffd8SPeter Maydell    local compiler="$1"
1119c83ffd8SPeter Maydell    shift
1128bbe05d7SIan Jackson    if test -n "$BASH_VERSION"; then eval '
1138bbe05d7SIan Jackson        echo >>config.log "
1148bbe05d7SIan Jacksonfuncs: ${FUNCNAME[*]}
1158bbe05d7SIan Jacksonlines: ${BASH_LINENO[*]}"
1168bbe05d7SIan Jackson    '; fi
1179c83ffd8SPeter Maydell    echo $compiler "$@" >> config.log
1189c83ffd8SPeter Maydell    $compiler "$@" >> config.log 2>&1 || return $?
1198dc38a78SPeter Maydell    # Test passed. If this is an --enable-werror build, rerun
1208dc38a78SPeter Maydell    # the test with -Werror and bail out if it fails. This
1218dc38a78SPeter Maydell    # makes warning-generating-errors in configure test code
1228dc38a78SPeter Maydell    # obvious to developers.
1238dc38a78SPeter Maydell    if test "$werror" != "yes"; then
1248dc38a78SPeter Maydell        return 0
1258dc38a78SPeter Maydell    fi
1268dc38a78SPeter Maydell    # Don't bother rerunning the compile if we were already using -Werror
1278dc38a78SPeter Maydell    case "$*" in
1288dc38a78SPeter Maydell        *-Werror*)
1298dc38a78SPeter Maydell           return 0
1308dc38a78SPeter Maydell        ;;
1318dc38a78SPeter Maydell    esac
1329c83ffd8SPeter Maydell    echo $compiler -Werror "$@" >> config.log
1339c83ffd8SPeter Maydell    $compiler -Werror "$@" >> config.log 2>&1 && return $?
13476ad07a4SPeter Maydell    error_exit "configure test passed without -Werror but failed with -Werror." \
13576ad07a4SPeter Maydell        "This is probably a bug in the configure script. The failing command" \
13676ad07a4SPeter Maydell        "will be at the bottom of config.log." \
13776ad07a4SPeter Maydell        "You can run configure with --disable-werror to bypass this check."
1388dc38a78SPeter Maydell}
1398dc38a78SPeter Maydell
1409c83ffd8SPeter Maydelldo_cc() {
1419c83ffd8SPeter Maydell    do_compiler "$cc" "$@"
1429c83ffd8SPeter Maydell}
1439c83ffd8SPeter Maydell
1449c83ffd8SPeter Maydelldo_cxx() {
1459c83ffd8SPeter Maydell    do_compiler "$cxx" "$@"
1469c83ffd8SPeter Maydell}
1479c83ffd8SPeter Maydell
14800849b92SRichard Henderson# Append $2 to the variable named $1, with space separation
14900849b92SRichard Hendersonadd_to() {
15000849b92SRichard Henderson    eval $1=\${$1:+\"\$$1 \"}\$2
15100849b92SRichard Henderson}
15200849b92SRichard Henderson
1539c83ffd8SPeter Maydellupdate_cxxflags() {
1549c83ffd8SPeter Maydell    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
1559c83ffd8SPeter Maydell    # options which some versions of GCC's C++ compiler complain about
1569c83ffd8SPeter Maydell    # because they only make sense for C programs.
15753422040SPaolo Bonzini    QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
158086d5f75SPaolo Bonzini    CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
1599c83ffd8SPeter Maydell    for arg in $QEMU_CFLAGS; do
1609c83ffd8SPeter Maydell        case $arg in
1619c83ffd8SPeter Maydell            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
1629c83ffd8SPeter Maydell            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
1639c83ffd8SPeter Maydell                ;;
1649c83ffd8SPeter Maydell            *)
1659c83ffd8SPeter Maydell                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
1669c83ffd8SPeter Maydell                ;;
1679c83ffd8SPeter Maydell        esac
1689c83ffd8SPeter Maydell    done
1699c83ffd8SPeter Maydell}
1709c83ffd8SPeter Maydell
17152166aa0SJuan Quintelacompile_object() {
172fd0e6053SJohn Snow  local_cflags="$1"
173086d5f75SPaolo Bonzini  do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
17452166aa0SJuan Quintela}
17552166aa0SJuan Quintela
17652166aa0SJuan Quintelacompile_prog() {
17752166aa0SJuan Quintela  local_cflags="$1"
17852166aa0SJuan Quintela  local_ldflags="$2"
179086d5f75SPaolo Bonzini  do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
18052166aa0SJuan Quintela}
18152166aa0SJuan Quintela
18211568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
18311568d6dSPaolo Bonzinisymlink() {
18472b8b5a1SStefan Weil  rm -rf "$2"
185ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
18672b8b5a1SStefan Weil  ln -s "$1" "$2"
18711568d6dSPaolo Bonzini}
18811568d6dSPaolo Bonzini
1890dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
1900dba6195SLoïc Minier# executable or a builtin)
1910dba6195SLoïc Minierhas() {
1920dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
1930dba6195SLoïc Minier}
1940dba6195SLoïc Minier
1950a01d76fSMarc-André Lureauversion_ge () {
1960a01d76fSMarc-André Lureau    local_ver1=`echo $1 | tr . ' '`
1970a01d76fSMarc-André Lureau    local_ver2=`echo $2 | tr . ' '`
1980a01d76fSMarc-André Lureau    while true; do
1990a01d76fSMarc-André Lureau        set x $local_ver1
2000a01d76fSMarc-André Lureau        local_first=${2-0}
201c44a33e2SStefano Garzarella        # 'shift 2' if $2 is set, or 'shift' if $2 is not set
202c44a33e2SStefano Garzarella        shift ${2:+2}
2030a01d76fSMarc-André Lureau        local_ver1=$*
2040a01d76fSMarc-André Lureau        set x $local_ver2
2050a01d76fSMarc-André Lureau        # the second argument finished, the first must be greater or equal
2060a01d76fSMarc-André Lureau        test $# = 1 && return 0
2070a01d76fSMarc-André Lureau        test $local_first -lt $2 && return 1
2080a01d76fSMarc-André Lureau        test $local_first -gt $2 && return 0
209c44a33e2SStefano Garzarella        shift ${2:+2}
2100a01d76fSMarc-André Lureau        local_ver2=$*
2110a01d76fSMarc-André Lureau    done
2120a01d76fSMarc-André Lureau}
2130a01d76fSMarc-André Lureau
2145b808275SLluís Vilanovahave_backend () {
2155b808275SLluís Vilanova    echo "$trace_backends" | grep "$1" >/dev/null
2165b808275SLluís Vilanova}
2175b808275SLluís Vilanova
2183b6b7550SPaolo Bonziniglob() {
2193b6b7550SPaolo Bonzini    eval test -z '"${1#'"$2"'}"'
2203b6b7550SPaolo Bonzini}
2213b6b7550SPaolo Bonzini
222e9a3591fSChristian Borntraegerld_has() {
223e9a3591fSChristian Borntraeger    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
224e9a3591fSChristian Borntraeger}
225e9a3591fSChristian Borntraeger
2264ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
2274ace32e2SAntonio Ospitethen
2284ace32e2SAntonio Ospite  error_exit "main directory cannot contain spaces nor colons"
2294ace32e2SAntonio Ospitefi
2304ace32e2SAntonio Ospite
23114211825SAntonio Ospite# default parameters
2322ff6b91eSJuan Quintelacpu=""
233a31a8642SMichael S. Tsirkiniasl="iasl"
2341e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M"
23543ce4dfeSbellardstatic="no"
2367d13299dSbellardcross_prefix=""
2370c58ac1cSmalcaudio_drv_list=""
238b64ec4e4SFam Zhengblock_drv_rw_whitelist=""
239b64ec4e4SFam Zhengblock_drv_ro_whitelist=""
240e49d021eSPeter Maydellhost_cc="cc"
241d5631638Smalcaudio_win_int=""
242957f1f99SMichael Rothlibs_qga=""
2435bc62e01SGerd Hoffmanndebug_info="yes"
24463678e17SSteven Noonanstack_protector=""
2451e4f6065SDaniele Buonosafe_stack=""
246afc3a8f9SAlex Bennéeuse_containers="yes"
247f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
248ac0df51dSaliguori
24992712822SDaniel P. Berrangeif test -e "$source_path/.git"
25092712822SDaniel P. Berrangethen
251f62bbee5SDaniel P. Berrange    git_update=yes
25292712822SDaniel P. Berrange    git_submodules="ui/keycodemapdb"
2533ac1f813SEmilio G. Cota    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
2543ac1f813SEmilio G. Cota    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
25592712822SDaniel P. Berrangeelse
256f62bbee5SDaniel P. Berrange    git_update=no
257aef45d51SDaniel P. Berrange    git_submodules=""
2585c0ef67aSDaniel P. Berrangé
2595c0ef67aSDaniel P. Berrangé    if ! test -f "$source_path/ui/keycodemapdb/README"
2605c0ef67aSDaniel P. Berrangé    then
2615c0ef67aSDaniel P. Berrangé        echo
2625c0ef67aSDaniel P. Berrangé        echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
2635c0ef67aSDaniel P. Berrangé        echo
2645c0ef67aSDaniel P. Berrangé        echo "This is not a GIT checkout but module content appears to"
2655c0ef67aSDaniel P. Berrangé        echo "be missing. Do not use 'git archive' or GitHub download links"
2665c0ef67aSDaniel P. Berrangé        echo "to acquire QEMU source archives. Non-GIT builds are only"
2675c0ef67aSDaniel P. Berrangé        echo "supported with source archives linked from:"
2685c0ef67aSDaniel P. Berrangé        echo
269a3e3b521SPeter Maydell        echo "  https://www.qemu.org/download/#source"
2705c0ef67aSDaniel P. Berrangé        echo
2715c0ef67aSDaniel P. Berrangé        echo "Developers working with GIT can use scripts/archive-source.sh"
2725c0ef67aSDaniel P. Berrangé        echo "if they need to create valid source archives."
2735c0ef67aSDaniel P. Berrangé        echo
2745c0ef67aSDaniel P. Berrangé        exit 1
2755c0ef67aSDaniel P. Berrangé    fi
27692712822SDaniel P. Berrangefi
277cc84d63aSDaniel P. Berrangegit="git"
278ac0df51dSaliguori
279afb63ebdSStefan Weil# Don't accept a target_list environment variable.
280afb63ebdSStefan Weilunset target_list
281447e133fSAlex Bennéeunset target_list_exclude
282377529c0SPaolo Bonzini
283377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
284377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
285377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
286377529c0SPaolo Bonzini#              unless --disable-foo is given
287377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
288377529c0SPaolo Bonzini#              feature will searched for,
289377529c0SPaolo Bonzini#              if not found, configure exits with error
290377529c0SPaolo Bonzini#
291377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
292377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
293377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
294377529c0SPaolo Bonzini
295377529c0SPaolo Bonzinibrlapi=""
296377529c0SPaolo Bonzinicurl=""
297377529c0SPaolo Bonzinicurses=""
298377529c0SPaolo Bonzinidocs=""
299377529c0SPaolo Bonzinifdt=""
30058952137SVincenzo Maffionenetmap="no"
30135be72baSPaolo Bonzinisdl="auto"
30235be72baSPaolo Bonzinisdl_image="auto"
303983eef5aSMeador Ingevirtfs=""
3046ec0e15dSPaolo Bonzinimpath="auto"
305a0b93237SPaolo Bonzinivnc="enabled"
306377529c0SPaolo Bonzinisparse="no"
307377529c0SPaolo Bonzinivde=""
308a0b93237SPaolo Bonzinivnc_sasl="auto"
309a0b93237SPaolo Bonzinivnc_jpeg="auto"
310a0b93237SPaolo Bonzinivnc_png="auto"
3114113f4cfSLaurent Vivierxkbcommon="auto"
312377529c0SPaolo Bonzinixen=""
313d5b93ddfSAnthony PERARDxen_ctrl_version=""
3141badb709SPaolo Bonzinixen_pci_passthrough="auto"
315377529c0SPaolo Bonzinilinux_aio=""
316c10dd856SAarushi Mehtalinux_io_uring=""
31747e98658SCorey Bryantcap_ng=""
318377529c0SPaolo Bonziniattr=""
3194f26f2b6SAvi Kivitylibattr=""
320377529c0SPaolo Bonzinixfs=""
3211badb709SPaolo Bonzinitcg="enabled"
322a40161cbSPaolo Bonzinimembarrier=""
323299e6f19SPaolo Bonzinivhost_net=""
324299e6f19SPaolo Bonzinivhost_crypto=""
325299e6f19SPaolo Bonzinivhost_scsi=""
326299e6f19SPaolo Bonzinivhost_vsock=""
327e6a74868SMarc-André Lureauvhost_user=""
32898fc1adaSDr. David Alan Gilbertvhost_user_fs=""
3293bd40ec7SPaolo Bonzinikvm="auto"
3303bd40ec7SPaolo Bonzinihax="auto"
3313bd40ec7SPaolo Bonzinihvf="auto"
3323bd40ec7SPaolo Bonziniwhpx="auto"
3332da776dbSMichael R. Hinesrdma=""
33421ab34c9SMarcel Apfelbaumpvrdma=""
335377529c0SPaolo Bonzinigprof="no"
336377529c0SPaolo Bonzinidebug_tcg="no"
337377529c0SPaolo Bonzinidebug="no"
338247724cbSMarc-André Lureausanitizers="no"
3390aebab04SLingfeng Yangtsan="no"
340b553a042SJohn Snowfortify_source=""
341377529c0SPaolo Bonzinistrip_opt="yes"
3429195b2c2SStefan Weiltcg_interpreter="no"
343377529c0SPaolo Bonzinibigendian="no"
344377529c0SPaolo Bonzinimingw32="no"
3451d728c39SBlue Swirlgcov="no"
346377529c0SPaolo BonziniEXESUF=""
347484e2cc7SPaolo BonziniHOST_DSOSUF=".so"
34817969268SFam Zhengmodules="no"
349bd83c861SChristian Ehrhardtmodule_upgrades="no"
350377529c0SPaolo Bonziniprefix="/usr/local"
35110ff82d1SMarc-André Lureauqemu_suffix="qemu"
352675b9b53SMarc-André Lureauslirp=""
353377529c0SPaolo Bonzinioss_lib=""
354377529c0SPaolo Bonzinibsd="no"
355377529c0SPaolo Bonzinilinux="no"
356377529c0SPaolo Bonzinisolaris="no"
357377529c0SPaolo Bonziniprofiler="no"
358b4e312e9SPaolo Bonzinicocoa="auto"
359377529c0SPaolo Bonzinisoftmmu="yes"
360377529c0SPaolo Bonzinilinux_user="no"
361377529c0SPaolo Bonzinibsd_user="no"
362377529c0SPaolo Bonziniblobs="yes"
36305dfa22bSPhilippe Mathieu-Daudéedk2_blobs="no"
364377529c0SPaolo Bonzinipkgversion=""
36540d6444eSAvi Kivitypie=""
3663556c233SPaolo Bonziniqom_cast_debug="yes"
367baf86d6bSPaolo Bonzinitrace_backends="log"
368377529c0SPaolo Bonzinitrace_file="trace"
369377529c0SPaolo Bonzinispice=""
370377529c0SPaolo Bonzinirbd=""
3717b02f544SMarc-André Lureausmartcard=""
3720a40bcb7SCésar Belleyu2f="auto"
3732b2325ffSGerd Hoffmannlibusb=""
37469354a83SHans de Goedeusb_redir=""
375da076ffeSGerd Hoffmannopengl=""
376014cb152SGerd Hoffmannopengl_dmabuf="no"
3775dd89908SRichard Hendersoncpuid_h="no"
37886583a07SLiam Merwickavx2_opt=""
3798ca80760SRichard Hendersoncapstone=""
380b25c9dffSStefan Weillzo=""
381b25c9dffSStefan Weilsnappy=""
3826b383c08SPeter Wubzip2=""
38383bc1f97SJulio Faraccolzfse=""
3843a678481SJuan Quintelazstd=""
385e8ef31a3SMichael Tokarevguest_agent=""
386d9840e25STomoki Sekiyamaguest_agent_with_vss="no"
38750cbebb9SMichael Rothguest_agent_ntddscsi="no"
3889dacf32dSYossi Hindinguest_agent_msi=""
389d9840e25STomoki Sekiyamavss_win32_sdk=""
390d9840e25STomoki Sekiyamawin_sdk="no"
391e10ee3f5SPhilippe Mathieu-Daudéwant_tools=""
392c589b249SRonnie Sahlberglibiscsi=""
3936542aa9cSPeter Lievenlibnfs=""
394519175a2SAlex Barcelocoroutine=""
39570c60c08SStefan Hajnoczicoroutine_pool=""
3967d992e4dSPeter Lievendebug_stack_usage="no"
397f0d92b56SLongpeng(Mike)crypto_afalg="no"
398f794573eSEduardo Otuboseccomp=""
399eb100396SBharata B Raoglusterfs=""
400d85fa9ebSJeff Codyglusterfs_xlator_opt="no"
4010c14fb47SBharata B Raoglusterfs_discard="no"
402df3a429aSNiels de Vosglusterfs_fallocate="no"
4037c815372SBharata B Raoglusterfs_zerofill="no"
404e014dbe7SPrasanna Kumar Kaleverglusterfs_ftruncate_has_stat="no"
4050e3b891fSNiels de Vosglusterfs_iocb_has_stat="no"
406a4ccabcfSAnthony Liguorigtk=""
407925a0400SGerd Hoffmanngtk_gl="no"
408a1c5e949SDaniel P. Berrangetls_priority="NORMAL"
409ddbb0d09SDaniel P. Berrangegnutls=""
41091bfcdb0SDaniel P. Berrangenettle=""
411dc2207afSDaniel P. Berrangénettle_xts="no"
41291bfcdb0SDaniel P. Berrangegcrypt=""
4131f923c70SLongpeng(Mike)gcrypt_hmac="no"
414e0576942SDaniel P. Berrangégcrypt_xts="no"
415e0576942SDaniel P. Berrangéqemu_private_xts="yes"
4168953caf3SDaniel P. Berrangeauth_pam=""
417bbbf9bfbSStefan Weilvte=""
4189d9e1521SGerd Hoffmannvirglrenderer=""
4197aaa6a16SPaolo Bonzinitpm=""
420b10d49d7SPino Toscanolibssh=""
421ed1701c6SDr. David Alan Gilbertlive_block_migration="yes"
422a99d57bbSWanlong Gaonuma=""
4232847b469SFam Zhengtcmalloc="no"
4247b01cb97SAlexandre Derumierjemalloc="no"
425a6b1d4c0SChanglong Xiereplication="yes"
4262f740136SJeff Codybochs="yes"
4272f740136SJeff Codycloop="yes"
4282f740136SJeff Codydmg="yes"
4292f740136SJeff Codyqcow1="yes"
4302f740136SJeff Codyvdi="yes"
4312f740136SJeff Codyvvfat="yes"
4322f740136SJeff Codyqed="yes"
4332f740136SJeff Codyparallels="yes"
4342f740136SJeff Codysheepdog="yes"
435ed279a06SKlim Kireevlibxml2=""
436ba59fb77SPaolo Bonzinidebug_mutex="no"
43717824406SJunyan Helibpmem=""
438f3494749SPaolo Bonzinidefault_devices="yes"
43940e8c6f4SAlex Bennéeplugins="no"
440adc28027SAlexander Bulekovfuzzing="no"
441b767d257SMarek Marczykowski-Góreckirng_none="no"
44254e7aac0SAlexey Krasikovsecret_keyring=""
44321b2eca6SJingqi Liulibdaxctl=""
444a5665051SPaolo Bonzinimeson=""
44548328880SPaolo Bonzinininja=""
446a5665051SPaolo Bonziniskip_meson=no
447e8f3bd71SMarc-André Lureaugettext=""
448377529c0SPaolo Bonzini
449fb59dabdSPeter Maydellbogus_os="no"
450aa087962SPaolo Bonzinimalloc_trim="auto"
451898be3e0SPeter Maydell
452ac0df51dSaliguori# parse CC options first
453ac0df51dSaliguorifor opt do
45489138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
455ac0df51dSaliguori  case "$opt" in
456ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
457ac0df51dSaliguori  ;;
4583d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
459ac0df51dSaliguori  ;;
46083f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
46183f73fceSTomoki Sekiyama  ;;
4622ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
4632ff6b91eSJuan Quintela  ;;
464de385287SAlex Bennée  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
465db5adeaaSPaolo Bonzini                    QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
466e2a2ed06SJuan Quintela  ;;
46711cde1c8SBruno Dominguez  --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
46811cde1c8SBruno Dominguez  ;;
469db5adeaaSPaolo Bonzini  --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
470f9943cd5SGerd Hoffmann                     EXTRA_LDFLAGS="$optarg"
471e2a2ed06SJuan Quintela  ;;
4725bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
4735bc62e01SGerd Hoffmann  ;;
4745bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
4755bc62e01SGerd Hoffmann  ;;
476d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
477d75402b5SAlex Bennée  ;;
478d422b2bcSAlex Bennée  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
479d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
4802038f8c8SPaolo Bonzini                      cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
481d422b2bcSAlex Bennée  ;;
482d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
4832038f8c8SPaolo Bonzini                cc_archs="$cc_archs $cc_arch"
484d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
4852038f8c8SPaolo Bonzini                cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
486d75402b5SAlex Bennée  ;;
487ac0df51dSaliguori  esac
488ac0df51dSaliguoridone
489ac0df51dSaliguori# OS specific
490ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
49193148aa5SStefan Weil# we can eliminate its usage altogether.
492ac0df51dSaliguori
493e49d021eSPeter Maydell# Preferred compiler:
494e49d021eSPeter Maydell#  ${CC} (if set)
495e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
496e49d021eSPeter Maydell#  system compiler
497e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
498e49d021eSPeter Maydell  cc="$host_cc"
499e49d021eSPeter Maydellelse
500b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
501e49d021eSPeter Maydellfi
502e49d021eSPeter Maydell
50383f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
50483f73fceSTomoki Sekiyama  cxx="c++"
50583f73fceSTomoki Sekiyamaelse
50683f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
50783f73fceSTomoki Sekiyamafi
50883f73fceSTomoki Sekiyama
509b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
510cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
5115f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
5123dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
513b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
514b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
5159f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
5164852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
517b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
518b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
51917884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
52017884d7bSSergei Trofimovichquery_pkg_config() {
52117884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
52217884d7bSSergei Trofimovich}
52317884d7bSSergei Trofimovichpkg_config=query_pkg_config
52447c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
525ac0df51dSaliguori
52645d285abSPeter Maydell# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
52745d285abSPeter MaydellARFLAGS="${ARFLAGS-rv}"
52845d285abSPeter Maydell
529be17dc90SMichael S. Tsirkin# default flags for all hosts
5302d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
5312d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
5322d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
5332d31515bSPeter Maydell# provides these semantics.)
534086d5f75SPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
535086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
536c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
537be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
53825211446SPaolo BonziniQEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
53925211446SPaolo BonziniQEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
540086d5f75SPaolo BonziniCFLAGS="-std=gnu99 -Wall"
541086d5f75SPaolo Bonzini
542be17dc90SMichael S. Tsirkin
543ac0df51dSaliguoricheck_define() {
544ac0df51dSaliguoricat > $TMPC <<EOF
545ac0df51dSaliguori#if !defined($1)
546fd786e1aSPeter Maydell#error $1 not defined
547ac0df51dSaliguori#endif
548ac0df51dSaliguoriint main(void) { return 0; }
549ac0df51dSaliguoriEOF
55052166aa0SJuan Quintela  compile_object
551ac0df51dSaliguori}
552ac0df51dSaliguori
553307119e7SGerd Hoffmanncheck_include() {
554307119e7SGerd Hoffmanncat > $TMPC <<EOF
555307119e7SGerd Hoffmann#include <$1>
556307119e7SGerd Hoffmannint main(void) { return 0; }
557307119e7SGerd HoffmannEOF
558307119e7SGerd Hoffmann  compile_object
559307119e7SGerd Hoffmann}
560307119e7SGerd Hoffmann
56193b25869SJohn Snowwrite_c_skeleton() {
56293b25869SJohn Snow    cat > $TMPC <<EOF
56393b25869SJohn Snowint main(void) { return 0; }
56493b25869SJohn SnowEOF
56593b25869SJohn Snow}
56693b25869SJohn Snow
567adc28027SAlexander Bulekovwrite_c_fuzzer_skeleton() {
568adc28027SAlexander Bulekov    cat > $TMPC <<EOF
569adc28027SAlexander Bulekov#include <stdint.h>
570adc28027SAlexander Bulekov#include <sys/types.h>
571adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
572adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
573adc28027SAlexander BulekovEOF
574adc28027SAlexander Bulekov}
575adc28027SAlexander Bulekov
576bbea4050SPeter Maydellif check_define __linux__ ; then
577bbea4050SPeter Maydell  targetos="Linux"
578bbea4050SPeter Maydellelif check_define _WIN32 ; then
579bbea4050SPeter Maydell  targetos='MINGW32'
580bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
581bbea4050SPeter Maydell  targetos='OpenBSD'
582bbea4050SPeter Maydellelif check_define __sun__ ; then
583bbea4050SPeter Maydell  targetos='SunOS'
584bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
585bbea4050SPeter Maydell  targetos='Haiku'
586951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
587951fedfcSPeter Maydell  targetos='FreeBSD'
588951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
589951fedfcSPeter Maydell  targetos='GNU/kFreeBSD'
590951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
591951fedfcSPeter Maydell  targetos='DragonFly'
592951fedfcSPeter Maydellelif check_define __NetBSD__; then
593951fedfcSPeter Maydell  targetos='NetBSD'
594951fedfcSPeter Maydellelif check_define __APPLE__; then
595951fedfcSPeter Maydell  targetos='Darwin'
596bbea4050SPeter Maydellelse
597951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
598951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
599951fedfcSPeter Maydell  # be the result of a missing compiler.
600951fedfcSPeter Maydell  targetos='bogus'
601951fedfcSPeter Maydell  bogus_os='yes'
602bbea4050SPeter Maydellfi
603bbea4050SPeter Maydell
604bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use.
605bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're
606bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify
607bbea4050SPeter Maydell# the correct CPU with the --cpu option.
608bbea4050SPeter Maydellcase $targetos in
609bbea4050SPeter MaydellDarwin)
610bbea4050SPeter Maydell  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
611bbea4050SPeter Maydell  # run 64-bit userspace code.
612bbea4050SPeter Maydell  # If the user didn't specify a CPU explicitly and the kernel says this is
613bbea4050SPeter Maydell  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
614bbea4050SPeter Maydell  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
615bbea4050SPeter Maydell    cpu="x86_64"
616bbea4050SPeter Maydell  fi
617bbea4050SPeter Maydell  ;;
618bbea4050SPeter MaydellSunOS)
61989138857SStefan Weil  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
620bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
621bbea4050SPeter Maydell    cpu="x86_64"
622bbea4050SPeter Maydell  fi
623bbea4050SPeter Maydellesac
624bbea4050SPeter Maydell
6252ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
6262ff6b91eSJuan Quintela  # command line argument
6272ff6b91eSJuan Quintela  :
6282ff6b91eSJuan Quintelaelif check_define __i386__ ; then
629ac0df51dSaliguori  cpu="i386"
630ac0df51dSaliguorielif check_define __x86_64__ ; then
631c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
632c72b26ecSRichard Henderson    cpu="x32"
633c72b26ecSRichard Henderson  else
634ac0df51dSaliguori    cpu="x86_64"
635c72b26ecSRichard Henderson  fi
6363aa9bd6cSblueswir1elif check_define __sparc__ ; then
6373aa9bd6cSblueswir1  if check_define __arch64__ ; then
6383aa9bd6cSblueswir1    cpu="sparc64"
6393aa9bd6cSblueswir1  else
6403aa9bd6cSblueswir1    cpu="sparc"
6413aa9bd6cSblueswir1  fi
642fdf7ed96Smalcelif check_define _ARCH_PPC ; then
643fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
644f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
645f8378accSRichard Henderson      cpu="ppc64le"
646f8378accSRichard Henderson    else
647fdf7ed96Smalc      cpu="ppc64"
648f8378accSRichard Henderson    fi
649ac0df51dSaliguori  else
650fdf7ed96Smalc    cpu="ppc"
651fdf7ed96Smalc  fi
652afa05235SAurelien Jarnoelif check_define __mips__ ; then
653afa05235SAurelien Jarno  cpu="mips"
654d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
655d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
656d66ed0eaSAurelien Jarno    cpu="s390x"
657d66ed0eaSAurelien Jarno  else
658d66ed0eaSAurelien Jarno    cpu="s390"
659d66ed0eaSAurelien Jarno  fi
660c4f80543SAlistair Franciselif check_define __riscv ; then
661c4f80543SAlistair Francis  if check_define _LP64 ; then
662c4f80543SAlistair Francis    cpu="riscv64"
663c4f80543SAlistair Francis  else
664c4f80543SAlistair Francis    cpu="riscv32"
665c4f80543SAlistair Francis  fi
66621d89f84SPeter Maydellelif check_define __arm__ ; then
66721d89f84SPeter Maydell  cpu="arm"
6681f080313SClaudio Fontanaelif check_define __aarch64__ ; then
6691f080313SClaudio Fontana  cpu="aarch64"
670fdf7ed96Smalcelse
67189138857SStefan Weil  cpu=$(uname -m)
672ac0df51dSaliguorifi
673ac0df51dSaliguori
674359bc95dSPeter MaydellARCH=
675359bc95dSPeter Maydell# Normalise host CPU name and set ARCH.
676359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
6777d13299dSbellardcase "$cpu" in
678ee35e968SThomas Huth  ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
679898be3e0SPeter Maydell  ;;
680f8378accSRichard Henderson  ppc64le)
681f8378accSRichard Henderson    ARCH="ppc64"
682f8378accSRichard Henderson  ;;
6837d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
68497a847bcSbellard    cpu="i386"
6857d13299dSbellard  ;;
686aaa5fa14Saurel32  x86_64|amd64)
687aaa5fa14Saurel32    cpu="x86_64"
688aaa5fa14Saurel32  ;;
68921d89f84SPeter Maydell  armv*b|armv*l|arm)
69021d89f84SPeter Maydell    cpu="arm"
6917d13299dSbellard  ;;
6921f080313SClaudio Fontana  aarch64)
6931f080313SClaudio Fontana    cpu="aarch64"
6941f080313SClaudio Fontana  ;;
695afa05235SAurelien Jarno  mips*)
696afa05235SAurelien Jarno    cpu="mips"
697afa05235SAurelien Jarno  ;;
6983142255cSblueswir1  sparc|sun4[cdmuv])
699ae228531Sbellard    cpu="sparc"
700ae228531Sbellard  ;;
7017d13299dSbellard  *)
702359bc95dSPeter Maydell    # This will result in either an error or falling back to TCI later
703359bc95dSPeter Maydell    ARCH=unknown
7047d13299dSbellard  ;;
7057d13299dSbellardesac
706359bc95dSPeter Maydellif test -z "$ARCH"; then
707359bc95dSPeter Maydell  ARCH="$cpu"
708359bc95dSPeter Maydellfi
709e2d52ad3SJuan Quintela
7107d13299dSbellard# OS specific
7110dbfc675SJuan Quintela
7127d13299dSbellardcase $targetos in
71367b915a5SbellardMINGW32*)
71467b915a5Sbellard  mingw32="yes"
715299e6f19SPaolo Bonzini  vhost_user="no"
7163cec7cc2SKővágó, Zoltán  audio_possible_drivers="dsound sdl"
717307119e7SGerd Hoffmann  if check_include dsound.h; then
7183cec7cc2SKővágó, Zoltán    audio_drv_list="dsound"
719307119e7SGerd Hoffmann  else
720307119e7SGerd Hoffmann    audio_drv_list=""
721307119e7SGerd Hoffmann  fi
722898be3e0SPeter Maydell  supported_os="yes"
723fb648e9cSDaniel P. Berrangé  pie="no"
72467b915a5Sbellard;;
7255c40d2bdSthsGNU/kFreeBSD)
726a167ba50SAurelien Jarno  bsd="yes"
7276a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7280bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
7295c40d2bdSths;;
7307d3505c5SbellardFreeBSD)
7317d3505c5Sbellard  bsd="yes"
7320db4a067SPaolo Bonzini  make="${MAKE-gmake}"
7336a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7340bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
735f01576f1SJuergen Lock  # needed for kinfo_getvmmap(3) in libutil.h
73658952137SVincenzo Maffione  netmap=""  # enable netmap autodetect
7377d3505c5Sbellard;;
738c5e97233Sblueswir1DragonFly)
739c5e97233Sblueswir1  bsd="yes"
7400db4a067SPaolo Bonzini  make="${MAKE-gmake}"
7416a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7420bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
743c5e97233Sblueswir1;;
7447d3505c5SbellardNetBSD)
7457d3505c5Sbellard  bsd="yes"
7460db4a067SPaolo Bonzini  make="${MAKE-gmake}"
7476a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7480bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl"
7498ef92a88Sblueswir1  oss_lib="-lossaudio"
7507d3505c5Sbellard;;
7517d3505c5SbellardOpenBSD)
7527d3505c5Sbellard  bsd="yes"
7530db4a067SPaolo Bonzini  make="${MAKE-gmake}"
754f92c7168SGerd Hoffmann  audio_drv_list="try-sdl"
7550bac1111SKővágó, Zoltán  audio_possible_drivers="sdl"
7567d3505c5Sbellard;;
75783fb7adfSbellardDarwin)
75883fb7adfSbellard  bsd="yes"
75983fb7adfSbellard  darwin="yes"
7601b0f9cc2Saliguori  if [ "$cpu" = "x86_64" ] ; then
761a558ee17SJuan Quintela    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
762db5adeaaSPaolo Bonzini    QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
7631b0f9cc2Saliguori  fi
764b4e312e9SPaolo Bonzini  cocoa="enabled"
7656a485418SGerd Hoffmann  audio_drv_list="coreaudio try-sdl"
76614382605SKővágó, Zoltán  audio_possible_drivers="coreaudio sdl"
767db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
768a0b7cf6bSPeter Maydell  # Disable attempts to use ObjectiveC features in os/object.h since they
769a0b7cf6bSPeter Maydell  # won't work when we're compiling with gcc as a C compiler.
770a0b7cf6bSPeter Maydell  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
77183fb7adfSbellard;;
772ec530c81SbellardSunOS)
773ec530c81Sbellard  solaris="yes"
7740db4a067SPaolo Bonzini  make="${MAKE-gmake}"
775e2d8830eSBrad  smbd="${SMBD-/usr/sfw/sbin/smbd}"
7766b4d2ba1Sths  if test -f /usr/include/sys/soundcard.h ; then
7776a485418SGerd Hoffmann    audio_drv_list="oss try-sdl"
7786b4d2ba1Sths  fi
779c2de5c91Smalc  audio_possible_drivers="oss sdl"
780d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h
781d741429aSBlue Swirl  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
782d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h
783d741429aSBlue Swirl  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
784ec530c81Sbellard;;
785179cf400SAndreas FärberHaiku)
786179cf400SAndreas Färber  haiku="yes"
787fc433430SDavid CARLIER  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
788179cf400SAndreas Färber;;
789898be3e0SPeter MaydellLinux)
7907183834aSGerd Hoffmann  audio_drv_list="try-pa oss"
7910bac1111SKővágó, Zoltán  audio_possible_drivers="oss alsa sdl pa"
7925327cf48Sbellard  linux="yes"
793831b7825Sths  linux_user="yes"
79458683d07SPaolo Bonzini  QEMU_INCLUDES="-isystem ${source_path}/linux-headers -Ilinux-headers $QEMU_INCLUDES"
795898be3e0SPeter Maydell;;
7967d13299dSbellardesac
7977d13299dSbellard
7987d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
799b1a550a0Spbrook  if [ "$darwin" != "yes" ] ; then
80084778508Sblueswir1    bsd_user="yes"
8017d3505c5Sbellard  fi
80208de3949SAndreas Färberfi
8037d3505c5Sbellard
8040db4a067SPaolo Bonzini: ${make=${MAKE-make}}
805b6daf4d3SPaolo Bonzini
806faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally
807faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so
808ddf90699SEduardo Habkost# we check that too
809faf44142SDaniel P. Berrangépython=
8100a01d76fSMarc-André Lureauexplicit_python=no
811ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python
812faf44142SDaniel P. Berrangédo
813faf44142SDaniel P. Berrangé    if has "$binary"
814faf44142SDaniel P. Berrangé    then
81595c5f2deSPaolo Bonzini        python=$(command -v "$binary")
816faf44142SDaniel P. Berrangé        break
817faf44142SDaniel P. Berrangé    fi
818faf44142SDaniel P. Berrangédone
819903458c8SMarkus Armbruster
820903458c8SMarkus Armbrustersphinx_build=
821903458c8SMarkus Armbrusterfor binary in sphinx-build-3 sphinx-build
822903458c8SMarkus Armbrusterdo
823903458c8SMarkus Armbruster    if has "$binary"
824903458c8SMarkus Armbruster    then
825903458c8SMarkus Armbruster        sphinx_build=$(command -v "$binary")
826903458c8SMarkus Armbruster        break
827903458c8SMarkus Armbruster    fi
828903458c8SMarkus Armbrusterdone
829903458c8SMarkus Armbruster
83039d87c8cSAlex Bennée# Check for ancillary tools used in testing
83139d87c8cSAlex Bennéegenisoimage=
8323df437c7SAlex Bennéefor binary in genisoimage mkisofs
83339d87c8cSAlex Bennéedo
83439d87c8cSAlex Bennée    if has $binary
83539d87c8cSAlex Bennée    then
83639d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
83739d87c8cSAlex Bennée        break
83839d87c8cSAlex Bennée    fi
83939d87c8cSAlex Bennéedone
84039d87c8cSAlex Bennée
841e2d8830eSBrad: ${smbd=${SMBD-/usr/sbin/smbd}}
8420db4a067SPaolo Bonzini
8433c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
8443c4a4d0dSPeter Maydellif has clang; then
8453c4a4d0dSPeter Maydell  objcc=clang
8463c4a4d0dSPeter Maydellelse
8473c4a4d0dSPeter Maydell  objcc="$cc"
8483c4a4d0dSPeter Maydellfi
8493c4a4d0dSPeter Maydell
8503457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
8513457a3f8SJuan Quintela  EXESUF=".exe"
852484e2cc7SPaolo Bonzini  HOST_DSOSUF=".dll"
85378e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
854086d5f75SPaolo Bonzini  CFLAGS="-mthreads $CFLAGS"
85593b25869SJohn Snow  write_c_skeleton;
856d17f305aSPaolo Bonzini  prefix="/qemu"
85777433a5fSMarc-André Lureau  qemu_suffix=""
858105fad6bSBishara AbuHattoum  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
8593457a3f8SJuan Quintelafi
8603457a3f8SJuan Quintela
861487fefdbSAnthony Liguoriwerror=""
86285aa5189Sbellard
8637d13299dSbellardfor opt do
86489138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
8657d13299dSbellard  case "$opt" in
8662efc3265Sbellard  --help|-h) show_help=yes
8672efc3265Sbellard  ;;
86899123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
86999123e13SMike Frysinger  ;;
870b1a550a0Spbrook  --prefix=*) prefix="$optarg"
8717d13299dSbellard  ;;
872b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
87332ce6337Sbellard  ;;
874ac0df51dSaliguori  --cross-prefix=*)
8757d13299dSbellard  ;;
876ac0df51dSaliguori  --cc=*)
8777d13299dSbellard  ;;
878b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
87983469015Sbellard  ;;
88083f73fceSTomoki Sekiyama  --cxx=*)
88183f73fceSTomoki Sekiyama  ;;
882e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
883e007dbecSMichael S. Tsirkin  ;;
8843c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
8853c4a4d0dSPeter Maydell  ;;
886b1a550a0Spbrook  --make=*) make="$optarg"
8877d13299dSbellard  ;;
888b6daf4d3SPaolo Bonzini  --install=*)
8896a882643Spbrook  ;;
8900a01d76fSMarc-André Lureau  --python=*) python="$optarg" ; explicit_python=yes
891c886edfbSBlue Swirl  ;;
8922eb054c2SPeter Maydell  --sphinx-build=*) sphinx_build="$optarg"
8932eb054c2SPeter Maydell  ;;
894a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
895a5665051SPaolo Bonzini  ;;
896a5665051SPaolo Bonzini  --meson=*) meson="$optarg"
897a5665051SPaolo Bonzini  ;;
89848328880SPaolo Bonzini  --ninja=*) ninja="$optarg"
89948328880SPaolo Bonzini  ;;
900e2d8830eSBrad  --smbd=*) smbd="$optarg"
901e2d8830eSBrad  ;;
902e2a2ed06SJuan Quintela  --extra-cflags=*)
9037d13299dSbellard  ;;
90411cde1c8SBruno Dominguez  --extra-cxxflags=*)
90511cde1c8SBruno Dominguez  ;;
906e2a2ed06SJuan Quintela  --extra-ldflags=*)
9077d13299dSbellard  ;;
9085bc62e01SGerd Hoffmann  --enable-debug-info)
9095bc62e01SGerd Hoffmann  ;;
9105bc62e01SGerd Hoffmann  --disable-debug-info)
9115bc62e01SGerd Hoffmann  ;;
912d75402b5SAlex Bennée  --cross-cc-*)
913d75402b5SAlex Bennée  ;;
91417969268SFam Zheng  --enable-modules)
91517969268SFam Zheng      modules="yes"
91617969268SFam Zheng  ;;
9173aa88b31SStefan Hajnoczi  --disable-modules)
9183aa88b31SStefan Hajnoczi      modules="no"
9193aa88b31SStefan Hajnoczi  ;;
920bd83c861SChristian Ehrhardt  --disable-module-upgrades) module_upgrades="no"
921bd83c861SChristian Ehrhardt  ;;
922bd83c861SChristian Ehrhardt  --enable-module-upgrades) module_upgrades="yes"
923bd83c861SChristian Ehrhardt  ;;
9242ff6b91eSJuan Quintela  --cpu=*)
9257d13299dSbellard  ;;
926b1a550a0Spbrook  --target-list=*) target_list="$optarg"
927447e133fSAlex Bennée                   if test "$target_list_exclude"; then
928447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
929447e133fSAlex Bennée                   fi
930447e133fSAlex Bennée  ;;
931447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
932447e133fSAlex Bennée                   if test "$target_list"; then
933447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
934447e133fSAlex Bennée                   fi
935de83cd02Sbellard  ;;
9365b808275SLluís Vilanova  --enable-trace-backends=*) trace_backends="$optarg"
9375b808275SLluís Vilanova  ;;
9385b808275SLluís Vilanova  # XXX: backwards compatibility
9395b808275SLluís Vilanova  --enable-trace-backend=*) trace_backends="$optarg"
94094a420b1SStefan Hajnoczi  ;;
94174242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
9429410b56cSPrerna Saxena  ;;
943f3494749SPaolo Bonzini  --with-default-devices) default_devices="yes"
944f3494749SPaolo Bonzini  ;;
945f3494749SPaolo Bonzini  --without-default-devices) default_devices="no"
946f3494749SPaolo Bonzini  ;;
9477d13299dSbellard  --enable-gprof) gprof="yes"
9487d13299dSbellard  ;;
9491d728c39SBlue Swirl  --enable-gcov) gcov="yes"
9501d728c39SBlue Swirl  ;;
95179427693SLoïc Minier  --static)
95279427693SLoïc Minier    static="yes"
95317884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
95443ce4dfeSbellard  ;;
9550b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
9560b24e75fSPaolo Bonzini  ;;
9570b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
9580b24e75fSPaolo Bonzini  ;;
9593aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
9603aa5d2beSAlon Levy  ;;
9618bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
9628bf188aaSMichael Tokarev  ;;
9630f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
9640f94d6daSAlon Levy  ;;
965528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
9660b24e75fSPaolo Bonzini  ;;
96777433a5fSMarc-André Lureau  --with-suffix=*) qemu_suffix="$optarg"
968023d3d67SEduardo Habkost  ;;
969850da188SEduardo Habkost  --docdir=*) qemu_docdir="$optarg"
9700b24e75fSPaolo Bonzini  ;;
971ca2fb938SAndre Przywara  --sysconfdir=*) sysconfdir="$optarg"
97207381cc1SAnthony Liguori  ;;
973785c23aeSLuiz Capitulino  --localstatedir=*) local_statedir="$optarg"
974785c23aeSLuiz Capitulino  ;;
9753d5eecabSGerd Hoffmann  --firmwarepath=*) firmwarepath="$optarg"
9763d5eecabSGerd Hoffmann  ;;
977181ce1d0SOlaf Hering  --host=*|--build=*|\
978181ce1d0SOlaf Hering  --disable-dependency-tracking|\
979785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
980023ddd74SMax Filippov  --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
981023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
982023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
983023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
984023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
985023ddd74SMax Filippov    # lots of directory switches by default.
986023ddd74SMax Filippov  ;;
98735be72baSPaolo Bonzini  --disable-sdl) sdl="disabled"
98897a847bcSbellard  ;;
98935be72baSPaolo Bonzini  --enable-sdl) sdl="enabled"
990c4198157SJuan Quintela  ;;
99135be72baSPaolo Bonzini  --disable-sdl-image) sdl_image="disabled"
992a442fe2fSDaniel P. Berrangé  ;;
99335be72baSPaolo Bonzini  --enable-sdl-image) sdl_image="enabled"
994a442fe2fSDaniel P. Berrangé  ;;
9953556c233SPaolo Bonzini  --disable-qom-cast-debug) qom_cast_debug="no"
9963556c233SPaolo Bonzini  ;;
9973556c233SPaolo Bonzini  --enable-qom-cast-debug) qom_cast_debug="yes"
9983556c233SPaolo Bonzini  ;;
999983eef5aSMeador Inge  --disable-virtfs) virtfs="no"
1000983eef5aSMeador Inge  ;;
1001983eef5aSMeador Inge  --enable-virtfs) virtfs="yes"
1002983eef5aSMeador Inge  ;;
10036ec0e15dSPaolo Bonzini  --disable-mpath) mpath="disabled"
1004fe8fc5aeSPaolo Bonzini  ;;
10056ec0e15dSPaolo Bonzini  --enable-mpath) mpath="enabled"
1006fe8fc5aeSPaolo Bonzini  ;;
1007a0b93237SPaolo Bonzini  --disable-vnc) vnc="disabled"
1008821601eaSJes Sorensen  ;;
1009a0b93237SPaolo Bonzini  --enable-vnc) vnc="enabled"
1010821601eaSJes Sorensen  ;;
1011e8f3bd71SMarc-André Lureau  --disable-gettext) gettext="false"
1012e8f3bd71SMarc-André Lureau  ;;
1013e8f3bd71SMarc-André Lureau  --enable-gettext) gettext="true"
1014e8f3bd71SMarc-André Lureau  ;;
10152f6a1ab0Sblueswir1  --oss-lib=*) oss_lib="$optarg"
10162f6a1ab0Sblueswir1  ;;
10170c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
10180c58ac1cSmalc  ;;
101989138857SStefan Weil  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1020b64ec4e4SFam Zheng  ;;
102189138857SStefan Weil  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1022eb852011SMarkus Armbruster  ;;
1023f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
1024f8393946Saurel32  ;;
1025f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
1026f8393946Saurel32  ;;
1027f3d08ee6SPaul Brook  --enable-debug)
1028f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
1029f3d08ee6SPaul Brook      debug_tcg="yes"
10301fcc6d42SPeter Xu      debug_mutex="yes"
1031f3d08ee6SPaul Brook      debug="yes"
1032f3d08ee6SPaul Brook      strip_opt="no"
1033b553a042SJohn Snow      fortify_source="no"
1034f3d08ee6SPaul Brook  ;;
1035247724cbSMarc-André Lureau  --enable-sanitizers) sanitizers="yes"
1036247724cbSMarc-André Lureau  ;;
1037247724cbSMarc-André Lureau  --disable-sanitizers) sanitizers="no"
1038247724cbSMarc-André Lureau  ;;
10390aebab04SLingfeng Yang  --enable-tsan) tsan="yes"
10400aebab04SLingfeng Yang  ;;
10410aebab04SLingfeng Yang  --disable-tsan) tsan="no"
10420aebab04SLingfeng Yang  ;;
104303b4fe7dSaliguori  --enable-sparse) sparse="yes"
104403b4fe7dSaliguori  ;;
104503b4fe7dSaliguori  --disable-sparse) sparse="no"
104603b4fe7dSaliguori  ;;
10471625af87Saliguori  --disable-strip) strip_opt="no"
10481625af87Saliguori  ;;
1049a0b93237SPaolo Bonzini  --disable-vnc-sasl) vnc_sasl="disabled"
10502f9606b3Saliguori  ;;
1051a0b93237SPaolo Bonzini  --enable-vnc-sasl) vnc_sasl="enabled"
1052ea784e3bSJuan Quintela  ;;
1053a0b93237SPaolo Bonzini  --disable-vnc-jpeg) vnc_jpeg="disabled"
10542f6f5c7aSCorentin Chary  ;;
1055a0b93237SPaolo Bonzini  --enable-vnc-jpeg) vnc_jpeg="enabled"
10562f6f5c7aSCorentin Chary  ;;
1057a0b93237SPaolo Bonzini  --disable-vnc-png) vnc_png="disabled"
1058efe556adSCorentin Chary  ;;
1059a0b93237SPaolo Bonzini  --enable-vnc-png) vnc_png="enabled"
1060efe556adSCorentin Chary  ;;
1061443f1376Sbellard  --disable-slirp) slirp="no"
1062c20709aaSbellard  ;;
10637c57bdd8SMarc-André Lureau  --enable-slirp=git) slirp="git"
10647c57bdd8SMarc-André Lureau  ;;
1065675b9b53SMarc-André Lureau  --enable-slirp=system) slirp="system"
1066675b9b53SMarc-André Lureau  ;;
1067e0e6c8c0Saliguori  --disable-vde) vde="no"
10688a16d273Sths  ;;
1069dfb278bdSJuan Quintela  --enable-vde) vde="yes"
1070dfb278bdSJuan Quintela  ;;
107158952137SVincenzo Maffione  --disable-netmap) netmap="no"
107258952137SVincenzo Maffione  ;;
107358952137SVincenzo Maffione  --enable-netmap) netmap="yes"
107458952137SVincenzo Maffione  ;;
10751badb709SPaolo Bonzini  --disable-xen) xen="disabled"
1076e37630caSaliguori  ;;
10771badb709SPaolo Bonzini  --enable-xen) xen="enabled"
1078fc321b4bSJuan Quintela  ;;
10791badb709SPaolo Bonzini  --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1080eb6fda0fSAnthony PERARD  ;;
10811badb709SPaolo Bonzini  --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1082eb6fda0fSAnthony PERARD  ;;
10832e4d9fb1Saurel32  --disable-brlapi) brlapi="no"
10842e4d9fb1Saurel32  ;;
10854ffcedb6SJuan Quintela  --enable-brlapi) brlapi="yes"
10864ffcedb6SJuan Quintela  ;;
10871badb709SPaolo Bonzini  --disable-kvm) kvm="disabled"
10887ba1e619Saliguori  ;;
10891badb709SPaolo Bonzini  --enable-kvm) kvm="enabled"
1090b31a0277SJuan Quintela  ;;
10911badb709SPaolo Bonzini  --disable-hax) hax="disabled"
1092180fb750Szhanghailiang  ;;
10931badb709SPaolo Bonzini  --enable-hax) hax="enabled"
1094180fb750Szhanghailiang  ;;
10951badb709SPaolo Bonzini  --disable-hvf) hvf="disabled"
1096c97d6d2cSSergio Andres Gomez Del Real  ;;
10971badb709SPaolo Bonzini  --enable-hvf) hvf="enabled"
1098c97d6d2cSSergio Andres Gomez Del Real  ;;
10991badb709SPaolo Bonzini  --disable-whpx) whpx="disabled"
1100d661d9a4SJustin Terry (VM)  ;;
11011badb709SPaolo Bonzini  --enable-whpx) whpx="enabled"
1102d661d9a4SJustin Terry (VM)  ;;
11039195b2c2SStefan Weil  --disable-tcg-interpreter) tcg_interpreter="no"
11049195b2c2SStefan Weil  ;;
11059195b2c2SStefan Weil  --enable-tcg-interpreter) tcg_interpreter="yes"
11069195b2c2SStefan Weil  ;;
110747e98658SCorey Bryant  --disable-cap-ng)  cap_ng="no"
110847e98658SCorey Bryant  ;;
110947e98658SCorey Bryant  --enable-cap-ng) cap_ng="yes"
111047e98658SCorey Bryant  ;;
11111badb709SPaolo Bonzini  --disable-tcg) tcg="disabled"
1112b3f6ea7eSPaolo Bonzini  ;;
11131badb709SPaolo Bonzini  --enable-tcg) tcg="enabled"
1114b3f6ea7eSPaolo Bonzini  ;;
1115aa087962SPaolo Bonzini  --disable-malloc-trim) malloc_trim="disabled"
11165a22ab71SYang Zhong  ;;
1117aa087962SPaolo Bonzini  --enable-malloc-trim) malloc_trim="enabled"
11185a22ab71SYang Zhong  ;;
1119cd4ec0b4SGerd Hoffmann  --disable-spice) spice="no"
1120cd4ec0b4SGerd Hoffmann  ;;
1121cd4ec0b4SGerd Hoffmann  --enable-spice) spice="yes"
1122cd4ec0b4SGerd Hoffmann  ;;
1123c589b249SRonnie Sahlberg  --disable-libiscsi) libiscsi="no"
1124c589b249SRonnie Sahlberg  ;;
1125c589b249SRonnie Sahlberg  --enable-libiscsi) libiscsi="yes"
1126c589b249SRonnie Sahlberg  ;;
11276542aa9cSPeter Lieven  --disable-libnfs) libnfs="no"
11286542aa9cSPeter Lieven  ;;
11296542aa9cSPeter Lieven  --enable-libnfs) libnfs="yes"
11306542aa9cSPeter Lieven  ;;
113105c2a3e7Sbellard  --enable-profiler) profiler="yes"
113205c2a3e7Sbellard  ;;
1133b4e312e9SPaolo Bonzini  --disable-cocoa) cocoa="disabled"
113414821030SPavel Borzenkov  ;;
1135c2de5c91Smalc  --enable-cocoa)
1136b4e312e9SPaolo Bonzini      cocoa="enabled" ;
113789138857SStefan Weil      audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
11385b0753e0Sbellard  ;;
1139cad25d69Spbrook  --disable-system) softmmu="no"
11400a8e90f4Spbrook  ;;
1141cad25d69Spbrook  --enable-system) softmmu="yes"
11420a8e90f4Spbrook  ;;
11430953a80fSZachary Amsden  --disable-user)
11440953a80fSZachary Amsden      linux_user="no" ;
11450953a80fSZachary Amsden      bsd_user="no" ;
11460953a80fSZachary Amsden  ;;
11470953a80fSZachary Amsden  --enable-user) ;;
1148831b7825Sths  --disable-linux-user) linux_user="no"
11490a8e90f4Spbrook  ;;
1150831b7825Sths  --enable-linux-user) linux_user="yes"
1151831b7825Sths  ;;
115284778508Sblueswir1  --disable-bsd-user) bsd_user="no"
115384778508Sblueswir1  ;;
115484778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
115584778508Sblueswir1  ;;
115640d6444eSAvi Kivity  --enable-pie) pie="yes"
115734005a00SKirill A. Shutemov  ;;
115840d6444eSAvi Kivity  --disable-pie) pie="no"
115934005a00SKirill A. Shutemov  ;;
116085aa5189Sbellard  --enable-werror) werror="yes"
116185aa5189Sbellard  ;;
116285aa5189Sbellard  --disable-werror) werror="no"
116385aa5189Sbellard  ;;
116463678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
116563678e17SSteven Noonan  ;;
116663678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
116763678e17SSteven Noonan  ;;
11681e4f6065SDaniele Buono  --enable-safe-stack) safe_stack="yes"
11691e4f6065SDaniele Buono  ;;
11701e4f6065SDaniele Buono  --disable-safe-stack) safe_stack="no"
11711e4f6065SDaniele Buono  ;;
11724d3b6f6eSbalrog  --disable-curses) curses="no"
11734d3b6f6eSbalrog  ;;
1174c584a6d0SJuan Quintela  --enable-curses) curses="yes"
1175c584a6d0SJuan Quintela  ;;
1176e08bb301SSamuel Thibault  --disable-iconv) iconv="no"
1177e08bb301SSamuel Thibault  ;;
1178e08bb301SSamuel Thibault  --enable-iconv) iconv="yes"
1179e08bb301SSamuel Thibault  ;;
1180769ce76dSAlexander Graf  --disable-curl) curl="no"
1181769ce76dSAlexander Graf  ;;
1182788c8196SJuan Quintela  --enable-curl) curl="yes"
1183788c8196SJuan Quintela  ;;
11842df87df7SJuan Quintela  --disable-fdt) fdt="no"
11852df87df7SJuan Quintela  ;;
11862df87df7SJuan Quintela  --enable-fdt) fdt="yes"
11872df87df7SJuan Quintela  ;;
11885c6c3a6cSChristoph Hellwig  --disable-linux-aio) linux_aio="no"
11895c6c3a6cSChristoph Hellwig  ;;
11905c6c3a6cSChristoph Hellwig  --enable-linux-aio) linux_aio="yes"
11915c6c3a6cSChristoph Hellwig  ;;
1192c10dd856SAarushi Mehta  --disable-linux-io-uring) linux_io_uring="no"
1193c10dd856SAarushi Mehta  ;;
1194c10dd856SAarushi Mehta  --enable-linux-io-uring) linux_io_uring="yes"
1195c10dd856SAarushi Mehta  ;;
1196758e8e38SVenkateswararao Jujjuri (JV)  --disable-attr) attr="no"
1197758e8e38SVenkateswararao Jujjuri (JV)  ;;
1198758e8e38SVenkateswararao Jujjuri (JV)  --enable-attr) attr="yes"
1199758e8e38SVenkateswararao Jujjuri (JV)  ;;
1200a40161cbSPaolo Bonzini  --disable-membarrier) membarrier="no"
1201a40161cbSPaolo Bonzini  ;;
1202a40161cbSPaolo Bonzini  --enable-membarrier) membarrier="yes"
1203a40161cbSPaolo Bonzini  ;;
120477755340Sths  --disable-blobs) blobs="no"
120577755340Sths  ;;
12067e563bfbSThomas Huth  --with-pkgversion=*) pkgversion="$optarg"
12074a19f1ecSpbrook  ;;
1208519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
1209519175a2SAlex Barcelo  ;;
121070c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
121170c60c08SStefan Hajnoczi  ;;
121270c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
121370c60c08SStefan Hajnoczi  ;;
12147d992e4dSPeter Lieven  --enable-debug-stack-usage) debug_stack_usage="yes"
12157d992e4dSPeter Lieven  ;;
1216f0d92b56SLongpeng(Mike)  --enable-crypto-afalg) crypto_afalg="yes"
1217f0d92b56SLongpeng(Mike)  ;;
1218f0d92b56SLongpeng(Mike)  --disable-crypto-afalg) crypto_afalg="no"
1219f0d92b56SLongpeng(Mike)  ;;
1220a25dba17SJuan Quintela  --disable-docs) docs="no"
122170ec5dc0SAnthony Liguori  ;;
1222a25dba17SJuan Quintela  --enable-docs) docs="yes"
122383a3ab8bSJuan Quintela  ;;
1224d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
1225d5970055SMichael S. Tsirkin  ;;
1226d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
1227d5970055SMichael S. Tsirkin  ;;
1228042cea27SGonglei  --disable-vhost-crypto) vhost_crypto="no"
1229042cea27SGonglei  ;;
1230299e6f19SPaolo Bonzini  --enable-vhost-crypto) vhost_crypto="yes"
1231042cea27SGonglei  ;;
12325e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
12335e9be92dSNicholas Bellinger  ;;
12345e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
12355e9be92dSNicholas Bellinger  ;;
1236fc0b9b0eSStefan Hajnoczi  --disable-vhost-vsock) vhost_vsock="no"
1237fc0b9b0eSStefan Hajnoczi  ;;
1238fc0b9b0eSStefan Hajnoczi  --enable-vhost-vsock) vhost_vsock="yes"
1239fc0b9b0eSStefan Hajnoczi  ;;
124098fc1adaSDr. David Alan Gilbert  --disable-vhost-user-fs) vhost_user_fs="no"
124198fc1adaSDr. David Alan Gilbert  ;;
124298fc1adaSDr. David Alan Gilbert  --enable-vhost-user-fs) vhost_user_fs="yes"
124398fc1adaSDr. David Alan Gilbert  ;;
1244da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
124520ff075bSMichael Walle  ;;
1246da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
124720ff075bSMichael Walle  ;;
1248f27aaf4bSChristian Brunner  --disable-rbd) rbd="no"
1249f27aaf4bSChristian Brunner  ;;
1250f27aaf4bSChristian Brunner  --enable-rbd) rbd="yes"
1251f27aaf4bSChristian Brunner  ;;
12528c84cf11SSergei Trofimovich  --disable-xfsctl) xfs="no"
12538c84cf11SSergei Trofimovich  ;;
12548c84cf11SSergei Trofimovich  --enable-xfsctl) xfs="yes"
12558c84cf11SSergei Trofimovich  ;;
12567b02f544SMarc-André Lureau  --disable-smartcard) smartcard="no"
1257111a38b0SRobert Relyea  ;;
12587b02f544SMarc-André Lureau  --enable-smartcard) smartcard="yes"
1259111a38b0SRobert Relyea  ;;
12600a40bcb7SCésar Belley  --disable-u2f) u2f="disabled"
12610a40bcb7SCésar Belley  ;;
12620a40bcb7SCésar Belley  --enable-u2f) u2f="enabled"
12630a40bcb7SCésar Belley  ;;
12642b2325ffSGerd Hoffmann  --disable-libusb) libusb="no"
12652b2325ffSGerd Hoffmann  ;;
12662b2325ffSGerd Hoffmann  --enable-libusb) libusb="yes"
12672b2325ffSGerd Hoffmann  ;;
126869354a83SHans de Goede  --disable-usb-redir) usb_redir="no"
126969354a83SHans de Goede  ;;
127069354a83SHans de Goede  --enable-usb-redir) usb_redir="yes"
127169354a83SHans de Goede  ;;
12721ffb3bbbSPaolo Bonzini  --disable-zlib-test)
12731ece9905SAlon Levy  ;;
1274b25c9dffSStefan Weil  --disable-lzo) lzo="no"
1275b25c9dffSStefan Weil  ;;
1276607dacd0Sqiaonuohan  --enable-lzo) lzo="yes"
1277607dacd0Sqiaonuohan  ;;
1278b25c9dffSStefan Weil  --disable-snappy) snappy="no"
1279b25c9dffSStefan Weil  ;;
1280607dacd0Sqiaonuohan  --enable-snappy) snappy="yes"
1281607dacd0Sqiaonuohan  ;;
12826b383c08SPeter Wu  --disable-bzip2) bzip2="no"
12836b383c08SPeter Wu  ;;
12846b383c08SPeter Wu  --enable-bzip2) bzip2="yes"
12856b383c08SPeter Wu  ;;
128683bc1f97SJulio Faracco  --enable-lzfse) lzfse="yes"
128783bc1f97SJulio Faracco  ;;
128883bc1f97SJulio Faracco  --disable-lzfse) lzfse="no"
128983bc1f97SJulio Faracco  ;;
12903a678481SJuan Quintela  --disable-zstd) zstd="no"
12913a678481SJuan Quintela  ;;
12923a678481SJuan Quintela  --enable-zstd) zstd="yes"
12933a678481SJuan Quintela  ;;
1294d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1295d138cee9SMichael Roth  ;;
1296d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1297d138cee9SMichael Roth  ;;
12989dacf32dSYossi Hindin  --enable-guest-agent-msi) guest_agent_msi="yes"
12999dacf32dSYossi Hindin  ;;
13009dacf32dSYossi Hindin  --disable-guest-agent-msi) guest_agent_msi="no"
13019dacf32dSYossi Hindin  ;;
1302d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1303d9840e25STomoki Sekiyama  ;;
1304d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1305d9840e25STomoki Sekiyama  ;;
1306d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1307d9840e25STomoki Sekiyama  ;;
1308d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1309d9840e25STomoki Sekiyama  ;;
1310d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1311d9840e25STomoki Sekiyama  ;;
1312d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1313d9840e25STomoki Sekiyama  ;;
13144b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
13154b1c11fdSDaniel P. Berrange  ;;
13164b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
13174b1c11fdSDaniel P. Berrange  ;;
1318f794573eSEduardo Otubo  --enable-seccomp) seccomp="yes"
1319f794573eSEduardo Otubo  ;;
1320f794573eSEduardo Otubo  --disable-seccomp) seccomp="no"
1321f794573eSEduardo Otubo  ;;
1322eb100396SBharata B Rao  --disable-glusterfs) glusterfs="no"
1323eb100396SBharata B Rao  ;;
132486583a07SLiam Merwick  --disable-avx2) avx2_opt="no"
132586583a07SLiam Merwick  ;;
132686583a07SLiam Merwick  --enable-avx2) avx2_opt="yes"
132786583a07SLiam Merwick  ;;
13286b8cd447SRobert Hoo  --disable-avx512f) avx512f_opt="no"
13296b8cd447SRobert Hoo  ;;
13306b8cd447SRobert Hoo  --enable-avx512f) avx512f_opt="yes"
13316b8cd447SRobert Hoo  ;;
13326b8cd447SRobert Hoo
1333eb100396SBharata B Rao  --enable-glusterfs) glusterfs="yes"
1334eb100396SBharata B Rao  ;;
133552b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
133652b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1337583f6e7bSStefan Hajnoczi  ;;
1338cb6414dfSFam Zheng  --enable-vhdx|--disable-vhdx)
1339cb6414dfSFam Zheng      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1340cb6414dfSFam Zheng  ;;
1341315d3184SFam Zheng  --enable-uuid|--disable-uuid)
1342315d3184SFam Zheng      echo "$0: $opt is obsolete, UUID support is always built" >&2
1343315d3184SFam Zheng  ;;
1344a4ccabcfSAnthony Liguori  --disable-gtk) gtk="no"
1345a4ccabcfSAnthony Liguori  ;;
1346a4ccabcfSAnthony Liguori  --enable-gtk) gtk="yes"
1347a4ccabcfSAnthony Liguori  ;;
1348a1c5e949SDaniel P. Berrange  --tls-priority=*) tls_priority="$optarg"
1349a1c5e949SDaniel P. Berrange  ;;
1350ddbb0d09SDaniel P. Berrange  --disable-gnutls) gnutls="no"
1351ddbb0d09SDaniel P. Berrange  ;;
1352ddbb0d09SDaniel P. Berrange  --enable-gnutls) gnutls="yes"
1353ddbb0d09SDaniel P. Berrange  ;;
135491bfcdb0SDaniel P. Berrange  --disable-nettle) nettle="no"
135591bfcdb0SDaniel P. Berrange  ;;
135691bfcdb0SDaniel P. Berrange  --enable-nettle) nettle="yes"
135791bfcdb0SDaniel P. Berrange  ;;
135891bfcdb0SDaniel P. Berrange  --disable-gcrypt) gcrypt="no"
135991bfcdb0SDaniel P. Berrange  ;;
136091bfcdb0SDaniel P. Berrange  --enable-gcrypt) gcrypt="yes"
136191bfcdb0SDaniel P. Berrange  ;;
13628953caf3SDaniel P. Berrange  --disable-auth-pam) auth_pam="no"
13638953caf3SDaniel P. Berrange  ;;
13648953caf3SDaniel P. Berrange  --enable-auth-pam) auth_pam="yes"
13658953caf3SDaniel P. Berrange  ;;
13662da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
13672da776dbSMichael R. Hines  ;;
13682da776dbSMichael R. Hines  --disable-rdma) rdma="no"
13692da776dbSMichael R. Hines  ;;
137021ab34c9SMarcel Apfelbaum  --enable-pvrdma) pvrdma="yes"
137121ab34c9SMarcel Apfelbaum  ;;
137221ab34c9SMarcel Apfelbaum  --disable-pvrdma) pvrdma="no"
137321ab34c9SMarcel Apfelbaum  ;;
1374bbbf9bfbSStefan Weil  --disable-vte) vte="no"
1375bbbf9bfbSStefan Weil  ;;
1376bbbf9bfbSStefan Weil  --enable-vte) vte="yes"
1377bbbf9bfbSStefan Weil  ;;
13789d9e1521SGerd Hoffmann  --disable-virglrenderer) virglrenderer="no"
13799d9e1521SGerd Hoffmann  ;;
13809d9e1521SGerd Hoffmann  --enable-virglrenderer) virglrenderer="yes"
13819d9e1521SGerd Hoffmann  ;;
1382e91c793cSCole Robinson  --disable-tpm) tpm="no"
1383e91c793cSCole Robinson  ;;
1384ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1385ab214c29SStefan Berger  ;;
1386b10d49d7SPino Toscano  --disable-libssh) libssh="no"
13870a12ec87SRichard W.M. Jones  ;;
1388b10d49d7SPino Toscano  --enable-libssh) libssh="yes"
13890a12ec87SRichard W.M. Jones  ;;
1390ed1701c6SDr. David Alan Gilbert  --disable-live-block-migration) live_block_migration="no"
1391ed1701c6SDr. David Alan Gilbert  ;;
1392ed1701c6SDr. David Alan Gilbert  --enable-live-block-migration) live_block_migration="yes"
1393ed1701c6SDr. David Alan Gilbert  ;;
1394a99d57bbSWanlong Gao  --disable-numa) numa="no"
1395a99d57bbSWanlong Gao  ;;
1396a99d57bbSWanlong Gao  --enable-numa) numa="yes"
1397a99d57bbSWanlong Gao  ;;
1398ed279a06SKlim Kireev  --disable-libxml2) libxml2="no"
1399ed279a06SKlim Kireev  ;;
1400ed279a06SKlim Kireev  --enable-libxml2) libxml2="yes"
1401ed279a06SKlim Kireev  ;;
14022847b469SFam Zheng  --disable-tcmalloc) tcmalloc="no"
14032847b469SFam Zheng  ;;
14042847b469SFam Zheng  --enable-tcmalloc) tcmalloc="yes"
14052847b469SFam Zheng  ;;
14067b01cb97SAlexandre Derumier  --disable-jemalloc) jemalloc="no"
14077b01cb97SAlexandre Derumier  ;;
14087b01cb97SAlexandre Derumier  --enable-jemalloc) jemalloc="yes"
14097b01cb97SAlexandre Derumier  ;;
1410a6b1d4c0SChanglong Xie  --disable-replication) replication="no"
1411a6b1d4c0SChanglong Xie  ;;
1412a6b1d4c0SChanglong Xie  --enable-replication) replication="yes"
1413a6b1d4c0SChanglong Xie  ;;
14142f740136SJeff Cody  --disable-bochs) bochs="no"
14152f740136SJeff Cody  ;;
14162f740136SJeff Cody  --enable-bochs) bochs="yes"
14172f740136SJeff Cody  ;;
14182f740136SJeff Cody  --disable-cloop) cloop="no"
14192f740136SJeff Cody  ;;
14202f740136SJeff Cody  --enable-cloop) cloop="yes"
14212f740136SJeff Cody  ;;
14222f740136SJeff Cody  --disable-dmg) dmg="no"
14232f740136SJeff Cody  ;;
14242f740136SJeff Cody  --enable-dmg) dmg="yes"
14252f740136SJeff Cody  ;;
14262f740136SJeff Cody  --disable-qcow1) qcow1="no"
14272f740136SJeff Cody  ;;
14282f740136SJeff Cody  --enable-qcow1) qcow1="yes"
14292f740136SJeff Cody  ;;
14302f740136SJeff Cody  --disable-vdi) vdi="no"
14312f740136SJeff Cody  ;;
14322f740136SJeff Cody  --enable-vdi) vdi="yes"
14332f740136SJeff Cody  ;;
14342f740136SJeff Cody  --disable-vvfat) vvfat="no"
14352f740136SJeff Cody  ;;
14362f740136SJeff Cody  --enable-vvfat) vvfat="yes"
14372f740136SJeff Cody  ;;
14382f740136SJeff Cody  --disable-qed) qed="no"
14392f740136SJeff Cody  ;;
14402f740136SJeff Cody  --enable-qed) qed="yes"
14412f740136SJeff Cody  ;;
14422f740136SJeff Cody  --disable-parallels) parallels="no"
14432f740136SJeff Cody  ;;
14442f740136SJeff Cody  --enable-parallels) parallels="yes"
14452f740136SJeff Cody  ;;
14462f740136SJeff Cody  --disable-sheepdog) sheepdog="no"
14472f740136SJeff Cody  ;;
14482f740136SJeff Cody  --enable-sheepdog) sheepdog="yes"
14492f740136SJeff Cody  ;;
1450e6a74868SMarc-André Lureau  --disable-vhost-user) vhost_user="no"
1451e6a74868SMarc-André Lureau  ;;
1452299e6f19SPaolo Bonzini  --enable-vhost-user) vhost_user="yes"
1453299e6f19SPaolo Bonzini  ;;
1454108a6481SCindy Lu  --disable-vhost-vdpa) vhost_vdpa="no"
1455108a6481SCindy Lu  ;;
1456108a6481SCindy Lu  --enable-vhost-vdpa) vhost_vdpa="yes"
1457108a6481SCindy Lu  ;;
1458299e6f19SPaolo Bonzini  --disable-vhost-kernel) vhost_kernel="no"
1459299e6f19SPaolo Bonzini  ;;
1460299e6f19SPaolo Bonzini  --enable-vhost-kernel) vhost_kernel="yes"
1461e6a74868SMarc-André Lureau  ;;
14628ca80760SRichard Henderson  --disable-capstone) capstone="no"
14638ca80760SRichard Henderson  ;;
14648ca80760SRichard Henderson  --enable-capstone) capstone="yes"
14658ca80760SRichard Henderson  ;;
1466e219c499SRichard Henderson  --enable-capstone=git) capstone="git"
1467e219c499SRichard Henderson  ;;
1468e219c499SRichard Henderson  --enable-capstone=system) capstone="system"
1469e219c499SRichard Henderson  ;;
1470cc84d63aSDaniel P. Berrange  --with-git=*) git="$optarg"
1471cc84d63aSDaniel P. Berrange  ;;
1472f62bbee5SDaniel P. Berrange  --enable-git-update) git_update=yes
1473f62bbee5SDaniel P. Berrange  ;;
1474f62bbee5SDaniel P. Berrange  --disable-git-update) git_update=no
1475f62bbee5SDaniel P. Berrange  ;;
1476ba59fb77SPaolo Bonzini  --enable-debug-mutex) debug_mutex=yes
1477ba59fb77SPaolo Bonzini  ;;
1478ba59fb77SPaolo Bonzini  --disable-debug-mutex) debug_mutex=no
1479ba59fb77SPaolo Bonzini  ;;
148017824406SJunyan He  --enable-libpmem) libpmem=yes
148117824406SJunyan He  ;;
148217824406SJunyan He  --disable-libpmem) libpmem=no
148317824406SJunyan He  ;;
14844113f4cfSLaurent Vivier  --enable-xkbcommon) xkbcommon="enabled"
148575411919SJames Le Cuirot  ;;
14864113f4cfSLaurent Vivier  --disable-xkbcommon) xkbcommon="disabled"
148775411919SJames Le Cuirot  ;;
148840e8c6f4SAlex Bennée  --enable-plugins) plugins="yes"
148940e8c6f4SAlex Bennée  ;;
149040e8c6f4SAlex Bennée  --disable-plugins) plugins="no"
149140e8c6f4SAlex Bennée  ;;
1492afc3a8f9SAlex Bennée  --enable-containers) use_containers="yes"
1493afc3a8f9SAlex Bennée  ;;
1494afc3a8f9SAlex Bennée  --disable-containers) use_containers="no"
1495afc3a8f9SAlex Bennée  ;;
1496adc28027SAlexander Bulekov  --enable-fuzzing) fuzzing=yes
1497adc28027SAlexander Bulekov  ;;
1498adc28027SAlexander Bulekov  --disable-fuzzing) fuzzing=no
1499adc28027SAlexander Bulekov  ;;
1500f48e590aSAlex Bennée  --gdb=*) gdb_bin="$optarg"
1501f48e590aSAlex Bennée  ;;
1502b767d257SMarek Marczykowski-Górecki  --enable-rng-none) rng_none=yes
1503b767d257SMarek Marczykowski-Górecki  ;;
1504b767d257SMarek Marczykowski-Górecki  --disable-rng-none) rng_none=no
1505b767d257SMarek Marczykowski-Górecki  ;;
150654e7aac0SAlexey Krasikov  --enable-keyring) secret_keyring="yes"
150754e7aac0SAlexey Krasikov  ;;
150854e7aac0SAlexey Krasikov  --disable-keyring) secret_keyring="no"
150954e7aac0SAlexey Krasikov  ;;
151021b2eca6SJingqi Liu  --enable-libdaxctl) libdaxctl=yes
151121b2eca6SJingqi Liu  ;;
151221b2eca6SJingqi Liu  --disable-libdaxctl) libdaxctl=no
151321b2eca6SJingqi Liu  ;;
15142d2ad6d0SFam Zheng  *)
15152d2ad6d0SFam Zheng      echo "ERROR: unknown option $opt"
15162d2ad6d0SFam Zheng      echo "Try '$0 --help' for more information"
15172d2ad6d0SFam Zheng      exit 1
15187f1559c6Sbalrog  ;;
15197d13299dSbellard  esac
15207d13299dSbellarddone
15217d13299dSbellard
152287727cb1SPaolo Bonzinifirmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
152322a87800SMarc-André Lureaulibdir="${libdir:-$prefix/lib}"
152422a87800SMarc-André Lureaulibexecdir="${libexecdir:-$prefix/libexec}"
152522a87800SMarc-André Lureauincludedir="${includedir:-$prefix/include}"
152622a87800SMarc-André Lureau
152722a87800SMarc-André Lureauif test "$mingw32" = "yes" ; then
152822a87800SMarc-André Lureau    mandir="$prefix"
152922a87800SMarc-André Lureau    datadir="$prefix"
1530ca8c0909SMarc-André Lureau    docdir="$prefix"
153122a87800SMarc-André Lureau    bindir="$prefix"
153222a87800SMarc-André Lureau    sysconfdir="$prefix"
153322a87800SMarc-André Lureau    local_statedir=
153422a87800SMarc-André Lureauelse
153522a87800SMarc-André Lureau    mandir="${mandir:-$prefix/share/man}"
153622a87800SMarc-André Lureau    datadir="${datadir:-$prefix/share}"
1537ca8c0909SMarc-André Lureau    docdir="${docdir:-$prefix/share/doc}"
153822a87800SMarc-André Lureau    bindir="${bindir:-$prefix/bin}"
153922a87800SMarc-André Lureau    sysconfdir="${sysconfdir:-$prefix/etc}"
154022a87800SMarc-André Lureau    local_statedir="${local_statedir:-$prefix/var}"
154122a87800SMarc-André Lureaufi
154222a87800SMarc-André Lureau
154340293e58Sbellardcase "$cpu" in
1544e3608d66SRichard Henderson    ppc)
1545e3608d66SRichard Henderson           CPU_CFLAGS="-m32"
1546db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1547e3608d66SRichard Henderson           ;;
1548e3608d66SRichard Henderson    ppc64)
1549e3608d66SRichard Henderson           CPU_CFLAGS="-m64"
1550db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1551e3608d66SRichard Henderson           ;;
15529b9c37c3SRichard Henderson    sparc)
1553f1079bb8SRichard Henderson           CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1554db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
15553142255cSblueswir1           ;;
1556ed968ff1SJuan Quintela    sparc64)
155779f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1558db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
15593142255cSblueswir1           ;;
156076d83bdeSths    s390)
1561061cdd81SRichard Henderson           CPU_CFLAGS="-m31"
1562db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
156328d7cc49SRichard Henderson           ;;
156428d7cc49SRichard Henderson    s390x)
1565061cdd81SRichard Henderson           CPU_CFLAGS="-m64"
1566db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
156776d83bdeSths           ;;
156840293e58Sbellard    i386)
156979f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m32"
1570db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
157140293e58Sbellard           ;;
157240293e58Sbellard    x86_64)
15737ebee43eSRichard Henderson           # ??? Only extremely old AMD cpus do not have cmpxchg16b.
15747ebee43eSRichard Henderson           # If we truly care, we should simply detect this case at
15757ebee43eSRichard Henderson           # runtime and generate the fallback to serial emulation.
15767ebee43eSRichard Henderson           CPU_CFLAGS="-m64 -mcx16"
1577db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1578379f6698SPaul Brook           ;;
1579c72b26ecSRichard Henderson    x32)
1580c72b26ecSRichard Henderson           CPU_CFLAGS="-mx32"
1581db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1582c72b26ecSRichard Henderson           ;;
158330163d89SPeter Maydell    # No special flags required for other host CPUs
15843142255cSblueswir1esac
15853142255cSblueswir1
15862038f8c8SPaolo Bonzinieval "cross_cc_${cpu}=\$host_cc"
15872038f8c8SPaolo Bonzinicross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
158879f3b12fSPeter CrosthwaiteQEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
158979f3b12fSPeter Crosthwaite
1590affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly
1591affc88ccSPeter Maydell# support, even if we're using TCI.
1592affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then
1593affc88ccSPeter Maydell  bsd_user="no"
1594affc88ccSPeter Maydell  linux_user="no"
1595affc88ccSPeter Maydellfi
1596affc88ccSPeter Maydell
15971cf295beSPhilippe Mathieu-Daudéif [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
15981badb709SPaolo Bonzini  tcg="disabled"
15991cf295beSPhilippe Mathieu-Daudéfi
16001cf295beSPhilippe Mathieu-Daudé
160160e0df25SPeter Maydelldefault_target_list=""
1602fdb75aefSPaolo Bonzinideprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu
1603fdb75aefSPaolo Bonzinideprecated_features=""
16046e92f823SPeter Maydellmak_wilds=""
16056e92f823SPeter Maydell
160660e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
1607*73362fc0SPaolo Bonzini    mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
160860e0df25SPeter Maydellfi
160960e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
1610*73362fc0SPaolo Bonzini    mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
161160e0df25SPeter Maydellfi
161260e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
1613*73362fc0SPaolo Bonzini    mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
161460e0df25SPeter Maydellfi
161560e0df25SPeter Maydell
16163a5ae4a9SAlex Bennée# If the user doesn't explicitly specify a deprecated target we will
16173a5ae4a9SAlex Bennée# skip it.
16183a5ae4a9SAlex Bennéeif test -z "$target_list"; then
16193a5ae4a9SAlex Bennée    if test -z "$target_list_exclude"; then
16203a5ae4a9SAlex Bennée        target_list_exclude="$deprecated_targets_list"
16213a5ae4a9SAlex Bennée    else
16223a5ae4a9SAlex Bennée        target_list_exclude="$target_list_exclude,$deprecated_targets_list"
16233a5ae4a9SAlex Bennée    fi
16242d838d9bSAlex Bennéefi
16252d838d9bSAlex Bennée
1626447e133fSAlex Bennéefor config in $mak_wilds; do
1627447e133fSAlex Bennée    target="$(basename "$config" .mak)"
162898db9a06SAlex Bennée    if echo "$target_list_exclude" | grep -vq "$target"; then
1629447e133fSAlex Bennée        default_target_list="${default_target_list} $target"
1630447e133fSAlex Bennée    fi
1631447e133fSAlex Bennéedone
16326e92f823SPeter Maydell
1633c53eeaf7SStefan Hajnoczi# Enumerate public trace backends for --help output
163464a6047dSGreg Kurztrace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1635c53eeaf7SStefan Hajnoczi
1636af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1637af5db58eSpbrookcat << EOF
1638af5db58eSpbrook
1639af5db58eSpbrookUsage: configure [options]
1640af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1641af5db58eSpbrook
164208fb77edSStefan WeilStandard options:
164308fb77edSStefan Weil  --help                   print this message
164408fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
164508fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
164608fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
164708fb77edSStefan Weil  --target-list=LIST       set target list (default: build everything)
164808fb77edSStefan Weil$(echo Available targets: $default_target_list | \
164908fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
1650447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
165108fb77edSStefan Weil
165208fb77edSStefan WeilAdvanced options (experts only):
165308fb77edSStefan Weil  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
165408fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
165508fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
165608fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
165708fb77edSStefan Weil                           build time
165808fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
165908fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
166008fb77edSStefan Weil  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
166111cde1c8SBruno Dominguez  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
166208fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1663d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1664d422b2bcSAlex Bennée  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
166508fb77edSStefan Weil  --make=MAKE              use specified make [$make]
166608fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
16672eb054c2SPeter Maydell  --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1668a5665051SPaolo Bonzini  --meson=MESON            use specified meson [$meson]
166948328880SPaolo Bonzini  --ninja=NINJA            use specified ninja [$ninja]
167008fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1671db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
167208fb77edSStefan Weil  --static                 enable static build [$static]
167308fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
167410ff82d1SMarc-André Lureau  --datadir=PATH           install firmware in PATH/$qemu_suffix
167510ff82d1SMarc-André Lureau  --docdir=PATH            install documentation in PATH/$qemu_suffix
167608fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
167708fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
1678db1b5f13SThomas Huth  --libexecdir=PATH        install helper binaries in PATH
167910ff82d1SMarc-André Lureau  --sysconfdir=PATH        install config in PATH/$qemu_suffix
168008fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
16813d5eecabSGerd Hoffmann  --firmwarepath=PATH      search PATH for firmware files
168213336606SRobert Foley  --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1683ca8c0909SMarc-André Lureau  --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1684db1b5f13SThomas Huth  --with-pkgversion=VERS   use specified string as sub-version of the package
168508fb77edSStefan Weil  --enable-debug           enable common debug build options
1686247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
16870aebab04SLingfeng Yang  --enable-tsan            enable thread sanitizer
168808fb77edSStefan Weil  --disable-strip          disable stripping binaries
168908fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
169063678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
169108fb77edSStefan Weil  --audio-drv-list=LIST    set audio drivers list:
169208fb77edSStefan Weil                           Available drivers: $audio_possible_drivers
169308fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
169408fb77edSStefan Weil  --block-drv-rw-whitelist=L
169508fb77edSStefan Weil                           set block driver read-write whitelist
169608fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
169708fb77edSStefan Weil  --block-drv-ro-whitelist=L
169808fb77edSStefan Weil                           set block driver read-only whitelist
169908fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
17005b808275SLluís Vilanova  --enable-trace-backends=B Set trace backend
1701c53eeaf7SStefan Hajnoczi                           Available backends: $trace_backend_list
170208fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
170308fb77edSStefan Weil                           Default:trace-<pid>
1704c23f23b9SMichael Tokarev  --disable-slirp          disable SLIRP userspace network connectivity
1705c23f23b9SMichael Tokarev  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
17065a22ab71SYang Zhong  --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1707c23f23b9SMichael Tokarev  --oss-lib                path to OSS library
1708c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
170908fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
171033c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
171108fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
1712c23f23b9SMichael Tokarev  --disable-blobs          disable installing provided firmware blobs
1713c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1714c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1715a1c5e949SDaniel P. Berrange  --tls-priority           default TLS protocol/cipher priority string
1716c12d66aaSLin Ma  --enable-gprof           QEMU profiling with gprof
1717c12d66aaSLin Ma  --enable-profiler        profiler support
1718c12d66aaSLin Ma  --enable-debug-stack-usage
1719c12d66aaSLin Ma                           track the maximum stack usage of stacks created by qemu_alloc_stack
172040e8c6f4SAlex Bennée  --enable-plugins
172140e8c6f4SAlex Bennée                           enable plugins via shared library loading
1722afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
1723f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
1724c23f23b9SMichael Tokarev
1725c23f23b9SMichael TokarevOptional features, enabled with --enable-FEATURE and
1726c23f23b9SMichael Tokarevdisabled with --disable-FEATURE, default is enabled if available:
1727c23f23b9SMichael Tokarev
1728c23f23b9SMichael Tokarev  system          all system emulation targets
1729c23f23b9SMichael Tokarev  user            supported user emulation targets
1730c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1731c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1732c23f23b9SMichael Tokarev  docs            build documentation
1733c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1734c23f23b9SMichael Tokarev  guest-agent-msi build guest agent Windows MSI installation package
1735c23f23b9SMichael Tokarev  pie             Position Independent Executables
173621e709aaSMarc-André Lureau  modules         modules support (non-Windows)
1737bd83c861SChristian Ehrhardt  module-upgrades try to load modules from alternate paths for upgrades
1738c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1739c23f23b9SMichael Tokarev  debug-info      debugging information
1740c23f23b9SMichael Tokarev  sparse          sparse checker
17411e4f6065SDaniele Buono  safe-stack      SafeStack Stack Smash Protection. Depends on
17421e4f6065SDaniele Buono                  clang/llvm >= 3.7 and requires coroutine backend ucontext.
1743c23f23b9SMichael Tokarev
1744ddbb0d09SDaniel P. Berrange  gnutls          GNUTLS cryptography support
174591bfcdb0SDaniel P. Berrange  nettle          nettle cryptography support
174691bfcdb0SDaniel P. Berrange  gcrypt          libgcrypt cryptography support
17478953caf3SDaniel P. Berrange  auth-pam        PAM access control
1748c23f23b9SMichael Tokarev  sdl             SDL UI
174904c6e16fSMarkus Armbruster  sdl-image       SDL Image support for icons
1750c23f23b9SMichael Tokarev  gtk             gtk UI
1751c23f23b9SMichael Tokarev  vte             vte support for the gtk UI
1752c23f23b9SMichael Tokarev  curses          curses UI
1753e08bb301SSamuel Thibault  iconv           font glyph conversion support
1754c23f23b9SMichael Tokarev  vnc             VNC UI support
1755c23f23b9SMichael Tokarev  vnc-sasl        SASL encryption for VNC server
1756c23f23b9SMichael Tokarev  vnc-jpeg        JPEG lossy compression for VNC server
1757c23f23b9SMichael Tokarev  vnc-png         PNG compression for VNC server
1758c23f23b9SMichael Tokarev  cocoa           Cocoa UI (Mac OS X only)
1759c23f23b9SMichael Tokarev  virtfs          VirtFS
1760fe8fc5aeSPaolo Bonzini  mpath           Multipath persistent reservation passthrough
1761c23f23b9SMichael Tokarev  xen             xen backend driver support
176270c292afSAnthony PERARD  xen-pci-passthrough    PCI passthrough support for Xen
1763c23f23b9SMichael Tokarev  brlapi          BrlAPI (Braile)
1764c23f23b9SMichael Tokarev  curl            curl connectivity
1765a40161cbSPaolo Bonzini  membarrier      membarrier system call (for Linux 4.14+ or Windows)
1766c23f23b9SMichael Tokarev  fdt             fdt device tree
1767c23f23b9SMichael Tokarev  kvm             KVM acceleration support
1768b0cb0a66SVincent Palatin  hax             HAX acceleration support
1769c97d6d2cSSergio Andres Gomez Del Real  hvf             Hypervisor.framework acceleration support
1770d661d9a4SJustin Terry (VM)  whpx            Windows Hypervisor Platform acceleration support
177121ab34c9SMarcel Apfelbaum  rdma            Enable RDMA-based migration
177221ab34c9SMarcel Apfelbaum  pvrdma          Enable PVRDMA support
1773c23f23b9SMichael Tokarev  vde             support for vde network
1774c23f23b9SMichael Tokarev  netmap          support for netmap network
1775c23f23b9SMichael Tokarev  linux-aio       Linux AIO support
1776c10dd856SAarushi Mehta  linux-io-uring  Linux io_uring support
1777c23f23b9SMichael Tokarev  cap-ng          libcap-ng support
1778c23f23b9SMichael Tokarev  attr            attr and xattr support
1779299e6f19SPaolo Bonzini  vhost-net       vhost-net kernel acceleration support
1780299e6f19SPaolo Bonzini  vhost-vsock     virtio sockets device support
1781299e6f19SPaolo Bonzini  vhost-scsi      vhost-scsi kernel target support
1782299e6f19SPaolo Bonzini  vhost-crypto    vhost-user-crypto backend support
1783299e6f19SPaolo Bonzini  vhost-kernel    vhost kernel backend support
1784299e6f19SPaolo Bonzini  vhost-user      vhost-user backend support
1785108a6481SCindy Lu  vhost-vdpa      vhost-vdpa kernel backend support
1786c23f23b9SMichael Tokarev  spice           spice
1787c23f23b9SMichael Tokarev  rbd             rados block device (rbd)
1788c23f23b9SMichael Tokarev  libiscsi        iscsi support
1789c23f23b9SMichael Tokarev  libnfs          nfs support
17907b02f544SMarc-André Lureau  smartcard       smartcard support (libcacard)
17910a40bcb7SCésar Belley  u2f             U2F support (u2f-emu)
1792c23f23b9SMichael Tokarev  libusb          libusb (for usb passthrough)
1793ed1701c6SDr. David Alan Gilbert  live-block-migration   Block migration in the main migration stream
1794c23f23b9SMichael Tokarev  usb-redir       usb network redirection support
1795c23f23b9SMichael Tokarev  lzo             support of lzo compression library
1796c23f23b9SMichael Tokarev  snappy          support of snappy compression library
1797c23f23b9SMichael Tokarev  bzip2           support of bzip2 compression library
1798c23f23b9SMichael Tokarev                  (for reading bzip2-compressed dmg images)
179983bc1f97SJulio Faracco  lzfse           support of lzfse compression library
180083bc1f97SJulio Faracco                  (for reading lzfse-compressed dmg images)
18013a678481SJuan Quintela  zstd            support for zstd compression library
1802d298ac10SDenis Plotnikov                  (for migration compression and qcow2 cluster compression)
1803c23f23b9SMichael Tokarev  seccomp         seccomp support
1804c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1805c23f23b9SMichael Tokarev  glusterfs       GlusterFS backend
1806c23f23b9SMichael Tokarev  tpm             TPM support
1807b10d49d7SPino Toscano  libssh          ssh block device support
1808c23f23b9SMichael Tokarev  numa            libnuma support
1809ed279a06SKlim Kireev  libxml2         for Parallels image format
1810c23f23b9SMichael Tokarev  tcmalloc        tcmalloc support
18117b01cb97SAlexandre Derumier  jemalloc        jemalloc support
181286583a07SLiam Merwick  avx2            AVX2 optimization support
18136b8cd447SRobert Hoo  avx512f         AVX512F optimization support
1814a6b1d4c0SChanglong Xie  replication     replication support
1815c12d66aaSLin Ma  opengl          opengl support
1816c12d66aaSLin Ma  virglrenderer   virgl rendering support
1817c12d66aaSLin Ma  xfsctl          xfsctl support
1818c12d66aaSLin Ma  qom-cast-debug  cast debugging support
18198de73fa8SCleber Rosa  tools           build qemu-io, qemu-nbd and qemu-img tools
18202f740136SJeff Cody  bochs           bochs image format support
18212f740136SJeff Cody  cloop           cloop image format support
18222f740136SJeff Cody  dmg             dmg image format support
18232f740136SJeff Cody  qcow1           qcow v1 image format support
18242f740136SJeff Cody  vdi             vdi image format support
18252f740136SJeff Cody  vvfat           vvfat image format support
18262f740136SJeff Cody  qed             qed image format support
18272f740136SJeff Cody  parallels       parallels image format support
18282f740136SJeff Cody  sheepdog        sheepdog block driver support
1829f0d92b56SLongpeng(Mike)  crypto-afalg    Linux AF_ALG crypto backend driver
18308ca80760SRichard Henderson  capstone        capstone disassembler support
1831ba59fb77SPaolo Bonzini  debug-mutex     mutex debugging support
183217824406SJunyan He  libpmem         libpmem support
183375411919SJames Le Cuirot  xkbcommon       xkbcommon support
1834b767d257SMarek Marczykowski-Górecki  rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
183521b2eca6SJingqi Liu  libdaxctl       libdaxctl support
183608fb77edSStefan Weil
183708fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1838af5db58eSpbrookEOF
18392d2ad6d0SFam Zhengexit 0
1840af5db58eSpbrookfi
1841af5db58eSpbrook
18429c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
1843bb768f71SThomas Huthrm -f */config-devices.mak.d
18449c790242SThomas Huth
1845faf44142SDaniel P. Berrangéif test -z "$python"
1846faf44142SDaniel P. Berrangéthen
1847c53eeaf7SStefan Hajnoczi    error_exit "Python not found. Use --python=/path/to/python"
1848c53eeaf7SStefan Hajnoczifi
1849c53eeaf7SStefan Hajnoczi
1850c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit
1851c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value.
18521b11f28dSThomas Huthif ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
18531b11f28dSThomas Huth  error_exit "Cannot use '$python', Python >= 3.6 is required." \
1854c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
1855c53eeaf7SStefan Hajnoczifi
1856c53eeaf7SStefan Hajnoczi
1857755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it
1858406ab2f3SCleber Rosapython_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
1859755ee70fSCleber Rosa
1860c53eeaf7SStefan Hajnoczi# Suppress writing compiled files
1861c53eeaf7SStefan Hajnoczipython="$python -B"
1862c53eeaf7SStefan Hajnoczi
18630a01d76fSMarc-André Lureauif test -z "$meson"; then
186446504430SPaolo Bonzini    if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; then
18650a01d76fSMarc-André Lureau        meson=meson
18660a01d76fSMarc-André Lureau    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
18670a01d76fSMarc-André Lureau        meson=git
18680a01d76fSMarc-André Lureau    elif test -e "${source_path}/meson/meson.py" ; then
18690a01d76fSMarc-André Lureau        meson=internal
18700a01d76fSMarc-André Lureau    else
18710a01d76fSMarc-André Lureau        if test "$explicit_python" = yes; then
18720a01d76fSMarc-André Lureau            error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
18730a01d76fSMarc-André Lureau        else
1874a5665051SPaolo Bonzini            error_exit "Meson not found.  Use --meson=/path/to/meson"
1875a5665051SPaolo Bonzini        fi
18760a01d76fSMarc-André Lureau    fi
18770a01d76fSMarc-André Lureauelse
18780a01d76fSMarc-André Lureau    # Meson uses its own Python interpreter to invoke other Python scripts,
18790a01d76fSMarc-André Lureau    # but the user wants to use the one they specified with --python.
18800a01d76fSMarc-André Lureau    #
18810a01d76fSMarc-André Lureau    # We do not want to override the distro Python interpreter (and sometimes
18820a01d76fSMarc-André Lureau    # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
18830a01d76fSMarc-André Lureau    # just require --meson=git|internal together with --python.
18840a01d76fSMarc-André Lureau    if test "$explicit_python" = yes; then
18850a01d76fSMarc-André Lureau        case "$meson" in
18860a01d76fSMarc-André Lureau            git | internal) ;;
18870a01d76fSMarc-André Lureau            *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
18880a01d76fSMarc-André Lureau        esac
18890a01d76fSMarc-André Lureau    fi
18900a01d76fSMarc-André Lureaufi
1891a5665051SPaolo Bonzini
18920a01d76fSMarc-André Lureauif test "$meson" = git; then
18930a01d76fSMarc-André Lureau    git_submodules="${git_submodules} meson"
18940a01d76fSMarc-André Lureaufi
18950a01d76fSMarc-André Lureau
18960a01d76fSMarc-André Lureaucase "$meson" in
18970a01d76fSMarc-André Lureau    git | internal)
1898a5665051SPaolo Bonzini        if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then
1899a5665051SPaolo Bonzini            error_exit "Python setuptools not found"
1900a5665051SPaolo Bonzini        fi
19010a01d76fSMarc-André Lureau        meson="$python ${source_path}/meson/meson.py"
19020a01d76fSMarc-André Lureau        ;;
190384ec0c24SPaolo Bonzini    *) meson=$(command -v "$meson") ;;
19040a01d76fSMarc-André Lureauesac
19050a01d76fSMarc-André Lureau
190648328880SPaolo Bonzini# Probe for ninja (used for compdb)
190748328880SPaolo Bonzini
190848328880SPaolo Bonziniif test -z "$ninja"; then
190948328880SPaolo Bonzini    for c in ninja ninja-build samu; do
191048328880SPaolo Bonzini        if has $c; then
191148328880SPaolo Bonzini            ninja=$(command -v "$c")
191248328880SPaolo Bonzini            break
191348328880SPaolo Bonzini        fi
191448328880SPaolo Bonzini    done
191548328880SPaolo Bonzinifi
1916a5665051SPaolo Bonzini
19179aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
19189aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
19199aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
19209aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
19219aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
19229aae6e54SDaniel Henrique Barbozaif compile_object ; then
19239aae6e54SDaniel Henrique Barboza  : C compiler works ok
19249aae6e54SDaniel Henrique Barbozaelse
19259aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
19269aae6e54SDaniel Henrique Barbozafi
19279aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
19289aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
19299aae6e54SDaniel Henrique Barbozafi
19309aae6e54SDaniel Henrique Barboza
19319c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
19329c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
19339c83ffd8SPeter Maydellif test -z "$werror" ; then
1934fd73745dSAlexey Kardashevskiy    if test -e "$source_path/.git" && \
1935e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
19369c83ffd8SPeter Maydell        werror="yes"
19379c83ffd8SPeter Maydell    else
19389c83ffd8SPeter Maydell        werror="no"
19399c83ffd8SPeter Maydell    fi
19409c83ffd8SPeter Maydellfi
19419c83ffd8SPeter Maydell
1942fb59dabdSPeter Maydellif test "$bogus_os" = "yes"; then
1943fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
1944fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
1945fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
1946fb59dabdSPeter Maydell    # host OS we should stop now.
1947951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1948fb59dabdSPeter Maydellfi
1949fb59dabdSPeter Maydell
1950efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
1951efc6c070SThomas Huthcat > $TMPC << EOF
1952efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
1953efc6c070SThomas Huth# ifdef __apple_build_version__
1954efc6c070SThomas Huth#  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1955efc6c070SThomas Huth#   error You need at least XCode Clang v5.1 to compile QEMU
1956efc6c070SThomas Huth#  endif
1957efc6c070SThomas Huth# else
1958efc6c070SThomas Huth#  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1959efc6c070SThomas Huth#   error You need at least Clang v3.4 to compile QEMU
1960efc6c070SThomas Huth#  endif
1961efc6c070SThomas Huth# endif
1962efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1963efc6c070SThomas Huth# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1964efc6c070SThomas Huth#  error You need at least GCC v4.8 to compile QEMU
1965efc6c070SThomas Huth# endif
1966efc6c070SThomas Huth#else
1967efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
1968efc6c070SThomas Huth#endif
1969efc6c070SThomas Huthint main (void) { return 0; }
1970efc6c070SThomas HuthEOF
1971efc6c070SThomas Huthif ! compile_prog "" "" ; then
1972efc6c070SThomas Huth    error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1973efc6c070SThomas Huthfi
1974efc6c070SThomas Huth
197500849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately.
197600849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second.
197700849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all
197800849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would
197900849b92SRichard Henderson# just silently disable some features, so it's too error prone.
198000849b92SRichard Henderson
198100849b92SRichard Hendersonwarn_flags=
198200849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration
198300849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition
198400849b92SRichard Hendersonadd_to warn_flags -Wtype-limits
198500849b92SRichard Hendersonadd_to warn_flags -Wformat-security
198600849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k
198700849b92SRichard Hendersonadd_to warn_flags -Winit-self
198800849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers
198900849b92SRichard Hendersonadd_to warn_flags -Wempty-body
199000849b92SRichard Hendersonadd_to warn_flags -Wnested-externs
199100849b92SRichard Hendersonadd_to warn_flags -Wendif-labels
199200849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined
199300849b92SRichard Henderson
199400849b92SRichard Hendersonnowarn_flags=
199500849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides
199600849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs
199700849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value
199800849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int
199900849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition
2000aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare
2001bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi
200200849b92SRichard Henderson
200300849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags"
200493b25869SJohn Snow
200593b25869SJohn Snowcc_has_warning_flag() {
200693b25869SJohn Snow    write_c_skeleton;
200793b25869SJohn Snow
2008a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
2009a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
2010a1d29d6cSPeter Maydell    # warning options).
201193b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
201293b25869SJohn Snow    compile_prog "-Werror $optflag" ""
201393b25869SJohn Snow}
201493b25869SJohn Snow
201593b25869SJohn Snowfor flag in $gcc_flags; do
201693b25869SJohn Snow    if cc_has_warning_flag $flag ; then
20178d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
20188d05095cSPaolo Bonzini    fi
20198d05095cSPaolo Bonzinidone
20208d05095cSPaolo Bonzini
202163678e17SSteven Noonanif test "$stack_protector" != "no"; then
2022fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
2023fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
2024fccd35a0SRodrigo Rebello{
2025fccd35a0SRodrigo Rebello    char arr[64], *p = arr, *c = argv[0];
2026fccd35a0SRodrigo Rebello    while (*c) {
2027fccd35a0SRodrigo Rebello        *p++ = *c++;
2028fccd35a0SRodrigo Rebello    }
2029fccd35a0SRodrigo Rebello    return 0;
2030fccd35a0SRodrigo Rebello}
2031fccd35a0SRodrigo RebelloEOF
203263678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
20333b463a3fSMiroslav Rezanina  sp_on=0
203463678e17SSteven Noonan  for flag in $gcc_flags; do
2035590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
2036590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
2037086d5f75SPaolo Bonzini    if compile_object "-Werror $flag" &&
2038590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
203963678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2040db5adeaaSPaolo Bonzini      QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
20413b463a3fSMiroslav Rezanina      sp_on=1
204263678e17SSteven Noonan      break
204363678e17SSteven Noonan    fi
204463678e17SSteven Noonan  done
20453b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
20463b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
20473b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
20483b463a3fSMiroslav Rezanina    fi
20493b463a3fSMiroslav Rezanina  fi
205037746c5eSMarc-André Lureaufi
205137746c5eSMarc-André Lureau
205220bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for
205320bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}.
205420bc94a2SPaolo Bonzinicat > $TMPC << EOF
205520bc94a2SPaolo Bonzinistruct {
205620bc94a2SPaolo Bonzini  int a[2];
205720bc94a2SPaolo Bonzini} x = {0};
205820bc94a2SPaolo BonziniEOF
205920bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then
206020bc94a2SPaolo Bonzini  :
206120bc94a2SPaolo Bonzinielse
206220bc94a2SPaolo Bonzini  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
206320bc94a2SPaolo Bonzinifi
206420bc94a2SPaolo Bonzini
206521e709aaSMarc-André Lureau# Our module code doesn't support Windows
206621e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then
206721e709aaSMarc-André Lureau  error_exit "Modules are not available for Windows"
206821e709aaSMarc-André Lureaufi
206921e709aaSMarc-André Lureau
2070bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled
2071bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2072bd83c861SChristian Ehrhardt  error_exit "Can't enable module-upgrades as Modules are not enabled"
2073bd83c861SChristian Ehrhardtfi
2074bd83c861SChristian Ehrhardt
2075d376e9deSThomas Huth# Static linking is not possible with modules or PIE
207640d6444eSAvi Kivityif test "$static" = "yes" ; then
2077aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
2078aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
2079aa0d1f44SPaolo Bonzini  fi
208040d6444eSAvi Kivityfi
208140d6444eSAvi Kivity
2082768b7855SEmilio G. Cota# Unconditional check for compiler __thread support
2083768b7855SEmilio G. Cota  cat > $TMPC << EOF
2084768b7855SEmilio G. Cotastatic __thread int tls_var;
2085768b7855SEmilio G. Cotaint main(void) { return tls_var; }
2086768b7855SEmilio G. CotaEOF
2087768b7855SEmilio G. Cota
2088768b7855SEmilio G. Cotaif ! compile_prog "-Werror" "" ; then
2089768b7855SEmilio G. Cota    error_exit "Your compiler does not support the __thread specifier for " \
2090768b7855SEmilio G. Cota	"Thread-Local Storage (TLS). Please upgrade to a version that does."
2091768b7855SEmilio G. Cotafi
2092768b7855SEmilio G. Cota
209340d6444eSAvi Kivitycat > $TMPC << EOF
209421d4a791SAvi Kivity
209521d4a791SAvi Kivity#ifdef __linux__
209621d4a791SAvi Kivity#  define THREAD __thread
209721d4a791SAvi Kivity#else
209821d4a791SAvi Kivity#  define THREAD
209921d4a791SAvi Kivity#endif
210021d4a791SAvi Kivitystatic THREAD int tls_var;
210121d4a791SAvi Kivityint main(void) { return tls_var; }
210240d6444eSAvi KivityEOF
2103b2634124SRichard Henderson
2104b2634124SRichard Henderson# Check we support --no-pie first; we will need this for building ROMs.
2105412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then
2106412aeacdSAlex Bennée  CFLAGS_NOPIE="-fno-pie"
2107b2634124SRichard Henderson  LDFLAGS_NOPIE="-no-pie"
2108412aeacdSAlex Bennéefi
2109412aeacdSAlex Bennée
211012781462SRichard Hendersonif test "$static" = "yes"; then
2111eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2112086d5f75SPaolo Bonzini    CFLAGS="-fPIE -DPIE $CFLAGS"
211312781462SRichard Henderson    QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
211412781462SRichard Henderson    pie="yes"
211512781462SRichard Henderson  elif test "$pie" = "yes"; then
211612781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
211712781462SRichard Henderson  else
211812781462SRichard Henderson    QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
211912781462SRichard Henderson    pie="no"
212012781462SRichard Henderson  fi
212112781462SRichard Hendersonelif test "$pie" = "no"; then
2122086d5f75SPaolo Bonzini  CFLAGS="$CFLAGS_NOPIE $CFLAGS"
2123086d5f75SPaolo Bonzini  LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
2124eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2125086d5f75SPaolo Bonzini  CFLAGS="-fPIE -DPIE $CFLAGS"
2126086d5f75SPaolo Bonzini  LDFLAGS="-pie $LDFLAGS"
212740d6444eSAvi Kivity  pie="yes"
21282c674109SRichard Hendersonelif test "$pie" = "yes"; then
212976ad07a4SPeter Maydell  error_exit "PIE not available due to missing toolchain support"
213040d6444eSAvi Kivityelse
213140d6444eSAvi Kivity  echo "Disabling PIE due to missing toolchain support"
213240d6444eSAvi Kivity  pie="no"
213340d6444eSAvi Kivityfi
213440d6444eSAvi Kivity
2135e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2136e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too.
2137e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2138e6cbd751SRichard Henderson  QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2139e6cbd751SRichard Hendersonfi
2140e6cbd751SRichard Henderson
214109dada40SPaolo Bonzini##########################################
214209dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
214309dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
214409dada40SPaolo Bonzini# specification is necessary
214509dada40SPaolo Bonzini
214609dada40SPaolo Bonziniif test "$cpu" = "i386"; then
214709dada40SPaolo Bonzini  cat > $TMPC << EOF
214809dada40SPaolo Bonzinistatic int sfaa(int *ptr)
214909dada40SPaolo Bonzini{
215009dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
215109dada40SPaolo Bonzini}
215209dada40SPaolo Bonzini
215309dada40SPaolo Bonziniint main(void)
215409dada40SPaolo Bonzini{
215509dada40SPaolo Bonzini  int val = 42;
21561405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
215709dada40SPaolo Bonzini  sfaa(&val);
215809dada40SPaolo Bonzini  return val;
215909dada40SPaolo Bonzini}
216009dada40SPaolo BonziniEOF
216109dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
216209dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
216309dada40SPaolo Bonzini  fi
216409dada40SPaolo Bonzinifi
216509dada40SPaolo Bonzini
216609dada40SPaolo Bonzini#########################################
2167ec530c81Sbellard# Solaris specific configure tool chain decisions
216809dada40SPaolo Bonzini
2169ec530c81Sbellardif test "$solaris" = "yes" ; then
21706792aa11SLoïc Minier  if has ar; then
21716792aa11SLoïc Minier    :
21726792aa11SLoïc Minier  else
2173ec530c81Sbellard    if test -f /usr/ccs/bin/ar ; then
217476ad07a4SPeter Maydell      error_exit "No path includes ar" \
217576ad07a4SPeter Maydell          "Add /usr/ccs/bin to your path and rerun configure"
2176ec530c81Sbellard    fi
217776ad07a4SPeter Maydell    error_exit "No path includes ar"
2178ec530c81Sbellard  fi
2179ec530c81Sbellardfi
2180ec530c81Sbellard
2181afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
2182fdb75aefSPaolo Bonzini    default_targets=yes
2183d880a3baSPaolo Bonzini    for target in $default_target_list; do
2184d880a3baSPaolo Bonzini        target_list="$target_list $target"
2185d880a3baSPaolo Bonzini    done
2186d880a3baSPaolo Bonzini    target_list="${target_list# }"
2187121afa9eSAnthony Liguorielse
2188fdb75aefSPaolo Bonzini    default_targets=no
218989138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2190d880a3baSPaolo Bonzini    for target in $target_list; do
219125b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
219225b48338SPeter Maydell        # friendly error message than if we let it fall through.
219325b48338SPeter Maydell        case " $default_target_list " in
219425b48338SPeter Maydell            *" $target "*)
219525b48338SPeter Maydell                ;;
219625b48338SPeter Maydell            *)
219725b48338SPeter Maydell                error_exit "Unknown target name '$target'"
219825b48338SPeter Maydell                ;;
219925b48338SPeter Maydell        esac
220025b48338SPeter Maydell    done
2201d880a3baSPaolo Bonzinifi
220225b48338SPeter Maydell
2203fdb75aefSPaolo Bonzinifor target in $target_list; do
2204fdb75aefSPaolo Bonzini    # if a deprecated target is enabled we note it here
2205fdb75aefSPaolo Bonzini    if echo "$deprecated_targets_list" | grep -q "$target"; then
2206fdb75aefSPaolo Bonzini        add_to deprecated_features $target
2207fdb75aefSPaolo Bonzini    fi
2208fdb75aefSPaolo Bonzinidone
2209fdb75aefSPaolo Bonzini
2210f55fe278SPaolo Bonzini# see if system emulation was really requested
2211f55fe278SPaolo Bonzinicase " $target_list " in
2212f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
2213f55fe278SPaolo Bonzini  ;;
2214f55fe278SPaolo Bonzini  *) softmmu=no
2215f55fe278SPaolo Bonzini  ;;
2216f55fe278SPaolo Bonziniesac
22175327cf48Sbellard
221805dfa22bSPhilippe Mathieu-Daudéfor target in $target_list; do
221905dfa22bSPhilippe Mathieu-Daudé  case "$target" in
222005dfa22bSPhilippe Mathieu-Daudé    arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
222105dfa22bSPhilippe Mathieu-Daudé      edk2_blobs="yes"
222205dfa22bSPhilippe Mathieu-Daudé      ;;
222305dfa22bSPhilippe Mathieu-Daudé  esac
222405dfa22bSPhilippe Mathieu-Daudédone
2225623ef637SPhilippe Mathieu-Daudé# The EDK2 binaries are compressed with bzip2
2226623ef637SPhilippe Mathieu-Daudéif test "$edk2_blobs" = "yes" && ! has bzip2; then
2227623ef637SPhilippe Mathieu-Daudé  error_exit "The bzip2 program is required for building QEMU"
2228623ef637SPhilippe Mathieu-Daudéfi
222905dfa22bSPhilippe Mathieu-Daudé
2230249247c9SJuan Quintelafeature_not_found() {
2231249247c9SJuan Quintela  feature=$1
223221684af0SStewart Smith  remedy=$2
2233249247c9SJuan Quintela
223476ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
223521684af0SStewart Smith      "configure was not able to find it." \
223621684af0SStewart Smith      "$remedy"
2237249247c9SJuan Quintela}
2238249247c9SJuan Quintela
22397d13299dSbellard# ---
22407d13299dSbellard# big/little endian test
22417d13299dSbellardcat > $TMPC << EOF
224261cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
224361cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
224461cc919fSMike Frysingerextern int foo(short *, short *);
224561cc919fSMike Frysingerint main(int argc, char *argv[]) {
224661cc919fSMike Frysinger    return foo(big_endian, little_endian);
22477d13299dSbellard}
22487d13299dSbellardEOF
22497d13299dSbellard
225061cc919fSMike Frysingerif compile_object ; then
225112f15c91SAlice Frosi    if strings -a $TMPO | grep -q BiGeNdIaN ; then
225261cc919fSMike Frysinger        bigendian="yes"
225312f15c91SAlice Frosi    elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
225461cc919fSMike Frysinger        bigendian="no"
22557d13299dSbellard    else
22567d13299dSbellard        echo big/little test failed
22577d13299dSbellard    fi
22587d13299dSbellardelse
225961cc919fSMike Frysinger    echo big/little test failed
22607d13299dSbellardfi
22617d13299dSbellard
2262b0a47e79SJuan Quintela##########################################
2263e10ee3f5SPhilippe Mathieu-Daudé# system tools
2264e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then
2265e10ee3f5SPhilippe Mathieu-Daudé    if test "$softmmu" = "no"; then
2266e10ee3f5SPhilippe Mathieu-Daudé        want_tools=no
2267e10ee3f5SPhilippe Mathieu-Daudé    else
2268e10ee3f5SPhilippe Mathieu-Daudé        want_tools=yes
2269e10ee3f5SPhilippe Mathieu-Daudé    fi
2270e10ee3f5SPhilippe Mathieu-Daudéfi
2271e10ee3f5SPhilippe Mathieu-Daudé
2272e10ee3f5SPhilippe Mathieu-Daudé##########################################
2273a30878e7SPeter Maydell# cocoa implies not SDL or GTK
2274a30878e7SPeter Maydell# (the cocoa UI code currently assumes it is always the active UI
2275a30878e7SPeter Maydell# and doesn't interact well with other UI frontend code)
2276b4e312e9SPaolo Bonziniif test "$cocoa" = "enabled"; then
2277b4e312e9SPaolo Bonzini    if test "$sdl" = "enabled"; then
2278a30878e7SPeter Maydell        error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2279a30878e7SPeter Maydell    fi
2280a30878e7SPeter Maydell    if test "$gtk" = "yes"; then
2281a30878e7SPeter Maydell        error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2282a30878e7SPeter Maydell    fi
2283a30878e7SPeter Maydell    gtk=no
228435be72baSPaolo Bonzini    sdl=disabled
2285a30878e7SPeter Maydellfi
2286a30878e7SPeter Maydell
22876b39b063SEric Blake# Some versions of Mac OS X incorrectly define SIZE_MAX
22886b39b063SEric Blakecat > $TMPC << EOF
22896b39b063SEric Blake#include <stdint.h>
22906b39b063SEric Blake#include <stdio.h>
22916b39b063SEric Blakeint main(int argc, char *argv[]) {
22926b39b063SEric Blake    return printf("%zu", SIZE_MAX);
22936b39b063SEric Blake}
22946b39b063SEric BlakeEOF
22956b39b063SEric Blakehave_broken_size_max=no
22966b39b063SEric Blakeif ! compile_object -Werror ; then
22976b39b063SEric Blake    have_broken_size_max=yes
22986b39b063SEric Blakefi
22996b39b063SEric Blake
2300a30878e7SPeter Maydell##########################################
2301015a33bdSGonglei# L2TPV3 probe
2302015a33bdSGonglei
2303015a33bdSGongleicat > $TMPC <<EOF
2304015a33bdSGonglei#include <sys/socket.h>
2305bff6cb72SMichael Tokarev#include <linux/ip.h>
2306015a33bdSGongleiint main(void) { return sizeof(struct mmsghdr); }
2307015a33bdSGongleiEOF
2308015a33bdSGongleiif compile_prog "" "" ; then
2309015a33bdSGonglei  l2tpv3=yes
2310015a33bdSGongleielse
2311015a33bdSGonglei  l2tpv3=no
2312015a33bdSGongleifi
2313015a33bdSGonglei
2314c9c8b88fSDavid CARLIERif check_include "pty.h" ; then
2315c9c8b88fSDavid CARLIER  pty_h=yes
2316c9c8b88fSDavid CARLIERelse
2317c9c8b88fSDavid CARLIER  pty_h=no
2318c9c8b88fSDavid CARLIERfi
2319c9c8b88fSDavid CARLIER
2320195588ccSDavid CARLIERcat > $TMPC <<EOF
2321195588ccSDavid CARLIER#include <sys/mman.h>
2322195588ccSDavid CARLIERint main(int argc, char *argv[]) {
2323195588ccSDavid CARLIER    return mlockall(MCL_FUTURE);
2324195588ccSDavid CARLIER}
2325195588ccSDavid CARLIEREOF
2326195588ccSDavid CARLIERif compile_prog "" "" ; then
2327195588ccSDavid CARLIER  have_mlockall=yes
2328195588ccSDavid CARLIERelse
2329195588ccSDavid CARLIER  have_mlockall=no
2330195588ccSDavid CARLIERfi
2331195588ccSDavid CARLIER
2332299e6f19SPaolo Bonzini#########################################
2333299e6f19SPaolo Bonzini# vhost interdependencies and host support
2334299e6f19SPaolo Bonzini
2335299e6f19SPaolo Bonzini# vhost backends
2336299e6f19SPaolo Bonzinitest "$vhost_user" = "" && vhost_user=yes
2337299e6f19SPaolo Bonziniif test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2338299e6f19SPaolo Bonzini  error_exit "vhost-user isn't available on win32"
2339299e6f19SPaolo Bonzinifi
2340108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux
2341108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2342108a6481SCindy Lu  error_exit "vhost-vdpa is only available on Linux"
2343108a6481SCindy Lufi
2344299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux
2345299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2346299e6f19SPaolo Bonzini  error_exit "vhost-kernel is only available on Linux"
2347299e6f19SPaolo Bonzinifi
2348299e6f19SPaolo Bonzini
2349299e6f19SPaolo Bonzini# vhost-kernel devices
2350299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2351299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2352299e6f19SPaolo Bonzini  error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2353299e6f19SPaolo Bonzinifi
2354299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2355299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2356299e6f19SPaolo Bonzini  error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2357299e6f19SPaolo Bonzinifi
2358299e6f19SPaolo Bonzini
2359299e6f19SPaolo Bonzini# vhost-user backends
2360299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2361299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2362299e6f19SPaolo Bonzini  error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2363299e6f19SPaolo Bonzinifi
2364299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2365299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2366299e6f19SPaolo Bonzini  error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2367299e6f19SPaolo Bonzinifi
236898fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
236998fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
237098fc1adaSDr. David Alan Gilbert  error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
237198fc1adaSDr. David Alan Gilbertfi
2372108a6481SCindy Lu#vhost-vdpa backends
2373108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2374108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2375108a6481SCindy Lu  error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2376108a6481SCindy Lufi
2377299e6f19SPaolo Bonzini
237840bc0ca9SLaurent Vivier# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2379299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then
2380299e6f19SPaolo Bonzini  test "$vhost_net_user" = "yes" && vhost_net=yes
238140bc0ca9SLaurent Vivier  test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2382299e6f19SPaolo Bonzini  test "$vhost_kernel" = "yes" && vhost_net=yes
2383299e6f19SPaolo Bonzinifi
2384299e6f19SPaolo Bonzini
2385015a33bdSGonglei##########################################
23864d9310f4SDaniel P. Berrange# MinGW / Mingw-w64 localtime_r/gmtime_r check
23874d9310f4SDaniel P. Berrange
23884d9310f4SDaniel P. Berrangeif test "$mingw32" = "yes"; then
23894d9310f4SDaniel P. Berrange    # Some versions of MinGW / Mingw-w64 lack localtime_r
23904d9310f4SDaniel P. Berrange    # and gmtime_r entirely.
23914d9310f4SDaniel P. Berrange    #
23924d9310f4SDaniel P. Berrange    # Some versions of Mingw-w64 define a macro for
23934d9310f4SDaniel P. Berrange    # localtime_r/gmtime_r.
23944d9310f4SDaniel P. Berrange    #
23954d9310f4SDaniel P. Berrange    # Some versions of Mingw-w64 will define functions
23964d9310f4SDaniel P. Berrange    # for localtime_r/gmtime_r, but only if you have
23974d9310f4SDaniel P. Berrange    # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
23984d9310f4SDaniel P. Berrange    # though, unistd.h and pthread.h both define
23994d9310f4SDaniel P. Berrange    # that for you.
24004d9310f4SDaniel P. Berrange    #
24014d9310f4SDaniel P. Berrange    # So this #undef localtime_r and #include <unistd.h>
24024d9310f4SDaniel P. Berrange    # are not in fact redundant.
24034d9310f4SDaniel P. Berrangecat > $TMPC << EOF
24044d9310f4SDaniel P. Berrange#include <unistd.h>
24054d9310f4SDaniel P. Berrange#include <time.h>
24064d9310f4SDaniel P. Berrange#undef localtime_r
24074d9310f4SDaniel P. Berrangeint main(void) { localtime_r(NULL, NULL); return 0; }
24084d9310f4SDaniel P. BerrangeEOF
24094d9310f4SDaniel P. Berrange    if compile_prog "" "" ; then
24104d9310f4SDaniel P. Berrange        localtime_r="yes"
24114d9310f4SDaniel P. Berrange    else
24124d9310f4SDaniel P. Berrange        localtime_r="no"
24134d9310f4SDaniel P. Berrange    fi
24144d9310f4SDaniel P. Berrangefi
24154d9310f4SDaniel P. Berrange
24164d9310f4SDaniel P. Berrange##########################################
2417779ab5e3SStefan Weil# pkg-config probe
2418779ab5e3SStefan Weil
2419779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
242076ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
2421779ab5e3SStefan Weilfi
2422779ab5e3SStefan Weil
2423779ab5e3SStefan Weil##########################################
2424b0a47e79SJuan Quintela# NPTL probe
2425b0a47e79SJuan Quintela
242624cb36a6SPeter Maydellif test "$linux_user" = "yes"; then
2427bd0c5661Spbrook  cat > $TMPC <<EOF
2428bd0c5661Spbrook#include <sched.h>
242930813ceaSpbrook#include <linux/futex.h>
2430182eacc0SStefan Weilint main(void) {
2431bd0c5661Spbrook#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2432bd0c5661Spbrook#error bork
2433bd0c5661Spbrook#endif
2434182eacc0SStefan Weil  return 0;
2435bd0c5661Spbrook}
2436bd0c5661SpbrookEOF
243724cb36a6SPeter Maydell  if ! compile_object ; then
243821684af0SStewart Smith    feature_not_found "nptl" "Install glibc and linux kernel headers."
2439b0a47e79SJuan Quintela  fi
2440bd0c5661Spbrookfi
2441bd0c5661Spbrook
2442ac62922eSbalrog##########################################
2443607dacd0Sqiaonuohan# lzo check
2444607dacd0Sqiaonuohan
2445607dacd0Sqiaonuohanif test "$lzo" != "no" ; then
2446607dacd0Sqiaonuohan    cat > $TMPC << EOF
2447607dacd0Sqiaonuohan#include <lzo/lzo1x.h>
2448607dacd0Sqiaonuohanint main(void) { lzo_version(); return 0; }
2449607dacd0SqiaonuohanEOF
2450607dacd0Sqiaonuohan    if compile_prog "" "-llzo2" ; then
2451708eab42SMarc-André Lureau        lzo_libs="-llzo2"
2452b25c9dffSStefan Weil        lzo="yes"
2453b25c9dffSStefan Weil    else
2454b25c9dffSStefan Weil        if test "$lzo" = "yes"; then
2455b25c9dffSStefan Weil            feature_not_found "liblzo2" "Install liblzo2 devel"
2456b25c9dffSStefan Weil        fi
2457b25c9dffSStefan Weil        lzo="no"
2458b25c9dffSStefan Weil    fi
2459607dacd0Sqiaonuohanfi
2460607dacd0Sqiaonuohan
2461607dacd0Sqiaonuohan##########################################
2462607dacd0Sqiaonuohan# snappy check
2463607dacd0Sqiaonuohan
2464607dacd0Sqiaonuohanif test "$snappy" != "no" ; then
2465607dacd0Sqiaonuohan    cat > $TMPC << EOF
2466607dacd0Sqiaonuohan#include <snappy-c.h>
2467607dacd0Sqiaonuohanint main(void) { snappy_max_compressed_length(4096); return 0; }
2468607dacd0SqiaonuohanEOF
2469607dacd0Sqiaonuohan    if compile_prog "" "-lsnappy" ; then
2470708eab42SMarc-André Lureau        snappy_libs='-lsnappy'
2471b25c9dffSStefan Weil        snappy="yes"
2472b25c9dffSStefan Weil    else
2473b25c9dffSStefan Weil        if test "$snappy" = "yes"; then
2474b25c9dffSStefan Weil            feature_not_found "libsnappy" "Install libsnappy devel"
2475b25c9dffSStefan Weil        fi
2476b25c9dffSStefan Weil        snappy="no"
2477b25c9dffSStefan Weil    fi
2478607dacd0Sqiaonuohanfi
2479607dacd0Sqiaonuohan
2480607dacd0Sqiaonuohan##########################################
24816b383c08SPeter Wu# bzip2 check
24826b383c08SPeter Wu
24836b383c08SPeter Wuif test "$bzip2" != "no" ; then
24846b383c08SPeter Wu    cat > $TMPC << EOF
24856b383c08SPeter Wu#include <bzlib.h>
24866b383c08SPeter Wuint main(void) { BZ2_bzlibVersion(); return 0; }
24876b383c08SPeter WuEOF
24886b383c08SPeter Wu    if compile_prog "" "-lbz2" ; then
24896b383c08SPeter Wu        bzip2="yes"
24906b383c08SPeter Wu    else
24916b383c08SPeter Wu        if test "$bzip2" = "yes"; then
24926b383c08SPeter Wu            feature_not_found "libbzip2" "Install libbzip2 devel"
24936b383c08SPeter Wu        fi
24946b383c08SPeter Wu        bzip2="no"
24956b383c08SPeter Wu    fi
24966b383c08SPeter Wufi
24976b383c08SPeter Wu
24986b383c08SPeter Wu##########################################
249983bc1f97SJulio Faracco# lzfse check
250083bc1f97SJulio Faracco
250183bc1f97SJulio Faraccoif test "$lzfse" != "no" ; then
250283bc1f97SJulio Faracco    cat > $TMPC << EOF
250383bc1f97SJulio Faracco#include <lzfse.h>
250483bc1f97SJulio Faraccoint main(void) { lzfse_decode_scratch_size(); return 0; }
250583bc1f97SJulio FaraccoEOF
250683bc1f97SJulio Faracco    if compile_prog "" "-llzfse" ; then
250783bc1f97SJulio Faracco        lzfse="yes"
250883bc1f97SJulio Faracco    else
250983bc1f97SJulio Faracco        if test "$lzfse" = "yes"; then
251083bc1f97SJulio Faracco            feature_not_found "lzfse" "Install lzfse devel"
251183bc1f97SJulio Faracco        fi
251283bc1f97SJulio Faracco        lzfse="no"
251383bc1f97SJulio Faracco    fi
251483bc1f97SJulio Faraccofi
251583bc1f97SJulio Faracco
251683bc1f97SJulio Faracco##########################################
25173a678481SJuan Quintela# zstd check
25183a678481SJuan Quintela
25193a678481SJuan Quintelaif test "$zstd" != "no" ; then
2520297254c7SJuan Quintela    libzstd_minver="1.4.0"
2521297254c7SJuan Quintela    if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
25223a678481SJuan Quintela        zstd_cflags="$($pkg_config --cflags libzstd)"
25233a678481SJuan Quintela        zstd_libs="$($pkg_config --libs libzstd)"
25243a678481SJuan Quintela        zstd="yes"
25253a678481SJuan Quintela    else
25263a678481SJuan Quintela        if test "$zstd" = "yes" ; then
25273a678481SJuan Quintela            feature_not_found "libzstd" "Install libzstd devel"
25283a678481SJuan Quintela        fi
25293a678481SJuan Quintela        zstd="no"
25303a678481SJuan Quintela    fi
25313a678481SJuan Quintelafi
25323a678481SJuan Quintela
25333a678481SJuan Quintela##########################################
2534f794573eSEduardo Otubo# libseccomp check
2535f794573eSEduardo Otubo
2536f794573eSEduardo Otuboif test "$seccomp" != "no" ; then
25373e684455SMichael Strosaker    libseccomp_minver="2.3.0"
253825ed0eccSHelge Deller    if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2539c3883e1fSFam Zheng        seccomp_cflags="$($pkg_config --cflags libseccomp)"
2540c3883e1fSFam Zheng        seccomp_libs="$($pkg_config --libs libseccomp)"
2541f794573eSEduardo Otubo        seccomp="yes"
2542f794573eSEduardo Otubo    else
2543f794573eSEduardo Otubo        if test "$seccomp" = "yes" ; then
2544693e5910SAndrew Jones            feature_not_found "libseccomp" \
2545693e5910SAndrew Jones                 "Install libseccomp devel >= $libseccomp_minver"
2546896848f0SEduardo Otubo        fi
2547e84d5956SYann E. MORIN        seccomp="no"
2548f794573eSEduardo Otubo    fi
2549f794573eSEduardo Otubofi
25503bd40ec7SPaolo Bonzini
25513bd40ec7SPaolo Bonzini##########################################
2552e37630caSaliguori# xen probe
2553e37630caSaliguori
25541badb709SPaolo Bonziniif test "$xen" != "disabled" ; then
2555c1cdd9d5SJuergen Gross  # Check whether Xen library path is specified via --extra-ldflags to avoid
2556c1cdd9d5SJuergen Gross  # overriding this setting with pkg-config output. If not, try pkg-config
2557c1cdd9d5SJuergen Gross  # to obtain all needed flags.
2558c1cdd9d5SJuergen Gross
2559c1cdd9d5SJuergen Gross  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2560c1cdd9d5SJuergen Gross     $pkg_config --exists xencontrol ; then
2561c1cdd9d5SJuergen Gross    xen_ctrl_version="$(printf '%d%02d%02d' \
2562c1cdd9d5SJuergen Gross      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
25631badb709SPaolo Bonzini    xen=enabled
2564c1cdd9d5SJuergen Gross    xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2565c1cdd9d5SJuergen Gross    xen_pc="$xen_pc xenevtchn xendevicemodel"
256658ea9a7aSAnthony PERARD    if $pkg_config --exists xentoolcore; then
256758ea9a7aSAnthony PERARD      xen_pc="$xen_pc xentoolcore"
256858ea9a7aSAnthony PERARD    fi
2569582ea95fSMarc-André Lureau    xen_cflags="$($pkg_config --cflags $xen_pc)"
2570582ea95fSMarc-André Lureau    xen_libs="$($pkg_config --libs $xen_pc)"
2571c1cdd9d5SJuergen Gross  else
2572c1cdd9d5SJuergen Gross
2573b2266beeSJuan Quintela    xen_libs="-lxenstore -lxenctrl -lxenguest"
2574d9506cabSAnthony PERARD    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2575d5b93ddfSAnthony PERARD
257650ced5b3SStefan Weil    # First we test whether Xen headers and libraries are available.
257750ced5b3SStefan Weil    # If no, we are done and there is no Xen support.
257850ced5b3SStefan Weil    # If yes, more tests are run to detect the Xen version.
257950ced5b3SStefan Weil
258050ced5b3SStefan Weil    # Xen (any)
258150ced5b3SStefan Weil    cat > $TMPC <<EOF
258250ced5b3SStefan Weil#include <xenctrl.h>
258350ced5b3SStefan Weilint main(void) {
258450ced5b3SStefan Weil  return 0;
258550ced5b3SStefan Weil}
258650ced5b3SStefan WeilEOF
258750ced5b3SStefan Weil    if ! compile_prog "" "$xen_libs" ; then
258850ced5b3SStefan Weil      # Xen not found
25891badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
259021684af0SStewart Smith        feature_not_found "xen" "Install xen devel"
259150ced5b3SStefan Weil      fi
25921badb709SPaolo Bonzini      xen=disabled
259350ced5b3SStefan Weil
2594d5b93ddfSAnthony PERARD    # Xen unstable
259569deef08SPeter Maydell    elif
259669deef08SPeter Maydell        cat > $TMPC <<EOF &&
25972cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API
25982cbf8903SRoss Lagerwall#define __XEN_TOOLS__
25992cbf8903SRoss Lagerwall#include <xendevicemodel.h>
2600d3c49ebbSPaul Durrant#include <xenforeignmemory.h>
26012cbf8903SRoss Lagerwallint main(void) {
26022cbf8903SRoss Lagerwall  xendevicemodel_handle *xd;
2603d3c49ebbSPaul Durrant  xenforeignmemory_handle *xfmem;
26042cbf8903SRoss Lagerwall
26052cbf8903SRoss Lagerwall  xd = xendevicemodel_open(0, 0);
26062cbf8903SRoss Lagerwall  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
26072cbf8903SRoss Lagerwall
2608d3c49ebbSPaul Durrant  xfmem = xenforeignmemory_open(0, 0);
2609d3c49ebbSPaul Durrant  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2610d3c49ebbSPaul Durrant
26112cbf8903SRoss Lagerwall  return 0;
26122cbf8903SRoss Lagerwall}
26132cbf8903SRoss LagerwallEOF
26142cbf8903SRoss Lagerwall        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
26152cbf8903SRoss Lagerwall      then
26162cbf8903SRoss Lagerwall      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
26172cbf8903SRoss Lagerwall      xen_ctrl_version=41100
26181badb709SPaolo Bonzini      xen=enabled
26192cbf8903SRoss Lagerwall    elif
26202cbf8903SRoss Lagerwall        cat > $TMPC <<EOF &&
26215ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API
26225ba3d756SIgor Druzhinin#include <xenforeignmemory.h>
262358ea9a7aSAnthony PERARD#include <xentoolcore.h>
26245ba3d756SIgor Druzhininint main(void) {
26255ba3d756SIgor Druzhinin  xenforeignmemory_handle *xfmem;
26265ba3d756SIgor Druzhinin
26275ba3d756SIgor Druzhinin  xfmem = xenforeignmemory_open(0, 0);
26285ba3d756SIgor Druzhinin  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
262958ea9a7aSAnthony PERARD  xentoolcore_restrict_all(0);
26305ba3d756SIgor Druzhinin
26315ba3d756SIgor Druzhinin  return 0;
26325ba3d756SIgor Druzhinin}
26335ba3d756SIgor DruzhininEOF
263458ea9a7aSAnthony PERARD        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
26355ba3d756SIgor Druzhinin      then
263658ea9a7aSAnthony PERARD      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
26375ba3d756SIgor Druzhinin      xen_ctrl_version=41000
26381badb709SPaolo Bonzini      xen=enabled
26395ba3d756SIgor Druzhinin    elif
26405ba3d756SIgor Druzhinin        cat > $TMPC <<EOF &&
2641da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API
2642da8090ccSPaul Durrant#define __XEN_TOOLS__
2643da8090ccSPaul Durrant#include <xendevicemodel.h>
2644da8090ccSPaul Durrantint main(void) {
2645da8090ccSPaul Durrant  xendevicemodel_handle *xd;
2646da8090ccSPaul Durrant
2647da8090ccSPaul Durrant  xd = xendevicemodel_open(0, 0);
2648da8090ccSPaul Durrant  xendevicemodel_close(xd);
2649da8090ccSPaul Durrant
2650da8090ccSPaul Durrant  return 0;
2651da8090ccSPaul Durrant}
2652da8090ccSPaul DurrantEOF
2653da8090ccSPaul Durrant        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2654da8090ccSPaul Durrant      then
2655da8090ccSPaul Durrant      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2656f1167ee6SJuergen Gross      xen_ctrl_version=40900
26571badb709SPaolo Bonzini      xen=enabled
2658da8090ccSPaul Durrant    elif
2659da8090ccSPaul Durrant        cat > $TMPC <<EOF &&
26605eeb39c2SIan Campbell/*
26615eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat
26625eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given.
2663b6eb9b45SPaulina Szubarczyk *
2664b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and
2665b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented.
2666b6eb9b45SPaulina Szubarczyk */
2667b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API
2668b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API
2669b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2670b6eb9b45SPaulina Szubarczyk#include <xenctrl.h>
2671b6eb9b45SPaulina Szubarczyk#include <xenstore.h>
2672b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h>
2673b6eb9b45SPaulina Szubarczyk#include <xengnttab.h>
2674b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h>
2675b6eb9b45SPaulina Szubarczyk#include <stdint.h>
2676b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h>
2677b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS)
2678b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined
2679b6eb9b45SPaulina Szubarczyk#endif
2680b6eb9b45SPaulina Szubarczykint main(void) {
2681b6eb9b45SPaulina Szubarczyk  xc_interface *xc = NULL;
2682b6eb9b45SPaulina Szubarczyk  xenforeignmemory_handle *xfmem;
2683b6eb9b45SPaulina Szubarczyk  xenevtchn_handle *xe;
2684b6eb9b45SPaulina Szubarczyk  xengnttab_handle *xg;
2685b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy_segment_t* seg = NULL;
2686b6eb9b45SPaulina Szubarczyk
2687b6eb9b45SPaulina Szubarczyk  xs_daemon_open();
2688b6eb9b45SPaulina Szubarczyk
2689b6eb9b45SPaulina Szubarczyk  xc = xc_interface_open(0, 0, 0);
2690b6eb9b45SPaulina Szubarczyk  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2691b6eb9b45SPaulina Szubarczyk  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2692b6eb9b45SPaulina Szubarczyk  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2693b6eb9b45SPaulina Szubarczyk  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2694b6eb9b45SPaulina Szubarczyk
2695b6eb9b45SPaulina Szubarczyk  xfmem = xenforeignmemory_open(0, 0);
2696b6eb9b45SPaulina Szubarczyk  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2697b6eb9b45SPaulina Szubarczyk
2698b6eb9b45SPaulina Szubarczyk  xe = xenevtchn_open(0, 0);
2699b6eb9b45SPaulina Szubarczyk  xenevtchn_fd(xe);
2700b6eb9b45SPaulina Szubarczyk
2701b6eb9b45SPaulina Szubarczyk  xg = xengnttab_open(0, 0);
2702b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy(xg, 0, seg);
2703b6eb9b45SPaulina Szubarczyk
2704b6eb9b45SPaulina Szubarczyk  return 0;
2705b6eb9b45SPaulina Szubarczyk}
2706b6eb9b45SPaulina SzubarczykEOF
2707b6eb9b45SPaulina Szubarczyk        compile_prog "" "$xen_libs $xen_stable_libs"
2708b6eb9b45SPaulina Szubarczyk      then
2709f1167ee6SJuergen Gross      xen_ctrl_version=40800
27101badb709SPaolo Bonzini      xen=enabled
2711b6eb9b45SPaulina Szubarczyk    elif
2712b6eb9b45SPaulina Szubarczyk        cat > $TMPC <<EOF &&
2713b6eb9b45SPaulina Szubarczyk/*
2714b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat
2715b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given.
27165eeb39c2SIan Campbell */
27175eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API
27185eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API
27195eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API
27205eeb39c2SIan Campbell#include <xenctrl.h>
27215eeb39c2SIan Campbell#include <xenstore.h>
27225eeb39c2SIan Campbell#include <xenevtchn.h>
27235eeb39c2SIan Campbell#include <xengnttab.h>
27245eeb39c2SIan Campbell#include <xenforeignmemory.h>
27255eeb39c2SIan Campbell#include <stdint.h>
27265eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h>
27275eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS)
27285eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined
27295eeb39c2SIan Campbell#endif
27305eeb39c2SIan Campbellint main(void) {
27315eeb39c2SIan Campbell  xc_interface *xc = NULL;
27325eeb39c2SIan Campbell  xenforeignmemory_handle *xfmem;
27335eeb39c2SIan Campbell  xenevtchn_handle *xe;
27345eeb39c2SIan Campbell  xengnttab_handle *xg;
27355eeb39c2SIan Campbell
27365eeb39c2SIan Campbell  xs_daemon_open();
27375eeb39c2SIan Campbell
27385eeb39c2SIan Campbell  xc = xc_interface_open(0, 0, 0);
27395eeb39c2SIan Campbell  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
27405eeb39c2SIan Campbell  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
27415eeb39c2SIan Campbell  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
27425eeb39c2SIan Campbell  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
27435eeb39c2SIan Campbell
27445eeb39c2SIan Campbell  xfmem = xenforeignmemory_open(0, 0);
27455eeb39c2SIan Campbell  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
27465eeb39c2SIan Campbell
27475eeb39c2SIan Campbell  xe = xenevtchn_open(0, 0);
27485eeb39c2SIan Campbell  xenevtchn_fd(xe);
27495eeb39c2SIan Campbell
27505eeb39c2SIan Campbell  xg = xengnttab_open(0, 0);
27515eeb39c2SIan Campbell  xengnttab_map_grant_ref(xg, 0, 0, 0);
27525eeb39c2SIan Campbell
27535eeb39c2SIan Campbell  return 0;
27545eeb39c2SIan Campbell}
27555eeb39c2SIan CampbellEOF
27565eeb39c2SIan Campbell        compile_prog "" "$xen_libs $xen_stable_libs"
27575eeb39c2SIan Campbell      then
2758f1167ee6SJuergen Gross      xen_ctrl_version=40701
27591badb709SPaolo Bonzini      xen=enabled
2760cdadde39SRoger Pau Monne
2761cdadde39SRoger Pau Monne    # Xen 4.6
2762cdadde39SRoger Pau Monne    elif
2763cdadde39SRoger Pau Monne        cat > $TMPC <<EOF &&
2764cdadde39SRoger Pau Monne#include <xenctrl.h>
2765e108a3c1SAnthony PERARD#include <xenstore.h>
2766d5b93ddfSAnthony PERARD#include <stdint.h>
2767d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
2768d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
2769d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
2770d5b93ddfSAnthony PERARD#endif
2771d5b93ddfSAnthony PERARDint main(void) {
2772d5b93ddfSAnthony PERARD  xc_interface *xc;
2773d5b93ddfSAnthony PERARD  xs_daemon_open();
2774d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
2775d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2776d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
2777b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
27788688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2779d8b441a3SJan Beulich  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
278020a544c7SKonrad Rzeszutek Wilk  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2781d8b441a3SJan Beulich  return 0;
2782d8b441a3SJan Beulich}
2783d8b441a3SJan BeulichEOF
2784d8b441a3SJan Beulich        compile_prog "" "$xen_libs"
2785d8b441a3SJan Beulich      then
2786f1167ee6SJuergen Gross      xen_ctrl_version=40600
27871badb709SPaolo Bonzini      xen=enabled
2788d8b441a3SJan Beulich
2789d8b441a3SJan Beulich    # Xen 4.5
2790d8b441a3SJan Beulich    elif
2791d8b441a3SJan Beulich        cat > $TMPC <<EOF &&
2792d8b441a3SJan Beulich#include <xenctrl.h>
2793d8b441a3SJan Beulich#include <xenstore.h>
2794d8b441a3SJan Beulich#include <stdint.h>
2795d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h>
2796d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS)
2797d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined
2798d8b441a3SJan Beulich#endif
2799d8b441a3SJan Beulichint main(void) {
2800d8b441a3SJan Beulich  xc_interface *xc;
2801d8b441a3SJan Beulich  xs_daemon_open();
2802d8b441a3SJan Beulich  xc = xc_interface_open(0, 0, 0);
2803d8b441a3SJan Beulich  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2804d8b441a3SJan Beulich  xc_gnttab_open(NULL, 0);
2805d8b441a3SJan Beulich  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2806d8b441a3SJan Beulich  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
28073996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
28083996e85cSPaul Durrant  return 0;
28093996e85cSPaul Durrant}
28103996e85cSPaul DurrantEOF
28113996e85cSPaul Durrant        compile_prog "" "$xen_libs"
28123996e85cSPaul Durrant      then
2813f1167ee6SJuergen Gross      xen_ctrl_version=40500
28141badb709SPaolo Bonzini      xen=enabled
28153996e85cSPaul Durrant
28163996e85cSPaul Durrant    elif
28173996e85cSPaul Durrant        cat > $TMPC <<EOF &&
28183996e85cSPaul Durrant#include <xenctrl.h>
28193996e85cSPaul Durrant#include <xenstore.h>
28203996e85cSPaul Durrant#include <stdint.h>
28213996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
28223996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
28233996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
28243996e85cSPaul Durrant#endif
28253996e85cSPaul Durrantint main(void) {
28263996e85cSPaul Durrant  xc_interface *xc;
28273996e85cSPaul Durrant  xs_daemon_open();
28283996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
28293996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
28303996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
28313996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
28323996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
28338688e065SStefano Stabellini  return 0;
28348688e065SStefano Stabellini}
28358688e065SStefano StabelliniEOF
28368688e065SStefano Stabellini        compile_prog "" "$xen_libs"
283769deef08SPeter Maydell      then
2838f1167ee6SJuergen Gross      xen_ctrl_version=40200
28391badb709SPaolo Bonzini      xen=enabled
28408688e065SStefano Stabellini
2841e37630caSaliguori    else
28421badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
2843edfb07edSIan Campbell        feature_not_found "xen (unsupported version)" \
2844edfb07edSIan Campbell                          "Install a supported xen (xen 4.2 or newer)"
2845fc321b4bSJuan Quintela      fi
28461badb709SPaolo Bonzini      xen=disabled
2847e37630caSaliguori    fi
2848d5b93ddfSAnthony PERARD
28491badb709SPaolo Bonzini    if test "$xen" = enabled; then
2850f1167ee6SJuergen Gross      if test $xen_ctrl_version -ge 40701  ; then
2851582ea95fSMarc-André Lureau        xen_libs="$xen_libs $xen_stable_libs "
28525eeb39c2SIan Campbell      fi
2853d5b93ddfSAnthony PERARD    fi
2854e37630caSaliguori  fi
2855c1cdd9d5SJuergen Grossfi
2856e37630caSaliguori
28571badb709SPaolo Bonziniif test "$xen_pci_passthrough" != "disabled"; then
28581badb709SPaolo Bonzini  if test "$xen" = "enabled" && test "$linux" = "yes"; then
28591badb709SPaolo Bonzini    xen_pci_passthrough=enabled
2860eb6fda0fSAnthony PERARD  else
28611badb709SPaolo Bonzini    if test "$xen_pci_passthrough" = "enabled"; then
286276ad07a4SPeter Maydell      error_exit "User requested feature Xen PCI Passthrough" \
286376ad07a4SPeter Maydell          " but this feature requires /sys from Linux"
2864eb6fda0fSAnthony PERARD    fi
28651badb709SPaolo Bonzini    xen_pci_passthrough=disabled
2866eb6fda0fSAnthony PERARD  fi
2867eb6fda0fSAnthony PERARDfi
2868eb6fda0fSAnthony PERARD
2869e37630caSaliguori##########################################
2870e8f3bd71SMarc-André Lureau# gettext probe
2871e8f3bd71SMarc-André Lureauif test "$gettext" != "false" ; then
2872e8f3bd71SMarc-André Lureau  if has xgettext; then
2873e8f3bd71SMarc-André Lureau    gettext=true
2874e8f3bd71SMarc-André Lureau  else
2875e8f3bd71SMarc-André Lureau    if test "$gettext" = "true" ; then
2876e8f3bd71SMarc-André Lureau      feature_not_found "gettext" "Install xgettext binary"
2877e8f3bd71SMarc-André Lureau    fi
2878e8f3bd71SMarc-André Lureau    gettext=false
2879e8f3bd71SMarc-André Lureau  fi
2880e8f3bd71SMarc-André Lureaufi
2881e8f3bd71SMarc-André Lureau
2882e8f3bd71SMarc-André Lureau##########################################
2883dfffc653SJuan Quintela# Sparse probe
2884dfffc653SJuan Quintelaif test "$sparse" != "no" ; then
2885968b4db3SPaolo Bonzini  if has sparse; then
2886dfffc653SJuan Quintela    sparse=yes
2887dfffc653SJuan Quintela  else
2888dfffc653SJuan Quintela    if test "$sparse" = "yes" ; then
288921684af0SStewart Smith      feature_not_found "sparse" "Install sparse binary"
2890dfffc653SJuan Quintela    fi
2891dfffc653SJuan Quintela    sparse=no
2892dfffc653SJuan Quintela  fi
2893dfffc653SJuan Quintelafi
2894dfffc653SJuan Quintela
2895dfffc653SJuan Quintela##########################################
2896f676c67eSJeremy White# X11 probe
2897f676c67eSJeremy Whiteif $pkg_config --exists "x11"; then
28988781595bSGerd Hoffmann    have_x11=yes
289989138857SStefan Weil    x11_cflags=$($pkg_config --cflags x11)
290089138857SStefan Weil    x11_libs=$($pkg_config --libs x11)
2901f676c67eSJeremy Whitefi
2902f676c67eSJeremy White
2903f676c67eSJeremy White##########################################
2904a4ccabcfSAnthony Liguori# GTK probe
2905a4ccabcfSAnthony Liguori
29065a464e6cSPeter Xuif test "$gtk" != "no"; then
290789d85cdeSDaniel P. Berrangé    gtkpackage="gtk+-3.0"
290889d85cdeSDaniel P. Berrangé    gtkx11package="gtk+-x11-3.0"
29097b23d121SVolker Rümelin    gtkversion="3.22.0"
2910bbbf9bfbSStefan Weil    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
291189138857SStefan Weil        gtk_cflags=$($pkg_config --cflags $gtkpackage)
291289138857SStefan Weil        gtk_libs=$($pkg_config --libs $gtkpackage)
291389138857SStefan Weil        gtk_version=$($pkg_config --modversion $gtkpackage)
29140a337ed0SGerd Hoffmann        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
29158781595bSGerd Hoffmann            need_x11=yes
2916f676c67eSJeremy White            gtk_cflags="$gtk_cflags $x11_cflags"
2917f676c67eSJeremy White            gtk_libs="$gtk_libs $x11_libs"
29180a337ed0SGerd Hoffmann        fi
2919bbbf9bfbSStefan Weil        gtk="yes"
2920bbbf9bfbSStefan Weil    elif test "$gtk" = "yes"; then
29215fe309ffSGerd Hoffmann        feature_not_found "gtk" "Install gtk3-devel"
2922bbbf9bfbSStefan Weil    else
2923bbbf9bfbSStefan Weil        gtk="no"
2924bbbf9bfbSStefan Weil    fi
2925bbbf9bfbSStefan Weilfi
2926bbbf9bfbSStefan Weil
2927ddbb0d09SDaniel P. Berrange
2928ddbb0d09SDaniel P. Berrange##########################################
2929ddbb0d09SDaniel P. Berrange# GNUTLS probe
2930ddbb0d09SDaniel P. Berrange
2931ddbb0d09SDaniel P. Berrangeif test "$gnutls" != "no"; then
2932a73e82efSRichard Henderson    pass="no"
2933a0722409SDaniel P. Berrangé    if $pkg_config --exists "gnutls >= 3.1.18"; then
293489138857SStefan Weil        gnutls_cflags=$($pkg_config --cflags gnutls)
293589138857SStefan Weil        gnutls_libs=$($pkg_config --libs gnutls)
2936a73e82efSRichard Henderson        # Packaging for the static libraries is not always correct.
2937a73e82efSRichard Henderson        # At least ubuntu 18.04 ships only shared libraries.
2938a73e82efSRichard Henderson        write_c_skeleton
2939a73e82efSRichard Henderson        if compile_prog "" "$gnutls_libs" ; then
2940a73e82efSRichard Henderson            pass="yes"
2941a73e82efSRichard Henderson        fi
2942a73e82efSRichard Henderson    fi
2943a73e82efSRichard Henderson    if test "$pass" = "no" && test "$gnutls" = "yes"; then
2944a0722409SDaniel P. Berrangé	feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2945ddbb0d09SDaniel P. Berrange    else
2946a73e82efSRichard Henderson        gnutls="$pass"
2947ddbb0d09SDaniel P. Berrange    fi
2948ddbb0d09SDaniel P. Berrangefi
2949ddbb0d09SDaniel P. Berrange
295091bfcdb0SDaniel P. Berrange
295191bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-gcrypt flag,
295291bfcdb0SDaniel P. Berrange# then mark as disabled if user requested nettle
2953a0722409SDaniel P. Berrangé# explicitly
295491bfcdb0SDaniel P. Berrangeif test -z "$gcrypt"
295591bfcdb0SDaniel P. Berrangethen
2956a0722409SDaniel P. Berrangé    if test "$nettle" = "yes"
295791bfcdb0SDaniel P. Berrange    then
295891bfcdb0SDaniel P. Berrange        gcrypt="no"
295991bfcdb0SDaniel P. Berrange    fi
296091bfcdb0SDaniel P. Berrangefi
296191bfcdb0SDaniel P. Berrange
296291bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-nettle flag,
296391bfcdb0SDaniel P. Berrange# then mark as disabled if user requested gcrypt
2964a0722409SDaniel P. Berrangé# explicitly
296591bfcdb0SDaniel P. Berrangeif test -z "$nettle"
296691bfcdb0SDaniel P. Berrangethen
2967a0722409SDaniel P. Berrangé    if test "$gcrypt" = "yes"
296891bfcdb0SDaniel P. Berrange    then
296991bfcdb0SDaniel P. Berrange        nettle="no"
297091bfcdb0SDaniel P. Berrange    fi
297191bfcdb0SDaniel P. Berrangefi
297291bfcdb0SDaniel P. Berrange
2973dea7a64eSDaniel P. Berrangéhas_libgcrypt() {
297491bfcdb0SDaniel P. Berrange    if ! has "libgcrypt-config"
297591bfcdb0SDaniel P. Berrange    then
297691bfcdb0SDaniel P. Berrange	return 1
297791bfcdb0SDaniel P. Berrange    fi
297891bfcdb0SDaniel P. Berrange
297991bfcdb0SDaniel P. Berrange    if test -n "$cross_prefix"
298091bfcdb0SDaniel P. Berrange    then
298189138857SStefan Weil	host=$(libgcrypt-config --host)
298291bfcdb0SDaniel P. Berrange	if test "$host-" != $cross_prefix
298391bfcdb0SDaniel P. Berrange	then
298491bfcdb0SDaniel P. Berrange	    return 1
298591bfcdb0SDaniel P. Berrange	fi
298691bfcdb0SDaniel P. Berrange    fi
298791bfcdb0SDaniel P. Berrange
2988dea7a64eSDaniel P. Berrangé    maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2989dea7a64eSDaniel P. Berrangé    min=`libgcrypt-config --version | awk -F . '{print $2}'`
2990dea7a64eSDaniel P. Berrangé
2991dea7a64eSDaniel P. Berrangé    if test $maj != 1 || test $min -lt 5
2992dea7a64eSDaniel P. Berrangé    then
2993dea7a64eSDaniel P. Berrangé       return 1
2994dea7a64eSDaniel P. Berrangé    fi
2995dea7a64eSDaniel P. Berrangé
299691bfcdb0SDaniel P. Berrange    return 0
299791bfcdb0SDaniel P. Berrange}
299891bfcdb0SDaniel P. Berrange
2999a0722409SDaniel P. Berrangé
3000a0722409SDaniel P. Berrangéif test "$nettle" != "no"; then
3001a73e82efSRichard Henderson    pass="no"
300264dd2f3bSDaniel P. Berrangé    if $pkg_config --exists "nettle >= 2.7.1"; then
3003a0722409SDaniel P. Berrangé        nettle_cflags=$($pkg_config --cflags nettle)
3004a0722409SDaniel P. Berrangé        nettle_libs=$($pkg_config --libs nettle)
3005a0722409SDaniel P. Berrangé        nettle_version=$($pkg_config --modversion nettle)
3006a73e82efSRichard Henderson        # Link test to make sure the given libraries work (e.g for static).
3007a73e82efSRichard Henderson        write_c_skeleton
3008a73e82efSRichard Henderson        if compile_prog "" "$nettle_libs" ; then
3009a0722409SDaniel P. Berrangé            if test -z "$gcrypt"; then
3010a0722409SDaniel P. Berrangé               gcrypt="no"
3011a0722409SDaniel P. Berrangé            fi
3012a73e82efSRichard Henderson            pass="yes"
3013a73e82efSRichard Henderson        fi
3014a73e82efSRichard Henderson    fi
3015dc2207afSDaniel P. Berrangé    if test "$pass" = "yes"
3016dc2207afSDaniel P. Berrangé    then
3017dc2207afSDaniel P. Berrangé        cat > $TMPC << EOF
3018dc2207afSDaniel P. Berrangé#include <nettle/xts.h>
3019dc2207afSDaniel P. Berrangéint main(void) {
3020dc2207afSDaniel P. Berrangé  return 0;
3021dc2207afSDaniel P. Berrangé}
3022dc2207afSDaniel P. BerrangéEOF
3023dc2207afSDaniel P. Berrangé        if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3024dc2207afSDaniel P. Berrangé            nettle_xts=yes
3025dc2207afSDaniel P. Berrangé            qemu_private_xts=no
3026dc2207afSDaniel P. Berrangé        fi
3027dc2207afSDaniel P. Berrangé    fi
3028a73e82efSRichard Henderson    if test "$pass" = "no" && test "$nettle" = "yes"; then
302964dd2f3bSDaniel P. Berrangé        feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3030a0722409SDaniel P. Berrangé    else
3031a73e82efSRichard Henderson        nettle="$pass"
3032a0722409SDaniel P. Berrangé    fi
3033a0722409SDaniel P. Berrangéfi
3034a0722409SDaniel P. Berrangé
303591bfcdb0SDaniel P. Berrangeif test "$gcrypt" != "no"; then
3036a73e82efSRichard Henderson    pass="no"
3037dea7a64eSDaniel P. Berrangé    if has_libgcrypt; then
303889138857SStefan Weil        gcrypt_cflags=$(libgcrypt-config --cflags)
303989138857SStefan Weil        gcrypt_libs=$(libgcrypt-config --libs)
3040a73e82efSRichard Henderson        # Debian has removed -lgpg-error from libgcrypt-config
304191bfcdb0SDaniel P. Berrange        # as it "spreads unnecessary dependencies" which in
304291bfcdb0SDaniel P. Berrange        # turn breaks static builds...
304391bfcdb0SDaniel P. Berrange        if test "$static" = "yes"
304491bfcdb0SDaniel P. Berrange        then
304591bfcdb0SDaniel P. Berrange            gcrypt_libs="$gcrypt_libs -lgpg-error"
304691bfcdb0SDaniel P. Berrange        fi
30471f923c70SLongpeng(Mike)
3048a73e82efSRichard Henderson        # Link test to make sure the given libraries work (e.g for static).
3049a73e82efSRichard Henderson        write_c_skeleton
3050a73e82efSRichard Henderson        if compile_prog "" "$gcrypt_libs" ; then
3051a73e82efSRichard Henderson            pass="yes"
3052a73e82efSRichard Henderson        fi
3053a73e82efSRichard Henderson    fi
3054a73e82efSRichard Henderson    if test "$pass" = "yes"; then
305537788f25SDaniel P. Berrange        gcrypt="yes"
30561f923c70SLongpeng(Mike)        cat > $TMPC << EOF
30571f923c70SLongpeng(Mike)#include <gcrypt.h>
30581f923c70SLongpeng(Mike)int main(void) {
30591f923c70SLongpeng(Mike)  gcry_mac_hd_t handle;
30601f923c70SLongpeng(Mike)  gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
30611f923c70SLongpeng(Mike)                GCRY_MAC_FLAG_SECURE, NULL);
30621f923c70SLongpeng(Mike)  return 0;
30631f923c70SLongpeng(Mike)}
30641f923c70SLongpeng(Mike)EOF
30651f923c70SLongpeng(Mike)        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
30661f923c70SLongpeng(Mike)            gcrypt_hmac=yes
30671f923c70SLongpeng(Mike)        fi
3068e0576942SDaniel P. Berrangé        cat > $TMPC << EOF
3069e0576942SDaniel P. Berrangé#include <gcrypt.h>
3070e0576942SDaniel P. Berrangéint main(void) {
3071e0576942SDaniel P. Berrangé  gcry_cipher_hd_t handle;
3072e0576942SDaniel P. Berrangé  gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3073e0576942SDaniel P. Berrangé  return 0;
3074e0576942SDaniel P. Berrangé}
3075e0576942SDaniel P. BerrangéEOF
3076e0576942SDaniel P. Berrangé        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3077e0576942SDaniel P. Berrangé            gcrypt_xts=yes
3078e0576942SDaniel P. Berrangé            qemu_private_xts=no
3079e0576942SDaniel P. Berrangé        fi
3080a73e82efSRichard Henderson    elif test "$gcrypt" = "yes"; then
3081dea7a64eSDaniel P. Berrangé        feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
308291bfcdb0SDaniel P. Berrange    else
308391bfcdb0SDaniel P. Berrange        gcrypt="no"
308491bfcdb0SDaniel P. Berrange    fi
308562893b67SDaniel P. Berrangefi
308662893b67SDaniel P. Berrange
3087ddbb0d09SDaniel P. Berrange
308891bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" && test "$nettle" = "yes"
308991bfcdb0SDaniel P. Berrangethen
309091bfcdb0SDaniel P. Berrange    error_exit "Only one of gcrypt & nettle can be enabled"
309191bfcdb0SDaniel P. Berrangefi
3092ed754746SDaniel P. Berrange
30939a2fd434SDaniel P. Berrange##########################################
30949a2fd434SDaniel P. Berrange# libtasn1 - only for the TLS creds/session test suite
30959a2fd434SDaniel P. Berrange
30969a2fd434SDaniel P. Berrangetasn1=yes
309790246037SDaniel P. Berrangetasn1_cflags=""
309890246037SDaniel P. Berrangetasn1_libs=""
30999a2fd434SDaniel P. Berrangeif $pkg_config --exists "libtasn1"; then
310089138857SStefan Weil    tasn1_cflags=$($pkg_config --cflags libtasn1)
310189138857SStefan Weil    tasn1_libs=$($pkg_config --libs libtasn1)
31029a2fd434SDaniel P. Berrangeelse
31039a2fd434SDaniel P. Berrange    tasn1=no
31049a2fd434SDaniel P. Berrangefi
31059a2fd434SDaniel P. Berrange
3106ed754746SDaniel P. Berrange
3107bbbf9bfbSStefan Weil##########################################
31088953caf3SDaniel P. Berrange# PAM probe
31098953caf3SDaniel P. Berrange
31108953caf3SDaniel P. Berrangeif test "$auth_pam" != "no"; then
31118953caf3SDaniel P. Berrange    cat > $TMPC <<EOF
31128953caf3SDaniel P. Berrange#include <security/pam_appl.h>
31138953caf3SDaniel P. Berrange#include <stdio.h>
31148953caf3SDaniel P. Berrangeint main(void) {
31158953caf3SDaniel P. Berrange   const char *service_name = "qemu";
31168953caf3SDaniel P. Berrange   const char *user = "frank";
31179c9642d0SDr. David Alan Gilbert   const struct pam_conv pam_conv = { 0 };
31188953caf3SDaniel P. Berrange   pam_handle_t *pamh = NULL;
31199c9642d0SDr. David Alan Gilbert   pam_start(service_name, user, &pam_conv, &pamh);
31208953caf3SDaniel P. Berrange   return 0;
31218953caf3SDaniel P. Berrange}
31228953caf3SDaniel P. BerrangeEOF
31238953caf3SDaniel P. Berrange    if compile_prog "" "-lpam" ; then
31248953caf3SDaniel P. Berrange        auth_pam=yes
31258953caf3SDaniel P. Berrange    else
31268953caf3SDaniel P. Berrange        if test "$auth_pam" = "yes"; then
31278953caf3SDaniel P. Berrange            feature_not_found "PAM" "Install PAM development package"
31288953caf3SDaniel P. Berrange        else
31298953caf3SDaniel P. Berrange            auth_pam=no
31308953caf3SDaniel P. Berrange        fi
31318953caf3SDaniel P. Berrange    fi
31328953caf3SDaniel P. Berrangefi
31338953caf3SDaniel P. Berrange
31348953caf3SDaniel P. Berrange##########################################
3135559607eaSDaniel P. Berrange# getifaddrs (for tests/test-io-channel-socket )
3136559607eaSDaniel P. Berrange
3137559607eaSDaniel P. Berrangehave_ifaddrs_h=yes
3138559607eaSDaniel P. Berrangeif ! check_include "ifaddrs.h" ; then
3139559607eaSDaniel P. Berrange  have_ifaddrs_h=no
3140559607eaSDaniel P. Berrangefi
3141559607eaSDaniel P. Berrange
3142e865b97fSChen Gang#########################################
3143e865b97fSChen Gang# libdrm check
3144e865b97fSChen Ganghave_drm_h=no
3145e865b97fSChen Gangif check_include "libdrm/drm.h" ; then
3146e865b97fSChen Gang    have_drm_h=yes
3147e865b97fSChen Gangfi
3148e865b97fSChen Gang
31492a4b472cSDavid CARLIER#########################################
31502a4b472cSDavid CARLIER# sys/signal.h check
31512a4b472cSDavid CARLIERhave_sys_signal_h=no
31522a4b472cSDavid CARLIERif check_include "sys/signal.h" ; then
31532a4b472cSDavid CARLIER  have_sys_signal_h=yes
31542a4b472cSDavid CARLIERfi
31552a4b472cSDavid CARLIER
3156559607eaSDaniel P. Berrange##########################################
3157bbbf9bfbSStefan Weil# VTE probe
3158bbbf9bfbSStefan Weil
3159bbbf9bfbSStefan Weilif test "$vte" != "no"; then
3160c6feff9eSCole Robinson    vteminversion="0.32.0"
3161c6feff9eSCole Robinson    if $pkg_config --exists "vte-2.91"; then
3162c6feff9eSCole Robinson      vtepackage="vte-2.91"
3163c6feff9eSCole Robinson    else
3164528de90aSDaniel P. Berrange      vtepackage="vte-2.90"
3165c6feff9eSCole Robinson    fi
3166c6feff9eSCole Robinson    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
316789138857SStefan Weil        vte_cflags=$($pkg_config --cflags $vtepackage)
316889138857SStefan Weil        vte_libs=$($pkg_config --libs $vtepackage)
316989138857SStefan Weil        vteversion=$($pkg_config --modversion $vtepackage)
3170bbbf9bfbSStefan Weil        vte="yes"
3171bbbf9bfbSStefan Weil    elif test "$vte" = "yes"; then
3172c6feff9eSCole Robinson        feature_not_found "vte" "Install libvte-2.90/2.91 devel"
31739e04c683SStefan Weil    else
3174bbbf9bfbSStefan Weil        vte="no"
3175a4ccabcfSAnthony Liguori    fi
3176a4ccabcfSAnthony Liguorifi
3177a4ccabcfSAnthony Liguori
3178a4ccabcfSAnthony Liguori##########################################
31792da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
31802da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
31812da776dbSMichael R. Hines  cat > $TMPC <<EOF
31822da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
31832da776dbSMichael R. Hinesint main(void) { return 0; }
31842da776dbSMichael R. HinesEOF
3185ef6d4ccdSYuval Shaia  rdma_libs="-lrdmacm -libverbs -libumad"
31862da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
31872da776dbSMichael R. Hines    rdma="yes"
31882da776dbSMichael R. Hines  else
31892da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
31902da776dbSMichael R. Hines        error_exit \
3191ef6d4ccdSYuval Shaia            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
31922da776dbSMichael R. Hines            " Your options:" \
3193ef6d4ccdSYuval Shaia            "  (1) Fast: Install infiniband packages (devel) from your distro." \
31942da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
31952da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
31962da776dbSMichael R. Hines    fi
31972da776dbSMichael R. Hines    rdma="no"
31982da776dbSMichael R. Hines  fi
31992da776dbSMichael R. Hinesfi
32002da776dbSMichael R. Hines
320121ab34c9SMarcel Apfelbaum##########################################
320221ab34c9SMarcel Apfelbaum# PVRDMA detection
320321ab34c9SMarcel Apfelbaum
320421ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF &&
320521ab34c9SMarcel Apfelbaum#include <sys/mman.h>
320621ab34c9SMarcel Apfelbaum
320721ab34c9SMarcel Apfelbaumint
320821ab34c9SMarcel Apfelbaummain(void)
320921ab34c9SMarcel Apfelbaum{
321021ab34c9SMarcel Apfelbaum    char buf = 0;
321121ab34c9SMarcel Apfelbaum    void *addr = &buf;
321221ab34c9SMarcel Apfelbaum    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
321321ab34c9SMarcel Apfelbaum
321421ab34c9SMarcel Apfelbaum    return 0;
321521ab34c9SMarcel Apfelbaum}
321621ab34c9SMarcel ApfelbaumEOF
321721ab34c9SMarcel Apfelbaum
321821ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then
321921ab34c9SMarcel Apfelbaum    case "$pvrdma" in
322021ab34c9SMarcel Apfelbaum    "")
322121ab34c9SMarcel Apfelbaum        if compile_prog "" ""; then
322221ab34c9SMarcel Apfelbaum            pvrdma="yes"
322321ab34c9SMarcel Apfelbaum        else
322421ab34c9SMarcel Apfelbaum            pvrdma="no"
322521ab34c9SMarcel Apfelbaum        fi
322621ab34c9SMarcel Apfelbaum        ;;
322721ab34c9SMarcel Apfelbaum    "yes")
322821ab34c9SMarcel Apfelbaum        if ! compile_prog "" ""; then
322921ab34c9SMarcel Apfelbaum            error_exit "PVRDMA is not supported since mremap is not implemented"
323021ab34c9SMarcel Apfelbaum        fi
323121ab34c9SMarcel Apfelbaum        pvrdma="yes"
323221ab34c9SMarcel Apfelbaum        ;;
323321ab34c9SMarcel Apfelbaum    "no")
323421ab34c9SMarcel Apfelbaum        pvrdma="no"
323521ab34c9SMarcel Apfelbaum        ;;
323621ab34c9SMarcel Apfelbaum    esac
323721ab34c9SMarcel Apfelbaumelse
323821ab34c9SMarcel Apfelbaum    if test "$pvrdma" = "yes" ; then
323921ab34c9SMarcel Apfelbaum        error_exit "PVRDMA requires rdma suppport"
324021ab34c9SMarcel Apfelbaum    fi
324121ab34c9SMarcel Apfelbaum    pvrdma="no"
324221ab34c9SMarcel Apfelbaumfi
324395c6bff3SBenoît Canet
3244ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported
3245ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then
3246ee108585SYuval Shaia
3247ee108585SYuval Shaiacat > $TMPC <<EOF &&
3248ee108585SYuval Shaia#include <infiniband/verbs.h>
3249ee108585SYuval Shaia
3250ee108585SYuval Shaiaint
3251ee108585SYuval Shaiamain(void)
3252ee108585SYuval Shaia{
3253ee108585SYuval Shaia    struct ibv_mr *mr;
3254ee108585SYuval Shaia    struct ibv_pd *pd = NULL;
3255ee108585SYuval Shaia    size_t length = 10;
3256ee108585SYuval Shaia    uint64_t iova = 0;
3257ee108585SYuval Shaia    int access = 0;
3258ee108585SYuval Shaia    void *addr = NULL;
3259ee108585SYuval Shaia
3260ee108585SYuval Shaia    mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3261ee108585SYuval Shaia
3262ee108585SYuval Shaia    ibv_dereg_mr(mr);
3263ee108585SYuval Shaia
3264ee108585SYuval Shaia    return 0;
3265ee108585SYuval Shaia}
3266ee108585SYuval ShaiaEOF
3267ee108585SYuval Shaia    if ! compile_prog "" "-libverbs"; then
3268ee108585SYuval Shaia        QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3269ee108585SYuval Shaia    fi
3270ee108585SYuval Shaiafi
3271ee108585SYuval Shaia
327295c6bff3SBenoît Canet##########################################
3273c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c
3274dce512deSChristoph Hellwigif test "$xfs" != "no" ; then
3275dce512deSChristoph Hellwig  cat > $TMPC << EOF
3276ffc41d10SStefan Weil#include <stddef.h>  /* NULL */
3277dce512deSChristoph Hellwig#include <xfs/xfs.h>
3278dce512deSChristoph Hellwigint main(void)
3279dce512deSChristoph Hellwig{
3280dce512deSChristoph Hellwig    xfsctl(NULL, 0, 0, NULL);
3281dce512deSChristoph Hellwig    return 0;
3282dce512deSChristoph Hellwig}
3283dce512deSChristoph HellwigEOF
3284dce512deSChristoph Hellwig  if compile_prog "" "" ; then
3285dce512deSChristoph Hellwig    xfs="yes"
3286dce512deSChristoph Hellwig  else
3287dce512deSChristoph Hellwig    if test "$xfs" = "yes" ; then
3288e3a6e0daSzhaolichang      feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3289dce512deSChristoph Hellwig    fi
3290dce512deSChristoph Hellwig    xfs=no
3291dce512deSChristoph Hellwig  fi
3292dce512deSChristoph Hellwigfi
3293dce512deSChristoph Hellwig
3294dce512deSChristoph Hellwig##########################################
32958a16d273Sths# vde libraries probe
3296dfb278bdSJuan Quintelaif test "$vde" != "no" ; then
32974baae0acSJuan Quintela  vde_libs="-lvdeplug"
32988a16d273Sths  cat > $TMPC << EOF
32998a16d273Sths#include <libvdeplug.h>
33004a7f0e06Spbrookint main(void)
33014a7f0e06Spbrook{
33024a7f0e06Spbrook    struct vde_open_args a = {0, 0, 0};
3303fea08e08SPeter Maydell    char s[] = "";
3304fea08e08SPeter Maydell    vde_open(s, s, &a);
33054a7f0e06Spbrook    return 0;
33064a7f0e06Spbrook}
33078a16d273SthsEOF
330852166aa0SJuan Quintela  if compile_prog "" "$vde_libs" ; then
33094baae0acSJuan Quintela    vde=yes
3310dfb278bdSJuan Quintela  else
3311dfb278bdSJuan Quintela    if test "$vde" = "yes" ; then
331221684af0SStewart Smith      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3313dfb278bdSJuan Quintela    fi
3314dfb278bdSJuan Quintela    vde=no
33158a16d273Sths  fi
33168a16d273Sthsfi
33178a16d273Sths
33188a16d273Sths##########################################
33190a985b37SVincenzo Maffione# netmap support probe
33200a985b37SVincenzo Maffione# Apart from looking for netmap headers, we make sure that the host API version
33210a985b37SVincenzo Maffione# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
33220a985b37SVincenzo Maffione# a minor/major version number. Minor new features will be marked with values up
33230a985b37SVincenzo Maffione# to 15, and if something happens that requires a change to the backend we will
33240a985b37SVincenzo Maffione# move above 15, submit the backend fixes and modify this two bounds.
332558952137SVincenzo Maffioneif test "$netmap" != "no" ; then
332658952137SVincenzo Maffione  cat > $TMPC << EOF
332758952137SVincenzo Maffione#include <inttypes.h>
332858952137SVincenzo Maffione#include <net/if.h>
332958952137SVincenzo Maffione#include <net/netmap.h>
333058952137SVincenzo Maffione#include <net/netmap_user.h>
33310a985b37SVincenzo Maffione#if (NETMAP_API < 11) || (NETMAP_API > 15)
33320a985b37SVincenzo Maffione#error
33330a985b37SVincenzo Maffione#endif
333458952137SVincenzo Maffioneint main(void) { return 0; }
333558952137SVincenzo MaffioneEOF
333658952137SVincenzo Maffione  if compile_prog "" "" ; then
333758952137SVincenzo Maffione    netmap=yes
333858952137SVincenzo Maffione  else
333958952137SVincenzo Maffione    if test "$netmap" = "yes" ; then
334058952137SVincenzo Maffione      feature_not_found "netmap"
334158952137SVincenzo Maffione    fi
334258952137SVincenzo Maffione    netmap=no
334358952137SVincenzo Maffione  fi
334458952137SVincenzo Maffionefi
334558952137SVincenzo Maffione
334658952137SVincenzo Maffione##########################################
334747e98658SCorey Bryant# libcap-ng library probe
334847e98658SCorey Bryantif test "$cap_ng" != "no" ; then
334947e98658SCorey Bryant  cap_libs="-lcap-ng"
335047e98658SCorey Bryant  cat > $TMPC << EOF
335147e98658SCorey Bryant#include <cap-ng.h>
335247e98658SCorey Bryantint main(void)
335347e98658SCorey Bryant{
335447e98658SCorey Bryant    capng_capability_to_name(CAPNG_EFFECTIVE);
335547e98658SCorey Bryant    return 0;
335647e98658SCorey Bryant}
335747e98658SCorey BryantEOF
335847e98658SCorey Bryant  if compile_prog "" "$cap_libs" ; then
335947e98658SCorey Bryant    cap_ng=yes
336047e98658SCorey Bryant  else
336147e98658SCorey Bryant    if test "$cap_ng" = "yes" ; then
336221684af0SStewart Smith      feature_not_found "cap_ng" "Install libcap-ng devel"
336347e98658SCorey Bryant    fi
336447e98658SCorey Bryant    cap_ng=no
336547e98658SCorey Bryant  fi
336647e98658SCorey Bryantfi
336747e98658SCorey Bryant
336847e98658SCorey Bryant##########################################
3369c2de5c91Smalc# Sound support libraries probe
33708f28f3fbSths
337189138857SStefan Weilaudio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3372c2de5c91Smalcfor drv in $audio_drv_list; do
3373c2de5c91Smalc    case $drv in
3374e42975a1SGerd Hoffmann    alsa | try-alsa)
3375c80a867fSGerd Hoffmann    if $pkg_config alsa --exists; then
3376c80a867fSGerd Hoffmann        alsa_libs=$($pkg_config alsa --libs)
3377478e943fSPaolo Bonzini        alsa_cflags=$($pkg_config alsa --cflags)
3378478e943fSPaolo Bonzini        alsa=yes
3379e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3380e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3381e42975a1SGerd Hoffmann        fi
3382e42975a1SGerd Hoffmann    else
3383e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3384e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3385c80a867fSGerd Hoffmann        else
3386c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3387c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3388c80a867fSGerd Hoffmann        fi
3389e42975a1SGerd Hoffmann    fi
3390c2de5c91Smalc    ;;
3391c2de5c91Smalc
3392e42975a1SGerd Hoffmann    pa | try-pa)
3393c80a867fSGerd Hoffmann    if $pkg_config libpulse --exists; then
3394478e943fSPaolo Bonzini        libpulse=yes
3395c80a867fSGerd Hoffmann        pulse_libs=$($pkg_config libpulse --libs)
3396478e943fSPaolo Bonzini        pulse_cflags=$($pkg_config libpulse --cflags)
3397e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3398e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3399e42975a1SGerd Hoffmann        fi
3400e42975a1SGerd Hoffmann    else
3401e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3402e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3403c80a867fSGerd Hoffmann        else
3404c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3405c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3406c80a867fSGerd Hoffmann        fi
3407e42975a1SGerd Hoffmann    fi
3408b8e59f18Smalc    ;;
3409b8e59f18Smalc
3410373967b2SGerd Hoffmann    sdl)
3411373967b2SGerd Hoffmann    if test "$sdl" = "no"; then
3412373967b2SGerd Hoffmann        error_exit "sdl not found or disabled, can not use sdl audio driver"
3413373967b2SGerd Hoffmann    fi
3414373967b2SGerd Hoffmann    ;;
3415373967b2SGerd Hoffmann
3416e42975a1SGerd Hoffmann    try-sdl)
3417e42975a1SGerd Hoffmann    if test "$sdl" = "no"; then
3418e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3419e42975a1SGerd Hoffmann    else
3420e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3421e42975a1SGerd Hoffmann    fi
3422e42975a1SGerd Hoffmann    ;;
3423e42975a1SGerd Hoffmann
3424997e690aSJuan Quintela    coreaudio)
3425b1149911SFam Zheng      coreaudio_libs="-framework CoreAudio"
3426997e690aSJuan Quintela    ;;
3427997e690aSJuan Quintela
3428a4bf6780SJuan Quintela    dsound)
3429b1149911SFam Zheng      dsound_libs="-lole32 -ldxguid"
3430d5631638Smalc      audio_win_int="yes"
3431a4bf6780SJuan Quintela    ;;
3432a4bf6780SJuan Quintela
3433a4bf6780SJuan Quintela    oss)
3434b1149911SFam Zheng      oss_libs="$oss_lib"
3435a4bf6780SJuan Quintela    ;;
3436a4bf6780SJuan Quintela
34372e445703SGeoffrey McRae    jack | try-jack)
34382e445703SGeoffrey McRae    if $pkg_config jack --exists; then
3439478e943fSPaolo Bonzini        libjack=yes
34402e445703SGeoffrey McRae        jack_libs=$($pkg_config jack --libs)
34412e445703SGeoffrey McRae        if test "$drv" = "try-jack"; then
34422e445703SGeoffrey McRae            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
34432e445703SGeoffrey McRae        fi
34442e445703SGeoffrey McRae    else
34452e445703SGeoffrey McRae        if test "$drv" = "try-jack"; then
34462e445703SGeoffrey McRae            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
34472e445703SGeoffrey McRae        else
34482e445703SGeoffrey McRae            error_exit "$drv check failed" \
34492e445703SGeoffrey McRae                "Make sure to have the $drv libs and headers installed."
34502e445703SGeoffrey McRae        fi
34512e445703SGeoffrey McRae    fi
34522e445703SGeoffrey McRae    ;;
34532e445703SGeoffrey McRae
3454e4c63a6aSmalc    *)
34551c9b2a52Smalc    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
345676ad07a4SPeter Maydell        error_exit "Unknown driver '$drv' selected" \
345776ad07a4SPeter Maydell            "Possible drivers are: $audio_possible_drivers"
3458e4c63a6aSmalc    }
3459e4c63a6aSmalc    ;;
3460c2de5c91Smalc    esac
3461c2de5c91Smalcdone
34628f28f3fbSths
34634d3b6f6eSbalrog##########################################
34642e4d9fb1Saurel32# BrlAPI probe
34652e4d9fb1Saurel32
34664ffcedb6SJuan Quintelaif test "$brlapi" != "no" ; then
3467eb82284fSJuan Quintela  brlapi_libs="-lbrlapi"
34682e4d9fb1Saurel32  cat > $TMPC << EOF
34692e4d9fb1Saurel32#include <brlapi.h>
3470832ce9c2SScott Wood#include <stddef.h>
34712e4d9fb1Saurel32int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
34722e4d9fb1Saurel32EOF
347352166aa0SJuan Quintela  if compile_prog "" "$brlapi_libs" ; then
34742e4d9fb1Saurel32    brlapi=yes
34754ffcedb6SJuan Quintela  else
34764ffcedb6SJuan Quintela    if test "$brlapi" = "yes" ; then
347721684af0SStewart Smith      feature_not_found "brlapi" "Install brlapi devel"
34784ffcedb6SJuan Quintela    fi
34794ffcedb6SJuan Quintela    brlapi=no
3480eb82284fSJuan Quintela  fi
3481eb82284fSJuan Quintelafi
34822e4d9fb1Saurel32
34832e4d9fb1Saurel32##########################################
3484e08bb301SSamuel Thibault# iconv probe
3485e08bb301SSamuel Thibaultif test "$iconv" != "no" ; then
3486e08bb301SSamuel Thibault  cat > $TMPC << EOF
3487e08bb301SSamuel Thibault#include <iconv.h>
3488e08bb301SSamuel Thibaultint main(void) {
3489e08bb301SSamuel Thibault  iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3490e08bb301SSamuel Thibault  return conv != (iconv_t) -1;
3491e08bb301SSamuel Thibault}
3492e08bb301SSamuel ThibaultEOF
3493e08bb301SSamuel Thibault  iconv_prefix_list="/usr/local:/usr"
3494e08bb301SSamuel Thibault  iconv_lib_list=":-liconv"
3495e08bb301SSamuel Thibault  IFS=:
3496e08bb301SSamuel Thibault  for iconv_prefix in $iconv_prefix_list; do
3497e08bb301SSamuel Thibault    IFS=:
3498e08bb301SSamuel Thibault    iconv_cflags="-I$iconv_prefix/include"
3499e08bb301SSamuel Thibault    iconv_ldflags="-L$iconv_prefix/lib"
3500e08bb301SSamuel Thibault    for iconv_link in $iconv_lib_list; do
3501e08bb301SSamuel Thibault      unset IFS
3502e08bb301SSamuel Thibault      iconv_lib="$iconv_ldflags $iconv_link"
3503e08bb301SSamuel Thibault      echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3504e08bb301SSamuel Thibault      if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3505e08bb301SSamuel Thibault        iconv_found=yes
3506e08bb301SSamuel Thibault        break
3507e08bb301SSamuel Thibault      fi
3508e08bb301SSamuel Thibault    done
3509e08bb301SSamuel Thibault    if test "$iconv_found" = yes ; then
3510e08bb301SSamuel Thibault      break
3511e08bb301SSamuel Thibault    fi
3512e08bb301SSamuel Thibault  done
3513e08bb301SSamuel Thibault  if test "$iconv_found" = "yes" ; then
3514e08bb301SSamuel Thibault    iconv=yes
3515e08bb301SSamuel Thibault  else
3516e08bb301SSamuel Thibault    if test "$iconv" = "yes" ; then
3517e08bb301SSamuel Thibault      feature_not_found "iconv" "Install iconv devel"
3518e08bb301SSamuel Thibault    fi
3519e08bb301SSamuel Thibault    iconv=no
3520e08bb301SSamuel Thibault  fi
3521e08bb301SSamuel Thibaultfi
3522e08bb301SSamuel Thibault
3523e08bb301SSamuel Thibault##########################################
35244d3b6f6eSbalrog# curses probe
3525e08bb301SSamuel Thibaultif test "$iconv" = "no" ; then
3526e08bb301SSamuel Thibault  # curses will need iconv
3527e08bb301SSamuel Thibault  curses=no
3528e08bb301SSamuel Thibaultfi
3529a3605bf6SMichael Tokarevif test "$curses" != "no" ; then
3530e095e2f3SStefan Weil  if test "$mingw32" = "yes" ; then
35318ddc5bf9SSamuel Thibault    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
35328ddc5bf9SSamuel Thibault    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3533e095e2f3SStefan Weil  else
35347c703002SSamuel Thibault    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
35358ddc5bf9SSamuel Thibault    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3536e095e2f3SStefan Weil  fi
3537c584a6d0SJuan Quintela  curses_found=no
35384d3b6f6eSbalrog  cat > $TMPC << EOF
35398ddc5bf9SSamuel Thibault#include <locale.h>
35404d3b6f6eSbalrog#include <curses.h>
35418ddc5bf9SSamuel Thibault#include <wchar.h>
35422f8b7cd5SSamuel Thibault#include <langinfo.h>
3543ef9a2524SStefan Weilint main(void) {
35442f8b7cd5SSamuel Thibault  const char *codeset;
35458ddc5bf9SSamuel Thibault  wchar_t wch = L'w';
35468ddc5bf9SSamuel Thibault  setlocale(LC_ALL, "");
3547ef9a2524SStefan Weil  resize_term(0, 0);
35488ddc5bf9SSamuel Thibault  addwstr(L"wide chars\n");
35498ddc5bf9SSamuel Thibault  addnwstr(&wch, 1);
35507c703002SSamuel Thibault  add_wch(WACS_DEGREE);
35512f8b7cd5SSamuel Thibault  codeset = nl_langinfo(CODESET);
35522f8b7cd5SSamuel Thibault  return codeset != 0;
3553ef9a2524SStefan Weil}
35544d3b6f6eSbalrogEOF
3555ecbe251fSVadim Evard  IFS=:
35568ddc5bf9SSamuel Thibault  for curses_inc in $curses_inc_list; do
3557b01a4fd3SPeter Maydell    # Make sure we get the wide character prototypes
3558b01a4fd3SPeter Maydell    curses_inc="-DNCURSES_WIDECHAR $curses_inc"
35597c703002SSamuel Thibault    IFS=:
35608ddc5bf9SSamuel Thibault    for curses_lib in $curses_lib_list; do
3561ecbe251fSVadim Evard      unset IFS
35628ddc5bf9SSamuel Thibault      if compile_prog "$curses_inc" "$curses_lib" ; then
3563c584a6d0SJuan Quintela        curses_found=yes
35644f78ef9aSJuan Quintela        break
35654d3b6f6eSbalrog      fi
35664f78ef9aSJuan Quintela    done
35677c703002SSamuel Thibault    if test "$curses_found" = yes ; then
35687c703002SSamuel Thibault      break
35697c703002SSamuel Thibault    fi
35708ddc5bf9SSamuel Thibault  done
3571ecbe251fSVadim Evard  unset IFS
3572c584a6d0SJuan Quintela  if test "$curses_found" = "yes" ; then
3573c584a6d0SJuan Quintela    curses=yes
3574c584a6d0SJuan Quintela  else
3575c584a6d0SJuan Quintela    if test "$curses" = "yes" ; then
357621684af0SStewart Smith      feature_not_found "curses" "Install ncurses devel"
3577c584a6d0SJuan Quintela    fi
3578c584a6d0SJuan Quintela    curses=no
3579c584a6d0SJuan Quintela  fi
35804f78ef9aSJuan Quintelafi
35814d3b6f6eSbalrog
3582414f0dabSblueswir1##########################################
3583769ce76dSAlexander Graf# curl probe
3584a3605bf6SMichael Tokarevif test "$curl" != "no" ; then
358565d5d3f9SStefan Weil  if $pkg_config libcurl --exists; then
3586a8bd70adSPaolo Bonzini    curlconfig="$pkg_config libcurl"
35874e2b0658SPaolo Bonzini  else
35884e2b0658SPaolo Bonzini    curlconfig=curl-config
35894e2b0658SPaolo Bonzini  fi
3590769ce76dSAlexander Graf  cat > $TMPC << EOF
3591769ce76dSAlexander Graf#include <curl/curl.h>
35920b862cedSPeter Maydellint main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3593769ce76dSAlexander GrafEOF
359489138857SStefan Weil  curl_cflags=$($curlconfig --cflags 2>/dev/null)
359589138857SStefan Weil  curl_libs=$($curlconfig --libs 2>/dev/null)
3596b1d5a277SJuan Quintela  if compile_prog "$curl_cflags" "$curl_libs" ; then
3597769ce76dSAlexander Graf    curl=yes
3598788c8196SJuan Quintela  else
3599788c8196SJuan Quintela    if test "$curl" = "yes" ; then
360021684af0SStewart Smith      feature_not_found "curl" "Install libcurl devel"
3601788c8196SJuan Quintela    fi
3602788c8196SJuan Quintela    curl=no
3603769ce76dSAlexander Graf  fi
3604769ce76dSAlexander Graffi # test "$curl"
3605769ce76dSAlexander Graf
3606769ce76dSAlexander Graf##########################################
3607e18df141SAnthony Liguori# glib support probe
3608a52d28afSPaolo Bonzini
360900f2cfbbSDaniel P. Berrangéglib_req_ver=2.48
3610aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
3611aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
3612a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
3613aa0d1f44SPaolo Bonzinifi
361454cb65d8SEmilio G. Cotaif test "$plugins" = yes; then
361554cb65d8SEmilio G. Cota    glib_modules="$glib_modules gmodule-2.0"
361654cb65d8SEmilio G. Cotafi
3617e26110cfSFam Zheng
3618aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
3619e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
362089138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
362189138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
3622e18df141SAnthony Liguori    else
3623e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3624e26110cfSFam Zheng    fi
3625e26110cfSFam Zhengdone
3626e26110cfSFam Zheng
3627215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it
3628215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3629215b0c2fSPaolo Bonzini
3630215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then
3631215b0c2fSPaolo Bonzini    glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3632215b0c2fSPaolo Bonzinifi
3633215b0c2fSPaolo Bonzini
3634f876b765SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3635f876b765SMarc-André Lureau    gio=yes
3636f876b765SMarc-André Lureau    gio_cflags=$($pkg_config --cflags gio-2.0)
3637f876b765SMarc-André Lureau    gio_libs=$($pkg_config --libs gio-2.0)
363825a97a56SMarc-André Lureau    gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
36390dba4897SMarc-André Lureau    if [ ! -x "$gdbus_codegen" ]; then
36400dba4897SMarc-André Lureau        gdbus_codegen=
36410dba4897SMarc-André Lureau    fi
3642f876b765SMarc-André Lureauelse
3643f876b765SMarc-André Lureau    gio=no
3644f876b765SMarc-André Lureaufi
3645f876b765SMarc-André Lureau
364625a97a56SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
364725a97a56SMarc-André Lureau    gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
364825a97a56SMarc-André Lureau    gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
364925a97a56SMarc-André Lureaufi
365025a97a56SMarc-André Lureau
3651977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
3652977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
3653977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
3654977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
3655977a82abSDaniel P. Berrangecat > $TMPC <<EOF
3656977a82abSDaniel P. Berrange#include <glib.h>
3657977a82abSDaniel P. Berrange#include <unistd.h>
3658977a82abSDaniel P. Berrange
3659977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
3660977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3661977a82abSDaniel P. Berrange
3662977a82abSDaniel P. Berrangeint main(void) {
3663977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3664977a82abSDaniel P. Berrange   return 0;
3665977a82abSDaniel P. Berrange}
3666977a82abSDaniel P. BerrangeEOF
3667977a82abSDaniel P. Berrange
3668215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then
3669977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3670977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
3671977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
3672977a82abSDaniel P. Berrange	       "build target"
3673977a82abSDaniel P. Berrangefi
3674977a82abSDaniel P. Berrange
3675bbbf2e04SJohn Snow# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3676bbbf2e04SJohn Snowcat > $TMPC << EOF
3677bbbf2e04SJohn Snow#include <glib.h>
3678bbbf2e04SJohn Snowint main(void) { return 0; }
3679bbbf2e04SJohn SnowEOF
3680bbbf2e04SJohn Snowif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3681bbbf2e04SJohn Snow    if cc_has_warning_flag "-Wno-unknown-attributes"; then
3682bbbf2e04SJohn Snow        glib_cflags="-Wno-unknown-attributes $glib_cflags"
3683215b0c2fSPaolo Bonzini        CFLAGS="-Wno-unknown-attributes $CFLAGS"
3684bbbf2e04SJohn Snow    fi
3685bbbf2e04SJohn Snowfi
3686bbbf2e04SJohn Snow
36879bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2
36889bda600bSEric Blakecat > $TMPC << EOF
36899bda600bSEric Blake#include <glib.h>
36909bda600bSEric Blaketypedef struct Foo {
36919bda600bSEric Blake    int i;
36929bda600bSEric Blake} Foo;
36939bda600bSEric Blakestatic void foo_free(Foo *f)
36949bda600bSEric Blake{
36959bda600bSEric Blake    g_free(f);
36969bda600bSEric Blake}
36979bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
36989bda600bSEric Blakeint main(void) { return 0; }
36999bda600bSEric BlakeEOF
37009bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
37019bda600bSEric Blake    if cc_has_warning_flag "-Wno-unused-function"; then
37029bda600bSEric Blake        glib_cflags="$glib_cflags -Wno-unused-function"
37039bda600bSEric Blake        CFLAGS="$CFLAGS -Wno-unused-function"
37049bda600bSEric Blake    fi
37059bda600bSEric Blakefi
37069bda600bSEric Blake
3707e26110cfSFam Zheng##########################################
3708e26110cfSFam Zheng# SHA command probe for modules
3709e26110cfSFam Zhengif test "$modules" = yes; then
3710e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
3711e26110cfSFam Zheng    for c in $shacmd_probe; do
37128ccefb91SFam Zheng        if has $c; then
3713e26110cfSFam Zheng            shacmd="$c"
3714e26110cfSFam Zheng            break
3715e26110cfSFam Zheng        fi
3716e26110cfSFam Zheng    done
3717e26110cfSFam Zheng    if test "$shacmd" = ""; then
3718e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3719e26110cfSFam Zheng    fi
3720e18df141SAnthony Liguorifi
3721e18df141SAnthony Liguori
3722e18df141SAnthony Liguori##########################################
3723e5d355d1Saliguori# pthread probe
37244b29ec41SBradPTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
37253c529d93Saliguori
3726e5d355d1Saliguoripthread=no
3727414f0dabSblueswir1cat > $TMPC << EOF
37283c529d93Saliguori#include <pthread.h>
37297a42bbe4SStefan Weilstatic void *f(void *p) { return NULL; }
37307a42bbe4SStefan Weilint main(void) {
37317a42bbe4SStefan Weil  pthread_t thread;
37327a42bbe4SStefan Weil  pthread_create(&thread, 0, f, 0);
37337a42bbe4SStefan Weil  return 0;
37347a42bbe4SStefan Weil}
3735414f0dabSblueswir1EOF
3736bd00d539SAndreas Färberif compile_prog "" "" ; then
3737bd00d539SAndreas Färber  pthread=yes
3738bd00d539SAndreas Färberelse
3739de65fe0fSSebastian Herbszt  for pthread_lib in $PTHREADLIBS_LIST; do
374052166aa0SJuan Quintela    if compile_prog "" "$pthread_lib" ; then
3741e5d355d1Saliguori      pthread=yes
3742e3c56761SPeter Portante      found=no
3743e3c56761SPeter Portante      for lib_entry in $LIBS; do
3744e3c56761SPeter Portante        if test "$lib_entry" = "$pthread_lib"; then
3745e3c56761SPeter Portante          found=yes
3746e3c56761SPeter Portante          break
3747e3c56761SPeter Portante        fi
3748e3c56761SPeter Portante      done
3749e3c56761SPeter Portante      if test "$found" = "no"; then
37505572b539SJuan Quintela        LIBS="$pthread_lib $LIBS"
3751e3c56761SPeter Portante      fi
3752409437e1SDaniel P. Berrange      PTHREAD_LIB="$pthread_lib"
3753de65fe0fSSebastian Herbszt      break
3754414f0dabSblueswir1    fi
3755de65fe0fSSebastian Herbszt  done
3756bd00d539SAndreas Färberfi
3757414f0dabSblueswir1
3758e633a5c6SEric Blakeif test "$mingw32" != yes && test "$pthread" = no; then
375976ad07a4SPeter Maydell  error_exit "pthread check failed" \
376076ad07a4SPeter Maydell      "Make sure to have the pthread libs and headers installed."
3761e5d355d1Saliguorifi
3762e5d355d1Saliguori
3763479a5747SRoman Bolshakov# check for pthread_setname_np with thread id
3764479a5747SRoman Bolshakovpthread_setname_np_w_tid=no
37655c312079SDr. David Alan Gilbertcat > $TMPC << EOF
37665c312079SDr. David Alan Gilbert#include <pthread.h>
37675c312079SDr. David Alan Gilbert
37685c312079SDr. David Alan Gilbertstatic void *f(void *p) { return NULL; }
37695c312079SDr. David Alan Gilbertint main(void)
37705c312079SDr. David Alan Gilbert{
37715c312079SDr. David Alan Gilbert    pthread_t thread;
37725c312079SDr. David Alan Gilbert    pthread_create(&thread, 0, f, 0);
37735c312079SDr. David Alan Gilbert    pthread_setname_np(thread, "QEMU");
37745c312079SDr. David Alan Gilbert    return 0;
37755c312079SDr. David Alan Gilbert}
37765c312079SDr. David Alan GilbertEOF
37775c312079SDr. David Alan Gilbertif compile_prog "" "$pthread_lib" ; then
3778479a5747SRoman Bolshakov  pthread_setname_np_w_tid=yes
3779479a5747SRoman Bolshakovfi
3780479a5747SRoman Bolshakov
3781479a5747SRoman Bolshakov# check for pthread_setname_np without thread id
3782479a5747SRoman Bolshakovpthread_setname_np_wo_tid=no
3783479a5747SRoman Bolshakovcat > $TMPC << EOF
3784479a5747SRoman Bolshakov#include <pthread.h>
3785479a5747SRoman Bolshakov
378612a9b8d8SThomas Huthstatic void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3787479a5747SRoman Bolshakovint main(void)
3788479a5747SRoman Bolshakov{
3789479a5747SRoman Bolshakov    pthread_t thread;
3790479a5747SRoman Bolshakov    pthread_create(&thread, 0, f, 0);
3791479a5747SRoman Bolshakov    return 0;
3792479a5747SRoman Bolshakov}
3793479a5747SRoman BolshakovEOF
3794479a5747SRoman Bolshakovif compile_prog "" "$pthread_lib" ; then
3795479a5747SRoman Bolshakov  pthread_setname_np_wo_tid=yes
37965c312079SDr. David Alan Gilbertfi
37975c312079SDr. David Alan Gilbert
3798bf9298b9Saliguori##########################################
3799f27aaf4bSChristian Brunner# rbd probe
3800f27aaf4bSChristian Brunnerif test "$rbd" != "no" ; then
3801f27aaf4bSChristian Brunner  cat > $TMPC <<EOF
3802f27aaf4bSChristian Brunner#include <stdio.h>
3803ad32e9c0SJosh Durgin#include <rbd/librbd.h>
3804f27aaf4bSChristian Brunnerint main(void) {
3805ad32e9c0SJosh Durgin    rados_t cluster;
3806ad32e9c0SJosh Durgin    rados_create(&cluster, NULL);
3807f27aaf4bSChristian Brunner    return 0;
3808f27aaf4bSChristian Brunner}
3809f27aaf4bSChristian BrunnerEOF
3810ad32e9c0SJosh Durgin  rbd_libs="-lrbd -lrados"
3811f27aaf4bSChristian Brunner  if compile_prog "" "$rbd_libs" ; then
3812f27aaf4bSChristian Brunner    rbd=yes
3813f27aaf4bSChristian Brunner  else
3814f27aaf4bSChristian Brunner    if test "$rbd" = "yes" ; then
381521684af0SStewart Smith      feature_not_found "rados block device" "Install librbd/ceph devel"
3816f27aaf4bSChristian Brunner    fi
3817f27aaf4bSChristian Brunner    rbd=no
3818f27aaf4bSChristian Brunner  fi
3819f27aaf4bSChristian Brunnerfi
3820f27aaf4bSChristian Brunner
3821f27aaf4bSChristian Brunner##########################################
3822b10d49d7SPino Toscano# libssh probe
3823b10d49d7SPino Toscanoif test "$libssh" != "no" ; then
3824b10d49d7SPino Toscano  if $pkg_config --exists libssh; then
3825b10d49d7SPino Toscano    libssh_cflags=$($pkg_config libssh --cflags)
3826b10d49d7SPino Toscano    libssh_libs=$($pkg_config libssh --libs)
3827b10d49d7SPino Toscano    libssh=yes
38280a12ec87SRichard W.M. Jones  else
3829b10d49d7SPino Toscano    if test "$libssh" = "yes" ; then
3830b10d49d7SPino Toscano      error_exit "libssh required for --enable-libssh"
38310a12ec87SRichard W.M. Jones    fi
3832b10d49d7SPino Toscano    libssh=no
38330a12ec87SRichard W.M. Jones  fi
38340a12ec87SRichard W.M. Jonesfi
38350a12ec87SRichard W.M. Jones
38360a12ec87SRichard W.M. Jones##########################################
3837b10d49d7SPino Toscano# Check for libssh 0.8
3838b10d49d7SPino Toscano# This is done like this instead of using the LIBSSH_VERSION_* and
3839b10d49d7SPino Toscano# SSH_VERSION_* macros because some distributions in the past shipped
3840b10d49d7SPino Toscano# snapshots of the future 0.8 from Git, and those snapshots did not
3841b10d49d7SPino Toscano# have updated version numbers (still referring to 0.7.0).
38429a2d462eSRichard W.M. Jones
3843b10d49d7SPino Toscanoif test "$libssh" = "yes"; then
38449a2d462eSRichard W.M. Jones  cat > $TMPC <<EOF
3845b10d49d7SPino Toscano#include <libssh/libssh.h>
3846b10d49d7SPino Toscanoint main(void) { return ssh_get_server_publickey(NULL, NULL); }
38479a2d462eSRichard W.M. JonesEOF
3848b10d49d7SPino Toscano  if compile_prog "$libssh_cflags" "$libssh_libs"; then
3849b10d49d7SPino Toscano    libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
38509a2d462eSRichard W.M. Jones  fi
38519a2d462eSRichard W.M. Jonesfi
38529a2d462eSRichard W.M. Jones
38539a2d462eSRichard W.M. Jones##########################################
38545c6c3a6cSChristoph Hellwig# linux-aio probe
38555c6c3a6cSChristoph Hellwig
38565c6c3a6cSChristoph Hellwigif test "$linux_aio" != "no" ; then
38575c6c3a6cSChristoph Hellwig  cat > $TMPC <<EOF
38585c6c3a6cSChristoph Hellwig#include <libaio.h>
38595c6c3a6cSChristoph Hellwig#include <sys/eventfd.h>
3860832ce9c2SScott Wood#include <stddef.h>
38615c6c3a6cSChristoph Hellwigint main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
38625c6c3a6cSChristoph HellwigEOF
38635c6c3a6cSChristoph Hellwig  if compile_prog "" "-laio" ; then
38645c6c3a6cSChristoph Hellwig    linux_aio=yes
38655c6c3a6cSChristoph Hellwig  else
38665c6c3a6cSChristoph Hellwig    if test "$linux_aio" = "yes" ; then
386721684af0SStewart Smith      feature_not_found "linux AIO" "Install libaio devel"
38685c6c3a6cSChristoph Hellwig    fi
38693cfcae3cSLuiz Capitulino    linux_aio=no
38705c6c3a6cSChristoph Hellwig  fi
38715c6c3a6cSChristoph Hellwigfi
3872c10dd856SAarushi Mehta##########################################
3873c10dd856SAarushi Mehta# linux-io-uring probe
3874c10dd856SAarushi Mehta
3875c10dd856SAarushi Mehtaif test "$linux_io_uring" != "no" ; then
3876c10dd856SAarushi Mehta  if $pkg_config liburing; then
3877c10dd856SAarushi Mehta    linux_io_uring_cflags=$($pkg_config --cflags liburing)
3878c10dd856SAarushi Mehta    linux_io_uring_libs=$($pkg_config --libs liburing)
3879c10dd856SAarushi Mehta    linux_io_uring=yes
3880c10dd856SAarushi Mehta  else
3881c10dd856SAarushi Mehta    if test "$linux_io_uring" = "yes" ; then
3882c10dd856SAarushi Mehta      feature_not_found "linux io_uring" "Install liburing devel"
3883c10dd856SAarushi Mehta    fi
3884c10dd856SAarushi Mehta    linux_io_uring=no
3885c10dd856SAarushi Mehta  fi
3886c10dd856SAarushi Mehtafi
38875c6c3a6cSChristoph Hellwig
38885c6c3a6cSChristoph Hellwig##########################################
38897aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX
38903b8acc11SPaolo Bonzini
38917aaa6a16SPaolo Bonziniif test "$tpm" = ""; then
38927aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes"; then
38937aaa6a16SPaolo Bonzini    tpm=no
38943b8acc11SPaolo Bonzini  else
38957aaa6a16SPaolo Bonzini    tpm=yes
38967aaa6a16SPaolo Bonzini  fi
38977aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then
38987aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes" ; then
38997aaa6a16SPaolo Bonzini    error_exit "TPM emulation only available on POSIX systems"
39007aaa6a16SPaolo Bonzini  fi
39013b8acc11SPaolo Bonzinifi
39023b8acc11SPaolo Bonzini
39033b8acc11SPaolo Bonzini##########################################
3904758e8e38SVenkateswararao Jujjuri (JV)# attr probe
3905758e8e38SVenkateswararao Jujjuri (JV)
3906ec0d5893SMarc-André Lureaulibattr_libs=
3907758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" != "no" ; then
3908758e8e38SVenkateswararao Jujjuri (JV)  cat > $TMPC <<EOF
3909758e8e38SVenkateswararao Jujjuri (JV)#include <stdio.h>
3910758e8e38SVenkateswararao Jujjuri (JV)#include <sys/types.h>
3911f2338fb4SPavel Borzenkov#ifdef CONFIG_LIBATTR
3912f2338fb4SPavel Borzenkov#include <attr/xattr.h>
3913f2338fb4SPavel Borzenkov#else
39144f26f2b6SAvi Kivity#include <sys/xattr.h>
3915f2338fb4SPavel Borzenkov#endif
3916758e8e38SVenkateswararao Jujjuri (JV)int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3917758e8e38SVenkateswararao Jujjuri (JV)EOF
39184f26f2b6SAvi Kivity  if compile_prog "" "" ; then
39194f26f2b6SAvi Kivity    attr=yes
39204f26f2b6SAvi Kivity  # Older distros have <attr/xattr.h>, and need -lattr:
3921f2338fb4SPavel Borzenkov  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3922758e8e38SVenkateswararao Jujjuri (JV)    attr=yes
3923ec0d5893SMarc-André Lureau    libattr_libs="-lattr"
39244f26f2b6SAvi Kivity    libattr=yes
3925758e8e38SVenkateswararao Jujjuri (JV)  else
3926758e8e38SVenkateswararao Jujjuri (JV)    if test "$attr" = "yes" ; then
392721684af0SStewart Smith      feature_not_found "ATTR" "Install libc6 or libattr devel"
3928758e8e38SVenkateswararao Jujjuri (JV)    fi
3929758e8e38SVenkateswararao Jujjuri (JV)    attr=no
3930758e8e38SVenkateswararao Jujjuri (JV)  fi
3931758e8e38SVenkateswararao Jujjuri (JV)fi
3932758e8e38SVenkateswararao Jujjuri (JV)
3933758e8e38SVenkateswararao Jujjuri (JV)##########################################
3934bf9298b9Saliguori# iovec probe
3935bf9298b9Saliguoricat > $TMPC <<EOF
3936db34f0b3Sblueswir1#include <sys/types.h>
3937bf9298b9Saliguori#include <sys/uio.h>
3938db34f0b3Sblueswir1#include <unistd.h>
3939f91f9beeSStefan Weilint main(void) { return sizeof(struct iovec); }
3940bf9298b9SaliguoriEOF
3941bf9298b9Saliguoriiovec=no
394252166aa0SJuan Quintelaif compile_prog "" "" ; then
3943bf9298b9Saliguori  iovec=yes
3944bf9298b9Saliguorifi
3945bf9298b9Saliguori
3946f652e6afSaurel32##########################################
3947ceb42de8Saliguori# preadv probe
3948ceb42de8Saliguoricat > $TMPC <<EOF
3949ceb42de8Saliguori#include <sys/types.h>
3950ceb42de8Saliguori#include <sys/uio.h>
3951ceb42de8Saliguori#include <unistd.h>
3952c075a723SBlue Swirlint main(void) { return preadv(0, 0, 0, 0); }
3953ceb42de8SaliguoriEOF
3954ceb42de8Saliguoripreadv=no
395552166aa0SJuan Quintelaif compile_prog "" "" ; then
3956ceb42de8Saliguori  preadv=yes
3957ceb42de8Saliguorifi
3958ceb42de8Saliguori
3959ceb42de8Saliguori##########################################
3960f652e6afSaurel32# fdt probe
3961e169e1e1SPeter Maydell# fdt support is mandatory for at least some target architectures,
3962e169e1e1SPeter Maydell# so insist on it if we're building those system emulators.
3963e169e1e1SPeter Maydellfdt_required=no
3964e169e1e1SPeter Maydellfor target in $target_list; do
3965e169e1e1SPeter Maydell  case $target in
3966c8c35e5fSYoshinori Sato    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
3967e169e1e1SPeter Maydell      fdt_required=yes
3968e169e1e1SPeter Maydell    ;;
3969e169e1e1SPeter Maydell  esac
3970e169e1e1SPeter Maydelldone
3971e169e1e1SPeter Maydell
3972e169e1e1SPeter Maydellif test "$fdt_required" = "yes"; then
3973e169e1e1SPeter Maydell  if test "$fdt" = "no"; then
3974e169e1e1SPeter Maydell    error_exit "fdt disabled but some requested targets require it." \
3975e169e1e1SPeter Maydell      "You can turn off fdt only if you also disable all the system emulation" \
3976e169e1e1SPeter Maydell      "targets which need it (by specifying a cut down --target-list)."
3977e169e1e1SPeter Maydell  fi
3978e169e1e1SPeter Maydell  fdt=yes
39797ba4a4d3SPhilippe Mathieu-Daudéelif test "$fdt" != "yes" ; then
39807ba4a4d3SPhilippe Mathieu-Daudé  fdt=no
3981e169e1e1SPeter Maydellfi
3982e169e1e1SPeter Maydell
3983d599938aSLaurent Vivier# fdt is only required when building softmmu targets
3984d599938aSLaurent Vivierif test -z "$fdt" -a "$softmmu" != "yes" ; then
3985d599938aSLaurent Vivier    fdt="no"
3986d599938aSLaurent Vivierfi
3987d599938aSLaurent Vivier
39882df87df7SJuan Quintelaif test "$fdt" != "no" ; then
3989b41af4baSJuan Quintela  fdt_libs="-lfdt"
399096ce6545SPeter Crosthwaite  # explicitly check for libfdt_env.h as it is missing in some stable installs
39916e85fce0SPaul Burton  # and test for required functions to make sure we are on a version >= 1.4.2
3992f652e6afSaurel32  cat > $TMPC << EOF
399331ce0adbSThomas Huth#include <libfdt.h>
399496ce6545SPeter Crosthwaite#include <libfdt_env.h>
3995fea35ca4SAlexey Kardashevskiyint main(void) { fdt_check_full(NULL, 0); return 0; }
3996f652e6afSaurel32EOF
399752166aa0SJuan Quintela  if compile_prog "" "$fdt_libs" ; then
3998a540f158SPeter Crosthwaite    # system DTC is good - use it
3999e3971d61SPhilippe Mathieu-Daudé    fdt=system
4000aef45d51SDaniel P. Berrange  else
4001aef45d51SDaniel P. Berrange      # have GIT checkout, so activate dtc submodule
4002aef45d51SDaniel P. Berrange      if test -e "${source_path}/.git" ; then
4003aef45d51SDaniel P. Berrange          git_submodules="${git_submodules} dtc"
4004aef45d51SDaniel P. Berrange      fi
4005aef45d51SDaniel P. Berrange      if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4006e3971d61SPhilippe Mathieu-Daudé          fdt=git
4007a540f158SPeter Crosthwaite          mkdir -p dtc
400825211446SPaolo Bonzini          fdt_cflags="-I${source_path}/dtc/libfdt"
400958683d07SPaolo Bonzini          fdt_ldflags="-Ldtc/libfdt"
40108a99e9a3SPhilippe Mathieu-Daudé          fdt_libs="$fdt_libs"
4011a540f158SPeter Crosthwaite      elif test "$fdt" = "yes" ; then
4012aef45d51SDaniel P. Berrange          # Not a git build & no libfdt found, prompt for system install
4013aef45d51SDaniel P. Berrange          error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4014aef45d51SDaniel P. Berrange                     "Please install the DTC (libfdt) devel package"
4015a540f158SPeter Crosthwaite      else
4016a540f158SPeter Crosthwaite          # don't have and don't want
4017de3a354aSMichael Walle          fdt_libs=
40182df87df7SJuan Quintela          fdt=no
4019f652e6afSaurel32      fi
4020f652e6afSaurel32  fi
4021aef45d51SDaniel P. Berrangefi
4022f652e6afSaurel32
402320ff075bSMichael Walle##########################################
4024fb719563SOGAWA Hirofumi# opengl probe (for sdl2, gtk, milkymist-tmu2)
4025b1546f32SGerd Hoffmann
4026d52c454aSMarc-André Lureaugbm="no"
4027d52c454aSMarc-André Lureauif $pkg_config gbm; then
4028d52c454aSMarc-André Lureau    gbm_cflags="$($pkg_config --cflags gbm)"
4029d52c454aSMarc-André Lureau    gbm_libs="$($pkg_config --libs gbm)"
4030d52c454aSMarc-André Lureau    gbm="yes"
4031d52c454aSMarc-André Lureaufi
4032d52c454aSMarc-André Lureau
4033da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
40344939a1dfSMichael Tokarev  opengl_pkgs="epoxy gbm"
40355f9b1e35SGerd Hoffmann  if $pkg_config $opengl_pkgs; then
40365f9b1e35SGerd Hoffmann    opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
40375f9b1e35SGerd Hoffmann    opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4038da076ffeSGerd Hoffmann    opengl=yes
4039925a0400SGerd Hoffmann    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4040925a0400SGerd Hoffmann        gtk_gl="yes"
4041925a0400SGerd Hoffmann    fi
404220ff075bSMichael Walle  else
4043da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
4044dcf30025SGerd Hoffmann      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
404520ff075bSMichael Walle    fi
4046f676c67eSJeremy White    opengl_cflags=""
4047da076ffeSGerd Hoffmann    opengl_libs=""
4048da076ffeSGerd Hoffmann    opengl=no
404920ff075bSMichael Walle  fi
405020ff075bSMichael Wallefi
405120ff075bSMichael Walle
4052014cb152SGerd Hoffmannif test "$opengl" = "yes"; then
4053014cb152SGerd Hoffmann  cat > $TMPC << EOF
4054014cb152SGerd Hoffmann#include <epoxy/egl.h>
4055014cb152SGerd Hoffmann#ifndef EGL_MESA_image_dma_buf_export
4056014cb152SGerd Hoffmann# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4057014cb152SGerd Hoffmann#endif
4058014cb152SGerd Hoffmannint main(void) { return 0; }
4059014cb152SGerd HoffmannEOF
4060014cb152SGerd Hoffmann  if compile_prog "" "" ; then
4061014cb152SGerd Hoffmann    opengl_dmabuf=yes
4062014cb152SGerd Hoffmann  fi
4063014cb152SGerd Hoffmannfi
4064c9a12e75SChrysostomos Nanakos
4065e633a5c6SEric Blakeif test "$opengl" = "yes" && test "$have_x11" = "yes"; then
406699e1a93bSPhilippe Mathieu-Daudé  for target in $target_list; do
406799e1a93bSPhilippe Mathieu-Daudé    case $target in
406899e1a93bSPhilippe Mathieu-Daudé      lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
406999e1a93bSPhilippe Mathieu-Daudé        need_x11=yes
407099e1a93bSPhilippe Mathieu-Daudé      ;;
407199e1a93bSPhilippe Mathieu-Daudé    esac
407299e1a93bSPhilippe Mathieu-Daudé  done
407399e1a93bSPhilippe Mathieu-Daudéfi
407499e1a93bSPhilippe Mathieu-Daudé
4075ed279a06SKlim Kireev##########################################
4076ed279a06SKlim Kireev# libxml2 probe
4077ed279a06SKlim Kireevif test "$libxml2" != "no" ; then
4078ed279a06SKlim Kireev    if $pkg_config --exists libxml-2.0; then
4079ed279a06SKlim Kireev        libxml2="yes"
4080ed279a06SKlim Kireev        libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4081ed279a06SKlim Kireev        libxml2_libs=$($pkg_config --libs libxml-2.0)
4082ed279a06SKlim Kireev    else
4083ed279a06SKlim Kireev        if test "$libxml2" = "yes"; then
4084ed279a06SKlim Kireev            feature_not_found "libxml2" "Install libxml2 devel"
4085ed279a06SKlim Kireev        fi
4086ed279a06SKlim Kireev        libxml2="no"
4087ed279a06SKlim Kireev    fi
4088ed279a06SKlim Kireevfi
4089c9a12e75SChrysostomos Nanakos
4090eb100396SBharata B Rao##########################################
4091eb100396SBharata B Rao# glusterfs probe
4092eb100396SBharata B Raoif test "$glusterfs" != "no" ; then
409365d5d3f9SStefan Weil  if $pkg_config --atleast-version=3 glusterfs-api; then
4094e01bee08SBharata B Rao    glusterfs="yes"
409589138857SStefan Weil    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
409689138857SStefan Weil    glusterfs_libs=$($pkg_config --libs glusterfs-api)
4097d85fa9ebSJeff Cody    if $pkg_config --atleast-version=4 glusterfs-api; then
4098d85fa9ebSJeff Cody      glusterfs_xlator_opt="yes"
4099d85fa9ebSJeff Cody    fi
410065d5d3f9SStefan Weil    if $pkg_config --atleast-version=5 glusterfs-api; then
41010c14fb47SBharata B Rao      glusterfs_discard="yes"
41020c14fb47SBharata B Rao    fi
41037c815372SBharata B Rao    if $pkg_config --atleast-version=6 glusterfs-api; then
4104df3a429aSNiels de Vos      glusterfs_fallocate="yes"
41057c815372SBharata B Rao      glusterfs_zerofill="yes"
41067c815372SBharata B Rao    fi
4107e014dbe7SPrasanna Kumar Kalever    cat > $TMPC << EOF
4108e014dbe7SPrasanna Kumar Kalever#include <glusterfs/api/glfs.h>
4109e014dbe7SPrasanna Kumar Kalever
4110e014dbe7SPrasanna Kumar Kaleverint
4111e014dbe7SPrasanna Kumar Kalevermain(void)
4112e014dbe7SPrasanna Kumar Kalever{
4113e014dbe7SPrasanna Kumar Kalever	/* new glfs_ftruncate() passes two additional args */
4114e014dbe7SPrasanna Kumar Kalever	return glfs_ftruncate(NULL, 0, NULL, NULL);
4115e014dbe7SPrasanna Kumar Kalever}
4116e014dbe7SPrasanna Kumar KaleverEOF
4117e014dbe7SPrasanna Kumar Kalever    if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4118e014dbe7SPrasanna Kumar Kalever      glusterfs_ftruncate_has_stat="yes"
4119e014dbe7SPrasanna Kumar Kalever    fi
41200e3b891fSNiels de Vos    cat > $TMPC << EOF
41210e3b891fSNiels de Vos#include <glusterfs/api/glfs.h>
41220e3b891fSNiels de Vos
41230e3b891fSNiels de Vos/* new glfs_io_cbk() passes two additional glfs_stat structs */
41240e3b891fSNiels de Vosstatic void
41250e3b891fSNiels de Vosglusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
41260e3b891fSNiels de Vos{}
41270e3b891fSNiels de Vos
41280e3b891fSNiels de Vosint
41290e3b891fSNiels de Vosmain(void)
41300e3b891fSNiels de Vos{
41310e3b891fSNiels de Vos	glfs_io_cbk iocb = &glusterfs_iocb;
41320e3b891fSNiels de Vos	iocb(NULL, 0 , NULL, NULL, NULL);
41330e3b891fSNiels de Vos	return 0;
41340e3b891fSNiels de Vos}
41350e3b891fSNiels de VosEOF
41360e3b891fSNiels de Vos    if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
41370e3b891fSNiels de Vos      glusterfs_iocb_has_stat="yes"
41380e3b891fSNiels de Vos    fi
4139eb100396SBharata B Rao  else
4140eb100396SBharata B Rao    if test "$glusterfs" = "yes" ; then
41418efc9363SHu Tao      feature_not_found "GlusterFS backend support" \
41428efc9363SHu Tao          "Install glusterfs-api devel >= 3"
4143eb100396SBharata B Rao    fi
4144e01bee08SBharata B Rao    glusterfs="no"
4145eb100396SBharata B Rao  fi
4146eb100396SBharata B Raofi
4147eb100396SBharata B Rao
414839386ac7Saurel32# Check for inotify functions when we are building linux-user
41493b3f24adSaurel32# emulator.  This is done because older glibc versions don't
41503b3f24adSaurel32# have syscall stubs for these implemented.  In that case we
41513b3f24adSaurel32# don't provide them even if kernel supports them.
41523b3f24adSaurel32#
41533b3f24adSaurel32inotify=no
41543b3f24adSaurel32cat > $TMPC << EOF
41553b3f24adSaurel32#include <sys/inotify.h>
41563b3f24adSaurel32
41573b3f24adSaurel32int
41583b3f24adSaurel32main(void)
41593b3f24adSaurel32{
41603b3f24adSaurel32	/* try to start inotify */
41618690e420Saurel32	return inotify_init();
41623b3f24adSaurel32}
41633b3f24adSaurel32EOF
416452166aa0SJuan Quintelaif compile_prog "" "" ; then
41653b3f24adSaurel32  inotify=yes
41663b3f24adSaurel32fi
41673b3f24adSaurel32
4168c05c7a73SRiku Voipioinotify1=no
4169c05c7a73SRiku Voipiocat > $TMPC << EOF
4170c05c7a73SRiku Voipio#include <sys/inotify.h>
4171c05c7a73SRiku Voipio
4172c05c7a73SRiku Voipioint
4173c05c7a73SRiku Voipiomain(void)
4174c05c7a73SRiku Voipio{
4175c05c7a73SRiku Voipio    /* try to start inotify */
4176c05c7a73SRiku Voipio    return inotify_init1(0);
4177c05c7a73SRiku Voipio}
4178c05c7a73SRiku VoipioEOF
4179c05c7a73SRiku Voipioif compile_prog "" "" ; then
4180c05c7a73SRiku Voipio  inotify1=yes
4181c05c7a73SRiku Voipiofi
4182c05c7a73SRiku Voipio
4183099d6b0fSRiku Voipio# check if pipe2 is there
4184099d6b0fSRiku Voipiopipe2=no
4185099d6b0fSRiku Voipiocat > $TMPC << EOF
4186099d6b0fSRiku Voipio#include <unistd.h>
4187099d6b0fSRiku Voipio#include <fcntl.h>
4188099d6b0fSRiku Voipio
4189099d6b0fSRiku Voipioint main(void)
4190099d6b0fSRiku Voipio{
4191099d6b0fSRiku Voipio    int pipefd[2];
41929bca8162SBruce Rogers    return pipe2(pipefd, O_CLOEXEC);
4193099d6b0fSRiku Voipio}
4194099d6b0fSRiku VoipioEOF
419552166aa0SJuan Quintelaif compile_prog "" "" ; then
4196099d6b0fSRiku Voipio  pipe2=yes
4197099d6b0fSRiku Voipiofi
4198099d6b0fSRiku Voipio
419940ff6d7eSKevin Wolf# check if accept4 is there
420040ff6d7eSKevin Wolfaccept4=no
420140ff6d7eSKevin Wolfcat > $TMPC << EOF
420240ff6d7eSKevin Wolf#include <sys/socket.h>
420340ff6d7eSKevin Wolf#include <stddef.h>
420440ff6d7eSKevin Wolf
420540ff6d7eSKevin Wolfint main(void)
420640ff6d7eSKevin Wolf{
420740ff6d7eSKevin Wolf    accept4(0, NULL, NULL, SOCK_CLOEXEC);
420840ff6d7eSKevin Wolf    return 0;
420940ff6d7eSKevin Wolf}
421040ff6d7eSKevin WolfEOF
421140ff6d7eSKevin Wolfif compile_prog "" "" ; then
421240ff6d7eSKevin Wolf  accept4=yes
421340ff6d7eSKevin Wolffi
421440ff6d7eSKevin Wolf
42153ce34dfbSvibisreenivasan# check if tee/splice is there. vmsplice was added same time.
42163ce34dfbSvibisreenivasansplice=no
42173ce34dfbSvibisreenivasancat > $TMPC << EOF
42183ce34dfbSvibisreenivasan#include <unistd.h>
42193ce34dfbSvibisreenivasan#include <fcntl.h>
42203ce34dfbSvibisreenivasan#include <limits.h>
42213ce34dfbSvibisreenivasan
42223ce34dfbSvibisreenivasanint main(void)
42233ce34dfbSvibisreenivasan{
422466ea0f22SStefan Weil    int len, fd = 0;
42253ce34dfbSvibisreenivasan    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
42263ce34dfbSvibisreenivasan    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
42273ce34dfbSvibisreenivasan    return 0;
42283ce34dfbSvibisreenivasan}
42293ce34dfbSvibisreenivasanEOF
423052166aa0SJuan Quintelaif compile_prog "" "" ; then
42313ce34dfbSvibisreenivasan  splice=yes
42323ce34dfbSvibisreenivasanfi
42333ce34dfbSvibisreenivasan
4234dcc38d1cSMarcelo Tosatti##########################################
4235a99d57bbSWanlong Gao# libnuma probe
4236a99d57bbSWanlong Gao
4237a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
4238a99d57bbSWanlong Gao  cat > $TMPC << EOF
4239a99d57bbSWanlong Gao#include <numa.h>
4240a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
4241a99d57bbSWanlong GaoEOF
4242a99d57bbSWanlong Gao
4243a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
4244a99d57bbSWanlong Gao    numa=yes
4245ab318051SMarc-André Lureau    numa_libs="-lnuma"
4246a99d57bbSWanlong Gao  else
4247a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
4248a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
4249a99d57bbSWanlong Gao    fi
4250a99d57bbSWanlong Gao    numa=no
4251a99d57bbSWanlong Gao  fi
4252a99d57bbSWanlong Gaofi
4253a99d57bbSWanlong Gao
4254aa087962SPaolo Bonzinimalloc=system
42557b01cb97SAlexandre Derumierif test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
42567b01cb97SAlexandre Derumier    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
42577b01cb97SAlexandre Derumier    exit 1
4258aa087962SPaolo Bonzinielif test "$tcmalloc" = "yes" ; then
4259aa087962SPaolo Bonzini    malloc=tcmalloc
4260aa087962SPaolo Bonzinielif test "$jemalloc" = "yes" ; then
4261aa087962SPaolo Bonzini    malloc=jemalloc
42627b01cb97SAlexandre Derumierfi
42637b01cb97SAlexandre Derumier
42647b01cb97SAlexandre Derumier##########################################
4265dcc38d1cSMarcelo Tosatti# signalfd probe
4266dcc38d1cSMarcelo Tosattisignalfd="no"
4267dcc38d1cSMarcelo Tosatticat > $TMPC << EOF
4268dcc38d1cSMarcelo Tosatti#include <unistd.h>
4269dcc38d1cSMarcelo Tosatti#include <sys/syscall.h>
4270dcc38d1cSMarcelo Tosatti#include <signal.h>
4271dcc38d1cSMarcelo Tosattiint main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4272dcc38d1cSMarcelo TosattiEOF
4273dcc38d1cSMarcelo Tosatti
4274dcc38d1cSMarcelo Tosattiif compile_prog "" "" ; then
4275dcc38d1cSMarcelo Tosatti  signalfd=yes
4276dcc38d1cSMarcelo Tosattifi
4277dcc38d1cSMarcelo Tosatti
4278d339d766SRichard W.M. Jones# check if optreset global is declared by <getopt.h>
4279d339d766SRichard W.M. Jonesoptreset="no"
4280d339d766SRichard W.M. Jonescat > $TMPC << EOF
4281d339d766SRichard W.M. Jones#include <getopt.h>
4282d339d766SRichard W.M. Jonesint main(void) { return optreset; }
4283d339d766SRichard W.M. JonesEOF
4284d339d766SRichard W.M. Jones
4285d339d766SRichard W.M. Jonesif compile_prog "" "" ; then
4286d339d766SRichard W.M. Jones  optreset=yes
4287d339d766SRichard W.M. Jonesfi
4288d339d766SRichard W.M. Jones
4289c2882b96SRiku Voipio# check if eventfd is supported
4290c2882b96SRiku Voipioeventfd=no
4291c2882b96SRiku Voipiocat > $TMPC << EOF
4292c2882b96SRiku Voipio#include <sys/eventfd.h>
4293c2882b96SRiku Voipio
4294c2882b96SRiku Voipioint main(void)
4295c2882b96SRiku Voipio{
429655cc7f3eSStefan Weil    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4297c2882b96SRiku Voipio}
4298c2882b96SRiku VoipioEOF
4299c2882b96SRiku Voipioif compile_prog "" "" ; then
4300c2882b96SRiku Voipio  eventfd=yes
4301c2882b96SRiku Voipiofi
4302c2882b96SRiku Voipio
4303751bcc39SMarc-André Lureau# check if memfd is supported
4304751bcc39SMarc-André Lureaumemfd=no
4305751bcc39SMarc-André Lureaucat > $TMPC << EOF
430675e5b70eSPaolo Bonzini#include <sys/mman.h>
4307751bcc39SMarc-André Lureau
4308751bcc39SMarc-André Lureauint main(void)
4309751bcc39SMarc-André Lureau{
4310751bcc39SMarc-André Lureau    return memfd_create("foo", MFD_ALLOW_SEALING);
4311751bcc39SMarc-André Lureau}
4312751bcc39SMarc-André LureauEOF
4313751bcc39SMarc-André Lureauif compile_prog "" "" ; then
4314751bcc39SMarc-André Lureau  memfd=yes
4315751bcc39SMarc-André Lureaufi
4316751bcc39SMarc-André Lureau
4317955727d2SCortland Tölva# check for usbfs
4318955727d2SCortland Tölvahave_usbfs=no
4319955727d2SCortland Tölvaif test "$linux_user" = "yes"; then
432096566d09SThomas Petazzoni  cat > $TMPC << EOF
432196566d09SThomas Petazzoni#include <linux/usbdevice_fs.h>
432296566d09SThomas Petazzoni
432396566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES
432496566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined"
432596566d09SThomas Petazzoni#endif
432696566d09SThomas Petazzoni
432796566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM
432896566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined"
432996566d09SThomas Petazzoni#endif
433096566d09SThomas Petazzoni
433196566d09SThomas Petazzoniint main(void)
433296566d09SThomas Petazzoni{
433396566d09SThomas Petazzoni    return 0;
433496566d09SThomas Petazzoni}
433596566d09SThomas PetazzoniEOF
433696566d09SThomas Petazzoni  if compile_prog "" ""; then
4337955727d2SCortland Tölva    have_usbfs=yes
4338955727d2SCortland Tölva  fi
4339955727d2SCortland Tölvafi
4340751bcc39SMarc-André Lureau
4341d0927938SUlrich Hecht# check for fallocate
4342d0927938SUlrich Hechtfallocate=no
4343d0927938SUlrich Hechtcat > $TMPC << EOF
4344d0927938SUlrich Hecht#include <fcntl.h>
4345d0927938SUlrich Hecht
4346d0927938SUlrich Hechtint main(void)
4347d0927938SUlrich Hecht{
4348d0927938SUlrich Hecht    fallocate(0, 0, 0, 0);
4349d0927938SUlrich Hecht    return 0;
4350d0927938SUlrich Hecht}
4351d0927938SUlrich HechtEOF
43528fb03151SPeter Maydellif compile_prog "" "" ; then
4353d0927938SUlrich Hecht  fallocate=yes
4354d0927938SUlrich Hechtfi
4355d0927938SUlrich Hecht
43563d4fa43eSKusanagi Kouichi# check for fallocate hole punching
43573d4fa43eSKusanagi Kouichifallocate_punch_hole=no
43583d4fa43eSKusanagi Kouichicat > $TMPC << EOF
43593d4fa43eSKusanagi Kouichi#include <fcntl.h>
43603d4fa43eSKusanagi Kouichi#include <linux/falloc.h>
43613d4fa43eSKusanagi Kouichi
43623d4fa43eSKusanagi Kouichiint main(void)
43633d4fa43eSKusanagi Kouichi{
43643d4fa43eSKusanagi Kouichi    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
43653d4fa43eSKusanagi Kouichi    return 0;
43663d4fa43eSKusanagi Kouichi}
43673d4fa43eSKusanagi KouichiEOF
43683d4fa43eSKusanagi Kouichiif compile_prog "" "" ; then
43693d4fa43eSKusanagi Kouichi  fallocate_punch_hole=yes
43703d4fa43eSKusanagi Kouichifi
43713d4fa43eSKusanagi Kouichi
4372b953f075SDenis V. Lunev# check that fallocate supports range zeroing inside the file
4373b953f075SDenis V. Lunevfallocate_zero_range=no
4374b953f075SDenis V. Lunevcat > $TMPC << EOF
4375b953f075SDenis V. Lunev#include <fcntl.h>
4376b953f075SDenis V. Lunev#include <linux/falloc.h>
4377b953f075SDenis V. Lunev
4378b953f075SDenis V. Lunevint main(void)
4379b953f075SDenis V. Lunev{
4380b953f075SDenis V. Lunev    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4381b953f075SDenis V. Lunev    return 0;
4382b953f075SDenis V. Lunev}
4383b953f075SDenis V. LunevEOF
4384b953f075SDenis V. Lunevif compile_prog "" "" ; then
4385b953f075SDenis V. Lunev  fallocate_zero_range=yes
4386b953f075SDenis V. Lunevfi
4387b953f075SDenis V. Lunev
4388ed911435SKevin Wolf# check for posix_fallocate
4389ed911435SKevin Wolfposix_fallocate=no
4390ed911435SKevin Wolfcat > $TMPC << EOF
4391ed911435SKevin Wolf#include <fcntl.h>
4392ed911435SKevin Wolf
4393ed911435SKevin Wolfint main(void)
4394ed911435SKevin Wolf{
4395ed911435SKevin Wolf    posix_fallocate(0, 0, 0);
4396ed911435SKevin Wolf    return 0;
4397ed911435SKevin Wolf}
4398ed911435SKevin WolfEOF
4399ed911435SKevin Wolfif compile_prog "" "" ; then
4400ed911435SKevin Wolf    posix_fallocate=yes
4401ed911435SKevin Wolffi
4402ed911435SKevin Wolf
4403c727f47dSPeter Maydell# check for sync_file_range
4404c727f47dSPeter Maydellsync_file_range=no
4405c727f47dSPeter Maydellcat > $TMPC << EOF
4406c727f47dSPeter Maydell#include <fcntl.h>
4407c727f47dSPeter Maydell
4408c727f47dSPeter Maydellint main(void)
4409c727f47dSPeter Maydell{
4410c727f47dSPeter Maydell    sync_file_range(0, 0, 0, 0);
4411c727f47dSPeter Maydell    return 0;
4412c727f47dSPeter Maydell}
4413c727f47dSPeter MaydellEOF
44148fb03151SPeter Maydellif compile_prog "" "" ; then
4415c727f47dSPeter Maydell  sync_file_range=yes
4416c727f47dSPeter Maydellfi
4417c727f47dSPeter Maydell
4418dace20dcSPeter Maydell# check for linux/fiemap.h and FS_IOC_FIEMAP
4419dace20dcSPeter Maydellfiemap=no
4420dace20dcSPeter Maydellcat > $TMPC << EOF
4421dace20dcSPeter Maydell#include <sys/ioctl.h>
4422dace20dcSPeter Maydell#include <linux/fs.h>
4423dace20dcSPeter Maydell#include <linux/fiemap.h>
4424dace20dcSPeter Maydell
4425dace20dcSPeter Maydellint main(void)
4426dace20dcSPeter Maydell{
4427dace20dcSPeter Maydell    ioctl(0, FS_IOC_FIEMAP, 0);
4428dace20dcSPeter Maydell    return 0;
4429dace20dcSPeter Maydell}
4430dace20dcSPeter MaydellEOF
44318fb03151SPeter Maydellif compile_prog "" "" ; then
4432dace20dcSPeter Maydell  fiemap=yes
4433dace20dcSPeter Maydellfi
4434dace20dcSPeter Maydell
4435d0927938SUlrich Hecht# check for dup3
4436d0927938SUlrich Hechtdup3=no
4437d0927938SUlrich Hechtcat > $TMPC << EOF
4438d0927938SUlrich Hecht#include <unistd.h>
4439d0927938SUlrich Hecht
4440d0927938SUlrich Hechtint main(void)
4441d0927938SUlrich Hecht{
4442d0927938SUlrich Hecht    dup3(0, 0, 0);
4443d0927938SUlrich Hecht    return 0;
4444d0927938SUlrich Hecht}
4445d0927938SUlrich HechtEOF
444678f5d726SJan Kiszkaif compile_prog "" "" ; then
4447d0927938SUlrich Hecht  dup3=yes
4448d0927938SUlrich Hechtfi
4449d0927938SUlrich Hecht
44504e0c6529SAlex Bligh# check for ppoll support
44514e0c6529SAlex Blighppoll=no
44524e0c6529SAlex Blighcat > $TMPC << EOF
44534e0c6529SAlex Bligh#include <poll.h>
44544e0c6529SAlex Bligh
44554e0c6529SAlex Blighint main(void)
44564e0c6529SAlex Bligh{
44574e0c6529SAlex Bligh    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
44584e0c6529SAlex Bligh    ppoll(&pfd, 1, 0, 0);
44594e0c6529SAlex Bligh    return 0;
44604e0c6529SAlex Bligh}
44614e0c6529SAlex BlighEOF
44624e0c6529SAlex Blighif compile_prog "" "" ; then
44634e0c6529SAlex Bligh  ppoll=yes
44644e0c6529SAlex Blighfi
44654e0c6529SAlex Bligh
4466cd758dd0SAlex Bligh# check for prctl(PR_SET_TIMERSLACK , ... ) support
4467cd758dd0SAlex Blighprctl_pr_set_timerslack=no
4468cd758dd0SAlex Blighcat > $TMPC << EOF
4469cd758dd0SAlex Bligh#include <sys/prctl.h>
4470cd758dd0SAlex Bligh
4471cd758dd0SAlex Blighint main(void)
4472cd758dd0SAlex Bligh{
4473cd758dd0SAlex Bligh    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4474cd758dd0SAlex Bligh    return 0;
4475cd758dd0SAlex Bligh}
4476cd758dd0SAlex BlighEOF
4477cd758dd0SAlex Blighif compile_prog "" "" ; then
4478cd758dd0SAlex Bligh  prctl_pr_set_timerslack=yes
4479cd758dd0SAlex Blighfi
4480cd758dd0SAlex Bligh
44813b6edd16SPeter Maydell# check for epoll support
44823b6edd16SPeter Maydellepoll=no
44833b6edd16SPeter Maydellcat > $TMPC << EOF
44843b6edd16SPeter Maydell#include <sys/epoll.h>
44853b6edd16SPeter Maydell
44863b6edd16SPeter Maydellint main(void)
44873b6edd16SPeter Maydell{
44883b6edd16SPeter Maydell    epoll_create(0);
44893b6edd16SPeter Maydell    return 0;
44903b6edd16SPeter Maydell}
44913b6edd16SPeter MaydellEOF
44928fb03151SPeter Maydellif compile_prog "" "" ; then
44933b6edd16SPeter Maydell  epoll=yes
44943b6edd16SPeter Maydellfi
44953b6edd16SPeter Maydell
4496227f0214SPeter Maydell# epoll_create1 is a later addition
4497227f0214SPeter Maydell# so we must check separately for its presence
44983b6edd16SPeter Maydellepoll_create1=no
44993b6edd16SPeter Maydellcat > $TMPC << EOF
45003b6edd16SPeter Maydell#include <sys/epoll.h>
45013b6edd16SPeter Maydell
45023b6edd16SPeter Maydellint main(void)
45033b6edd16SPeter Maydell{
450419e83f6bSPeter Maydell    /* Note that we use epoll_create1 as a value, not as
450519e83f6bSPeter Maydell     * a function being called. This is necessary so that on
450619e83f6bSPeter Maydell     * old SPARC glibc versions where the function was present in
450719e83f6bSPeter Maydell     * the library but not declared in the header file we will
450819e83f6bSPeter Maydell     * fail the configure check. (Otherwise we will get a compiler
450919e83f6bSPeter Maydell     * warning but not an error, and will proceed to fail the
451019e83f6bSPeter Maydell     * qemu compile where we compile with -Werror.)
451119e83f6bSPeter Maydell     */
4512c075a723SBlue Swirl    return (int)(uintptr_t)&epoll_create1;
45133b6edd16SPeter Maydell}
45143b6edd16SPeter MaydellEOF
45158fb03151SPeter Maydellif compile_prog "" "" ; then
45163b6edd16SPeter Maydell  epoll_create1=yes
45173b6edd16SPeter Maydellfi
45183b6edd16SPeter Maydell
4519a8fd1abaSPeter Maydell# check for sendfile support
4520a8fd1abaSPeter Maydellsendfile=no
4521a8fd1abaSPeter Maydellcat > $TMPC << EOF
4522a8fd1abaSPeter Maydell#include <sys/sendfile.h>
4523a8fd1abaSPeter Maydell
4524a8fd1abaSPeter Maydellint main(void)
4525a8fd1abaSPeter Maydell{
4526a8fd1abaSPeter Maydell    return sendfile(0, 0, 0, 0);
4527a8fd1abaSPeter Maydell}
4528a8fd1abaSPeter MaydellEOF
4529a8fd1abaSPeter Maydellif compile_prog "" "" ; then
4530a8fd1abaSPeter Maydell  sendfile=yes
4531a8fd1abaSPeter Maydellfi
4532a8fd1abaSPeter Maydell
453351834341SRiku Voipio# check for timerfd support (glibc 2.8 and newer)
453451834341SRiku Voipiotimerfd=no
453551834341SRiku Voipiocat > $TMPC << EOF
453651834341SRiku Voipio#include <sys/timerfd.h>
453751834341SRiku Voipio
453851834341SRiku Voipioint main(void)
453951834341SRiku Voipio{
454051834341SRiku Voipio    return(timerfd_create(CLOCK_REALTIME, 0));
454151834341SRiku Voipio}
454251834341SRiku VoipioEOF
454351834341SRiku Voipioif compile_prog "" "" ; then
454451834341SRiku Voipio  timerfd=yes
454551834341SRiku Voipiofi
454651834341SRiku Voipio
45479af5c906SRiku Voipio# check for setns and unshare support
45489af5c906SRiku Voipiosetns=no
45499af5c906SRiku Voipiocat > $TMPC << EOF
45509af5c906SRiku Voipio#include <sched.h>
45519af5c906SRiku Voipio
45529af5c906SRiku Voipioint main(void)
45539af5c906SRiku Voipio{
45549af5c906SRiku Voipio    int ret;
45559af5c906SRiku Voipio    ret = setns(0, 0);
45569af5c906SRiku Voipio    ret = unshare(0);
45579af5c906SRiku Voipio    return ret;
45589af5c906SRiku Voipio}
45599af5c906SRiku VoipioEOF
45609af5c906SRiku Voipioif compile_prog "" "" ; then
45619af5c906SRiku Voipio  setns=yes
45629af5c906SRiku Voipiofi
45639af5c906SRiku Voipio
456438860a03SAleksandar Markovic# clock_adjtime probe
456538860a03SAleksandar Markovicclock_adjtime=no
456638860a03SAleksandar Markoviccat > $TMPC <<EOF
456738860a03SAleksandar Markovic#include <time.h>
456838860a03SAleksandar Markovic
456938860a03SAleksandar Markovicint main(void)
457038860a03SAleksandar Markovic{
457138860a03SAleksandar Markovic    return clock_adjtime(0, 0);
457238860a03SAleksandar Markovic}
457338860a03SAleksandar MarkovicEOF
457438860a03SAleksandar Markovicclock_adjtime=no
457538860a03SAleksandar Markovicif compile_prog "" "" ; then
457638860a03SAleksandar Markovic  clock_adjtime=yes
457738860a03SAleksandar Markovicfi
457838860a03SAleksandar Markovic
45795a03cd00SAleksandar Markovic# syncfs probe
45805a03cd00SAleksandar Markovicsyncfs=no
45815a03cd00SAleksandar Markoviccat > $TMPC <<EOF
45825a03cd00SAleksandar Markovic#include <unistd.h>
45835a03cd00SAleksandar Markovic
45845a03cd00SAleksandar Markovicint main(void)
45855a03cd00SAleksandar Markovic{
45865a03cd00SAleksandar Markovic    return syncfs(0);
45875a03cd00SAleksandar Markovic}
45885a03cd00SAleksandar MarkovicEOF
45895a03cd00SAleksandar Markovicsyncfs=no
45905a03cd00SAleksandar Markovicif compile_prog "" "" ; then
45915a03cd00SAleksandar Markovic  syncfs=yes
45925a03cd00SAleksandar Markovicfi
45935a03cd00SAleksandar Markovic
4594db37dd89SAleksandar Markovic# check for kcov support (kernel must be 4.4+, compiled with certain options)
4595db37dd89SAleksandar Markovickcov=no
4596db37dd89SAleksandar Markovicif check_include sys/kcov.h ; then
4597db37dd89SAleksandar Markovic    kcov=yes
4598db37dd89SAleksandar Markovicfi
4599db37dd89SAleksandar Markovic
4600d6092e08SFilip Bozuta# check for btrfs filesystem support (kernel must be 3.9+)
4601d6092e08SFilip Bozutabtrfs=no
4602d6092e08SFilip Bozutaif check_include linux/btrfs.h ; then
4603d6092e08SFilip Bozuta    btrfs=yes
4604d6092e08SFilip Bozutafi
4605d6092e08SFilip Bozuta
4606516e8b7dSPeter Maydell# If we're making warnings fatal, apply this to Sphinx runs as well
4607516e8b7dSPeter Maydellsphinx_werror=""
4608516e8b7dSPeter Maydellif test "$werror" = "yes"; then
4609516e8b7dSPeter Maydell    sphinx_werror="-W"
4610516e8b7dSPeter Maydellfi
4611516e8b7dSPeter Maydell
46125f71eac0SPeter Maydell# Check we have a new enough version of sphinx-build
46135f71eac0SPeter Maydellhas_sphinx_build() {
46145f71eac0SPeter Maydell    # This is a bit awkward but works: create a trivial document and
46155f71eac0SPeter Maydell    # try to run it with our configuration file (which enforces a
46165f71eac0SPeter Maydell    # version requirement). This will fail if either
46175f71eac0SPeter Maydell    # sphinx-build doesn't exist at all or if it is too old.
46185f71eac0SPeter Maydell    mkdir -p "$TMPDIR1/sphinx"
46195f71eac0SPeter Maydell    touch "$TMPDIR1/sphinx/index.rst"
4620988ae6c3SAlex Bennée    "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
4621988ae6c3SAlex Bennée                    -b html "$TMPDIR1/sphinx" \
4622988ae6c3SAlex Bennée                    "$TMPDIR1/sphinx/out"  >> config.log 2>&1
46235f71eac0SPeter Maydell}
46245f71eac0SPeter Maydell
4625cc8ae6deSpbrook# Check if tools are available to build documentation.
4626a25dba17SJuan Quintelaif test "$docs" != "no" ; then
4627758b617aSPeter Maydell  if has_sphinx_build; then
4628758b617aSPeter Maydell    sphinx_ok=yes
4629758b617aSPeter Maydell  else
4630758b617aSPeter Maydell    sphinx_ok=no
4631758b617aSPeter Maydell  fi
46321615aeafSPeter Maydell  if test "$sphinx_ok" = "yes"; then
4633a25dba17SJuan Quintela    docs=yes
463483a3ab8bSJuan Quintela  else
4635a25dba17SJuan Quintela    if test "$docs" = "yes" ; then
4636758b617aSPeter Maydell      if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4637758b617aSPeter Maydell        echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4638758b617aSPeter Maydell      fi
46391615aeafSPeter Maydell      feature_not_found "docs" "Install a Python 3 version of python-sphinx"
464083a3ab8bSJuan Quintela    fi
4641a25dba17SJuan Quintela    docs=no
464283a3ab8bSJuan Quintela  fi
4643cc8ae6deSpbrookfi
4644cc8ae6deSpbrook
4645f514f41cSStefan Weil# Search for bswap_32 function
46466ae9a1f4SJuan Quintelabyteswap_h=no
46476ae9a1f4SJuan Quintelacat > $TMPC << EOF
46486ae9a1f4SJuan Quintela#include <byteswap.h>
46496ae9a1f4SJuan Quintelaint main(void) { return bswap_32(0); }
46506ae9a1f4SJuan QuintelaEOF
465152166aa0SJuan Quintelaif compile_prog "" "" ; then
46526ae9a1f4SJuan Quintela  byteswap_h=yes
46536ae9a1f4SJuan Quintelafi
46546ae9a1f4SJuan Quintela
465575f13596SStefan Weil# Search for bswap32 function
46566ae9a1f4SJuan Quintelabswap_h=no
46576ae9a1f4SJuan Quintelacat > $TMPC << EOF
46586ae9a1f4SJuan Quintela#include <sys/endian.h>
46596ae9a1f4SJuan Quintela#include <sys/types.h>
46606ae9a1f4SJuan Quintela#include <machine/bswap.h>
46616ae9a1f4SJuan Quintelaint main(void) { return bswap32(0); }
46626ae9a1f4SJuan QuintelaEOF
466352166aa0SJuan Quintelaif compile_prog "" "" ; then
46646ae9a1f4SJuan Quintela  bswap_h=yes
46656ae9a1f4SJuan Quintelafi
46666ae9a1f4SJuan Quintela
4667da93a1fdSaliguori##########################################
4668e49ab19fSPeter Lieven# Do we have libiscsi >= 1.9.0
4669c589b249SRonnie Sahlbergif test "$libiscsi" != "no" ; then
4670e49ab19fSPeter Lieven  if $pkg_config --atleast-version=1.9.0 libiscsi; then
46713c33ea96SPaolo Bonzini    libiscsi="yes"
4672ca871ec8SStefan Weil    libiscsi_cflags=$($pkg_config --cflags libiscsi)
4673ca871ec8SStefan Weil    libiscsi_libs=$($pkg_config --libs libiscsi)
4674c589b249SRonnie Sahlberg  else
4675c589b249SRonnie Sahlberg    if test "$libiscsi" = "yes" ; then
4676e49ab19fSPeter Lieven      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4677c589b249SRonnie Sahlberg    fi
4678c589b249SRonnie Sahlberg    libiscsi="no"
4679c589b249SRonnie Sahlberg  fi
4680c589b249SRonnie Sahlbergfi
4681c589b249SRonnie Sahlberg
4682c589b249SRonnie Sahlberg##########################################
4683da93a1fdSaliguori# Do we need librt
46848bacde8dSNatanael Copa# uClibc provides 2 versions of clock_gettime(), one with realtime
46858bacde8dSNatanael Copa# support and one without. This means that the clock_gettime() don't
46868bacde8dSNatanael Copa# need -lrt. We still need it for timer_create() so we check for this
46878bacde8dSNatanael Copa# function in addition.
4688da93a1fdSaliguoricat > $TMPC <<EOF
4689da93a1fdSaliguori#include <signal.h>
4690da93a1fdSaliguori#include <time.h>
46918bacde8dSNatanael Copaint main(void) {
46928bacde8dSNatanael Copa  timer_create(CLOCK_REALTIME, NULL, NULL);
46938bacde8dSNatanael Copa  return clock_gettime(CLOCK_REALTIME, NULL);
46948bacde8dSNatanael Copa}
4695da93a1fdSaliguoriEOF
4696da93a1fdSaliguori
469752166aa0SJuan Quintelaif compile_prog "" "" ; then
469807ffa4bdSJuan Quintela  :
46998bacde8dSNatanael Copa# we need pthread for static linking. use previous pthread test result
470018e588b1SRick Liuelif compile_prog "" "$pthread_lib -lrt" ; then
470118e588b1SRick Liu  LIBS="$LIBS -lrt"
4702da93a1fdSaliguorifi
4703da93a1fdSaliguori
4704f2995ee4SPaolo Bonzini# Check whether we have openpty() in either libc or libutil
4705d99e97e6SThomas Huthcat > $TMPC << EOF
4706d99e97e6SThomas Huthextern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4707d99e97e6SThomas Huthint main(void) { return openpty(0, 0, 0, 0, 0); }
4708d99e97e6SThomas HuthEOF
4709d99e97e6SThomas Huth
47109df8b20dSThomas Huthhave_openpty="no"
47119df8b20dSThomas Huthif compile_prog "" "" ; then
47129df8b20dSThomas Huth  have_openpty="yes"
47139df8b20dSThomas Huthelse
4714d99e97e6SThomas Huth  if compile_prog "" "-lutil" ; then
47159df8b20dSThomas Huth    have_openpty="yes"
4716d99e97e6SThomas Huth  fi
47176362a53fSJuan Quintelafi
47186362a53fSJuan Quintela
4719de5071c5SBlue Swirl##########################################
4720cd4ec0b4SGerd Hoffmann# spice probe
4721cd4ec0b4SGerd Hoffmannif test "$spice" != "no" ; then
4722cd4ec0b4SGerd Hoffmann  cat > $TMPC << EOF
4723cd4ec0b4SGerd Hoffmann#include <spice.h>
4724cd4ec0b4SGerd Hoffmannint main(void) { spice_server_new(); return 0; }
4725cd4ec0b4SGerd HoffmannEOF
4726710fc4f5SJiri Denemark  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4727710fc4f5SJiri Denemark  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
47281b63665cSMarc-André Lureau  if $pkg_config --atleast-version=0.12.5 spice-server && \
472965d5d3f9SStefan Weil     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4730cd4ec0b4SGerd Hoffmann     compile_prog "$spice_cflags" "$spice_libs" ; then
4731cd4ec0b4SGerd Hoffmann    spice="yes"
4732cd4ec0b4SGerd Hoffmann  else
4733cd4ec0b4SGerd Hoffmann    if test "$spice" = "yes" ; then
47348efc9363SHu Tao      feature_not_found "spice" \
47351b63665cSMarc-André Lureau          "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4736cd4ec0b4SGerd Hoffmann    fi
4737cd4ec0b4SGerd Hoffmann    spice="no"
4738cd4ec0b4SGerd Hoffmann  fi
4739cd4ec0b4SGerd Hoffmannfi
4740cd4ec0b4SGerd Hoffmann
47417b02f544SMarc-André Lureau# check for smartcard support
47427b02f544SMarc-André Lureauif test "$smartcard" != "no"; then
47430f5c642dSMichal Privoznik    if $pkg_config --atleast-version=2.5.1 libcacard; then
47447b02f544SMarc-André Lureau        libcacard_cflags=$($pkg_config --cflags libcacard)
47457b02f544SMarc-André Lureau        libcacard_libs=$($pkg_config --libs libcacard)
47467b02f544SMarc-André Lureau        smartcard="yes"
4747111a38b0SRobert Relyea    else
47487b02f544SMarc-André Lureau        if test "$smartcard" = "yes"; then
47497b02f544SMarc-André Lureau            feature_not_found "smartcard" "Install libcacard devel"
4750111a38b0SRobert Relyea        fi
47517b02f544SMarc-André Lureau        smartcard="no"
4752111a38b0SRobert Relyea    fi
4753111a38b0SRobert Relyeafi
4754111a38b0SRobert Relyea
47552b2325ffSGerd Hoffmann# check for libusb
47562b2325ffSGerd Hoffmannif test "$libusb" != "no" ; then
475765d5d3f9SStefan Weil    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
47582b2325ffSGerd Hoffmann        libusb="yes"
4759ca871ec8SStefan Weil        libusb_cflags=$($pkg_config --cflags libusb-1.0)
4760ca871ec8SStefan Weil        libusb_libs=$($pkg_config --libs libusb-1.0)
47612b2325ffSGerd Hoffmann    else
47622b2325ffSGerd Hoffmann        if test "$libusb" = "yes"; then
47638efc9363SHu Tao            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
47642b2325ffSGerd Hoffmann        fi
47652b2325ffSGerd Hoffmann        libusb="no"
47662b2325ffSGerd Hoffmann    fi
47672b2325ffSGerd Hoffmannfi
47682b2325ffSGerd Hoffmann
476969354a83SHans de Goede# check for usbredirparser for usb network redirection support
477069354a83SHans de Goedeif test "$usb_redir" != "no" ; then
477165d5d3f9SStefan Weil    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
477269354a83SHans de Goede        usb_redir="yes"
4773ca871ec8SStefan Weil        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4774ca871ec8SStefan Weil        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
477569354a83SHans de Goede    else
477669354a83SHans de Goede        if test "$usb_redir" = "yes"; then
477721684af0SStewart Smith            feature_not_found "usb-redir" "Install usbredir devel"
477869354a83SHans de Goede        fi
477969354a83SHans de Goede        usb_redir="no"
478069354a83SHans de Goede    fi
478169354a83SHans de Goedefi
478269354a83SHans de Goede
4783cd4ec0b4SGerd Hoffmann##########################################
4784d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
4785d9840e25STomoki Sekiyama
4786e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4787e633a5c6SEric Blake        test "$vss_win32_sdk" != "no" ; then
4788d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
4789690604f6SMichael Roth    "")   vss_win32_include="-isystem $source_path" ;;
4790d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4791d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4792690604f6SMichael Roth          vss_win32_include="-isystem $source_path/.sdk/vss"
4793d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4794d9840e25STomoki Sekiyama	  ;;
4795690604f6SMichael Roth    *)    vss_win32_include="-isystem $vss_win32_sdk"
4796d9840e25STomoki Sekiyama  esac
4797d9840e25STomoki Sekiyama  cat > $TMPC << EOF
4798d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
4799d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
4800d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
4801d9840e25STomoki SekiyamaEOF
4802d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
4803d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
4804d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4805315d3184SFam Zheng    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4806f33ca81fSMichael Roth    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4807d9840e25STomoki Sekiyama  else
4808d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
4809d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
4810d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4811d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4812d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4813d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
4814d9840e25STomoki Sekiyama      feature_not_found "VSS support"
4815d9840e25STomoki Sekiyama    fi
4816d9840e25STomoki Sekiyama    guest_agent_with_vss="no"
4817d9840e25STomoki Sekiyama  fi
4818d9840e25STomoki Sekiyamafi
4819d9840e25STomoki Sekiyama
4820d9840e25STomoki Sekiyama##########################################
4821d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
4822d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
4823d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
4824d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
4825d9840e25STomoki Sekiyama
4826e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4827e633a5c6SEric Blake        test "$guest_agent_with_vss" = "yes" ; then
4828d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
4829d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
4830d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4831d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
4832d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4833d9840e25STomoki Sekiyama    else
4834d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
4835d9840e25STomoki Sekiyama    fi
4836d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
4837d9840e25STomoki Sekiyama    win_sdk=""
4838d9840e25STomoki Sekiyama  fi
4839d9840e25STomoki Sekiyamafi
4840d9840e25STomoki Sekiyama
4841d9840e25STomoki Sekiyama##########################################
484250cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h
4843e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
484450cbebb9SMichael Roth  cat > $TMPC << EOF
484550cbebb9SMichael Roth#include <windows.h>
484650cbebb9SMichael Roth#include <ntddscsi.h>
484750cbebb9SMichael Rothint main(void) {
484850cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS)
484950cbebb9SMichael Roth#error Missing required ioctl definitions
485050cbebb9SMichael Roth#endif
485150cbebb9SMichael Roth  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
485250cbebb9SMichael Roth  return addr.Lun;
485350cbebb9SMichael Roth}
485450cbebb9SMichael RothEOF
485550cbebb9SMichael Roth  if compile_prog "" "" ; then
485650cbebb9SMichael Roth    guest_agent_ntddscsi=yes
4857996b9cdcSMatt Hines    libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
485850cbebb9SMichael Roth  fi
485950cbebb9SMichael Rothfi
486050cbebb9SMichael Roth
486150cbebb9SMichael Roth##########################################
48629d9e1521SGerd Hoffmann# virgl renderer probe
48639d9e1521SGerd Hoffmann
48649d9e1521SGerd Hoffmannif test "$virglrenderer" != "no" ; then
48659d9e1521SGerd Hoffmann  cat > $TMPC << EOF
48669d9e1521SGerd Hoffmann#include <virglrenderer.h>
48679d9e1521SGerd Hoffmannint main(void) { virgl_renderer_poll(); return 0; }
48689d9e1521SGerd HoffmannEOF
48699d9e1521SGerd Hoffmann  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
48709d9e1521SGerd Hoffmann  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
487147479c55SMarc-André Lureau  virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
48729d9e1521SGerd Hoffmann  if $pkg_config virglrenderer >/dev/null 2>&1 && \
48739d9e1521SGerd Hoffmann     compile_prog "$virgl_cflags" "$virgl_libs" ; then
48749d9e1521SGerd Hoffmann    virglrenderer="yes"
48759d9e1521SGerd Hoffmann  else
48769d9e1521SGerd Hoffmann    if test "$virglrenderer" = "yes" ; then
48779d9e1521SGerd Hoffmann      feature_not_found "virglrenderer"
48789d9e1521SGerd Hoffmann    fi
48799d9e1521SGerd Hoffmann    virglrenderer="no"
48809d9e1521SGerd Hoffmann  fi
48819d9e1521SGerd Hoffmannfi
48829d9e1521SGerd Hoffmann
48839d9e1521SGerd Hoffmann##########################################
48848ca80760SRichard Henderson# capstone
48858ca80760SRichard Henderson
4886e219c499SRichard Hendersoncase "$capstone" in
4887e219c499SRichard Henderson  "" | yes)
48888ca80760SRichard Henderson    if $pkg_config capstone; then
4889e219c499SRichard Henderson      capstone=system
4890e633a5c6SEric Blake    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4891e219c499SRichard Henderson      capstone=git
4892e219c499SRichard Henderson    elif test -e "${source_path}/capstone/Makefile" ; then
4893e219c499SRichard Henderson      capstone=internal
4894e219c499SRichard Henderson    elif test -z "$capstone" ; then
4895e219c499SRichard Henderson      capstone=no
4896e219c499SRichard Henderson    else
4897e219c499SRichard Henderson      feature_not_found "capstone" "Install capstone devel or git submodule"
4898e219c499SRichard Henderson    fi
4899e219c499SRichard Henderson    ;;
4900e219c499SRichard Henderson
4901e219c499SRichard Henderson  system)
4902e219c499SRichard Henderson    if ! $pkg_config capstone; then
4903e219c499SRichard Henderson      feature_not_found "capstone" "Install capstone devel"
4904e219c499SRichard Henderson    fi
4905e219c499SRichard Henderson    ;;
4906e219c499SRichard Hendersonesac
4907e219c499SRichard Henderson
4908e219c499SRichard Hendersoncase "$capstone" in
4909e219c499SRichard Henderson  git | internal)
4910e219c499SRichard Henderson    if test "$capstone" = git; then
4911e219c499SRichard Henderson      git_submodules="${git_submodules} capstone"
4912e219c499SRichard Henderson    fi
4913e219c499SRichard Henderson    mkdir -p capstone
4914e219c499SRichard Henderson    if test "$mingw32" = "yes"; then
4915e219c499SRichard Henderson      LIBCAPSTONE=capstone.lib
4916e219c499SRichard Henderson    else
4917e219c499SRichard Henderson      LIBCAPSTONE=libcapstone.a
4918e219c499SRichard Henderson    fi
491958683d07SPaolo Bonzini    capstone_libs="-Lcapstone -lcapstone"
4920c9322ab5SMarc-André Lureau    capstone_cflags="-I${source_path}/capstone/include"
4921e219c499SRichard Henderson    ;;
4922e219c499SRichard Henderson
4923e219c499SRichard Henderson  system)
4924c9322ab5SMarc-André Lureau    capstone_libs="$($pkg_config --libs capstone)"
4925c9322ab5SMarc-André Lureau    capstone_cflags="$($pkg_config --cflags capstone)"
4926e219c499SRichard Henderson    ;;
4927e219c499SRichard Henderson
4928e219c499SRichard Henderson  no)
4929e219c499SRichard Henderson    ;;
4930e219c499SRichard Henderson  *)
4931e219c499SRichard Henderson    error_exit "Unknown state for capstone: $capstone"
4932e219c499SRichard Henderson    ;;
4933e219c499SRichard Hendersonesac
49348ca80760SRichard Henderson
49358ca80760SRichard Henderson##########################################
49365f6b9e8fSBlue Swirl# check if we have fdatasync
49375f6b9e8fSBlue Swirl
49385f6b9e8fSBlue Swirlfdatasync=no
49395f6b9e8fSBlue Swirlcat > $TMPC << EOF
49405f6b9e8fSBlue Swirl#include <unistd.h>
4941d1722a27SAlexandre Raymondint main(void) {
4942d1722a27SAlexandre Raymond#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4943d1722a27SAlexandre Raymondreturn fdatasync(0);
4944d1722a27SAlexandre Raymond#else
4945e172fe11SStefan Weil#error Not supported
4946d1722a27SAlexandre Raymond#endif
4947d1722a27SAlexandre Raymond}
49485f6b9e8fSBlue SwirlEOF
49495f6b9e8fSBlue Swirlif compile_prog "" "" ; then
49505f6b9e8fSBlue Swirl    fdatasync=yes
49515f6b9e8fSBlue Swirlfi
49525f6b9e8fSBlue Swirl
495394a420b1SStefan Hajnoczi##########################################
4954e78815a5SAndreas Färber# check if we have madvise
4955e78815a5SAndreas Färber
4956e78815a5SAndreas Färbermadvise=no
4957e78815a5SAndreas Färbercat > $TMPC << EOF
4958e78815a5SAndreas Färber#include <sys/types.h>
4959e78815a5SAndreas Färber#include <sys/mman.h>
4960832ce9c2SScott Wood#include <stddef.h>
4961e78815a5SAndreas Färberint main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4962e78815a5SAndreas FärberEOF
4963e78815a5SAndreas Färberif compile_prog "" "" ; then
4964e78815a5SAndreas Färber    madvise=yes
4965e78815a5SAndreas Färberfi
4966e78815a5SAndreas Färber
4967e78815a5SAndreas Färber##########################################
4968e78815a5SAndreas Färber# check if we have posix_madvise
4969e78815a5SAndreas Färber
4970e78815a5SAndreas Färberposix_madvise=no
4971e78815a5SAndreas Färbercat > $TMPC << EOF
4972e78815a5SAndreas Färber#include <sys/mman.h>
4973832ce9c2SScott Wood#include <stddef.h>
4974e78815a5SAndreas Färberint main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4975e78815a5SAndreas FärberEOF
4976e78815a5SAndreas Färberif compile_prog "" "" ; then
4977e78815a5SAndreas Färber    posix_madvise=yes
4978e78815a5SAndreas Färberfi
4979e78815a5SAndreas Färber
4980e78815a5SAndreas Färber##########################################
49819bc5a719SAndreas Gustafsson# check if we have posix_memalign()
49829bc5a719SAndreas Gustafsson
49839bc5a719SAndreas Gustafssonposix_memalign=no
49849bc5a719SAndreas Gustafssoncat > $TMPC << EOF
49859bc5a719SAndreas Gustafsson#include <stdlib.h>
49869bc5a719SAndreas Gustafssonint main(void) {
49879bc5a719SAndreas Gustafsson    void *p;
49889bc5a719SAndreas Gustafsson    return posix_memalign(&p, 8, 8);
49899bc5a719SAndreas Gustafsson}
49909bc5a719SAndreas GustafssonEOF
49919bc5a719SAndreas Gustafssonif compile_prog "" "" ; then
49929bc5a719SAndreas Gustafsson    posix_memalign=yes
49939bc5a719SAndreas Gustafssonfi
49949bc5a719SAndreas Gustafsson
49959bc5a719SAndreas Gustafsson##########################################
49960a852417SPaul Durrant# check if we have posix_syslog
49970a852417SPaul Durrant
49980a852417SPaul Durrantposix_syslog=no
49990a852417SPaul Durrantcat > $TMPC << EOF
50000a852417SPaul Durrant#include <syslog.h>
50010a852417SPaul Durrantint main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
50020a852417SPaul DurrantEOF
50030a852417SPaul Durrantif compile_prog "" "" ; then
50040a852417SPaul Durrant    posix_syslog=yes
50050a852417SPaul Durrantfi
50060a852417SPaul Durrant
50070a852417SPaul Durrant##########################################
5008401bc051SPeter Maydell# check if we have sem_timedwait
5009401bc051SPeter Maydell
5010401bc051SPeter Maydellsem_timedwait=no
5011401bc051SPeter Maydellcat > $TMPC << EOF
5012401bc051SPeter Maydell#include <semaphore.h>
5013811294b7SDaniel P. Berrangéint main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5014401bc051SPeter MaydellEOF
5015401bc051SPeter Maydellif compile_prog "" "" ; then
5016401bc051SPeter Maydell    sem_timedwait=yes
5017401bc051SPeter Maydellfi
5018401bc051SPeter Maydell
5019401bc051SPeter Maydell##########################################
50205c99fa37SKeno Fischer# check if we have strchrnul
50215c99fa37SKeno Fischer
50225c99fa37SKeno Fischerstrchrnul=no
50235c99fa37SKeno Fischercat > $TMPC << EOF
50245c99fa37SKeno Fischer#include <string.h>
50255c99fa37SKeno Fischerint main(void);
50265c99fa37SKeno Fischer// Use a haystack that the compiler shouldn't be able to constant fold
50275c99fa37SKeno Fischerchar *haystack = (char*)&main;
50285c99fa37SKeno Fischerint main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
50295c99fa37SKeno FischerEOF
50305c99fa37SKeno Fischerif compile_prog "" "" ; then
50315c99fa37SKeno Fischer    strchrnul=yes
50325c99fa37SKeno Fischerfi
50335c99fa37SKeno Fischer
50348a792b03SJiufei Xue#########################################
50358a792b03SJiufei Xue# check if we have st_atim
50368a792b03SJiufei Xue
50378a792b03SJiufei Xuest_atim=no
50388a792b03SJiufei Xuecat > $TMPC << EOF
50398a792b03SJiufei Xue#include <sys/stat.h>
50408a792b03SJiufei Xue#include <stddef.h>
50418a792b03SJiufei Xueint main(void) { return offsetof(struct stat, st_atim); }
50428a792b03SJiufei XueEOF
50438a792b03SJiufei Xueif compile_prog "" "" ; then
50448a792b03SJiufei Xue    st_atim=yes
50458a792b03SJiufei Xuefi
50468a792b03SJiufei Xue
50475c99fa37SKeno Fischer##########################################
504894a420b1SStefan Hajnoczi# check if trace backend exists
504994a420b1SStefan Hajnoczi
50505b808275SLluís Vilanova$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
505194a420b1SStefan Hajnocziif test "$?" -ne 0 ; then
50525b808275SLluís Vilanova  error_exit "invalid trace backends" \
50535b808275SLluís Vilanova      "Please choose supported trace backends."
505494a420b1SStefan Hajnoczifi
505594a420b1SStefan Hajnoczi
50567e24e92aSStefan Hajnoczi##########################################
50577e24e92aSStefan Hajnoczi# For 'ust' backend, test if ust headers are present
50585b808275SLluís Vilanovaif have_backend "ust"; then
50597e24e92aSStefan Hajnoczi  cat > $TMPC << EOF
5060bf15f63cSMohamad Gebai#include <lttng/tracepoint.h>
50617e24e92aSStefan Hajnocziint main(void) { return 0; }
50627e24e92aSStefan HajnocziEOF
5063c79ed23dSFrancis Deslauriers  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5064bf15f63cSMohamad Gebai    if $pkg_config lttng-ust --exists; then
506589138857SStefan Weil      lttng_ust_libs=$($pkg_config --libs lttng-ust)
50667e24e92aSStefan Hajnoczi    else
5067c79ed23dSFrancis Deslauriers      lttng_ust_libs="-llttng-ust -ldl"
5068bf15f63cSMohamad Gebai    fi
5069bf15f63cSMohamad Gebai    if $pkg_config liburcu-bp --exists; then
507089138857SStefan Weil      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5071bf15f63cSMohamad Gebai    else
5072bf15f63cSMohamad Gebai      urcu_bp_libs="-lurcu-bp"
5073bf15f63cSMohamad Gebai    fi
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
51571e4f6065SDaniele Buono##################################################
51581e4f6065SDaniele Buono# SafeStack
51591e4f6065SDaniele Buono
51601e4f6065SDaniele Buono
51611e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
51621e4f6065SDaniele Buonocat > $TMPC << EOF
51631e4f6065SDaniele Buonoint main(int argc, char *argv[])
51641e4f6065SDaniele Buono{
51651e4f6065SDaniele Buono#if ! __has_feature(safe_stack)
51661e4f6065SDaniele Buono#error SafeStack Disabled
51671e4f6065SDaniele Buono#endif
51681e4f6065SDaniele Buono    return 0;
51691e4f6065SDaniele Buono}
51701e4f6065SDaniele BuonoEOF
51711e4f6065SDaniele Buono  flag="-fsanitize=safe-stack"
51721e4f6065SDaniele Buono  # Check that safe-stack is supported and enabled.
51731e4f6065SDaniele Buono  if compile_prog "-Werror $flag" "$flag"; then
51741e4f6065SDaniele Buono    # Flag needed both at compilation and at linking
51751e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
51761e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
51771e4f6065SDaniele Buono  else
51781e4f6065SDaniele Buono    error_exit "SafeStack not supported by your compiler"
51791e4f6065SDaniele Buono  fi
51801e4f6065SDaniele Buono  if test "$coroutine" != "ucontext"; then
51811e4f6065SDaniele Buono    error_exit "SafeStack is only supported by the coroutine backend ucontext"
51821e4f6065SDaniele Buono  fi
51831e4f6065SDaniele Buonoelse
51841e4f6065SDaniele Buonocat > $TMPC << EOF
51851e4f6065SDaniele Buonoint main(int argc, char *argv[])
51861e4f6065SDaniele Buono{
51871e4f6065SDaniele Buono#if defined(__has_feature)
51881e4f6065SDaniele Buono#if __has_feature(safe_stack)
51891e4f6065SDaniele Buono#error SafeStack Enabled
51901e4f6065SDaniele Buono#endif
51911e4f6065SDaniele Buono#endif
51921e4f6065SDaniele Buono    return 0;
51931e4f6065SDaniele Buono}
51941e4f6065SDaniele BuonoEOF
51951e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then
51961e4f6065SDaniele Buono  # Make sure that safe-stack is disabled
51971e4f6065SDaniele Buono  if ! compile_prog "-Werror" ""; then
51981e4f6065SDaniele Buono    # SafeStack was already enabled, try to explicitly remove the feature
51991e4f6065SDaniele Buono    flag="-fno-sanitize=safe-stack"
52001e4f6065SDaniele Buono    if ! compile_prog "-Werror $flag" "$flag"; then
52011e4f6065SDaniele Buono      error_exit "Configure cannot disable SafeStack"
52021e4f6065SDaniele Buono    fi
52031e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
52041e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
52051e4f6065SDaniele Buono  fi
52061e4f6065SDaniele Buonoelse # "$safe_stack" = ""
52071e4f6065SDaniele Buono  # Set safe_stack to yes or no based on pre-existing flags
52081e4f6065SDaniele Buono  if compile_prog "-Werror" ""; then
52091e4f6065SDaniele Buono    safe_stack="no"
52101e4f6065SDaniele Buono  else
52111e4f6065SDaniele Buono    safe_stack="yes"
52121e4f6065SDaniele Buono    if test "$coroutine" != "ucontext"; then
52131e4f6065SDaniele Buono      error_exit "SafeStack is only supported by the coroutine backend ucontext"
52141e4f6065SDaniele Buono    fi
52151e4f6065SDaniele Buono  fi
52161e4f6065SDaniele Buonofi
52171e4f6065SDaniele Buonofi
52187d992e4dSPeter Lieven
5219d0e2fce5SAneesh Kumar K.V##########################################
5220d2042378SAneesh Kumar K.V# check if we have open_by_handle_at
5221d2042378SAneesh Kumar K.V
52224e1797f9SStefan Weilopen_by_handle_at=no
5223d2042378SAneesh Kumar K.Vcat > $TMPC << EOF
5224d2042378SAneesh Kumar K.V#include <fcntl.h>
5225acc55ba8SStefan Weil#if !defined(AT_EMPTY_PATH)
5226acc55ba8SStefan Weil# error missing definition
5227acc55ba8SStefan Weil#else
522875cafad7SStefan Weilint main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5229acc55ba8SStefan Weil#endif
5230d2042378SAneesh Kumar K.VEOF
5231d2042378SAneesh Kumar K.Vif compile_prog "" "" ; then
5232d2042378SAneesh Kumar K.V    open_by_handle_at=yes
5233d2042378SAneesh Kumar K.Vfi
5234d2042378SAneesh Kumar K.V
5235e06a765eSHarsh Prateek Bora########################################
5236e06a765eSHarsh Prateek Bora# check if we have linux/magic.h
5237e06a765eSHarsh Prateek Bora
5238e06a765eSHarsh Prateek Boralinux_magic_h=no
5239e06a765eSHarsh Prateek Boracat > $TMPC << EOF
5240e06a765eSHarsh Prateek Bora#include <linux/magic.h>
5241e06a765eSHarsh Prateek Boraint main(void) {
524275cafad7SStefan Weil  return 0;
5243e06a765eSHarsh Prateek Bora}
5244e06a765eSHarsh Prateek BoraEOF
5245e06a765eSHarsh Prateek Boraif compile_prog "" "" ; then
5246e06a765eSHarsh Prateek Bora    linux_magic_h=yes
5247e06a765eSHarsh Prateek Borafi
5248e06a765eSHarsh Prateek Bora
52498ab1bf12SLuiz Capitulino########################################
5250541be927SChristian Borntraeger# check if we have valgrind/valgrind.h
52513f4349dcSKevin Wolf
52523f4349dcSKevin Wolfvalgrind_h=no
52533f4349dcSKevin Wolfcat > $TMPC << EOF
52543f4349dcSKevin Wolf#include <valgrind/valgrind.h>
52553f4349dcSKevin Wolfint main(void) {
52563f4349dcSKevin Wolf  return 0;
52573f4349dcSKevin Wolf}
52583f4349dcSKevin WolfEOF
52593f4349dcSKevin Wolfif compile_prog "" "" ; then
52603f4349dcSKevin Wolf    valgrind_h=yes
52613f4349dcSKevin Wolffi
52623f4349dcSKevin Wolf
52633f4349dcSKevin Wolf########################################
52648ab1bf12SLuiz Capitulino# check if environ is declared
52658ab1bf12SLuiz Capitulino
52668ab1bf12SLuiz Capitulinohas_environ=no
52678ab1bf12SLuiz Capitulinocat > $TMPC << EOF
52688ab1bf12SLuiz Capitulino#include <unistd.h>
52698ab1bf12SLuiz Capitulinoint main(void) {
5270c075a723SBlue Swirl    environ = 0;
52718ab1bf12SLuiz Capitulino    return 0;
52728ab1bf12SLuiz Capitulino}
52738ab1bf12SLuiz CapitulinoEOF
52748ab1bf12SLuiz Capitulinoif compile_prog "" "" ; then
52758ab1bf12SLuiz Capitulino    has_environ=yes
52768ab1bf12SLuiz Capitulinofi
52778ab1bf12SLuiz Capitulino
527876a347e1SRichard Henderson########################################
527976a347e1SRichard Henderson# check if cpuid.h is usable.
528076a347e1SRichard Henderson
528176a347e1SRichard Hendersoncat > $TMPC << EOF
528276a347e1SRichard Henderson#include <cpuid.h>
528376a347e1SRichard Hendersonint main(void) {
5284774d566cSPeter Maydell    unsigned a, b, c, d;
5285774d566cSPeter Maydell    int max = __get_cpuid_max(0, 0);
5286774d566cSPeter Maydell
5287774d566cSPeter Maydell    if (max >= 1) {
5288774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
5289774d566cSPeter Maydell    }
5290774d566cSPeter Maydell
5291774d566cSPeter Maydell    if (max >= 7) {
5292774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
5293774d566cSPeter Maydell    }
5294774d566cSPeter Maydell
529576a347e1SRichard Henderson    return 0;
529676a347e1SRichard Henderson}
529776a347e1SRichard HendersonEOF
529876a347e1SRichard Hendersonif compile_prog "" "" ; then
529976a347e1SRichard Henderson    cpuid_h=yes
530076a347e1SRichard Hendersonfi
530176a347e1SRichard Henderson
53025dd89908SRichard Henderson##########################################
53035dd89908SRichard Henderson# avx2 optimization requirement check
53045dd89908SRichard Henderson#
53055dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable,
53065dd89908SRichard Henderson# since we won't be able to select the new routines.
53075dd89908SRichard Henderson
5308e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
53095dd89908SRichard Henderson  cat > $TMPC << EOF
53105dd89908SRichard Henderson#pragma GCC push_options
53115dd89908SRichard Henderson#pragma GCC target("avx2")
53125dd89908SRichard Henderson#include <cpuid.h>
53135dd89908SRichard Henderson#include <immintrin.h>
53145dd89908SRichard Hendersonstatic int bar(void *a) {
53155dd89908SRichard Henderson    __m256i x = *(__m256i *)a;
53165dd89908SRichard Henderson    return _mm256_testz_si256(x, x);
53175dd89908SRichard Henderson}
53185dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); }
53195dd89908SRichard HendersonEOF
53205dd89908SRichard Henderson  if compile_object "" ; then
53215dd89908SRichard Henderson    avx2_opt="yes"
532286583a07SLiam Merwick  else
532386583a07SLiam Merwick    avx2_opt="no"
53245dd89908SRichard Henderson  fi
53255dd89908SRichard Hendersonfi
53265dd89908SRichard Henderson
53276b8cd447SRobert Hoo##########################################
53286b8cd447SRobert Hoo# avx512f optimization requirement check
53296b8cd447SRobert Hoo#
53306b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable,
53316b8cd447SRobert Hoo# since we won't be able to select the new routines.
53326b8cd447SRobert Hoo# by default, it is turned off.
53336b8cd447SRobert Hoo# if user explicitly want to enable it, check environment
53346b8cd447SRobert Hoo
53356b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
53366b8cd447SRobert Hoo  cat > $TMPC << EOF
53376b8cd447SRobert Hoo#pragma GCC push_options
53386b8cd447SRobert Hoo#pragma GCC target("avx512f")
53396b8cd447SRobert Hoo#include <cpuid.h>
53406b8cd447SRobert Hoo#include <immintrin.h>
53416b8cd447SRobert Hoostatic int bar(void *a) {
53426b8cd447SRobert Hoo    __m512i x = *(__m512i *)a;
53436b8cd447SRobert Hoo    return _mm512_test_epi64_mask(x, x);
53446b8cd447SRobert Hoo}
53456b8cd447SRobert Hooint main(int argc, char *argv[])
53466b8cd447SRobert Hoo{
53476b8cd447SRobert Hoo	return bar(argv[0]);
53486b8cd447SRobert Hoo}
53496b8cd447SRobert HooEOF
53506b8cd447SRobert Hoo  if ! compile_object "" ; then
53516b8cd447SRobert Hoo    avx512f_opt="no"
53526b8cd447SRobert Hoo  fi
53536b8cd447SRobert Hooelse
53546b8cd447SRobert Hoo  avx512f_opt="no"
53556b8cd447SRobert Hoofi
53566b8cd447SRobert Hoo
5357f540166bSRichard Henderson########################################
5358f540166bSRichard Henderson# check if __[u]int128_t is usable.
5359f540166bSRichard Henderson
5360f540166bSRichard Hendersonint128=no
5361f540166bSRichard Hendersoncat > $TMPC << EOF
5362f540166bSRichard Henderson__int128_t a;
5363f540166bSRichard Henderson__uint128_t b;
5364f540166bSRichard Hendersonint main (void) {
5365f540166bSRichard Henderson  a = a + b;
5366f540166bSRichard Henderson  b = a * b;
5367464e3671SPeter Maydell  a = a * a;
5368f540166bSRichard Henderson  return 0;
5369f540166bSRichard Henderson}
5370f540166bSRichard HendersonEOF
5371f540166bSRichard Hendersonif compile_prog "" "" ; then
5372f540166bSRichard Henderson    int128=yes
5373f540166bSRichard Hendersonfi
537476a347e1SRichard Henderson
53757ebee43eSRichard Henderson#########################################
53767ebee43eSRichard Henderson# See if 128-bit atomic operations are supported.
53777ebee43eSRichard Henderson
53787ebee43eSRichard Hendersonatomic128=no
53797ebee43eSRichard Hendersonif test "$int128" = "yes"; then
53807ebee43eSRichard Henderson  cat > $TMPC << EOF
53817ebee43eSRichard Hendersonint main(void)
53827ebee43eSRichard Henderson{
53837ebee43eSRichard Henderson  unsigned __int128 x = 0, y = 0;
53847ebee43eSRichard Henderson  y = __atomic_load_16(&x, 0);
53857ebee43eSRichard Henderson  __atomic_store_16(&x, y, 0);
53867ebee43eSRichard Henderson  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
53877ebee43eSRichard Henderson  return 0;
53887ebee43eSRichard Henderson}
53897ebee43eSRichard HendersonEOF
53907ebee43eSRichard Henderson  if compile_prog "" "" ; then
53917ebee43eSRichard Henderson    atomic128=yes
53927ebee43eSRichard Henderson  fi
53937ebee43eSRichard Hendersonfi
53947ebee43eSRichard Henderson
5395e6cd4bb5SRichard Hendersoncmpxchg128=no
5396e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then
5397e6cd4bb5SRichard Henderson  cat > $TMPC << EOF
5398e6cd4bb5SRichard Hendersonint main(void)
5399e6cd4bb5SRichard Henderson{
5400e6cd4bb5SRichard Henderson  unsigned __int128 x = 0, y = 0;
5401e6cd4bb5SRichard Henderson  __sync_val_compare_and_swap_16(&x, y, x);
5402e6cd4bb5SRichard Henderson  return 0;
5403e6cd4bb5SRichard Henderson}
5404e6cd4bb5SRichard HendersonEOF
5405e6cd4bb5SRichard Henderson  if compile_prog "" "" ; then
5406e6cd4bb5SRichard Henderson    cmpxchg128=yes
5407e6cd4bb5SRichard Henderson  fi
5408e6cd4bb5SRichard Hendersonfi
5409e6cd4bb5SRichard Henderson
5410df79b996SRichard Henderson#########################################
5411df79b996SRichard Henderson# See if 64-bit atomic operations are supported.
5412df79b996SRichard Henderson# Note that without __atomic builtins, we can only
5413df79b996SRichard Henderson# assume atomic loads/stores max at pointer size.
5414df79b996SRichard Henderson
5415df79b996SRichard Hendersoncat > $TMPC << EOF
5416df79b996SRichard Henderson#include <stdint.h>
5417df79b996SRichard Hendersonint main(void)
5418df79b996SRichard Henderson{
5419df79b996SRichard Henderson  uint64_t x = 0, y = 0;
5420df79b996SRichard Henderson#ifdef __ATOMIC_RELAXED
54215fe40765SThomas Huth  y = __atomic_load_n(&x, __ATOMIC_RELAXED);
54225fe40765SThomas Huth  __atomic_store_n(&x, y, __ATOMIC_RELAXED);
54235fe40765SThomas Huth  __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
54245fe40765SThomas Huth  __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
54255fe40765SThomas Huth  __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
5426df79b996SRichard Henderson#else
5427df79b996SRichard Henderson  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5428df79b996SRichard Henderson  __sync_lock_test_and_set(&x, y);
5429df79b996SRichard Henderson  __sync_val_compare_and_swap(&x, y, 0);
5430df79b996SRichard Henderson  __sync_fetch_and_add(&x, y);
5431df79b996SRichard Henderson#endif
5432df79b996SRichard Henderson  return 0;
5433df79b996SRichard Henderson}
5434df79b996SRichard HendersonEOF
5435df79b996SRichard Hendersonif compile_prog "" "" ; then
5436df79b996SRichard Henderson  atomic64=yes
5437df79b996SRichard Hendersonfi
5438df79b996SRichard Henderson
543926fffe29SEmilio G. Cota#########################################
544026fffe29SEmilio G. Cota# See if --dynamic-list is supported by the linker
544126fffe29SEmilio G. Cotald_dynamic_list="no"
544226fffe29SEmilio G. Cotaif test "$static" = "no" ; then
544326fffe29SEmilio G. Cota    cat > $TMPTXT <<EOF
544426fffe29SEmilio G. Cota{
544526fffe29SEmilio G. Cota  foo;
544626fffe29SEmilio G. Cota};
544726fffe29SEmilio G. CotaEOF
544826fffe29SEmilio G. Cota
544926fffe29SEmilio G. Cota    cat > $TMPC <<EOF
545026fffe29SEmilio G. Cota#include <stdio.h>
545126fffe29SEmilio G. Cotavoid foo(void);
545226fffe29SEmilio G. Cota
545326fffe29SEmilio G. Cotavoid foo(void)
545426fffe29SEmilio G. Cota{
545526fffe29SEmilio G. Cota  printf("foo\n");
545626fffe29SEmilio G. Cota}
545726fffe29SEmilio G. Cota
545826fffe29SEmilio G. Cotaint main(void)
545926fffe29SEmilio G. Cota{
546026fffe29SEmilio G. Cota  foo();
546126fffe29SEmilio G. Cota  return 0;
546226fffe29SEmilio G. Cota}
546326fffe29SEmilio G. CotaEOF
546426fffe29SEmilio G. Cota
546526fffe29SEmilio G. Cota    if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
546626fffe29SEmilio G. Cota        ld_dynamic_list="yes"
546726fffe29SEmilio G. Cota    fi
546826fffe29SEmilio G. Cotafi
546926fffe29SEmilio G. Cota
547026fffe29SEmilio G. Cota#########################################
547126fffe29SEmilio G. Cota# See if -exported_symbols_list is supported by the linker
547226fffe29SEmilio G. Cota
547326fffe29SEmilio G. Cotald_exported_symbols_list="no"
547426fffe29SEmilio G. Cotaif test "$static" = "no" ; then
547526fffe29SEmilio G. Cota    cat > $TMPTXT <<EOF
547626fffe29SEmilio G. Cota  _foo
547726fffe29SEmilio G. CotaEOF
547826fffe29SEmilio G. Cota
547926fffe29SEmilio G. Cota    if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
548026fffe29SEmilio G. Cota        ld_exported_symbols_list="yes"
548126fffe29SEmilio G. Cota    fi
548226fffe29SEmilio G. Cotafi
548326fffe29SEmilio G. Cota
548426fffe29SEmilio G. Cotaif  test "$plugins" = "yes" &&
548526fffe29SEmilio G. Cota    test "$ld_dynamic_list" = "no" &&
548626fffe29SEmilio G. Cota    test "$ld_exported_symbols_list" = "no" ; then
548726fffe29SEmilio G. Cota  error_exit \
548826fffe29SEmilio G. Cota      "Plugin support requires dynamic linking and specifying a set of symbols " \
548926fffe29SEmilio G. Cota      "that are exported to plugins. Unfortunately your linker doesn't " \
549026fffe29SEmilio G. Cota      "support the flag (--dynamic-list or -exported_symbols_list) used " \
549126fffe29SEmilio G. Cota      "for this purpose. You can't build with --static."
549226fffe29SEmilio G. Cotafi
549326fffe29SEmilio G. Cota
54941e6e9acaSRichard Henderson########################################
5495db8aaae8SRichard Henderson# See if __attribute__((alias)) is supported.
5496db8aaae8SRichard Henderson# This false for Xcode 9, but has been remedied for Xcode 10.
5497db8aaae8SRichard Henderson# Unfortunately, travis uses Xcode 9 by default.
5498db8aaae8SRichard Henderson
5499db8aaae8SRichard Hendersonattralias=no
5500db8aaae8SRichard Hendersoncat > $TMPC << EOF
5501db8aaae8SRichard Hendersonint x = 1;
5502db8aaae8SRichard Hendersonextern const int y __attribute__((alias("x")));
5503db8aaae8SRichard Hendersonint main(void) { return 0; }
5504db8aaae8SRichard HendersonEOF
5505db8aaae8SRichard Hendersonif compile_prog "" "" ; then
5506db8aaae8SRichard Henderson    attralias=yes
5507db8aaae8SRichard Hendersonfi
5508db8aaae8SRichard Henderson
5509db8aaae8SRichard Henderson########################################
55101e6e9acaSRichard Henderson# check if getauxval is available.
55111e6e9acaSRichard Henderson
55121e6e9acaSRichard Hendersongetauxval=no
55131e6e9acaSRichard Hendersoncat > $TMPC << EOF
55141e6e9acaSRichard Henderson#include <sys/auxv.h>
55151e6e9acaSRichard Hendersonint main(void) {
55161e6e9acaSRichard Henderson  return getauxval(AT_HWCAP) == 0;
55171e6e9acaSRichard Henderson}
55181e6e9acaSRichard HendersonEOF
55191e6e9acaSRichard Hendersonif compile_prog "" "" ; then
55201e6e9acaSRichard Henderson    getauxval=yes
55211e6e9acaSRichard Hendersonfi
55221e6e9acaSRichard Henderson
5523fd0e6053SJohn Snow########################################
5524fd0e6053SJohn Snow# check if ccache is interfering with
5525fd0e6053SJohn Snow# semantic analysis of macros
5526fd0e6053SJohn Snow
55275e4dfd3dSJohn Snowunset CCACHE_CPP2
5528fd0e6053SJohn Snowccache_cpp2=no
5529fd0e6053SJohn Snowcat > $TMPC << EOF
5530fd0e6053SJohn Snowstatic const int Z = 1;
5531fd0e6053SJohn Snow#define fn() ({ Z; })
5532fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
5533fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
5534fd0e6053SJohn Snow#define ID(X) (X)
5535fd0e6053SJohn Snowint main(int argc, char *argv[])
5536fd0e6053SJohn Snow{
5537fd0e6053SJohn Snow    int x = 0, y = 0;
5538fd0e6053SJohn Snow    x = ID(x);
5539fd0e6053SJohn Snow    x = fn();
5540fd0e6053SJohn Snow    fn();
5541fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
5542fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
5543fd0e6053SJohn Snow    return 0;
5544fd0e6053SJohn Snow}
5545fd0e6053SJohn SnowEOF
5546fd0e6053SJohn Snow
5547fd0e6053SJohn Snowif ! compile_object "-Werror"; then
5548fd0e6053SJohn Snow    ccache_cpp2=yes
5549fd0e6053SJohn Snowfi
5550fd0e6053SJohn Snow
5551b553a042SJohn Snow#################################################
5552b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
5553b553a042SJohn Snow
5554b553a042SJohn Snowif test "$fortify_source" != "no"; then
5555b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5556b553a042SJohn Snow    fortify_source="no";
5557e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
5558cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5559b553a042SJohn Snow    fortify_source="no";
5560b553a042SJohn Snow  else
5561b553a042SJohn Snow    fortify_source="yes"
5562b553a042SJohn Snow  fi
5563b553a042SJohn Snowfi
5564b553a042SJohn Snow
55651efad060SFam Zheng###############################################
55661efad060SFam Zheng# Check if copy_file_range is provided by glibc
55671efad060SFam Zhenghave_copy_file_range=no
55681efad060SFam Zhengcat > $TMPC << EOF
55691efad060SFam Zheng#include <unistd.h>
55701efad060SFam Zhengint main(void) {
55711efad060SFam Zheng  copy_file_range(0, NULL, 0, NULL, 0, 0);
55721efad060SFam Zheng  return 0;
55731efad060SFam Zheng}
55741efad060SFam ZhengEOF
55751efad060SFam Zhengif compile_prog "" "" ; then
55761efad060SFam Zheng    have_copy_file_range=yes
55771efad060SFam Zhengfi
55781efad060SFam Zheng
5579d2042378SAneesh Kumar K.V##########################################
5580277abf15SJan Vesely# check if struct fsxattr is available via linux/fs.h
5581277abf15SJan Vesely
5582277abf15SJan Veselyhave_fsxattr=no
5583277abf15SJan Veselycat > $TMPC << EOF
5584277abf15SJan Vesely#include <linux/fs.h>
5585277abf15SJan Veselystruct fsxattr foo;
5586277abf15SJan Veselyint main(void) {
5587277abf15SJan Vesely  return 0;
5588277abf15SJan Vesely}
5589277abf15SJan VeselyEOF
5590277abf15SJan Veselyif compile_prog "" "" ; then
5591277abf15SJan Vesely    have_fsxattr=yes
5592277abf15SJan Veselyfi
5593277abf15SJan Vesely
5594b66e10e4SPeter Maydell##########################################
5595a40161cbSPaolo Bonzini# check for usable membarrier system call
5596a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then
5597a40161cbSPaolo Bonzini    have_membarrier=no
5598a40161cbSPaolo Bonzini    if test "$mingw32" = "yes" ; then
5599a40161cbSPaolo Bonzini        have_membarrier=yes
5600a40161cbSPaolo Bonzini    elif test "$linux" = "yes" ; then
5601a40161cbSPaolo Bonzini        cat > $TMPC << EOF
5602a40161cbSPaolo Bonzini    #include <linux/membarrier.h>
5603a40161cbSPaolo Bonzini    #include <sys/syscall.h>
5604a40161cbSPaolo Bonzini    #include <unistd.h>
5605a40161cbSPaolo Bonzini    #include <stdlib.h>
5606a40161cbSPaolo Bonzini    int main(void) {
5607a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5608a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5609a40161cbSPaolo Bonzini	exit(0);
5610a40161cbSPaolo Bonzini    }
5611a40161cbSPaolo BonziniEOF
5612a40161cbSPaolo Bonzini        if compile_prog "" "" ; then
5613a40161cbSPaolo Bonzini            have_membarrier=yes
5614a40161cbSPaolo Bonzini        fi
5615a40161cbSPaolo Bonzini    fi
5616a40161cbSPaolo Bonzini    if test "$have_membarrier" = "no"; then
5617a40161cbSPaolo Bonzini      feature_not_found "membarrier" "membarrier system call not available"
5618a40161cbSPaolo Bonzini    fi
5619a40161cbSPaolo Bonzinielse
5620a40161cbSPaolo Bonzini    # Do not enable it by default even for Mingw32, because it doesn't
5621a40161cbSPaolo Bonzini    # work on Wine.
5622a40161cbSPaolo Bonzini    membarrier=no
5623a40161cbSPaolo Bonzinifi
5624a40161cbSPaolo Bonzini
5625a40161cbSPaolo Bonzini##########################################
5626b66e10e4SPeter Maydell# check if rtnetlink.h exists and is useful
5627575b22b1SLaurent Vivierhave_rtnetlink=no
5628575b22b1SLaurent Viviercat > $TMPC << EOF
5629575b22b1SLaurent Vivier#include <linux/rtnetlink.h>
5630575b22b1SLaurent Vivierint main(void) {
5631575b22b1SLaurent Vivier  return IFLA_PROTO_DOWN;
5632575b22b1SLaurent Vivier}
5633575b22b1SLaurent VivierEOF
5634575b22b1SLaurent Vivierif compile_prog "" "" ; then
5635575b22b1SLaurent Vivier    have_rtnetlink=yes
5636575b22b1SLaurent Vivierfi
5637575b22b1SLaurent Vivier
56386a02c806SStefan Hajnoczi##########################################
56396a02c806SStefan Hajnoczi# check for usable AF_VSOCK environment
56406a02c806SStefan Hajnoczihave_af_vsock=no
56416a02c806SStefan Hajnoczicat > $TMPC << EOF
56426a02c806SStefan Hajnoczi#include <errno.h>
56436a02c806SStefan Hajnoczi#include <sys/types.h>
56446a02c806SStefan Hajnoczi#include <sys/socket.h>
56456a02c806SStefan Hajnoczi#if !defined(AF_VSOCK)
56466a02c806SStefan Hajnoczi# error missing AF_VSOCK flag
56476a02c806SStefan Hajnoczi#endif
56486a02c806SStefan Hajnoczi#include <linux/vm_sockets.h>
56496a02c806SStefan Hajnocziint main(void) {
56506a02c806SStefan Hajnoczi    int sock, ret;
56516a02c806SStefan Hajnoczi    struct sockaddr_vm svm;
56526a02c806SStefan Hajnoczi    socklen_t len = sizeof(svm);
56536a02c806SStefan Hajnoczi    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
56546a02c806SStefan Hajnoczi    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
56556a02c806SStefan Hajnoczi    if ((ret == -1) && (errno == ENOTCONN)) {
56566a02c806SStefan Hajnoczi        return 0;
56576a02c806SStefan Hajnoczi    }
56586a02c806SStefan Hajnoczi    return -1;
56596a02c806SStefan Hajnoczi}
56606a02c806SStefan HajnocziEOF
56616a02c806SStefan Hajnocziif compile_prog "" "" ; then
56626a02c806SStefan Hajnoczi    have_af_vsock=yes
56636a02c806SStefan Hajnoczifi
56646a02c806SStefan Hajnoczi
5665f0d92b56SLongpeng(Mike)##########################################
5666f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment
56674f67366eSThomas Huthhave_afalg=no
5668f0d92b56SLongpeng(Mike)cat > $TMPC << EOF
5669f0d92b56SLongpeng(Mike)#include <errno.h>
5670f0d92b56SLongpeng(Mike)#include <sys/types.h>
5671f0d92b56SLongpeng(Mike)#include <sys/socket.h>
5672f0d92b56SLongpeng(Mike)#include <linux/if_alg.h>
5673f0d92b56SLongpeng(Mike)int main(void) {
5674f0d92b56SLongpeng(Mike)    int sock;
5675f0d92b56SLongpeng(Mike)    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5676f0d92b56SLongpeng(Mike)    return sock;
5677f0d92b56SLongpeng(Mike)}
5678f0d92b56SLongpeng(Mike)EOF
5679f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then
5680f0d92b56SLongpeng(Mike)    have_afalg=yes
5681f0d92b56SLongpeng(Mike)fi
5682f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes"
5683f0d92b56SLongpeng(Mike)then
5684f0d92b56SLongpeng(Mike)    if test "$have_afalg" != "yes"
5685f0d92b56SLongpeng(Mike)    then
5686f0d92b56SLongpeng(Mike)	error_exit "AF_ALG requested but could not be detected"
5687f0d92b56SLongpeng(Mike)    fi
5688f0d92b56SLongpeng(Mike)fi
5689f0d92b56SLongpeng(Mike)
5690f0d92b56SLongpeng(Mike)
56916969ec6cSJames Clarke#################################################
56924d04351fSChristopher Covington# check for sysmacros.h
56934d04351fSChristopher Covington
56944d04351fSChristopher Covingtonhave_sysmacros=no
56954d04351fSChristopher Covingtoncat > $TMPC << EOF
56964d04351fSChristopher Covington#include <sys/sysmacros.h>
56974d04351fSChristopher Covingtonint main(void) {
56984d04351fSChristopher Covington    return makedev(0, 0);
56994d04351fSChristopher Covington}
57004d04351fSChristopher CovingtonEOF
57014d04351fSChristopher Covingtonif compile_prog "" "" ; then
57024d04351fSChristopher Covington    have_sysmacros=yes
57034d04351fSChristopher Covingtonfi
57044d04351fSChristopher Covington
57054d04351fSChristopher Covington##########################################
570649e00a18SAndreas Grapentin# check for _Static_assert()
570749e00a18SAndreas Grapentin
570849e00a18SAndreas Grapentinhave_static_assert=no
570949e00a18SAndreas Grapentincat > $TMPC << EOF
571049e00a18SAndreas Grapentin_Static_assert(1, "success");
571149e00a18SAndreas Grapentinint main(void) {
571249e00a18SAndreas Grapentin    return 0;
571349e00a18SAndreas Grapentin}
571449e00a18SAndreas GrapentinEOF
571549e00a18SAndreas Grapentinif compile_prog "" "" ; then
571649e00a18SAndreas Grapentin    have_static_assert=yes
571749e00a18SAndreas Grapentinfi
571849e00a18SAndreas Grapentin
571949e00a18SAndreas Grapentin##########################################
5720e674605fSTomáš Golembiovský# check for utmpx.h, it is missing e.g. on OpenBSD
5721e674605fSTomáš Golembiovský
5722e674605fSTomáš Golembiovskýhave_utmpx=no
5723e674605fSTomáš Golembiovskýcat > $TMPC << EOF
5724e674605fSTomáš Golembiovský#include <utmpx.h>
5725e674605fSTomáš Golembiovskýstruct utmpx user_info;
5726e674605fSTomáš Golembiovskýint main(void) {
5727e674605fSTomáš Golembiovský    return 0;
5728e674605fSTomáš Golembiovský}
5729e674605fSTomáš GolembiovskýEOF
5730e674605fSTomáš Golembiovskýif compile_prog "" "" ; then
5731e674605fSTomáš Golembiovský    have_utmpx=yes
5732e674605fSTomáš Golembiovskýfi
5733e674605fSTomáš Golembiovský
5734e674605fSTomáš Golembiovský##########################################
5735db1ed1abSRichard Henderson# check for getrandom()
5736db1ed1abSRichard Henderson
5737db1ed1abSRichard Hendersonhave_getrandom=no
5738db1ed1abSRichard Hendersoncat > $TMPC << EOF
5739db1ed1abSRichard Henderson#include <sys/random.h>
5740db1ed1abSRichard Hendersonint main(void) {
5741db1ed1abSRichard Henderson    return getrandom(0, 0, GRND_NONBLOCK);
5742db1ed1abSRichard Henderson}
5743db1ed1abSRichard HendersonEOF
5744db1ed1abSRichard Hendersonif compile_prog "" "" ; then
5745db1ed1abSRichard Henderson    have_getrandom=yes
5746db1ed1abSRichard Hendersonfi
5747db1ed1abSRichard Henderson
5748db1ed1abSRichard Henderson##########################################
5749247724cbSMarc-André Lureau# checks for sanitizers
5750247724cbSMarc-André Lureau
5751247724cbSMarc-André Lureauhave_asan=no
5752247724cbSMarc-André Lureauhave_ubsan=no
5753d83414e1SMarc-André Lureauhave_asan_iface_h=no
5754d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
5755247724cbSMarc-André Lureau
5756247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
5757b9f44da2SMarc-André Lureau  write_c_skeleton
5758247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5759247724cbSMarc-André Lureau      have_asan=yes
5760247724cbSMarc-André Lureau  fi
5761b9f44da2SMarc-André Lureau
5762b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
5763b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
5764b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5765b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
5766b9f44da2SMarc-André Lureau#include <stdlib.h>
5767b9f44da2SMarc-André Lureauint main(void) {
5768b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
5769f2dfe54cSLeonid Bloch    if (tmp != NULL) {
5770b9f44da2SMarc-André Lureau        return *(int *)(tmp + 2);
5771b9f44da2SMarc-André Lureau    }
5772d1abf3fcSOlaf Hering    return 1;
5773f2dfe54cSLeonid Bloch}
5774b9f44da2SMarc-André LureauEOF
5775247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5776247724cbSMarc-André Lureau      have_ubsan=yes
5777247724cbSMarc-André Lureau  fi
5778d83414e1SMarc-André Lureau
5779d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
5780d83414e1SMarc-André Lureau      have_asan_iface_h=yes
5781d83414e1SMarc-André Lureau  fi
5782d83414e1SMarc-André Lureau
5783d83414e1SMarc-André Lureau  cat > $TMPC << EOF
5784d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
5785d83414e1SMarc-André Lureauint main(void) {
5786d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
5787d83414e1SMarc-André Lureau  return 0;
5788d83414e1SMarc-André Lureau}
5789d83414e1SMarc-André LureauEOF
5790d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5791d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
5792d83414e1SMarc-André Lureau  fi
5793247724cbSMarc-André Lureaufi
5794247724cbSMarc-André Lureau
5795247724cbSMarc-André Lureau##########################################
5796adc28027SAlexander Bulekov# checks for fuzzer
579754c9e41dSAlexander Bulekovif test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5798adc28027SAlexander Bulekov  write_c_fuzzer_skeleton
5799dd016265SAlexander Bulekov  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5800adc28027SAlexander Bulekov    have_fuzzer=yes
580164ed6f92SPaolo Bonzini  else
580264ed6f92SPaolo Bonzini    error_exit "Your compiler doesn't support -fsanitize=fuzzer"
580364ed6f92SPaolo Bonzini    exit 1
5804adc28027SAlexander Bulekov  fi
5805adc28027SAlexander Bulekovfi
5806adc28027SAlexander Bulekov
58070aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers;
58080aebab04SLingfeng Yang# keep it separate until that is not the case.
58090aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
58100aebab04SLingfeng Yang  error_exit "TSAN is not supported with other sanitiziers."
58110aebab04SLingfeng Yangfi
58120aebab04SLingfeng Yanghave_tsan=no
58130aebab04SLingfeng Yanghave_tsan_iface_fiber=no
58140aebab04SLingfeng Yangif test "$tsan" = "yes" ; then
58150aebab04SLingfeng Yang  write_c_skeleton
58160aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
58170aebab04SLingfeng Yang      have_tsan=yes
58180aebab04SLingfeng Yang  fi
58190aebab04SLingfeng Yang  cat > $TMPC << EOF
58200aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h>
58210aebab04SLingfeng Yangint main(void) {
58220aebab04SLingfeng Yang  __tsan_create_fiber(0);
58230aebab04SLingfeng Yang  return 0;
58240aebab04SLingfeng Yang}
58250aebab04SLingfeng YangEOF
58260aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
58270aebab04SLingfeng Yang      have_tsan_iface_fiber=yes
58280aebab04SLingfeng Yang  fi
58290aebab04SLingfeng Yangfi
58300aebab04SLingfeng Yang
5831adc28027SAlexander Bulekov##########################################
583217824406SJunyan He# check for libpmem
583317824406SJunyan He
583417824406SJunyan Heif test "$libpmem" != "no"; then
583517824406SJunyan He	if $pkg_config --exists "libpmem"; then
583617824406SJunyan He		libpmem="yes"
583717824406SJunyan He		libpmem_libs=$($pkg_config --libs libpmem)
583817824406SJunyan He		libpmem_cflags=$($pkg_config --cflags libpmem)
583917824406SJunyan He	else
584017824406SJunyan He		if test "$libpmem" = "yes" ; then
584117824406SJunyan He			feature_not_found "libpmem" "Install nvml or pmdk"
584217824406SJunyan He		fi
584317824406SJunyan He		libpmem="no"
584417824406SJunyan He	fi
584517824406SJunyan Hefi
584617824406SJunyan He
584717824406SJunyan He##########################################
584821b2eca6SJingqi Liu# check for libdaxctl
584921b2eca6SJingqi Liu
585021b2eca6SJingqi Liuif test "$libdaxctl" != "no"; then
585121b2eca6SJingqi Liu	if $pkg_config --atleast-version=57 "libdaxctl"; then
585221b2eca6SJingqi Liu		libdaxctl="yes"
585321b2eca6SJingqi Liu		libdaxctl_libs=$($pkg_config --libs libdaxctl)
585421b2eca6SJingqi Liu		libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
585521b2eca6SJingqi Liu	else
585621b2eca6SJingqi Liu		if test "$libdaxctl" = "yes" ; then
585721b2eca6SJingqi Liu			feature_not_found "libdaxctl" "Install libdaxctl"
585821b2eca6SJingqi Liu		fi
585921b2eca6SJingqi Liu		libdaxctl="no"
586021b2eca6SJingqi Liu	fi
586121b2eca6SJingqi Liufi
586221b2eca6SJingqi Liu
586321b2eca6SJingqi Liu##########################################
5864675b9b53SMarc-André Lureau# check for slirp
5865675b9b53SMarc-André Lureau
5866d599938aSLaurent Vivier# slirp is only required when building softmmu targets
5867d599938aSLaurent Vivierif test -z "$slirp" -a "$softmmu" != "yes" ; then
5868d599938aSLaurent Vivier    slirp="no"
5869d599938aSLaurent Vivierfi
5870d599938aSLaurent Vivier
5871675b9b53SMarc-André Lureaucase "$slirp" in
5872675b9b53SMarc-André Lureau  "" | yes)
5873675b9b53SMarc-André Lureau    if $pkg_config slirp; then
5874675b9b53SMarc-André Lureau      slirp=system
58757c57bdd8SMarc-André Lureau    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
58767c57bdd8SMarc-André Lureau      slirp=git
5877675b9b53SMarc-André Lureau    elif test -e "${source_path}/slirp/Makefile" ; then
5878675b9b53SMarc-André Lureau      slirp=internal
5879675b9b53SMarc-André Lureau    elif test -z "$slirp" ; then
5880675b9b53SMarc-André Lureau      slirp=no
5881675b9b53SMarc-André Lureau    else
5882675b9b53SMarc-André Lureau      feature_not_found "slirp" "Install slirp devel or git submodule"
5883675b9b53SMarc-André Lureau    fi
5884675b9b53SMarc-André Lureau    ;;
5885675b9b53SMarc-André Lureau
5886675b9b53SMarc-André Lureau  system)
5887675b9b53SMarc-André Lureau    if ! $pkg_config slirp; then
5888675b9b53SMarc-André Lureau      feature_not_found "slirp" "Install slirp devel"
5889675b9b53SMarc-André Lureau    fi
5890675b9b53SMarc-André Lureau    ;;
5891675b9b53SMarc-André Lureauesac
5892675b9b53SMarc-André Lureau
5893675b9b53SMarc-André Lureaucase "$slirp" in
58947c57bdd8SMarc-André Lureau  git | internal)
58957c57bdd8SMarc-André Lureau    if test "$slirp" = git; then
58967c57bdd8SMarc-André Lureau      git_submodules="${git_submodules} slirp"
58977c57bdd8SMarc-André Lureau    fi
5898675b9b53SMarc-André Lureau    mkdir -p slirp
589958683d07SPaolo Bonzini    slirp_cflags="-I${source_path}/slirp/src -Islirp/src"
590058683d07SPaolo Bonzini    slirp_libs="-Lslirp -lslirp"
5901b965e8c5SPaolo Bonzini    if test "$mingw32" = "yes" ; then
5902b965e8c5SPaolo Bonzini      slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
5903b965e8c5SPaolo Bonzini    fi
5904675b9b53SMarc-André Lureau    ;;
5905675b9b53SMarc-André Lureau
5906675b9b53SMarc-André Lureau  system)
5907675b9b53SMarc-André Lureau    slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5908675b9b53SMarc-André Lureau    slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5909675b9b53SMarc-André Lureau    slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5910675b9b53SMarc-André Lureau    ;;
5911675b9b53SMarc-André Lureau
5912675b9b53SMarc-André Lureau  no)
5913675b9b53SMarc-André Lureau    ;;
5914675b9b53SMarc-André Lureau  *)
5915675b9b53SMarc-André Lureau    error_exit "Unknown state for slirp: $slirp"
5916675b9b53SMarc-André Lureau    ;;
5917675b9b53SMarc-André Lureauesac
5918675b9b53SMarc-André Lureau
591954e7aac0SAlexey Krasikov##########################################
592054e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall
592154e7aac0SAlexey Krasikov
592254e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then
592354e7aac0SAlexey Krasikov
592454e7aac0SAlexey Krasikov    have_keyring=no
592554e7aac0SAlexey Krasikov    cat > $TMPC << EOF
592654e7aac0SAlexey Krasikov#include <errno.h>
592754e7aac0SAlexey Krasikov#include <asm/unistd.h>
592854e7aac0SAlexey Krasikov#include <linux/keyctl.h>
592954e7aac0SAlexey Krasikov#include <unistd.h>
593054e7aac0SAlexey Krasikovint main(void) {
593154e7aac0SAlexey Krasikov    return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
593254e7aac0SAlexey Krasikov}
593354e7aac0SAlexey KrasikovEOF
593454e7aac0SAlexey Krasikov    if compile_prog "" "" ; then
593554e7aac0SAlexey Krasikov        have_keyring=yes
593654e7aac0SAlexey Krasikov    fi
593754e7aac0SAlexey Krasikovfi
593854e7aac0SAlexey Krasikovif test "$secret_keyring" != "no"
593954e7aac0SAlexey Krasikovthen
5940b418d265SDavid Edmondson    if test "$have_keyring" = "yes"
594154e7aac0SAlexey Krasikov    then
594254e7aac0SAlexey Krasikov	secret_keyring=yes
594354e7aac0SAlexey Krasikov    else
594454e7aac0SAlexey Krasikov	if test "$secret_keyring" = "yes"
594554e7aac0SAlexey Krasikov	then
594654e7aac0SAlexey Krasikov	    error_exit "syscall __NR_keyctl requested, \
594754e7aac0SAlexey Krasikovbut not implemented on your system"
594854e7aac0SAlexey Krasikov	else
594954e7aac0SAlexey Krasikov	    secret_keyring=no
595054e7aac0SAlexey Krasikov	fi
595154e7aac0SAlexey Krasikov    fi
595254e7aac0SAlexey Krasikovfi
595354e7aac0SAlexey Krasikov
595492500362SAlexey Krasikov##########################################
5955e86ecd4bSJuan Quintela# End of CC checks
5956e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
5957e86ecd4bSJuan Quintela
5958d83414e1SMarc-André Lureauwrite_c_skeleton
5959d83414e1SMarc-André Lureau
59601d728c39SBlue Swirlif test "$gcov" = "yes" ; then
5961bf0e56a3SMarc-André Lureau  :
5962b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then
5963086d5f75SPaolo Bonzini  QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5964086d5f75SPaolo Bonzini  debug=no
5965086d5f75SPaolo Bonzinifi
5966086d5f75SPaolo Bonziniif test "$debug_info" = "yes"; then
5967086d5f75SPaolo Bonzini  CFLAGS="-g $CFLAGS"
5968086d5f75SPaolo Bonzini  LDFLAGS="-g $LDFLAGS"
5969086d5f75SPaolo Bonzinifi
5970a5665051SPaolo Bonziniif test "$debug" = "no"; then
5971a5665051SPaolo Bonzini  CFLAGS="-O2 $CFLAGS"
5972a5665051SPaolo Bonzinifi
5973086d5f75SPaolo Bonzini
5974086d5f75SPaolo Bonzinicase "$ARCH" in
5975086d5f75SPaolo Bonzinialpha)
5976086d5f75SPaolo Bonzini  # Ensure there's only a single GP
5977086d5f75SPaolo Bonzini  QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5978086d5f75SPaolo Bonzini;;
5979086d5f75SPaolo Bonziniesac
5980086d5f75SPaolo Bonzini
5981086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then
5982086d5f75SPaolo Bonzini  QEMU_CFLAGS="-p $QEMU_CFLAGS"
5983086d5f75SPaolo Bonzini  QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5984086d5f75SPaolo Bonzinifi
5985a316e378SJuan Quintela
5986247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
5987db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5988db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5989d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
5990d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
5991d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
5992d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
5993d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
5994d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
5995d83414e1SMarc-André Lureau  fi
5996247724cbSMarc-André Lureaufi
59970aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then
59980aebab04SLingfeng Yang  if test "$have_tsan_iface_fiber" = "yes" ; then
59990aebab04SLingfeng Yang    QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
60000aebab04SLingfeng Yang    QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
60010aebab04SLingfeng Yang  else
60020aebab04SLingfeng Yang    error_exit "Cannot enable TSAN due to missing fiber annotation interface."
60030aebab04SLingfeng Yang  fi
60040aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then
60050aebab04SLingfeng Yang  error_exit "Cannot enable TSAN due to missing sanitize thread interface."
60060aebab04SLingfeng Yangfi
6007247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
6008db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6009db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
6010247724cbSMarc-André Lureaufi
6011247724cbSMarc-André Lureau
60126542aa9cSPeter Lieven##########################################
60136542aa9cSPeter Lieven# Do we have libnfs
60146542aa9cSPeter Lievenif test "$libnfs" != "no" ; then
6015b7d769c9SPeter Lieven  if $pkg_config --atleast-version=1.9.3 libnfs; then
60166542aa9cSPeter Lieven    libnfs="yes"
60176542aa9cSPeter Lieven    libnfs_libs=$($pkg_config --libs libnfs)
60186542aa9cSPeter Lieven  else
60196542aa9cSPeter Lieven    if test "$libnfs" = "yes" ; then
60208efc9363SHu Tao      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
60216542aa9cSPeter Lieven    fi
60226542aa9cSPeter Lieven    libnfs="no"
60236542aa9cSPeter Lieven  fi
60246542aa9cSPeter Lievenfi
60251d728c39SBlue Swirl
60263efac6ebSTomáš Golembiovský##########################################
60273efac6ebSTomáš Golembiovský
60280aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
60290aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then
6030e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6031db5adeaaSPaolo Bonzini        QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
6032e86ecd4bSJuan Quintela    fi
6033e86ecd4bSJuan Quintelafi
6034e86ecd4bSJuan Quintela
6035952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
6036952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
6037952afb71SBlue Swirl    for flag in --dynamicbase --no-seh --nxcompat; do
6038e9a3591fSChristian Borntraeger        if ld_has $flag ; then
6039db5adeaaSPaolo Bonzini            QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
6040952afb71SBlue Swirl        fi
6041952afb71SBlue Swirl    done
6042952afb71SBlue Swirlfi
6043952afb71SBlue Swirl
60447776ea6bSPhilippe Mathieu-Daudé# Disable OpenBSD W^X if available
60451badb709SPaolo Bonziniif test "$tcg" = "enabled" && test "$targetos" = "OpenBSD"; then
60467776ea6bSPhilippe Mathieu-Daudé    cat > $TMPC <<EOF
60477776ea6bSPhilippe Mathieu-Daudé    int main(void) { return 0; }
60487776ea6bSPhilippe Mathieu-DaudéEOF
60497776ea6bSPhilippe Mathieu-Daudé    wx_ldflags="-Wl,-z,wxneeded"
60507776ea6bSPhilippe Mathieu-Daudé    if compile_prog "" "$wx_ldflags"; then
60517776ea6bSPhilippe Mathieu-Daudé        QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
60527776ea6bSPhilippe Mathieu-Daudé    fi
60537776ea6bSPhilippe Mathieu-Daudéfi
60547776ea6bSPhilippe Mathieu-Daudé
605510ff82d1SMarc-André Lureauqemu_confdir="$sysconfdir/$qemu_suffix"
605610ff82d1SMarc-André Lureauqemu_moddir="$libdir/$qemu_suffix"
605710ff82d1SMarc-André Lureauqemu_datadir="$datadir/$qemu_suffix"
6058ca8c0909SMarc-André Lureauqemu_docdir="$docdir/$qemu_suffix"
6059834574eaSAnthony Liguoriqemu_localedir="$datadir/locale"
6060a8260d38SDaniel P. Berrangéqemu_icondir="$datadir/icons"
606167ea9546SDaniel P. Berrangéqemu_desktopdir="$datadir/applications"
60625a67135aSbellard
6063e0580342SKamil Rytarowski# We can only support ivshmem if we have eventfd
6064e0580342SKamil Rytarowskiif [ "$eventfd" = "yes" ]; then
6065e0580342SKamil Rytarowski  ivshmem=yes
6066e0580342SKamil Rytarowskifi
6067e0580342SKamil Rytarowski
60684b1c11fdSDaniel P. Berrangeif test "$softmmu" = yes ; then
6069b855f8d1SPaolo Bonzini  if test "$linux" = yes; then
60707e462613SPaolo Bonzini    if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
6071983eef5aSMeador Inge      virtfs=yes
6072983eef5aSMeador Inge    else
6073983eef5aSMeador Inge      if test "$virtfs" = yes; then
60747e462613SPaolo Bonzini        error_exit "VirtFS requires libcap-ng devel and libattr devel"
6075983eef5aSMeador Inge      fi
607617500370SAndreas Färber      virtfs=no
6077983eef5aSMeador Inge    fi
6078b855f8d1SPaolo Bonzini  else
6079b855f8d1SPaolo Bonzini    if test "$virtfs" = yes; then
6080b855f8d1SPaolo Bonzini      error_exit "VirtFS is supported only on Linux"
6081b855f8d1SPaolo Bonzini    fi
6082b855f8d1SPaolo Bonzini    virtfs=no
608317bff52bSM. Mohan Kumar  fi
6084ff69fd8cSLaurent Vivierfi
60859d6bc27bSMichael Roth
60869d6bc27bSMichael Roth# Probe for guest agent support/options
60879d6bc27bSMichael Roth
6088e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
6089a5125905SLaurent Vivier  if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6090a5125905SLaurent Vivier      guest_agent=no
6091a5125905SLaurent Vivier  elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6092e8ef31a3SMichael Tokarev      guest_agent=yes
6093e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
6094e8ef31a3SMichael Tokarev      guest_agent=no
6095e8ef31a3SMichael Tokarev  else
6096e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
6097ca35f780SPaolo Bonzini  fi
60984b1c11fdSDaniel P. Berrangefi
6099ca35f780SPaolo Bonzini
61009d6bc27bSMichael Roth# Guest agent Window MSI  package
61019d6bc27bSMichael Roth
61029d6bc27bSMichael Rothif test "$guest_agent" != yes; then
61039d6bc27bSMichael Roth  if test "$guest_agent_msi" = yes; then
61049d6bc27bSMichael Roth    error_exit "MSI guest agent package requires guest agent enabled"
61059d6bc27bSMichael Roth  fi
61069d6bc27bSMichael Roth  guest_agent_msi=no
61079d6bc27bSMichael Rothelif test "$mingw32" != "yes"; then
61089d6bc27bSMichael Roth  if test "$guest_agent_msi" = "yes"; then
61099d6bc27bSMichael Roth    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
61109d6bc27bSMichael Roth  fi
61119d6bc27bSMichael Roth  guest_agent_msi=no
61129d6bc27bSMichael Rothelif ! has wixl; then
61139d6bc27bSMichael Roth  if test "$guest_agent_msi" = "yes"; then
61149d6bc27bSMichael Roth    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
61159d6bc27bSMichael Roth  fi
61169d6bc27bSMichael Roth  guest_agent_msi=no
61171a34904eSMichael Rothelse
61181a34904eSMichael Roth  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
61191a34904eSMichael Roth  # disabled explicitly
61201a34904eSMichael Roth  if test "$guest_agent_msi" != "no"; then
61211a34904eSMichael Roth    guest_agent_msi=yes
61221a34904eSMichael Roth  fi
61239d6bc27bSMichael Rothfi
61249d6bc27bSMichael Roth
61251a34904eSMichael Rothif test "$guest_agent_msi" = "yes"; then
61269d6bc27bSMichael Roth  if test "$guest_agent_with_vss" = "yes"; then
61279d6bc27bSMichael Roth    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
61289d6bc27bSMichael Roth  fi
61299d6bc27bSMichael Roth
61309d6bc27bSMichael Roth  if test "$QEMU_GA_MANUFACTURER" = ""; then
61319d6bc27bSMichael Roth    QEMU_GA_MANUFACTURER=QEMU
61329d6bc27bSMichael Roth  fi
61339d6bc27bSMichael Roth
61349d6bc27bSMichael Roth  if test "$QEMU_GA_DISTRO" = ""; then
61359d6bc27bSMichael Roth    QEMU_GA_DISTRO=Linux
61369d6bc27bSMichael Roth  fi
61379d6bc27bSMichael Roth
61389d6bc27bSMichael Roth  if test "$QEMU_GA_VERSION" = ""; then
613989138857SStefan Weil      QEMU_GA_VERSION=$(cat $source_path/VERSION)
61409d6bc27bSMichael Roth  fi
61419d6bc27bSMichael Roth
614289138857SStefan Weil  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
61439d6bc27bSMichael Roth
61449d6bc27bSMichael Roth  case "$cpu" in
61459d6bc27bSMichael Roth  x86_64)
61469d6bc27bSMichael Roth    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
61479d6bc27bSMichael Roth    ;;
61489d6bc27bSMichael Roth  i386)
61499d6bc27bSMichael Roth    QEMU_GA_MSI_ARCH="-D Arch=32"
61509d6bc27bSMichael Roth    ;;
61519d6bc27bSMichael Roth  *)
61529d6bc27bSMichael Roth    error_exit "CPU $cpu not supported for building installation package"
61539d6bc27bSMichael Roth    ;;
61549d6bc27bSMichael Roth  esac
61559d6bc27bSMichael Rothfi
61569d6bc27bSMichael Roth
6157ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
6158ca35f780SPaolo Bonziniroms=
6159e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6160e633a5c6SEric Blake        test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6161e633a5c6SEric Blake        test "$softmmu" = yes ; then
6162e57218b6SPeter Maydell    # Different host OS linkers have different ideas about the name of the ELF
6163c65d5e4eSBrad Smith    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6164c65d5e4eSBrad Smith    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6165c65d5e4eSBrad Smith    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6166e57218b6SPeter Maydell        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6167e57218b6SPeter Maydell            ld_i386_emulation="$emu"
6168ca35f780SPaolo Bonzini            roms="optionrom"
6169e57218b6SPeter Maydell            break
6170e57218b6SPeter Maydell        fi
6171e57218b6SPeter Maydell    done
6172ca35f780SPaolo Bonzinifi
6173ca35f780SPaolo Bonzini
61742e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
61759933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
61762e33c3f8SThomas Huth  write_c_skeleton
61772e33c3f8SThomas Huth  if compile_prog "-march=z900" ""; then
61789933c305SChristian Borntraeger    roms="$roms s390-ccw"
61791ef6bfc2SPhilippe Mathieu-Daudé    # SLOF is required for building the s390-ccw firmware on s390x,
61801ef6bfc2SPhilippe Mathieu-Daudé    # since it is using the libnet code from SLOF for network booting.
61811ef6bfc2SPhilippe Mathieu-Daudé    if test -e "${source_path}/.git" ; then
61821ef6bfc2SPhilippe Mathieu-Daudé      git_submodules="${git_submodules} roms/SLOF"
61831ef6bfc2SPhilippe Mathieu-Daudé    fi
61849933c305SChristian Borntraeger  fi
61852e33c3f8SThomas Huthfi
61869933c305SChristian Borntraeger
618711cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler.
618811cde1c8SBruno 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.
618911cde1c8SBruno Dominguezif has $cxx; then
619011cde1c8SBruno Dominguez    cat > $TMPC <<EOF
619111cde1c8SBruno Dominguezint c_function(void);
619211cde1c8SBruno Dominguezint main(void) { return c_function(); }
619311cde1c8SBruno DominguezEOF
619411cde1c8SBruno Dominguez
619511cde1c8SBruno Dominguez    compile_object
619611cde1c8SBruno Dominguez
619711cde1c8SBruno Dominguez    cat > $TMPCXX <<EOF
619811cde1c8SBruno Dominguezextern "C" {
619911cde1c8SBruno Dominguez   int c_function(void);
620011cde1c8SBruno Dominguez}
620111cde1c8SBruno Dominguezint c_function(void) { return 42; }
620211cde1c8SBruno DominguezEOF
620311cde1c8SBruno Dominguez
620411cde1c8SBruno Dominguez    update_cxxflags
620511cde1c8SBruno Dominguez
6206086d5f75SPaolo Bonzini    if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
620711cde1c8SBruno Dominguez        # C++ compiler $cxx works ok with C compiler $cc
620811cde1c8SBruno Dominguez        :
620911cde1c8SBruno Dominguez    else
621011cde1c8SBruno Dominguez        echo "C++ compiler $cxx does not work with C compiler $cc"
621111cde1c8SBruno Dominguez        echo "Disabling C++ specific optional code"
621211cde1c8SBruno Dominguez        cxx=
621311cde1c8SBruno Dominguez    fi
621411cde1c8SBruno Dominguezelse
621511cde1c8SBruno Dominguez    echo "No C++ compiler available; disabling C++ specific optional code"
621611cde1c8SBruno Dominguez    cxx=
621711cde1c8SBruno Dominguezfi
621811cde1c8SBruno Dominguez
62195d91a2edSYonggang Luoif test $git_update = 'yes' ; then
62205d91a2edSYonggang Luo    (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
62215d91a2edSYonggang Luofi
62225d91a2edSYonggang Luoif test "$fdt" = "git" ; then
62235d91a2edSYonggang Luo    symlink "$source_path/dtc/Makefile" "dtc/Makefile"
62245d91a2edSYonggang Luofi
62255d91a2edSYonggang Luo
622698ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
622797a847bcSbellard
622898ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
622998ec69acSJuan Quintelaecho >> $config_host_mak
623098ec69acSJuan Quintela
6231e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
623299d7cc75SPaolo Bonziniecho "prefix=$prefix" >> $config_host_mak
623399d7cc75SPaolo Bonziniecho "bindir=$bindir" >> $config_host_mak
62343aa5d2beSAlon Levyecho "libdir=$libdir" >> $config_host_mak
62358bf188aaSMichael Tokarevecho "libexecdir=$libexecdir" >> $config_host_mak
62360f94d6daSAlon Levyecho "includedir=$includedir" >> $config_host_mak
623799d7cc75SPaolo Bonziniecho "sysconfdir=$sysconfdir" >> $config_host_mak
623822d07038SEduardo Habkostecho "qemu_confdir=$qemu_confdir" >> $config_host_mak
62399afa52ceSEduardo Habkostecho "qemu_datadir=$qemu_datadir" >> $config_host_mak
62403d5eecabSGerd Hoffmannecho "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6241e26110cfSFam Zhengecho "qemu_moddir=$qemu_moddir" >> $config_host_mak
62425a699bbbSLaszlo Ersekif test "$mingw32" = "no" ; then
6243785c23aeSLuiz Capitulino  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
62445a699bbbSLaszlo Ersekfi
6245f354b1a1SMichael Tokarevecho "qemu_helperdir=$libexecdir" >> $config_host_mak
6246834574eaSAnthony Liguoriecho "qemu_localedir=$qemu_localedir" >> $config_host_mak
6247a8260d38SDaniel P. Berrangéecho "qemu_icondir=$qemu_icondir" >> $config_host_mak
624867ea9546SDaniel P. Berrangéecho "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6249cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
6250aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6251f62bbee5SDaniel P. Berrangeecho "GIT_UPDATE=$git_update" >> $config_host_mak
6252804edf29SJuan Quintela
625398ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak
6254727e5283SPaolo Bonzini
6255f3494749SPaolo Bonziniif test "$default_devices" = "yes" ; then
6256f3494749SPaolo Bonzini  echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6257f3494749SPaolo Bonzinielse
6258f3494749SPaolo Bonzini  echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6259f3494749SPaolo Bonzinifi
6260f8393946Saurel32if test "$debug_tcg" = "yes" ; then
62612358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6262f8393946Saurel32fi
62631625af87Saliguoriif test "$strip_opt" = "yes" ; then
626452ba784dSHollis Blanchard  echo "STRIP=${strip}" >> $config_host_mak
62651625af87Saliguorifi
62667d13299dSbellardif test "$bigendian" = "yes" ; then
6267e2542fe2SJuan Quintela  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
626897a847bcSbellardfi
626967b915a5Sbellardif test "$mingw32" = "yes" ; then
627098ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
627189138857SStefan Weil  rc_version=$(cat $source_path/VERSION)
62729fe6de94SBlue Swirl  version_major=${rc_version%%.*}
62739fe6de94SBlue Swirl  rc_version=${rc_version#*.}
62749fe6de94SBlue Swirl  version_minor=${rc_version%%.*}
62759fe6de94SBlue Swirl  rc_version=${rc_version#*.}
62769fe6de94SBlue Swirl  version_subminor=${rc_version%%.*}
62779fe6de94SBlue Swirl  version_micro=0
62789fe6de94SBlue Swirl  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
62799fe6de94SBlue Swirl  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6280d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
6281d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6282f33ca81fSMichael Roth    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6283d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6284d9840e25STomoki Sekiyama  fi
628550cbebb9SMichael Roth  if test "$guest_agent_ntddscsi" = "yes" ; then
628676dc75caSTomáš Golembiovský    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
628750cbebb9SMichael Roth  fi
62881a34904eSMichael Roth  if test "$guest_agent_msi" = "yes"; then
62894bad7c3bSStefan Hajnoczi    echo "CONFIG_QGA_MSI=y" >> $config_host_mak
62909dacf32dSYossi Hindin    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
62919dacf32dSYossi Hindin    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
62929dacf32dSYossi Hindin    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
62939dacf32dSYossi Hindin    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
62949dacf32dSYossi Hindin    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
62959dacf32dSYossi Hindin    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
62969dacf32dSYossi Hindin  fi
6297210fa556Spbrookelse
629835f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
6299210fa556Spbrookfi
6300128ab2ffSblueswir1
6301dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
6302dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
6303dffcb71cSMark McLoughlinfi
6304dffcb71cSMark McLoughlin
630583fb7adfSbellardif test "$darwin" = "yes" ; then
630698ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
630783fb7adfSbellardfi
6308b29fe3edSmalc
6309ec530c81Sbellardif test "$solaris" = "yes" ; then
631098ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
6311ec530c81Sbellardfi
6312179cf400SAndreas Färberif test "$haiku" = "yes" ; then
6313179cf400SAndreas Färber  echo "CONFIG_HAIKU=y" >> $config_host_mak
6314179cf400SAndreas Färberfi
631597a847bcSbellardif test "$static" = "yes" ; then
631698ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
631797a847bcSbellardfi
63181ba16968SStefan Weilif test "$profiler" = "yes" ; then
63192358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
632005c2a3e7Sbellardfi
6321c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then
6322c932ce31SPaolo Bonzini  echo "CONFIG_TOOLS=y" >> $config_host_mak
6323c932ce31SPaolo Bonzinifi
6324f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then
6325f15bff25SPaolo Bonzini  echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
6326f15bff25SPaolo Bonzinifi
6327675b9b53SMarc-André Lureauif test "$slirp" != "no"; then
632898ec69acSJuan Quintela  echo "CONFIG_SLIRP=y" >> $config_host_mak
6329e2d8830eSBrad  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6330675b9b53SMarc-André Lureau  echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6331675b9b53SMarc-André Lureau  echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6332675b9b53SMarc-André Lureaufi
6333859aef02SPaolo Bonzinisubdirs=
63347c57bdd8SMarc-André Lureauif [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6335859aef02SPaolo Bonzini  subdirs="$subdirs slirp"
6336c20709aaSbellardfi
63378a16d273Sthsif test "$vde" = "yes" ; then
633898ec69acSJuan Quintela  echo "CONFIG_VDE=y" >> $config_host_mak
6339e2ad6f16SFam Zheng  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
63408a16d273Sthsfi
634158952137SVincenzo Maffioneif test "$netmap" = "yes" ; then
634258952137SVincenzo Maffione  echo "CONFIG_NETMAP=y" >> $config_host_mak
634358952137SVincenzo Maffionefi
6344015a33bdSGongleiif test "$l2tpv3" = "yes" ; then
6345015a33bdSGonglei  echo "CONFIG_L2TPV3=y" >> $config_host_mak
6346015a33bdSGongleifi
63474cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then
63484cc600d2SPaolo Bonzini  echo "CONFIG_GPROF=y" >> $config_host_mak
63494cc600d2SPaolo Bonzinifi
635047e98658SCorey Bryantif test "$cap_ng" = "yes" ; then
6351a358bca2SPaolo Bonzini  echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
63523f99cf57SPaolo Bonzini  echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
635347e98658SCorey Bryantfi
63542358a494SJuan Quintelaecho "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
63550c58ac1cSmalcfor drv in $audio_drv_list; do
63561ef1ec2aSGerd Hoffmann    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6357484e2cc7SPaolo Bonzini    echo "$def=y" >> $config_host_mak
63580c58ac1cSmalcdone
6359478e943fSPaolo Bonziniif test "$alsa" = "yes" ; then
6360478e943fSPaolo Bonzini    echo "CONFIG_ALSA=y" >> $config_host_mak
6361478e943fSPaolo Bonzinifi
6362b1149911SFam Zhengecho "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6363478e943fSPaolo Bonziniecho "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
6364478e943fSPaolo Bonziniif test "$libpulse" = "yes" ; then
6365478e943fSPaolo Bonzini    echo "CONFIG_LIBPULSE=y" >> $config_host_mak
6366478e943fSPaolo Bonzinifi
6367b1149911SFam Zhengecho "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6368478e943fSPaolo Bonziniecho "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
6369b1149911SFam Zhengecho "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6370b1149911SFam Zhengecho "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6371b1149911SFam Zhengecho "OSS_LIBS=$oss_libs" >> $config_host_mak
6372478e943fSPaolo Bonziniif test "$libjack" = "yes" ; then
6373478e943fSPaolo Bonzini    echo "CONFIG_LIBJACK=y" >> $config_host_mak
6374478e943fSPaolo Bonzinifi
63752e445703SGeoffrey McRaeecho "JACK_LIBS=$jack_libs" >> $config_host_mak
6376d5631638Smalcif test "$audio_win_int" = "yes" ; then
6377d5631638Smalc  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6378d5631638Smalcfi
6379b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6380b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6381dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then
6382dce512deSChristoph Hellwig  echo "CONFIG_XFS=y" >> $config_host_mak
6383dce512deSChristoph Hellwigfi
638489138857SStefan Weilqemu_version=$(head $source_path/VERSION)
63852358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
638698ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
63872b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
6388a25dba17SJuan Quintelaif [ "$docs" = "yes" ] ; then
638998ec69acSJuan Quintela  echo "BUILD_DOCS=yes" >> $config_host_mak
6390cc8ae6deSpbrookfi
639117969268SFam Zhengif test "$modules" = "yes"; then
6392e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
6393e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
639489138857SStefan Weil  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
639517969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
639617969268SFam Zhengfi
6397bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then
6398bd83c861SChristian Ehrhardt  echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6399bd83c861SChristian Ehrhardtfi
6400e633a5c6SEric Blakeif test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
64018781595bSGerd Hoffmann  echo "CONFIG_X11=y" >> $config_host_mak
64028781595bSGerd Hoffmann  echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
64038781595bSGerd Hoffmann  echo "X11_LIBS=$x11_libs" >> $config_host_mak
64048781595bSGerd Hoffmannfi
6405e08bb301SSamuel Thibaultif test "$iconv" = "yes" ; then
6406e08bb301SSamuel Thibault  echo "CONFIG_ICONV=y" >> $config_host_mak
6407e08bb301SSamuel Thibault  echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6408e08bb301SSamuel Thibault  echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6409e08bb301SSamuel Thibaultfi
64104d3b6f6eSbalrogif test "$curses" = "yes" ; then
6411484e2cc7SPaolo Bonzini  echo "CONFIG_CURSES=y" >> $config_host_mak
64122373f7d5SGerd Hoffmann  echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
64132373f7d5SGerd Hoffmann  echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6414ab4e5602SJan Kiszkafi
6415099d6b0fSRiku Voipioif test "$pipe2" = "yes" ; then
64162358a494SJuan Quintela  echo "CONFIG_PIPE2=y" >> $config_host_mak
6417099d6b0fSRiku Voipiofi
641840ff6d7eSKevin Wolfif test "$accept4" = "yes" ; then
641940ff6d7eSKevin Wolf  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
642040ff6d7eSKevin Wolffi
64213ce34dfbSvibisreenivasanif test "$splice" = "yes" ; then
64222358a494SJuan Quintela  echo "CONFIG_SPLICE=y" >> $config_host_mak
64233ce34dfbSvibisreenivasanfi
6424c2882b96SRiku Voipioif test "$eventfd" = "yes" ; then
6425c2882b96SRiku Voipio  echo "CONFIG_EVENTFD=y" >> $config_host_mak
6426c2882b96SRiku Voipiofi
6427751bcc39SMarc-André Lureauif test "$memfd" = "yes" ; then
6428751bcc39SMarc-André Lureau  echo "CONFIG_MEMFD=y" >> $config_host_mak
6429751bcc39SMarc-André Lureaufi
6430955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then
6431955727d2SCortland Tölva  echo "CONFIG_USBFS=y" >> $config_host_mak
6432955727d2SCortland Tölvafi
6433d0927938SUlrich Hechtif test "$fallocate" = "yes" ; then
6434d0927938SUlrich Hecht  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6435d0927938SUlrich Hechtfi
64363d4fa43eSKusanagi Kouichiif test "$fallocate_punch_hole" = "yes" ; then
64373d4fa43eSKusanagi Kouichi  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
64383d4fa43eSKusanagi Kouichifi
6439b953f075SDenis V. Lunevif test "$fallocate_zero_range" = "yes" ; then
6440b953f075SDenis V. Lunev  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6441b953f075SDenis V. Lunevfi
6442ed911435SKevin Wolfif test "$posix_fallocate" = "yes" ; then
6443ed911435SKevin Wolf  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6444ed911435SKevin Wolffi
6445c727f47dSPeter Maydellif test "$sync_file_range" = "yes" ; then
6446c727f47dSPeter Maydell  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6447c727f47dSPeter Maydellfi
6448dace20dcSPeter Maydellif test "$fiemap" = "yes" ; then
6449dace20dcSPeter Maydell  echo "CONFIG_FIEMAP=y" >> $config_host_mak
6450dace20dcSPeter Maydellfi
6451d0927938SUlrich Hechtif test "$dup3" = "yes" ; then
6452d0927938SUlrich Hecht  echo "CONFIG_DUP3=y" >> $config_host_mak
6453d0927938SUlrich Hechtfi
64544e0c6529SAlex Blighif test "$ppoll" = "yes" ; then
64554e0c6529SAlex Bligh  echo "CONFIG_PPOLL=y" >> $config_host_mak
64564e0c6529SAlex Blighfi
6457cd758dd0SAlex Blighif test "$prctl_pr_set_timerslack" = "yes" ; then
6458cd758dd0SAlex Bligh  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6459cd758dd0SAlex Blighfi
64603b6edd16SPeter Maydellif test "$epoll" = "yes" ; then
64613b6edd16SPeter Maydell  echo "CONFIG_EPOLL=y" >> $config_host_mak
64623b6edd16SPeter Maydellfi
64633b6edd16SPeter Maydellif test "$epoll_create1" = "yes" ; then
64643b6edd16SPeter Maydell  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
64653b6edd16SPeter Maydellfi
6466a8fd1abaSPeter Maydellif test "$sendfile" = "yes" ; then
6467a8fd1abaSPeter Maydell  echo "CONFIG_SENDFILE=y" >> $config_host_mak
6468a8fd1abaSPeter Maydellfi
646951834341SRiku Voipioif test "$timerfd" = "yes" ; then
647051834341SRiku Voipio  echo "CONFIG_TIMERFD=y" >> $config_host_mak
647151834341SRiku Voipiofi
64729af5c906SRiku Voipioif test "$setns" = "yes" ; then
64739af5c906SRiku Voipio  echo "CONFIG_SETNS=y" >> $config_host_mak
64749af5c906SRiku Voipiofi
647538860a03SAleksandar Markovicif test "$clock_adjtime" = "yes" ; then
647638860a03SAleksandar Markovic  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
647738860a03SAleksandar Markovicfi
64785a03cd00SAleksandar Markovicif test "$syncfs" = "yes" ; then
64795a03cd00SAleksandar Markovic  echo "CONFIG_SYNCFS=y" >> $config_host_mak
64805a03cd00SAleksandar Markovicfi
6481db37dd89SAleksandar Markovicif test "$kcov" = "yes" ; then
6482db37dd89SAleksandar Markovic  echo "CONFIG_KCOV=y" >> $config_host_mak
6483db37dd89SAleksandar Markovicfi
6484d6092e08SFilip Bozutaif test "$btrfs" = "yes" ; then
6485d6092e08SFilip Bozuta  echo "CONFIG_BTRFS=y" >> $config_host_mak
6486d6092e08SFilip Bozutafi
64873b3f24adSaurel32if test "$inotify" = "yes" ; then
64882358a494SJuan Quintela  echo "CONFIG_INOTIFY=y" >> $config_host_mak
64893b3f24adSaurel32fi
6490c05c7a73SRiku Voipioif test "$inotify1" = "yes" ; then
6491c05c7a73SRiku Voipio  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6492c05c7a73SRiku Voipiofi
6493401bc051SPeter Maydellif test "$sem_timedwait" = "yes" ; then
6494401bc051SPeter Maydell  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6495401bc051SPeter Maydellfi
64965c99fa37SKeno Fischerif test "$strchrnul" = "yes" ; then
64975c99fa37SKeno Fischer  echo "HAVE_STRCHRNUL=y" >> $config_host_mak
64985c99fa37SKeno Fischerfi
64998a792b03SJiufei Xueif test "$st_atim" = "yes" ; then
65008a792b03SJiufei Xue  echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
65018a792b03SJiufei Xuefi
65026ae9a1f4SJuan Quintelaif test "$byteswap_h" = "yes" ; then
65036ae9a1f4SJuan Quintela  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
65046ae9a1f4SJuan Quintelafi
65056ae9a1f4SJuan Quintelaif test "$bswap_h" = "yes" ; then
65066ae9a1f4SJuan Quintela  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
65076ae9a1f4SJuan Quintelafi
6508769ce76dSAlexander Grafif test "$curl" = "yes" ; then
6509484e2cc7SPaolo Bonzini  echo "CONFIG_CURL=y" >> $config_host_mak
6510b1d5a277SJuan Quintela  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
65116ebc91e5SFam Zheng  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6512769ce76dSAlexander Graffi
65132e4d9fb1Saurel32if test "$brlapi" = "yes" ; then
651498ec69acSJuan Quintela  echo "CONFIG_BRLAPI=y" >> $config_host_mak
65158eca2889SFam Zheng  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
65162e4d9fb1Saurel32fi
6517a4ccabcfSAnthony Liguoriif test "$gtk" = "yes" ; then
6518484e2cc7SPaolo Bonzini  echo "CONFIG_GTK=y" >> $config_host_mak
6519a4ccabcfSAnthony Liguori  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6520014cb152SGerd Hoffmann  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6521925a0400SGerd Hoffmann  if test "$gtk_gl" = "yes" ; then
6522925a0400SGerd Hoffmann    echo "CONFIG_GTK_GL=y" >> $config_host_mak
6523925a0400SGerd Hoffmann  fi
6524bbbf9bfbSStefan Weilfi
6525f876b765SMarc-André Lureauif test "$gio" = "yes" ; then
6526f876b765SMarc-André Lureau    echo "CONFIG_GIO=y" >> $config_host_mak
6527f876b765SMarc-André Lureau    echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6528f876b765SMarc-André Lureau    echo "GIO_LIBS=$gio_libs" >> $config_host_mak
652925a97a56SMarc-André Lureau    echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
6530f876b765SMarc-André Lureaufi
6531a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6532ddbb0d09SDaniel P. Berrangeif test "$gnutls" = "yes" ; then
6533ddbb0d09SDaniel P. Berrange  echo "CONFIG_GNUTLS=y" >> $config_host_mak
6534a81df1b6SPaolo Bonzini  echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
6535a81df1b6SPaolo Bonzini  echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
6536ddbb0d09SDaniel P. Berrangefi
653791bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" ; then
653891bfcdb0SDaniel P. Berrange  echo "CONFIG_GCRYPT=y" >> $config_host_mak
65391f923c70SLongpeng(Mike)  if test "$gcrypt_hmac" = "yes" ; then
65401f923c70SLongpeng(Mike)    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
65411f923c70SLongpeng(Mike)  fi
654246859d93SDaniel P. Berrangé  echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
654346859d93SDaniel P. Berrangé  echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
654462893b67SDaniel P. Berrangefi
654591bfcdb0SDaniel P. Berrangeif test "$nettle" = "yes" ; then
654691bfcdb0SDaniel P. Berrange  echo "CONFIG_NETTLE=y" >> $config_host_mak
6547becaeb72SRadim Krčmář  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6548a81df1b6SPaolo Bonzini  echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
6549a81df1b6SPaolo Bonzini  echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
6550ed754746SDaniel P. Berrangefi
6551e0576942SDaniel P. Berrangéif test "$qemu_private_xts" = "yes" ; then
6552e0576942SDaniel P. Berrangé  echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6553e0576942SDaniel P. Berrangéfi
65549a2fd434SDaniel P. Berrangeif test "$tasn1" = "yes" ; then
65559a2fd434SDaniel P. Berrange  echo "CONFIG_TASN1=y" >> $config_host_mak
65569a2fd434SDaniel P. Berrangefi
65578953caf3SDaniel P. Berrangeif test "$auth_pam" = "yes" ; then
65588953caf3SDaniel P. Berrange    echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
65598953caf3SDaniel P. Berrangefi
6560559607eaSDaniel P. Berrangeif test "$have_ifaddrs_h" = "yes" ; then
6561559607eaSDaniel P. Berrange    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6562559607eaSDaniel P. Berrangefi
6563e865b97fSChen Gangif test "$have_drm_h" = "yes" ; then
6564e865b97fSChen Gang  echo "HAVE_DRM_H=y" >> $config_host_mak
6565e865b97fSChen Gangfi
65666b39b063SEric Blakeif test "$have_broken_size_max" = "yes" ; then
65676b39b063SEric Blake    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
65686b39b063SEric Blakefi
65699df8b20dSThomas Huthif test "$have_openpty" = "yes" ; then
65709df8b20dSThomas Huth    echo "HAVE_OPENPTY=y" >> $config_host_mak
65719df8b20dSThomas Huthfi
65722a4b472cSDavid CARLIERif test "$have_sys_signal_h" = "yes" ; then
65732a4b472cSDavid CARLIER    echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
65742a4b472cSDavid CARLIERfi
6575277abf15SJan Vesely
6576277abf15SJan Vesely# Work around a system header bug with some kernel/XFS header
6577277abf15SJan Vesely# versions where they both try to define 'struct fsxattr':
6578277abf15SJan Vesely# xfs headers will not try to redefine structs from linux headers
6579277abf15SJan Vesely# if this macro is set.
6580277abf15SJan Veselyif test "$have_fsxattr" = "yes" ; then
6581277abf15SJan Vesely    echo "HAVE_FSXATTR=y" >> $config_host_mak
6582277abf15SJan Veselyfi
65831efad060SFam Zhengif test "$have_copy_file_range" = "yes" ; then
65841efad060SFam Zheng    echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
65851efad060SFam Zhengfi
6586bbbf9bfbSStefan Weilif test "$vte" = "yes" ; then
6587bbbf9bfbSStefan Weil  echo "CONFIG_VTE=y" >> $config_host_mak
6588a4ccabcfSAnthony Liguori  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6589e0fb129cSGerd Hoffmann  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6590a4ccabcfSAnthony Liguorifi
65919d9e1521SGerd Hoffmannif test "$virglrenderer" = "yes" ; then
65929d9e1521SGerd Hoffmann  echo "CONFIG_VIRGL=y" >> $config_host_mak
65939d9e1521SGerd Hoffmann  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
65949d9e1521SGerd Hoffmann  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
65959d9e1521SGerd Hoffmannfi
65961badb709SPaolo Bonziniif test "$xen" = "enabled" ; then
65976dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6598d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6599582ea95fSMarc-André Lureau  echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
6600582ea95fSMarc-André Lureau  echo "XEN_LIBS=$xen_libs" >> $config_host_mak
6601e37630caSaliguorifi
66025c6c3a6cSChristoph Hellwigif test "$linux_aio" = "yes" ; then
66035c6c3a6cSChristoph Hellwig  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
66045c6c3a6cSChristoph Hellwigfi
6605c10dd856SAarushi Mehtaif test "$linux_io_uring" = "yes" ; then
6606c10dd856SAarushi Mehta  echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
6607c10dd856SAarushi Mehta  echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
6608c10dd856SAarushi Mehta  echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
6609c10dd856SAarushi Mehtafi
6610758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" = "yes" ; then
6611758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_ATTR=y" >> $config_host_mak
6612ec0d5893SMarc-André Lureau  echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
6613758e8e38SVenkateswararao Jujjuri (JV)fi
66144f26f2b6SAvi Kivityif test "$libattr" = "yes" ; then
66154f26f2b6SAvi Kivity  echo "CONFIG_LIBATTR=y" >> $config_host_mak
66164f26f2b6SAvi Kivityfi
6617983eef5aSMeador Ingeif test "$virtfs" = "yes" ; then
6618758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_VIRTFS=y" >> $config_host_mak
6619758e8e38SVenkateswararao Jujjuri (JV)fi
66205e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
66215e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
66225e9be92dSNicholas Bellingerfi
6623af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then
6624af3bba76SPaolo Bonzini  echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6625af3bba76SPaolo Bonzinifi
6626af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then
662756f41de7SPaolo Bonzini  echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
662803ce5744SNikolay Nikolaevfi
6629108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then
6630108a6481SCindy Lu  echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
6631108a6481SCindy Lufi
6632042cea27SGongleiif test "$vhost_crypto" = "yes" ; then
6633042cea27SGonglei  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6634042cea27SGongleifi
6635fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then
6636fc0b9b0eSStefan Hajnoczi  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
66375fe97d88SStefano Garzarella  if test "$vhost_user" = "yes" ; then
66385fe97d88SStefano Garzarella    echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
66395fe97d88SStefano Garzarella  fi
6640fc0b9b0eSStefan Hajnoczifi
6641299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then
6642299e6f19SPaolo Bonzini  echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6643299e6f19SPaolo Bonzinifi
6644e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then
6645e6a74868SMarc-André Lureau  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6646e6a74868SMarc-André Lureaufi
6647108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then
6648108a6481SCindy Lu  echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
6649108a6481SCindy Lufi
665098fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then
665198fc1adaSDr. David Alan Gilbert  echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
665298fc1adaSDr. David Alan Gilbertfi
665377755340Sthsif test "$blobs" = "yes" ; then
665498ec69acSJuan Quintela  echo "INSTALL_BLOBS=yes" >> $config_host_mak
665577755340Sthsfi
6656bf9298b9Saliguoriif test "$iovec" = "yes" ; then
66572358a494SJuan Quintela  echo "CONFIG_IOVEC=y" >> $config_host_mak
6658bf9298b9Saliguorifi
6659ceb42de8Saliguoriif test "$preadv" = "yes" ; then
66602358a494SJuan Quintela  echo "CONFIG_PREADV=y" >> $config_host_mak
6661ceb42de8Saliguorifi
6662e3971d61SPhilippe Mathieu-Daudéif test "$fdt" != "no" ; then
66633f0855b1SJuan Quintela  echo "CONFIG_FDT=y" >> $config_host_mak
66644a96337dSPaolo Bonzini  echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak
66654a96337dSPaolo Bonzini  echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak
6666f652e6afSaurel32fi
6667a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then
6668a40161cbSPaolo Bonzini  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6669a40161cbSPaolo Bonzinifi
6670dcc38d1cSMarcelo Tosattiif test "$signalfd" = "yes" ; then
6671dcc38d1cSMarcelo Tosatti  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6672dcc38d1cSMarcelo Tosattifi
6673d339d766SRichard W.M. Jonesif test "$optreset" = "yes" ; then
6674d339d766SRichard W.M. Jones  echo "HAVE_OPTRESET=y" >> $config_host_mak
6675d339d766SRichard W.M. Jonesfi
66761badb709SPaolo Bonziniif test "$tcg" = "enabled"; then
66779195b2c2SStefan Weil  if test "$tcg_interpreter" = "yes" ; then
66789195b2c2SStefan Weil    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
66799195b2c2SStefan Weil  fi
6680b3f6ea7eSPaolo Bonzinifi
66815f6b9e8fSBlue Swirlif test "$fdatasync" = "yes" ; then
66825f6b9e8fSBlue Swirl  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
66835f6b9e8fSBlue Swirlfi
6684e78815a5SAndreas Färberif test "$madvise" = "yes" ; then
6685e78815a5SAndreas Färber  echo "CONFIG_MADVISE=y" >> $config_host_mak
6686e78815a5SAndreas Färberfi
6687e78815a5SAndreas Färberif test "$posix_madvise" = "yes" ; then
6688e78815a5SAndreas Färber  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6689e78815a5SAndreas Färberfi
66909bc5a719SAndreas Gustafssonif test "$posix_memalign" = "yes" ; then
66919bc5a719SAndreas Gustafsson  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
66929bc5a719SAndreas Gustafssonfi
6693cd4ec0b4SGerd Hoffmannif test "$spice" = "yes" ; then
6694cd4ec0b4SGerd Hoffmann  echo "CONFIG_SPICE=y" >> $config_host_mak
66952634733cSPaolo Bonzini  echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
66962634733cSPaolo Bonzini  echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
6697cd4ec0b4SGerd Hoffmannfi
6698cd4ec0b4SGerd Hoffmann
66997b02f544SMarc-André Lureauif test "$smartcard" = "yes" ; then
67007b02f544SMarc-André Lureau  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
67017b62bf5aSFam Zheng  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
67027b62bf5aSFam Zheng  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6703111a38b0SRobert Relyeafi
6704111a38b0SRobert Relyea
67052b2325ffSGerd Hoffmannif test "$libusb" = "yes" ; then
67062b2325ffSGerd Hoffmann  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6707b878b652SFam Zheng  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6708b878b652SFam Zheng  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
67092b2325ffSGerd Hoffmannfi
67102b2325ffSGerd Hoffmann
671169354a83SHans de Goedeif test "$usb_redir" = "yes" ; then
671269354a83SHans de Goede  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6713cc7923fcSFam Zheng  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6714cc7923fcSFam Zheng  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
671569354a83SHans de Goedefi
671669354a83SHans de Goede
6717da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
6718da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
6719de2d3005SPaolo Bonzini  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
6720da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6721014cb152SGerd Hoffmann  if test "$opengl_dmabuf" = "yes" ; then
6722014cb152SGerd Hoffmann    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6723014cb152SGerd Hoffmann  fi
672420ff075bSMichael Wallefi
672520ff075bSMichael Walle
6726d52c454aSMarc-André Lureauif test "$gbm" = "yes" ; then
6727d52c454aSMarc-André Lureau    echo "CONFIG_GBM=y" >> $config_host_mak
6728d52c454aSMarc-André Lureau    echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6729d52c454aSMarc-André Lureau    echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6730d52c454aSMarc-André Lureaufi
6731d52c454aSMarc-André Lureau
6732d52c454aSMarc-André Lureau
673399f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then
673499f2dbd3SLiang Li  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
673599f2dbd3SLiang Lifi
673699f2dbd3SLiang Li
67376b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then
67386b8cd447SRobert Hoo  echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
67396b8cd447SRobert Hoofi
67406b8cd447SRobert Hoo
6741607dacd0Sqiaonuohanif test "$lzo" = "yes" ; then
6742607dacd0Sqiaonuohan  echo "CONFIG_LZO=y" >> $config_host_mak
6743708eab42SMarc-André Lureau  echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
6744607dacd0Sqiaonuohanfi
6745607dacd0Sqiaonuohan
6746607dacd0Sqiaonuohanif test "$snappy" = "yes" ; then
6747607dacd0Sqiaonuohan  echo "CONFIG_SNAPPY=y" >> $config_host_mak
6748708eab42SMarc-André Lureau  echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
6749607dacd0Sqiaonuohanfi
6750607dacd0Sqiaonuohan
67516b383c08SPeter Wuif test "$bzip2" = "yes" ; then
67526b383c08SPeter Wu  echo "CONFIG_BZIP2=y" >> $config_host_mak
67536b383c08SPeter Wu  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
67546b383c08SPeter Wufi
67556b383c08SPeter Wu
675683bc1f97SJulio Faraccoif test "$lzfse" = "yes" ; then
675783bc1f97SJulio Faracco  echo "CONFIG_LZFSE=y" >> $config_host_mak
675883bc1f97SJulio Faracco  echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
675983bc1f97SJulio Faraccofi
676083bc1f97SJulio Faracco
67613a678481SJuan Quintelaif test "$zstd" = "yes" ; then
67623a678481SJuan Quintela  echo "CONFIG_ZSTD=y" >> $config_host_mak
67635e5733e5SMarc-André Lureau  echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
67645e5733e5SMarc-André Lureau  echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
67653a678481SJuan Quintelafi
67663a678481SJuan Quintela
6767c589b249SRonnie Sahlbergif test "$libiscsi" = "yes" ; then
6768484e2cc7SPaolo Bonzini  echo "CONFIG_LIBISCSI=y" >> $config_host_mak
67696ebc91e5SFam Zheng  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
67706ebc91e5SFam Zheng  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6771c589b249SRonnie Sahlbergfi
6772c589b249SRonnie Sahlberg
67736542aa9cSPeter Lievenif test "$libnfs" = "yes" ; then
6774484e2cc7SPaolo Bonzini  echo "CONFIG_LIBNFS=y" >> $config_host_mak
67754be4879fSColin Lord  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
67766542aa9cSPeter Lievenfi
67776542aa9cSPeter Lieven
6778f794573eSEduardo Otuboif test "$seccomp" = "yes"; then
6779f794573eSEduardo Otubo  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6780c3883e1fSFam Zheng  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6781c3883e1fSFam Zheng  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6782f794573eSEduardo Otubofi
6783f794573eSEduardo Otubo
678483fb7adfSbellard# XXX: suppress that
67857d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
67862358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
67877d3505c5Sbellardfi
67887d3505c5Sbellard
67894d9310f4SDaniel P. Berrangeif test "$localtime_r" = "yes" ; then
67904d9310f4SDaniel P. Berrange  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
67914d9310f4SDaniel P. Berrangefi
67923556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
67933556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
67943556c233SPaolo Bonzinifi
6795f27aaf4bSChristian Brunnerif test "$rbd" = "yes" ; then
6796484e2cc7SPaolo Bonzini  echo "CONFIG_RBD=y" >> $config_host_mak
67976ebc91e5SFam Zheng  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6798f27aaf4bSChristian Brunnerfi
679920ff6c80SAnthony Liguori
68007c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
680170c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
680270c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
680370c60c08SStefan Hajnoczielse
680470c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
680570c60c08SStefan Hajnoczifi
6806d0e2fce5SAneesh Kumar K.V
68077d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then
68087d992e4dSPeter Lieven  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
68097d992e4dSPeter Lievenfi
68107d992e4dSPeter Lieven
6811f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then
6812f0d92b56SLongpeng(Mike)  echo "CONFIG_AF_ALG=y" >> $config_host_mak
6813f0d92b56SLongpeng(Mike)fi
6814f0d92b56SLongpeng(Mike)
6815d2042378SAneesh Kumar K.Vif test "$open_by_handle_at" = "yes" ; then
6816d2042378SAneesh Kumar K.V  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6817d2042378SAneesh Kumar K.Vfi
6818d2042378SAneesh Kumar K.V
6819e06a765eSHarsh Prateek Boraif test "$linux_magic_h" = "yes" ; then
6820e06a765eSHarsh Prateek Bora  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6821e06a765eSHarsh Prateek Borafi
6822e06a765eSHarsh Prateek Bora
68233f4349dcSKevin Wolfif test "$valgrind_h" = "yes" ; then
68243f4349dcSKevin Wolf  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
68253f4349dcSKevin Wolffi
68263f4349dcSKevin Wolf
6827d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
6828d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6829d83414e1SMarc-André Lureaufi
6830d83414e1SMarc-André Lureau
68310aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
68320aebab04SLingfeng Yang    echo "CONFIG_TSAN=y" >> $config_host_mak
68330aebab04SLingfeng Yangfi
68340aebab04SLingfeng Yang
68358ab1bf12SLuiz Capitulinoif test "$has_environ" = "yes" ; then
68368ab1bf12SLuiz Capitulino  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
68378ab1bf12SLuiz Capitulinofi
68388ab1bf12SLuiz Capitulino
683976a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
684076a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
684176a347e1SRichard Hendersonfi
684276a347e1SRichard Henderson
6843f540166bSRichard Hendersonif test "$int128" = "yes" ; then
6844f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
6845f540166bSRichard Hendersonfi
6846f540166bSRichard Henderson
68477ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then
68487ebee43eSRichard Henderson  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
68497ebee43eSRichard Hendersonfi
68507ebee43eSRichard Henderson
6851e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then
6852e6cd4bb5SRichard Henderson  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6853e6cd4bb5SRichard Hendersonfi
6854e6cd4bb5SRichard Henderson
6855df79b996SRichard Hendersonif test "$atomic64" = "yes" ; then
6856df79b996SRichard Henderson  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6857df79b996SRichard Hendersonfi
6858df79b996SRichard Henderson
6859db8aaae8SRichard Hendersonif test "$attralias" = "yes" ; then
6860db8aaae8SRichard Henderson  echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
6861db8aaae8SRichard Hendersonfi
6862db8aaae8SRichard Henderson
68631e6e9acaSRichard Hendersonif test "$getauxval" = "yes" ; then
68641e6e9acaSRichard Henderson  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
68651e6e9acaSRichard Hendersonfi
68661e6e9acaSRichard Henderson
6867eb100396SBharata B Raoif test "$glusterfs" = "yes" ; then
6868484e2cc7SPaolo Bonzini  echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
68696ebc91e5SFam Zheng  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
68706ebc91e5SFam Zheng  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6871eb100396SBharata B Raofi
6872eb100396SBharata B Rao
6873d85fa9ebSJeff Codyif test "$glusterfs_xlator_opt" = "yes" ; then
6874d85fa9ebSJeff Cody  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6875d85fa9ebSJeff Codyfi
6876d85fa9ebSJeff Cody
68770c14fb47SBharata B Raoif test "$glusterfs_discard" = "yes" ; then
68780c14fb47SBharata B Rao  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
68790c14fb47SBharata B Raofi
68800c14fb47SBharata B Rao
6881df3a429aSNiels de Vosif test "$glusterfs_fallocate" = "yes" ; then
6882df3a429aSNiels de Vos  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6883df3a429aSNiels de Vosfi
6884df3a429aSNiels de Vos
68857c815372SBharata B Raoif test "$glusterfs_zerofill" = "yes" ; then
68867c815372SBharata B Rao  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
68877c815372SBharata B Raofi
68887c815372SBharata B Rao
6889e014dbe7SPrasanna Kumar Kaleverif test "$glusterfs_ftruncate_has_stat" = "yes" ; then
6890e014dbe7SPrasanna Kumar Kalever  echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
6891e014dbe7SPrasanna Kumar Kaleverfi
6892e014dbe7SPrasanna Kumar Kalever
68930e3b891fSNiels de Vosif test "$glusterfs_iocb_has_stat" = "yes" ; then
68940e3b891fSNiels de Vos  echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
68950e3b891fSNiels de Vosfi
68960e3b891fSNiels de Vos
6897b10d49d7SPino Toscanoif test "$libssh" = "yes" ; then
6898484e2cc7SPaolo Bonzini  echo "CONFIG_LIBSSH=y" >> $config_host_mak
6899b10d49d7SPino Toscano  echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
6900b10d49d7SPino Toscano  echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
69010a12ec87SRichard W.M. Jonesfi
69020a12ec87SRichard W.M. Jones
6903ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then
6904ed1701c6SDr. David Alan Gilbert  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6905ed1701c6SDr. David Alan Gilbertfi
6906ed1701c6SDr. David Alan Gilbert
69073b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
69083cae16dbSPaolo Bonzini  echo 'CONFIG_TPM=y' >> $config_host_mak
69093b8acc11SPaolo Bonzinifi
69103b8acc11SPaolo Bonzini
69115b808275SLluís Vilanovaecho "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
69125b808275SLluís Vilanovaif have_backend "nop"; then
69136d8a764eSLluís  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
691422890ab5SPrerna Saxenafi
69155b808275SLluís Vilanovaif have_backend "simple"; then
69166d8a764eSLluís  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
69176d8a764eSLluís  # Set the appropriate trace file.
6918953ffe0fSAndreas Färber  trace_file="\"$trace_file-\" FMT_pid"
69199410b56cSPrerna Saxenafi
6920ed7f5f1dSPaolo Bonziniif have_backend "log"; then
6921ed7f5f1dSPaolo Bonzini  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
69226d8a764eSLluísfi
69235b808275SLluís Vilanovaif have_backend "ust"; then
69246d8a764eSLluís  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6925a81df1b6SPaolo Bonzini  echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6926a81df1b6SPaolo Bonzini  echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
69276d8a764eSLluísfi
69285b808275SLluís Vilanovaif have_backend "dtrace"; then
69296d8a764eSLluís  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
69306d8a764eSLluís  if test "$trace_backend_stap" = "yes" ; then
69316d8a764eSLluís    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
69326d8a764eSLluís  fi
6933c276b17dSDaniel P. Berrangefi
69345b808275SLluís Vilanovaif have_backend "ftrace"; then
6935781e9545SEiichi Tsukata  if test "$linux" = "yes" ; then
6936781e9545SEiichi Tsukata    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6937781e9545SEiichi Tsukata  else
693821684af0SStewart Smith    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6939781e9545SEiichi Tsukata  fi
6940781e9545SEiichi Tsukatafi
69410a852417SPaul Durrantif have_backend "syslog"; then
69420a852417SPaul Durrant  if test "$posix_syslog" = "yes" ; then
69430a852417SPaul Durrant    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
69440a852417SPaul Durrant  else
69450a852417SPaul Durrant    feature_not_found "syslog(trace backend)" "syslog not available"
69460a852417SPaul Durrant  fi
69470a852417SPaul Durrantfi
69489410b56cSPrerna Saxenaecho "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
69499410b56cSPrerna Saxena
69502da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
69512da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
6952392fb643SFam Zheng  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
69532da776dbSMichael R. Hinesfi
69542da776dbSMichael R. Hines
695521ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then
695621ab34c9SMarcel Apfelbaum  echo "CONFIG_PVRDMA=y" >> $config_host_mak
695721ab34c9SMarcel Apfelbaumfi
695821ab34c9SMarcel Apfelbaum
6959575b22b1SLaurent Vivierif test "$have_rtnetlink" = "yes" ; then
6960575b22b1SLaurent Vivier  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6961575b22b1SLaurent Vivierfi
6962575b22b1SLaurent Vivier
6963ed279a06SKlim Kireevif test "$libxml2" = "yes" ; then
6964ed279a06SKlim Kireev  echo "CONFIG_LIBXML2=y" >> $config_host_mak
6965ed279a06SKlim Kireev  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6966ed279a06SKlim Kireev  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6967ed279a06SKlim Kireevfi
6968ed279a06SKlim Kireev
6969a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then
6970a6b1d4c0SChanglong Xie  echo "CONFIG_REPLICATION=y" >> $config_host_mak
6971a6b1d4c0SChanglong Xiefi
6972a6b1d4c0SChanglong Xie
69736a02c806SStefan Hajnocziif test "$have_af_vsock" = "yes" ; then
69746a02c806SStefan Hajnoczi  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
69756a02c806SStefan Hajnoczifi
69766a02c806SStefan Hajnoczi
69774d04351fSChristopher Covingtonif test "$have_sysmacros" = "yes" ; then
69784d04351fSChristopher Covington  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
69794d04351fSChristopher Covingtonfi
69804d04351fSChristopher Covington
698149e00a18SAndreas Grapentinif test "$have_static_assert" = "yes" ; then
698249e00a18SAndreas Grapentin  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
698349e00a18SAndreas Grapentinfi
698449e00a18SAndreas Grapentin
6985e674605fSTomáš Golembiovskýif test "$have_utmpx" = "yes" ; then
6986e674605fSTomáš Golembiovský  echo "HAVE_UTMPX=y" >> $config_host_mak
6987e674605fSTomáš Golembiovskýfi
6988db1ed1abSRichard Hendersonif test "$have_getrandom" = "yes" ; then
6989db1ed1abSRichard Henderson  echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6990db1ed1abSRichard Hendersonfi
6991e0580342SKamil Rytarowskiif test "$ivshmem" = "yes" ; then
6992e0580342SKamil Rytarowski  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6993e0580342SKamil Rytarowskifi
6994e219c499SRichard Hendersonif test "$capstone" != "no" ; then
69958ca80760SRichard Henderson  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6996c9322ab5SMarc-André Lureau  echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak
6997c9322ab5SMarc-André Lureau  echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak
69988ca80760SRichard Hendersonfi
6999ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then
7000ba59fb77SPaolo Bonzini  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7001ba59fb77SPaolo Bonzinifi
7002e0580342SKamil Rytarowski
70035c312079SDr. David Alan Gilbert# Hold two types of flag:
70045c312079SDr. David Alan Gilbert#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
70055c312079SDr. David Alan Gilbert#                                     a thread we have a handle to
7006479a5747SRoman Bolshakov#   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
70075c312079SDr. David Alan Gilbert#                                     platform
7008479a5747SRoman Bolshakovif test "$pthread_setname_np_w_tid" = "yes" ; then
70095c312079SDr. David Alan Gilbert  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7010479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7011479a5747SRoman Bolshakovelif test "$pthread_setname_np_wo_tid" = "yes" ; then
7012479a5747SRoman Bolshakov  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7013479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
70145c312079SDr. David Alan Gilbertfi
70155c312079SDr. David Alan Gilbert
701617824406SJunyan Heif test "$libpmem" = "yes" ; then
701717824406SJunyan He  echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7018c9322ab5SMarc-André Lureau  echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
7019c9322ab5SMarc-André Lureau  echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
702017824406SJunyan Hefi
702117824406SJunyan He
702221b2eca6SJingqi Liuif test "$libdaxctl" = "yes" ; then
702321b2eca6SJingqi Liu  echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
7024c7c91a74SBruce Rogers  echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
702521b2eca6SJingqi Liufi
702621b2eca6SJingqi Liu
70272f740136SJeff Codyif test "$bochs" = "yes" ; then
70282f740136SJeff Cody  echo "CONFIG_BOCHS=y" >> $config_host_mak
70292f740136SJeff Codyfi
70302f740136SJeff Codyif test "$cloop" = "yes" ; then
70312f740136SJeff Cody  echo "CONFIG_CLOOP=y" >> $config_host_mak
70322f740136SJeff Codyfi
70332f740136SJeff Codyif test "$dmg" = "yes" ; then
70342f740136SJeff Cody  echo "CONFIG_DMG=y" >> $config_host_mak
70352f740136SJeff Codyfi
70362f740136SJeff Codyif test "$qcow1" = "yes" ; then
70372f740136SJeff Cody  echo "CONFIG_QCOW1=y" >> $config_host_mak
70382f740136SJeff Codyfi
70392f740136SJeff Codyif test "$vdi" = "yes" ; then
70402f740136SJeff Cody  echo "CONFIG_VDI=y" >> $config_host_mak
70412f740136SJeff Codyfi
70422f740136SJeff Codyif test "$vvfat" = "yes" ; then
70432f740136SJeff Cody  echo "CONFIG_VVFAT=y" >> $config_host_mak
70442f740136SJeff Codyfi
70452f740136SJeff Codyif test "$qed" = "yes" ; then
70462f740136SJeff Cody  echo "CONFIG_QED=y" >> $config_host_mak
70472f740136SJeff Codyfi
70482f740136SJeff Codyif test "$parallels" = "yes" ; then
70492f740136SJeff Cody  echo "CONFIG_PARALLELS=y" >> $config_host_mak
70502f740136SJeff Codyfi
70512f740136SJeff Codyif test "$sheepdog" = "yes" ; then
70522f740136SJeff Cody  echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
70532f740136SJeff Codyfi
7054c9c8b88fSDavid CARLIERif test "$pty_h" = "yes" ; then
7055c9c8b88fSDavid CARLIER  echo "HAVE_PTY_H=y" >> $config_host_mak
7056c9c8b88fSDavid CARLIERfi
7057195588ccSDavid CARLIERif test "$have_mlockall" = "yes" ; then
7058195588ccSDavid CARLIER  echo "HAVE_MLOCKALL=y" >> $config_host_mak
7059195588ccSDavid CARLIERfi
7060adc28027SAlexander Bulekovif test "$fuzzing" = "yes" ; then
706154c9e41dSAlexander Bulekov  # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
706254c9e41dSAlexander Bulekov  # needed CFLAGS have already been provided
706354c9e41dSAlexander Bulekov  if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
7064086d5f75SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
706554c9e41dSAlexander Bulekov    FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
706654c9e41dSAlexander Bulekov  else
706754c9e41dSAlexander Bulekov    FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
706854c9e41dSAlexander Bulekov  fi
7069adc28027SAlexander Bulekovfi
70702f740136SJeff Cody
707140e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
707240e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
707326fffe29SEmilio G. Cota    # Copy the export object list to the build dir
707426fffe29SEmilio G. Cota    if test "$ld_dynamic_list" = "yes" ; then
707526fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
707626fffe29SEmilio G. Cota	ld_symbols=qemu-plugins-ld.symbols
707726fffe29SEmilio G. Cota	cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
707826fffe29SEmilio G. Cota    elif test "$ld_exported_symbols_list" = "yes" ; then
707926fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
708026fffe29SEmilio G. Cota	ld64_symbols=qemu-plugins-ld64.symbols
708126fffe29SEmilio G. Cota	echo "# Automatically generated by configure - do not modify" > $ld64_symbols
708226fffe29SEmilio G. Cota	grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
708326fffe29SEmilio G. Cota	    sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
708426fffe29SEmilio G. Cota    else
708526fffe29SEmilio G. Cota	error_exit \
708626fffe29SEmilio G. Cota	    "If \$plugins=yes, either \$ld_dynamic_list or " \
708726fffe29SEmilio G. Cota	    "\$ld_exported_symbols_list should have been set to 'yes'."
708826fffe29SEmilio G. Cota    fi
708940e8c6f4SAlex Bennéefi
709040e8c6f4SAlex Bennée
7091f48e590aSAlex Bennéeif test -n "$gdb_bin" ; then
7092f48e590aSAlex Bennée    echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7093f48e590aSAlex Bennéefi
7094f48e590aSAlex Bennée
709554e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then
709654e7aac0SAlexey Krasikov  echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
709754e7aac0SAlexey Krasikovfi
709854e7aac0SAlexey Krasikov
70995b5e3037SPaolo Bonziniif test "$tcg_interpreter" = "yes"; then
710025211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES"
71015b5e3037SPaolo Bonzinielif test "$ARCH" = "sparc64" ; then
710225211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES"
71035b5e3037SPaolo Bonzinielif test "$ARCH" = "s390x" ; then
710425211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES"
7105e633a5c6SEric Blakeelif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
710625211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES"
710740d964b5SRichard Hendersonelif test "$ARCH" = "ppc64" ; then
710825211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES"
7109e633a5c6SEric Blakeelif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
711025211446SPaolo Bonzini  QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES"
71115b5e3037SPaolo Bonzinielse
711225211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES"
71135b5e3037SPaolo Bonzinifi
71145b5e3037SPaolo Bonzini
711598ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
7116804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
7117c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
71182eb054c2SPeter Maydellecho "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
711939d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
7120a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
7121804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
7122a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
7123859aef02SPaolo Bonzini  echo "CONFIG_IASL=$iasl" >> $config_host_mak
7124a31a8642SMichael S. Tsirkinfi
712583f73fceSTomoki Sekiyamaecho "CXX=$cxx" >> $config_host_mak
71263c4a4d0dSPeter Maydellecho "OBJCC=$objcc" >> $config_host_mak
7127804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
712845d285abSPeter Maydellecho "ARFLAGS=$ARFLAGS" >> $config_host_mak
7129cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak
71305f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak
71313dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
7132804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
7133804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
71349f81aeb5SAlistair Francisecho "RANLIB=$ranlib" >> $config_host_mak
71354852ee95SStefan Weilecho "NM=$nm" >> $config_host_mak
7136daa79d9aSAlex Bennéeecho "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
71379fe6de94SBlue Swirlecho "WINDRES=$windres" >> $config_host_mak
7138e2a2ed06SJuan Quintelaecho "CFLAGS=$CFLAGS" >> $config_host_mak
713946eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7140a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
714111cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7142f9728943SPaolo Bonziniecho "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7143a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
7144a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak
7145e39f0062SPaolo Bonziniif test "$sparse" = "yes" ; then
7146968b4db3SPaolo Bonzini  echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7147e39f0062SPaolo Bonzinifi
71488a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7149db5adeaaSPaolo Bonziniecho "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7150e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7151409437e1SDaniel P. Berrangeecho "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7152804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
7153484e2cc7SPaolo Bonziniecho "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
7154f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak
715590246037SDaniel P. Berrangeecho "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
715690246037SDaniel P. Berrangeecho "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
71571d728c39SBlue Swirlif test "$gcov" = "yes" ; then
71581d728c39SBlue Swirl  echo "CONFIG_GCOV=y" >> $config_host_mak
71591d728c39SBlue Swirlfi
7160804edf29SJuan Quintela
7161adc28027SAlexander Bulekovif test "$fuzzing" != "no"; then
7162adc28027SAlexander Bulekov    echo "CONFIG_FUZZ=y" >> $config_host_mak
7163adc28027SAlexander Bulekovfi
716454c9e41dSAlexander Bulekovecho "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
71653efac6ebSTomáš Golembiovský
716605dfa22bSPhilippe Mathieu-Daudéif test "$edk2_blobs" = "yes" ; then
716705dfa22bSPhilippe Mathieu-Daudé  echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
716805dfa22bSPhilippe Mathieu-Daudéfi
716905dfa22bSPhilippe Mathieu-Daudé
7170b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then
7171b767d257SMarek Marczykowski-Górecki  echo "CONFIG_RNG_NONE=y" >> $config_host_mak
7172b767d257SMarek Marczykowski-Góreckifi
7173b767d257SMarek Marczykowski-Górecki
71746efd7517SPeter Maydell# use included Linux headers
71756efd7517SPeter Maydellif test "$linux" = "yes" ; then
7176a307beb6SAndreas Färber  mkdir -p linux-headers
71776efd7517SPeter Maydell  case "$cpu" in
7178c72b26ecSRichard Henderson  i386|x86_64|x32)
717908312a63SPeter Maydell    linux_arch=x86
71806efd7517SPeter Maydell    ;;
7181f8378accSRichard Henderson  ppc|ppc64|ppc64le)
718208312a63SPeter Maydell    linux_arch=powerpc
71836efd7517SPeter Maydell    ;;
71846efd7517SPeter Maydell  s390x)
718508312a63SPeter Maydell    linux_arch=s390
718608312a63SPeter Maydell    ;;
71871f080313SClaudio Fontana  aarch64)
71881f080313SClaudio Fontana    linux_arch=arm64
71891f080313SClaudio Fontana    ;;
7190222e7d11SSanjay Lal  mips64)
7191222e7d11SSanjay Lal    linux_arch=mips
7192222e7d11SSanjay Lal    ;;
719308312a63SPeter Maydell  *)
719408312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
719508312a63SPeter Maydell    linux_arch="$cpu"
71966efd7517SPeter Maydell    ;;
71976efd7517SPeter Maydell  esac
719808312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
719908312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
720008312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
720108312a63SPeter Maydell    fi
72026efd7517SPeter Maydellfi
72036efd7517SPeter Maydell
720497a847bcSbellardfor target in $target_list; do
720597a847bcSbellard    target_dir="$target"
720689138857SStefan Weil    target_name=$(echo $target | cut -d '-' -f 1)
720797a847bcSbellard    mkdir -p $target_dir
7208fdb75aefSPaolo Bonzini    case $target in
7209fdb75aefSPaolo Bonzini        *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
7210fdb75aefSPaolo Bonzini        *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
72112408a527Saurel32    esac
721256aebc89Spbrookdone
72137d13299dSbellard
7214e3971d61SPhilippe Mathieu-Daudéif [ "$fdt" = "git" ]; then
7215859aef02SPaolo Bonzini  subdirs="$subdirs dtc"
7216a540f158SPeter Crosthwaitefi
7217e219c499SRichard Hendersonif [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7218859aef02SPaolo Bonzini  subdirs="$subdirs capstone"
7219e219c499SRichard Hendersonfi
7220765686d6SPaolo Bonziniecho "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
7221fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then
7222fdb75aefSPaolo Bonzini  echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
7223fdb75aefSPaolo Bonzinifi
7224859aef02SPaolo Bonziniecho "SUBDIRS=$subdirs" >> $config_host_mak
7225e219c499SRichard Hendersonif test -n "$LIBCAPSTONE"; then
7226e219c499SRichard Henderson  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7227e219c499SRichard Hendersonfi
7228a540f158SPeter Crosthwaite
7229a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
7230a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
7231ab318051SMarc-André Lureau  echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
7232a99d57bbSWanlong Gaofi
7233a99d57bbSWanlong Gao
7234fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
7235fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
7236fd0e6053SJohn Snowfi
7237fd0e6053SJohn Snow
72381e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
72391e4f6065SDaniele Buono  echo "CONFIG_SAFESTACK=y" >> $config_host_mak
72401e4f6065SDaniele Buonofi
72411e4f6065SDaniele Buono
7242e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now.
7243e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree;
7244e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree
7245e29e5c6eSPeter Maydell# (these can be both files and directories).
7246e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This
7247e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is
7248e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun
7249e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and
7250e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own
7251e29e5c6eSPeter Maydell# directory and symlink the directory instead.
725209db9b9dSGerd Hoffmann# UNLINK is used to remove symlinks from older development versions
725309db9b9dSGerd Hoffmann# that might get into the way when doing "git update" without doing
725409db9b9dSGerd Hoffmann# a "make distclean" in between.
72551cf4323eSThomas HuthDIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
72561cf4323eSThomas HuthDIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
7257b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi"
7258744a928cSAlexey KardashevskiyDIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
72598db2a4fdSGerd HoffmannDIRS="$DIRS roms/seabios"
7260c17a386bSAlex BennéeDIRS="$DIRS contrib/plugins/"
72612038f8c8SPaolo BonziniLINKS="Makefile"
7262e8f3bd71SMarc-André LureauLINKS="$LINKS tests/tcg/lm32/Makefile"
72633941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target"
7264ddcf607fSGerd HoffmannLINKS="$LINKS pc-bios/optionrom/Makefile"
7265e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile"
72668db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile"
7267e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp"
7268e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
726939950353SPeter MaydellLINKS="$LINKS tests/acceptance tests/data"
727039950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check"
72718f8fd9edSCleber RosaLINKS="$LINKS python"
7272c17a386bSAlex BennéeLINKS="$LINKS contrib/plugins/Makefile "
727309db9b9dSGerd HoffmannUNLINK="pc-bios/keymaps"
7274753d11f2SRichard Hendersonfor bios_file in \
7275753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
72763a631b8eSBin Meng    $source_path/pc-bios/*.elf \
7277225a9ab8SAlexey Kardashevskiy    $source_path/pc-bios/*.lid \
7278753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
7279753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
7280e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
7281753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
72824e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
728326ce90fdSLaszlo Ersek    $source_path/pc-bios/edk2-*.fd.bz2 \
7284753d11f2SRichard Henderson    $source_path/pc-bios/palcode-*
7285753d11f2SRichard Hendersondo
7286e29e5c6eSPeter Maydell    LINKS="$LINKS pc-bios/$(basename $bios_file)"
72877ea78b74SJan Kiszkadone
7288d1807a4fSPaolo Bonzinimkdir -p $DIRS
7289e29e5c6eSPeter Maydellfor f in $LINKS ; do
72900f4d8894SPaolo Bonzini    if [ -e "$source_path/$f" ]; then
7291f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
7292f9245e10SPeter Maydell    fi
72937d13299dSbellarddone
729409db9b9dSGerd Hoffmannfor f in $UNLINK ; do
729509db9b9dSGerd Hoffmann    if [ -L "$f" ]; then
729609db9b9dSGerd Hoffmann        rm -f "$f"
729709db9b9dSGerd Hoffmann    fi
729809db9b9dSGerd Hoffmanndone
72991ad2134fSPaul Brook
73002038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do
73012038f8c8SPaolo Bonzini  export $i
73022038f8c8SPaolo Bonzinidone
7303afc3a8f9SAlex Bennéeexport target_list source_path use_containers
73042038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh)
73052038f8c8SPaolo Bonzini
7306c34ebfdcSAnthony Liguori# temporary config to build submodules
73078db2a4fdSGerd Hoffmannfor rom in seabios; do
7308c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
730937116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
7310c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7311cdbd727cSRichard Henderson    echo "AS=$as" >> $config_mak
73125f6f0e27SRichard Henderson    echo "CCAS=$ccas" >> $config_mak
7313c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
7314c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
73153dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
7316c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
7317a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
7318c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
73199f81aeb5SAlistair Francis    echo "RANLIB=$ranlib" >> $config_mak
7320c34ebfdcSAnthony Liguoridone
7321c34ebfdcSAnthony Liguori
732276c7560aSMax Reitz# set up qemu-iotests in this build directory
732376c7560aSMax Reitziotests_common_env="tests/qemu-iotests/common.env"
732476c7560aSMax Reitz
732576c7560aSMax Reitzecho "# Automatically generated by configure - do not modify" > "$iotests_common_env"
732676c7560aSMax Reitzecho >> "$iotests_common_env"
732776c7560aSMax Reitzecho "export PYTHON='$python'" >> "$iotests_common_env"
732876c7560aSMax Reitz
7329a5665051SPaolo Bonziniif test "$skip_meson" = no; then
7330fc929892SMarc-André Lureaucross="config-meson.cross.new"
7331fc929892SMarc-André Lureaumeson_quote() {
7332fc929892SMarc-André Lureau    echo "['$(echo $* | sed "s/ /','/g")']"
7333fc929892SMarc-André Lureau}
7334fc929892SMarc-André Lureau
7335fc929892SMarc-André Lureauecho "# Automatically generated by configure - do not modify" > $cross
7336fc929892SMarc-André Lureauecho "[properties]" >> $cross
7337fc929892SMarc-André Lureautest -z "$cxx" && echo "link_language = 'c'" >> $cross
7338fc929892SMarc-André Lureauecho "[binaries]" >> $cross
7339fc929892SMarc-André Lureauecho "c = $(meson_quote $cc)" >> $cross
7340fc929892SMarc-André Lureautest -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross
7341fc929892SMarc-André Lureauecho "ar = $(meson_quote $ar)" >> $cross
7342fc929892SMarc-André Lureauecho "nm = $(meson_quote $nm)" >> $cross
7343fc929892SMarc-André Lureauecho "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross
7344fc929892SMarc-André Lureauecho "ranlib = $(meson_quote $ranlib)" >> $cross
7345e8178514SPaolo Bonziniif has $sdl2_config; then
7346e8178514SPaolo Bonzini  echo "sdl2-config = $(meson_quote $sdl2_config)" >> $cross
7347e8178514SPaolo Bonzinifi
7348fc929892SMarc-André Lureauecho "strip = $(meson_quote $strip)" >> $cross
7349fc929892SMarc-André Lureauecho "windres = $(meson_quote $windres)" >> $cross
7350fc929892SMarc-André Lureauif test -n "$cross_prefix"; then
7351fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
7352fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
7353fc929892SMarc-André Lureau    if test "$mingw32" = "yes" ; then
7354fc929892SMarc-André Lureau        echo "system = 'windows'" >> $cross
7355fc929892SMarc-André Lureau    fi
7356853b4bafSThomas Huth    if test "$linux" = "yes" ; then
7357853b4bafSThomas Huth        echo "system = 'linux'" >> $cross
7358853b4bafSThomas Huth    fi
7359fc929892SMarc-André Lureau    case "$ARCH" in
7360fc929892SMarc-André Lureau        i386|x86_64)
7361fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
7362fc929892SMarc-André Lureau            ;;
7363fc929892SMarc-André Lureau        ppc64le)
7364fc929892SMarc-André Lureau            echo "cpu_family = 'ppc64'" >> $cross
7365fc929892SMarc-André Lureau            ;;
7366fc929892SMarc-André Lureau        *)
7367fc929892SMarc-André Lureau            echo "cpu_family = '$ARCH'" >> $cross
7368fc929892SMarc-André Lureau            ;;
7369fc929892SMarc-André Lureau    esac
7370fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
7371fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
7372fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
7373fc929892SMarc-André Lureau    else
7374fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
7375fc929892SMarc-André Lureau    fi
7376fc929892SMarc-André Lureauelse
7377fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
7378fc929892SMarc-André Lureaufi
7379fc929892SMarc-André Lureaumv $cross config-meson.cross
7380fc929892SMarc-André Lureau
7381a5665051SPaolo Bonzinirm -rf meson-private meson-info meson-logs
738248328880SPaolo BonziniNINJA=${ninja:-$PWD/ninjatool} $meson setup \
7383d17f305aSPaolo Bonzini        --prefix "$prefix" \
7384d17f305aSPaolo Bonzini        --libdir "$libdir" \
7385d17f305aSPaolo Bonzini        --libexecdir "$libexecdir" \
7386d17f305aSPaolo Bonzini        --bindir "$bindir" \
7387d17f305aSPaolo Bonzini        --includedir "$includedir" \
7388d17f305aSPaolo Bonzini        --datadir "$datadir" \
7389d17f305aSPaolo Bonzini        --mandir "$mandir" \
7390d17f305aSPaolo Bonzini        --sysconfdir "$sysconfdir" \
7391d17f305aSPaolo Bonzini        --localstatedir "$local_statedir" \
7392d17f305aSPaolo Bonzini        -Ddocdir="$docdir" \
739373f3aa37SMarc-André Lureau        -Dqemu_suffix="$qemu_suffix" \
7394a5665051SPaolo Bonzini        -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
7395a5665051SPaolo Bonzini        -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
7396a5665051SPaolo Bonzini        -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
7397a5665051SPaolo Bonzini        -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
7398da6d48b9SMarc-André Lureau        -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
7399bf0e56a3SMarc-André Lureau        -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
7400aa087962SPaolo Bonzini	-Dmalloc=$malloc -Dmalloc_trim=$malloc_trim \
74011badb709SPaolo Bonzini	-Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
74021badb709SPaolo Bonzini	-Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
7403b4e312e9SPaolo Bonzini	-Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
7404a0b93237SPaolo Bonzini	-Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
74050a40bcb7SCésar Belley	-Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\
7406fc929892SMarc-André Lureau        $cross_arg \
7407a5665051SPaolo Bonzini        "$PWD" "$source_path"
7408a5665051SPaolo Bonzini
7409a5665051SPaolo Bonziniif test "$?" -ne 0 ; then
7410a5665051SPaolo Bonzini    error_exit "meson setup failed"
7411a5665051SPaolo Bonzinifi
7412a5665051SPaolo Bonzinitouch ninjatool.stamp
7413a5665051SPaolo Bonzinifi
7414a5665051SPaolo Bonzini
74152d838d9bSAlex Bennéeif test -n "${deprecated_features}"; then
74162d838d9bSAlex Bennée    echo "Warning, deprecated features enabled."
74172d838d9bSAlex Bennée    echo "Please see docs/system/deprecated.rst"
74182d838d9bSAlex Bennée    echo "  features: ${deprecated_features}"
74192d838d9bSAlex Bennéefi
74202d838d9bSAlex Bennée
7421dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
7422dc655404SMichael S. Tsirkincat <<EOD >config.status
7423dc655404SMichael S. Tsirkin#!/bin/sh
7424dc655404SMichael S. Tsirkin# Generated by configure.
7425dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
7426dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
7427dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
7428dc655404SMichael S. TsirkinEOD
7429e811da7fSDaniel P. Berrangé
7430e811da7fSDaniel P. Berrangépreserve_env() {
7431e811da7fSDaniel P. Berrangé    envname=$1
7432e811da7fSDaniel P. Berrangé
7433e811da7fSDaniel P. Berrangé    eval envval=\$$envname
7434e811da7fSDaniel P. Berrangé
7435e811da7fSDaniel P. Berrangé    if test -n "$envval"
7436e811da7fSDaniel P. Berrangé    then
7437e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
7438e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
7439e811da7fSDaniel P. Berrangé    else
7440e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
7441e811da7fSDaniel P. Berrangé    fi
7442e811da7fSDaniel P. Berrangé}
7443e811da7fSDaniel P. Berrangé
7444e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
7445e811da7fSDaniel P. Berrangé# features/build target configure will detect
7446e811da7fSDaniel P. Berrangépreserve_env AR
7447e811da7fSDaniel P. Berrangépreserve_env AS
7448e811da7fSDaniel P. Berrangépreserve_env CC
7449e811da7fSDaniel P. Berrangépreserve_env CPP
7450e811da7fSDaniel P. Berrangépreserve_env CXX
7451e811da7fSDaniel P. Berrangépreserve_env INSTALL
7452e811da7fSDaniel P. Berrangépreserve_env LD
7453e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
7454e811da7fSDaniel P. Berrangépreserve_env LIBTOOL
7455e811da7fSDaniel P. Berrangépreserve_env MAKE
7456e811da7fSDaniel P. Berrangépreserve_env NM
7457e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
7458e811da7fSDaniel P. Berrangépreserve_env PATH
7459e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
7460e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
7461e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
7462e811da7fSDaniel P. Berrangépreserve_env PYTHON
7463e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
7464e811da7fSDaniel P. Berrangépreserve_env SMBD
7465e811da7fSDaniel P. Berrangépreserve_env STRIP
7466e811da7fSDaniel P. Berrangépreserve_env WINDRES
7467e811da7fSDaniel P. Berrangé
7468dc655404SMichael S. Tsirkinprintf "exec" >>config.status
7469a5665051SPaolo Bonzinifor i in "$0" "$@"; do
7470a5665051SPaolo Bonzini  test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
7471a5665051SPaolo Bonzinidone
7472cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
7473dc655404SMichael S. Tsirkinchmod +x config.status
7474dc655404SMichael S. Tsirkin
74758cd05ab6SPeter Maydellrm -r "$TMPDIR1"
7476