xref: /openbmc/qemu/configure (revision 56267b622a3c376a183f3a8ddbbcb2e81f667934)
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
92835af899SPaolo Bonziniquote_sh() {
93835af899SPaolo Bonzini    printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
94835af899SPaolo Bonzini}
95835af899SPaolo Bonzini
96d880a3baSPaolo Bonziniprint_error() {
97d880a3baSPaolo Bonzini    (echo
9876ad07a4SPeter Maydell    echo "ERROR: $1"
9976ad07a4SPeter Maydell    while test -n "$2"; do
10076ad07a4SPeter Maydell        echo "       $2"
10176ad07a4SPeter Maydell        shift
10276ad07a4SPeter Maydell    done
103d880a3baSPaolo Bonzini    echo) >&2
104d880a3baSPaolo Bonzini}
105d880a3baSPaolo Bonzini
106d880a3baSPaolo Bonzinierror_exit() {
107d880a3baSPaolo Bonzini    print_error "$@"
10876ad07a4SPeter Maydell    exit 1
10976ad07a4SPeter Maydell}
11076ad07a4SPeter Maydell
1119c83ffd8SPeter Maydelldo_compiler() {
1129c83ffd8SPeter Maydell    # Run the compiler, capturing its output to the log. First argument
1139c83ffd8SPeter Maydell    # is compiler binary to execute.
114630d86b7SDavid CARLIER    compiler="$1"
1159c83ffd8SPeter Maydell    shift
1168bbe05d7SIan Jackson    if test -n "$BASH_VERSION"; then eval '
1178bbe05d7SIan Jackson        echo >>config.log "
1188bbe05d7SIan Jacksonfuncs: ${FUNCNAME[*]}
1198bbe05d7SIan Jacksonlines: ${BASH_LINENO[*]}"
1208bbe05d7SIan Jackson    '; fi
1219c83ffd8SPeter Maydell    echo $compiler "$@" >> config.log
1229c83ffd8SPeter Maydell    $compiler "$@" >> config.log 2>&1 || return $?
1238dc38a78SPeter Maydell    # Test passed. If this is an --enable-werror build, rerun
1248dc38a78SPeter Maydell    # the test with -Werror and bail out if it fails. This
1258dc38a78SPeter Maydell    # makes warning-generating-errors in configure test code
1268dc38a78SPeter Maydell    # obvious to developers.
1278dc38a78SPeter Maydell    if test "$werror" != "yes"; then
1288dc38a78SPeter Maydell        return 0
1298dc38a78SPeter Maydell    fi
1308dc38a78SPeter Maydell    # Don't bother rerunning the compile if we were already using -Werror
1318dc38a78SPeter Maydell    case "$*" in
1328dc38a78SPeter Maydell        *-Werror*)
1338dc38a78SPeter Maydell           return 0
1348dc38a78SPeter Maydell        ;;
1358dc38a78SPeter Maydell    esac
1369c83ffd8SPeter Maydell    echo $compiler -Werror "$@" >> config.log
1379c83ffd8SPeter Maydell    $compiler -Werror "$@" >> config.log 2>&1 && return $?
13876ad07a4SPeter Maydell    error_exit "configure test passed without -Werror but failed with -Werror." \
13976ad07a4SPeter Maydell        "This is probably a bug in the configure script. The failing command" \
14076ad07a4SPeter Maydell        "will be at the bottom of config.log." \
14176ad07a4SPeter Maydell        "You can run configure with --disable-werror to bypass this check."
1428dc38a78SPeter Maydell}
1438dc38a78SPeter Maydell
1449c83ffd8SPeter Maydelldo_cc() {
1459c83ffd8SPeter Maydell    do_compiler "$cc" "$@"
1469c83ffd8SPeter Maydell}
1479c83ffd8SPeter Maydell
1489c83ffd8SPeter Maydelldo_cxx() {
1499c83ffd8SPeter Maydell    do_compiler "$cxx" "$@"
1509c83ffd8SPeter Maydell}
1519c83ffd8SPeter Maydell
15200849b92SRichard Henderson# Append $2 to the variable named $1, with space separation
15300849b92SRichard Hendersonadd_to() {
15400849b92SRichard Henderson    eval $1=\${$1:+\"\$$1 \"}\$2
15500849b92SRichard Henderson}
15600849b92SRichard Henderson
1579c83ffd8SPeter Maydellupdate_cxxflags() {
1589c83ffd8SPeter Maydell    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
1599c83ffd8SPeter Maydell    # options which some versions of GCC's C++ compiler complain about
1609c83ffd8SPeter Maydell    # because they only make sense for C programs.
16153422040SPaolo Bonzini    QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
1625770e8afSPaolo Bonzini    CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
1639c83ffd8SPeter Maydell    for arg in $QEMU_CFLAGS; do
1649c83ffd8SPeter Maydell        case $arg in
1659c83ffd8SPeter Maydell            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
1669c83ffd8SPeter Maydell            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
1679c83ffd8SPeter Maydell                ;;
1689c83ffd8SPeter Maydell            *)
1699c83ffd8SPeter Maydell                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
1709c83ffd8SPeter Maydell                ;;
1719c83ffd8SPeter Maydell        esac
1729c83ffd8SPeter Maydell    done
1739c83ffd8SPeter Maydell}
1749c83ffd8SPeter Maydell
17552166aa0SJuan Quintelacompile_object() {
176fd0e6053SJohn Snow  local_cflags="$1"
1775770e8afSPaolo Bonzini  do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
17852166aa0SJuan Quintela}
17952166aa0SJuan Quintela
18052166aa0SJuan Quintelacompile_prog() {
18152166aa0SJuan Quintela  local_cflags="$1"
18252166aa0SJuan Quintela  local_ldflags="$2"
1835770e8afSPaolo Bonzini  do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
1845770e8afSPaolo Bonzini      $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
18552166aa0SJuan Quintela}
18652166aa0SJuan Quintela
18711568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
18811568d6dSPaolo Bonzinisymlink() {
18972b8b5a1SStefan Weil  rm -rf "$2"
190ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
19172b8b5a1SStefan Weil  ln -s "$1" "$2"
19211568d6dSPaolo Bonzini}
19311568d6dSPaolo Bonzini
1940dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
1950dba6195SLoïc Minier# executable or a builtin)
1960dba6195SLoïc Minierhas() {
1970dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
1980dba6195SLoïc Minier}
1990dba6195SLoïc Minier
2000a01d76fSMarc-André Lureauversion_ge () {
2012df52b9bSAlex Bennée    local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
2022df52b9bSAlex Bennée    local_ver2=$(echo "$2" | tr . ' ')
2030a01d76fSMarc-André Lureau    while true; do
2040a01d76fSMarc-André Lureau        set x $local_ver1
2050a01d76fSMarc-André Lureau        local_first=${2-0}
206c44a33e2SStefano Garzarella        # 'shift 2' if $2 is set, or 'shift' if $2 is not set
207c44a33e2SStefano Garzarella        shift ${2:+2}
2080a01d76fSMarc-André Lureau        local_ver1=$*
2090a01d76fSMarc-André Lureau        set x $local_ver2
2100a01d76fSMarc-André Lureau        # the second argument finished, the first must be greater or equal
2110a01d76fSMarc-André Lureau        test $# = 1 && return 0
2120a01d76fSMarc-André Lureau        test $local_first -lt $2 && return 1
2130a01d76fSMarc-André Lureau        test $local_first -gt $2 && return 0
214c44a33e2SStefano Garzarella        shift ${2:+2}
2150a01d76fSMarc-André Lureau        local_ver2=$*
2160a01d76fSMarc-André Lureau    done
2170a01d76fSMarc-André Lureau}
2180a01d76fSMarc-André Lureau
2195b808275SLluís Vilanovahave_backend () {
2205b808275SLluís Vilanova    echo "$trace_backends" | grep "$1" >/dev/null
2215b808275SLluís Vilanova}
2225b808275SLluís Vilanova
2233b6b7550SPaolo Bonziniglob() {
2243b6b7550SPaolo Bonzini    eval test -z '"${1#'"$2"'}"'
2253b6b7550SPaolo Bonzini}
2263b6b7550SPaolo Bonzini
227e9a3591fSChristian Borntraegerld_has() {
228e9a3591fSChristian Borntraeger    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
229e9a3591fSChristian Borntraeger}
230e9a3591fSChristian Borntraeger
2314ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
2324ace32e2SAntonio Ospitethen
2334ace32e2SAntonio Ospite  error_exit "main directory cannot contain spaces nor colons"
2344ace32e2SAntonio Ospitefi
2354ace32e2SAntonio Ospite
23614211825SAntonio Ospite# default parameters
2372ff6b91eSJuan Quintelacpu=""
238a31a8642SMichael S. Tsirkiniasl="iasl"
2391e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M"
24043ce4dfeSbellardstatic="no"
2413812c0c4SJoelle van Dynecross_compile="no"
2427d13299dSbellardcross_prefix=""
2430c58ac1cSmalcaudio_drv_list=""
244b64ec4e4SFam Zhengblock_drv_rw_whitelist=""
245b64ec4e4SFam Zhengblock_drv_ro_whitelist=""
246e49d021eSPeter Maydellhost_cc="cc"
247d5631638Smalcaudio_win_int=""
248957f1f99SMichael Rothlibs_qga=""
2495bc62e01SGerd Hoffmanndebug_info="yes"
250cdad781dSDaniele Buonolto="false"
25163678e17SSteven Noonanstack_protector=""
2521e4f6065SDaniele Buonosafe_stack=""
253afc3a8f9SAlex Bennéeuse_containers="yes"
254f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
255ac0df51dSaliguori
25692712822SDaniel P. Berrangeif test -e "$source_path/.git"
25792712822SDaniel P. Berrangethen
2587d7dbf9dSDan Streetman    git_submodules_action="update"
25992712822SDaniel P. Berrange    git_submodules="ui/keycodemapdb"
26092712822SDaniel P. Berrangeelse
2617d7dbf9dSDan Streetman    git_submodules_action="ignore"
262aef45d51SDaniel P. Berrange    git_submodules=""
2635c0ef67aSDaniel P. Berrangé
2645c0ef67aSDaniel P. Berrangé    if ! test -f "$source_path/ui/keycodemapdb/README"
2655c0ef67aSDaniel P. Berrangé    then
2665c0ef67aSDaniel P. Berrangé        echo
2675c0ef67aSDaniel P. Berrangé        echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
2685c0ef67aSDaniel P. Berrangé        echo
2695c0ef67aSDaniel P. Berrangé        echo "This is not a GIT checkout but module content appears to"
2705c0ef67aSDaniel P. Berrangé        echo "be missing. Do not use 'git archive' or GitHub download links"
2715c0ef67aSDaniel P. Berrangé        echo "to acquire QEMU source archives. Non-GIT builds are only"
2725c0ef67aSDaniel P. Berrangé        echo "supported with source archives linked from:"
2735c0ef67aSDaniel P. Berrangé        echo
274a3e3b521SPeter Maydell        echo "  https://www.qemu.org/download/#source"
2755c0ef67aSDaniel P. Berrangé        echo
2765c0ef67aSDaniel P. Berrangé        echo "Developers working with GIT can use scripts/archive-source.sh"
2775c0ef67aSDaniel P. Berrangé        echo "if they need to create valid source archives."
2785c0ef67aSDaniel P. Berrangé        echo
2795c0ef67aSDaniel P. Berrangé        exit 1
2805c0ef67aSDaniel P. Berrangé    fi
28192712822SDaniel P. Berrangefi
282cc84d63aSDaniel P. Berrangegit="git"
283ac0df51dSaliguori
284afb63ebdSStefan Weil# Don't accept a target_list environment variable.
285afb63ebdSStefan Weilunset target_list
286447e133fSAlex Bennéeunset target_list_exclude
287377529c0SPaolo Bonzini
288377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
289377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
290377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
291377529c0SPaolo Bonzini#              unless --disable-foo is given
292377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
293377529c0SPaolo Bonzini#              feature will searched for,
294377529c0SPaolo Bonzini#              if not found, configure exits with error
295377529c0SPaolo Bonzini#
296377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
297377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
298377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
299377529c0SPaolo Bonzini
300c87ea116SAlex Bennéedefault_feature=""
301c87ea116SAlex Bennée# parse CC options second
302c87ea116SAlex Bennéefor opt do
303c87ea116SAlex Bennée  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
304c87ea116SAlex Bennée  case "$opt" in
305c87ea116SAlex Bennée      --without-default-features)
306c87ea116SAlex Bennée          default_feature="no"
307c87ea116SAlex Bennée  ;;
308c87ea116SAlex Bennée  esac
309c87ea116SAlex Bennéedone
310c87ea116SAlex Bennée
3118c6d4ff4SPaolo Bonzinibrlapi="auto"
312f9cd86feSPaolo Bonzinicurl="auto"
3135285e593SYonggang Luoiconv="auto"
3145285e593SYonggang Luocurses="auto"
315e3667660SYonggang Luodocs="auto"
316fbb4121dSPaolo Bonzinifdt="auto"
31758952137SVincenzo Maffionenetmap="no"
31835be72baSPaolo Bonzinisdl="auto"
31935be72baSPaolo Bonzinisdl_image="auto"
320422a5fd0SJoelle van Dynecoreaudio="auto"
321cece116cSMisono Tomohirovirtiofsd="auto"
32269202b40SPaolo Bonzinivirtfs="auto"
3235c53015aSPaolo Bonzinilibudev="auto"
3246ec0e15dSPaolo Bonzinimpath="auto"
325a0b93237SPaolo Bonzinivnc="enabled"
326deb62371SPaolo Bonzinisparse="auto"
327c87ea116SAlex Bennéevde="$default_feature"
328a0b93237SPaolo Bonzinivnc_sasl="auto"
329a0b93237SPaolo Bonzinivnc_jpeg="auto"
330a0b93237SPaolo Bonzinivnc_png="auto"
3314113f4cfSLaurent Vivierxkbcommon="auto"
332c87ea116SAlex Bennéexen="$default_feature"
333c87ea116SAlex Bennéexen_ctrl_version="$default_feature"
3341badb709SPaolo Bonzinixen_pci_passthrough="auto"
335c87ea116SAlex Bennéelinux_aio="$default_feature"
336c87ea116SAlex Bennéelinux_io_uring="$default_feature"
337727c8bb8SPaolo Bonzinicap_ng="auto"
338f7f2d651SPaolo Bonziniattr="auto"
339c87ea116SAlex Bennéexfs="$default_feature"
3401badb709SPaolo Bonzinitcg="enabled"
341c87ea116SAlex Bennéemembarrier="$default_feature"
342c87ea116SAlex Bennéevhost_net="$default_feature"
343c87ea116SAlex Bennéevhost_crypto="$default_feature"
344c87ea116SAlex Bennéevhost_scsi="$default_feature"
345c87ea116SAlex Bennéevhost_vsock="$default_feature"
346d88618f7SStefan Hajnoczivhost_user="no"
347e5e856c1SStefan Hajnoczivhost_user_blk_server="auto"
348c87ea116SAlex Bennéevhost_user_fs="$default_feature"
3493bd40ec7SPaolo Bonzinikvm="auto"
3503bd40ec7SPaolo Bonzinihax="auto"
3513bd40ec7SPaolo Bonzinihvf="auto"
3523bd40ec7SPaolo Bonziniwhpx="auto"
35374a414a1SReinoud Zandijknvmm="auto"
354c87ea116SAlex Bennéerdma="$default_feature"
355c87ea116SAlex Bennéepvrdma="$default_feature"
356377529c0SPaolo Bonzinigprof="no"
357377529c0SPaolo Bonzinidebug_tcg="no"
358377529c0SPaolo Bonzinidebug="no"
359247724cbSMarc-André Lureausanitizers="no"
3600aebab04SLingfeng Yangtsan="no"
361c87ea116SAlex Bennéefortify_source="$default_feature"
362377529c0SPaolo Bonzinistrip_opt="yes"
36323a77b2dSPaolo Bonzinitcg_interpreter="false"
364377529c0SPaolo Bonzinibigendian="no"
365377529c0SPaolo Bonzinimingw32="no"
3661d728c39SBlue Swirlgcov="no"
367c7328271SMiroslav RezaninaEXESUF=""
368484e2cc7SPaolo BonziniHOST_DSOSUF=".so"
36917969268SFam Zhengmodules="no"
370bd83c861SChristian Ehrhardtmodule_upgrades="no"
371377529c0SPaolo Bonziniprefix="/usr/local"
37210ff82d1SMarc-André Lureauqemu_suffix="qemu"
3734d34a86bSPaolo Bonzinislirp="auto"
374377529c0SPaolo Bonzinioss_lib=""
375377529c0SPaolo Bonzinibsd="no"
376377529c0SPaolo Bonzinilinux="no"
377377529c0SPaolo Bonzinisolaris="no"
378377529c0SPaolo Bonziniprofiler="no"
379b4e312e9SPaolo Bonzinicocoa="auto"
380377529c0SPaolo Bonzinisoftmmu="yes"
381377529c0SPaolo Bonzinilinux_user="no"
382377529c0SPaolo Bonzinibsd_user="no"
383c8d5450bSPaolo Bonziniblobs="true"
384377529c0SPaolo Bonzinipkgversion=""
38540d6444eSAvi Kivitypie=""
3863556c233SPaolo Bonziniqom_cast_debug="yes"
387baf86d6bSPaolo Bonzinitrace_backends="log"
388377529c0SPaolo Bonzinitrace_file="trace"
389c87ea116SAlex Bennéespice="$default_feature"
39058d3f3ffSGerd Hoffmannspice_protocol="auto"
391fabd1e93SPaolo Bonzinirbd="auto"
392c87ea116SAlex Bennéesmartcard="$default_feature"
3930a40bcb7SCésar Belleyu2f="auto"
394c87ea116SAlex Bennéelibusb="$default_feature"
395c87ea116SAlex Bennéeusb_redir="$default_feature"
396c87ea116SAlex Bennéeopengl="$default_feature"
3975dd89908SRichard Hendersoncpuid_h="no"
398c87ea116SAlex Bennéeavx2_opt="$default_feature"
3998b18cdbfSRichard Hendersoncapstone="auto"
4000c32a0aeSPaolo Bonzinilzo="auto"
401241611eaSPaolo Bonzinisnappy="auto"
40229ba6116SPaolo Bonzinibzip2="auto"
403ecea3696SPaolo Bonzinilzfse="auto"
404b1def33dSPaolo Bonzinizstd="auto"
405c87ea116SAlex Bennéeguest_agent="$default_feature"
406d9840e25STomoki Sekiyamaguest_agent_with_vss="no"
40750cbebb9SMichael Rothguest_agent_ntddscsi="no"
408b846ab7cSPaolo Bonziniguest_agent_msi="auto"
409c87ea116SAlex Bennéevss_win32_sdk="$default_feature"
410d9840e25STomoki Sekiyamawin_sdk="no"
411c87ea116SAlex Bennéewant_tools="$default_feature"
4129db405a3SPaolo Bonzinilibiscsi="auto"
41330045c05SPaolo Bonzinilibnfs="auto"
414519175a2SAlex Barcelocoroutine=""
415c87ea116SAlex Bennéecoroutine_pool="$default_feature"
4167d992e4dSPeter Lievendebug_stack_usage="no"
417f0d92b56SLongpeng(Mike)crypto_afalg="no"
4189e62ba48SDaniele Buonocfi="false"
4199e62ba48SDaniele Buonocfi_debug="false"
42090835c2bSPaolo Bonziniseccomp="auto"
42108821ca2SPaolo Bonziniglusterfs="auto"
4221b695471SPaolo Bonzinigtk="auto"
423a1c5e949SDaniel P. Berrangetls_priority="NORMAL"
424c87ea116SAlex Bennéegnutls="$default_feature"
425c87ea116SAlex Bennéenettle="$default_feature"
426dc2207afSDaniel P. Berrangénettle_xts="no"
427c87ea116SAlex Bennéegcrypt="$default_feature"
4281f923c70SLongpeng(Mike)gcrypt_hmac="no"
429e0576942SDaniel P. Berrangégcrypt_xts="no"
430e0576942SDaniel P. Berrangéqemu_private_xts="yes"
431c87ea116SAlex Bennéeauth_pam="$default_feature"
432c87ea116SAlex Bennéevte="$default_feature"
433c87ea116SAlex Bennéevirglrenderer="$default_feature"
434c87ea116SAlex Bennéetpm="$default_feature"
435c87ea116SAlex Bennéelibssh="$default_feature"
436c87ea116SAlex Bennéelive_block_migration=${default_feature:-yes}
437c87ea116SAlex Bennéenuma="$default_feature"
4382847b469SFam Zhengtcmalloc="no"
4397b01cb97SAlexandre Derumierjemalloc="no"
440c87ea116SAlex Bennéereplication=${default_feature:-yes}
441c87ea116SAlex Bennéebochs=${default_feature:-yes}
442c87ea116SAlex Bennéecloop=${default_feature:-yes}
443c87ea116SAlex Bennéedmg=${default_feature:-yes}
444c87ea116SAlex Bennéeqcow1=${default_feature:-yes}
445c87ea116SAlex Bennéevdi=${default_feature:-yes}
446c87ea116SAlex Bennéevvfat=${default_feature:-yes}
447c87ea116SAlex Bennéeqed=${default_feature:-yes}
448c87ea116SAlex Bennéeparallels=${default_feature:-yes}
449c87ea116SAlex Bennéelibxml2="$default_feature"
450ba59fb77SPaolo Bonzinidebug_mutex="no"
451c87ea116SAlex Bennéelibpmem="$default_feature"
4527bc3ca7fSPaolo Bonzinidefault_devices="true"
45340e8c6f4SAlex Bennéeplugins="no"
454adc28027SAlexander Bulekovfuzzing="no"
455b767d257SMarek Marczykowski-Góreckirng_none="no"
456c87ea116SAlex Bennéesecret_keyring="$default_feature"
457c87ea116SAlex Bennéelibdaxctl="$default_feature"
458a5665051SPaolo Bonzinimeson=""
45948328880SPaolo Bonzinininja=""
460a5665051SPaolo Bonziniskip_meson=no
4610e8e77d4SAlex Bennéegettext="auto"
462a484a719SMax Reitzfuse="auto"
463df4ea709SMax Reitzfuse_lseek="auto"
464106ad1f9SPaolo Bonzinimultiprocess="auto"
465b8e0c493SJoelle van Dyneslirp_smbd="$default_feature"
466377529c0SPaolo Bonzini
467aa087962SPaolo Bonzinimalloc_trim="auto"
46820cf7b8eSDenis Plotnikovgio="$default_feature"
469898be3e0SPeter Maydell
470c87ea116SAlex Bennée# parse CC options second
471ac0df51dSaliguorifor opt do
47289138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
473ac0df51dSaliguori  case "$opt" in
474ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
4753812c0c4SJoelle van Dyne                    cross_compile="yes"
476ac0df51dSaliguori  ;;
4773d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
478ac0df51dSaliguori  ;;
47983f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
48083f73fceSTomoki Sekiyama  ;;
4812ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
4822ff6b91eSJuan Quintela  ;;
483de385287SAlex Bennée  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
484db5adeaaSPaolo Bonzini                    QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
485e2a2ed06SJuan Quintela  ;;
48611cde1c8SBruno Dominguez  --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
48711cde1c8SBruno Dominguez  ;;
488db5adeaaSPaolo Bonzini  --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
489f9943cd5SGerd Hoffmann                     EXTRA_LDFLAGS="$optarg"
490e2a2ed06SJuan Quintela  ;;
4915bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
4925bc62e01SGerd Hoffmann  ;;
4935bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
4945bc62e01SGerd Hoffmann  ;;
495d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
496d75402b5SAlex Bennée  ;;
497d422b2bcSAlex Bennée  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
498d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
4992038f8c8SPaolo Bonzini                      cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
500d422b2bcSAlex Bennée  ;;
501d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
5022038f8c8SPaolo Bonzini                cc_archs="$cc_archs $cc_arch"
503d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
5042038f8c8SPaolo Bonzini                cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
505d75402b5SAlex Bennée  ;;
506ac0df51dSaliguori  esac
507ac0df51dSaliguoridone
508ac0df51dSaliguori# OS specific
509ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
51093148aa5SStefan Weil# we can eliminate its usage altogether.
511ac0df51dSaliguori
512e49d021eSPeter Maydell# Preferred compiler:
513e49d021eSPeter Maydell#  ${CC} (if set)
514e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
515e49d021eSPeter Maydell#  system compiler
516e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
517e49d021eSPeter Maydell  cc="$host_cc"
518e49d021eSPeter Maydellelse
519b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
520e49d021eSPeter Maydellfi
521e49d021eSPeter Maydell
52283f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
52383f73fceSTomoki Sekiyama  cxx="c++"
52483f73fceSTomoki Sekiyamaelse
52583f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
52683f73fceSTomoki Sekiyamafi
52783f73fceSTomoki Sekiyama
528b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
529cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
5305f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
5313dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
532b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
533b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
5349f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
5354852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
536b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
537b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
53817884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
53917884d7bSSergei Trofimovichquery_pkg_config() {
54017884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
54117884d7bSSergei Trofimovich}
54217884d7bSSergei Trofimovichpkg_config=query_pkg_config
54347c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
544ac0df51dSaliguori
54545d285abSPeter Maydell# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
54645d285abSPeter MaydellARFLAGS="${ARFLAGS-rv}"
54745d285abSPeter Maydell
548be17dc90SMichael S. Tsirkin# default flags for all hosts
5492d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
5502d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
5512d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
5522d31515bSPeter Maydell# provides these semantics.)
553086d5f75SPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
554086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
555c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
556be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
5575770e8afSPaolo Bonzini
5585770e8afSPaolo Bonzini# Flags that are needed during configure but later taken care of by Meson
5595770e8afSPaolo BonziniCONFIGURE_CFLAGS="-std=gnu99 -Wall"
5605770e8afSPaolo BonziniCONFIGURE_LDFLAGS=
561086d5f75SPaolo Bonzini
562be17dc90SMichael S. Tsirkin
563ac0df51dSaliguoricheck_define() {
564ac0df51dSaliguoricat > $TMPC <<EOF
565ac0df51dSaliguori#if !defined($1)
566fd786e1aSPeter Maydell#error $1 not defined
567ac0df51dSaliguori#endif
568ac0df51dSaliguoriint main(void) { return 0; }
569ac0df51dSaliguoriEOF
57052166aa0SJuan Quintela  compile_object
571ac0df51dSaliguori}
572ac0df51dSaliguori
573307119e7SGerd Hoffmanncheck_include() {
574307119e7SGerd Hoffmanncat > $TMPC <<EOF
575307119e7SGerd Hoffmann#include <$1>
576307119e7SGerd Hoffmannint main(void) { return 0; }
577307119e7SGerd HoffmannEOF
578307119e7SGerd Hoffmann  compile_object
579307119e7SGerd Hoffmann}
580307119e7SGerd Hoffmann
58193b25869SJohn Snowwrite_c_skeleton() {
58293b25869SJohn Snow    cat > $TMPC <<EOF
58393b25869SJohn Snowint main(void) { return 0; }
58493b25869SJohn SnowEOF
58593b25869SJohn Snow}
58693b25869SJohn Snow
587adc28027SAlexander Bulekovwrite_c_fuzzer_skeleton() {
588adc28027SAlexander Bulekov    cat > $TMPC <<EOF
589adc28027SAlexander Bulekov#include <stdint.h>
590adc28027SAlexander Bulekov#include <sys/types.h>
591adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
592adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
593adc28027SAlexander BulekovEOF
594adc28027SAlexander Bulekov}
595adc28027SAlexander Bulekov
596bbea4050SPeter Maydellif check_define __linux__ ; then
597bbea4050SPeter Maydell  targetos="Linux"
598bbea4050SPeter Maydellelif check_define _WIN32 ; then
599bbea4050SPeter Maydell  targetos='MINGW32'
600bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
601bbea4050SPeter Maydell  targetos='OpenBSD'
602bbea4050SPeter Maydellelif check_define __sun__ ; then
603bbea4050SPeter Maydell  targetos='SunOS'
604bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
605bbea4050SPeter Maydell  targetos='Haiku'
606951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
607951fedfcSPeter Maydell  targetos='FreeBSD'
608951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
609951fedfcSPeter Maydell  targetos='GNU/kFreeBSD'
610951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
611951fedfcSPeter Maydell  targetos='DragonFly'
612951fedfcSPeter Maydellelif check_define __NetBSD__; then
613951fedfcSPeter Maydell  targetos='NetBSD'
614951fedfcSPeter Maydellelif check_define __APPLE__; then
615951fedfcSPeter Maydell  targetos='Darwin'
616bbea4050SPeter Maydellelse
617951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
618951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
619951fedfcSPeter Maydell  # be the result of a missing compiler.
620951fedfcSPeter Maydell  targetos='bogus'
621bbea4050SPeter Maydellfi
622bbea4050SPeter Maydell
623bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use.
624bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're
625bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify
626bbea4050SPeter Maydell# the correct CPU with the --cpu option.
627bbea4050SPeter Maydellcase $targetos in
628bbea4050SPeter MaydellDarwin)
6295869f8ddSGerd Hoffmann  HOST_DSOSUF=".dylib"
630bbea4050SPeter Maydell  ;;
631bbea4050SPeter MaydellSunOS)
63289138857SStefan Weil  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
633bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
634bbea4050SPeter Maydell    cpu="x86_64"
635bbea4050SPeter Maydell  fi
636bbea4050SPeter Maydellesac
637bbea4050SPeter Maydell
6382ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
6392ff6b91eSJuan Quintela  # command line argument
6402ff6b91eSJuan Quintela  :
6412ff6b91eSJuan Quintelaelif check_define __i386__ ; then
642ac0df51dSaliguori  cpu="i386"
643ac0df51dSaliguorielif check_define __x86_64__ ; then
644c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
645c72b26ecSRichard Henderson    cpu="x32"
646c72b26ecSRichard Henderson  else
647ac0df51dSaliguori    cpu="x86_64"
648c72b26ecSRichard Henderson  fi
6493aa9bd6cSblueswir1elif check_define __sparc__ ; then
6503aa9bd6cSblueswir1  if check_define __arch64__ ; then
6513aa9bd6cSblueswir1    cpu="sparc64"
6523aa9bd6cSblueswir1  else
6533aa9bd6cSblueswir1    cpu="sparc"
6543aa9bd6cSblueswir1  fi
655fdf7ed96Smalcelif check_define _ARCH_PPC ; then
656fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
657f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
658f8378accSRichard Henderson      cpu="ppc64le"
659f8378accSRichard Henderson    else
660fdf7ed96Smalc      cpu="ppc64"
661f8378accSRichard Henderson    fi
662ac0df51dSaliguori  else
663fdf7ed96Smalc    cpu="ppc"
664fdf7ed96Smalc  fi
665afa05235SAurelien Jarnoelif check_define __mips__ ; then
666afa05235SAurelien Jarno  cpu="mips"
667d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
668d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
669d66ed0eaSAurelien Jarno    cpu="s390x"
670d66ed0eaSAurelien Jarno  else
671d66ed0eaSAurelien Jarno    cpu="s390"
672d66ed0eaSAurelien Jarno  fi
673c4f80543SAlistair Franciselif check_define __riscv ; then
674c4f80543SAlistair Francis  if check_define _LP64 ; then
675c4f80543SAlistair Francis    cpu="riscv64"
676c4f80543SAlistair Francis  else
677c4f80543SAlistair Francis    cpu="riscv32"
678c4f80543SAlistair Francis  fi
67921d89f84SPeter Maydellelif check_define __arm__ ; then
68021d89f84SPeter Maydell  cpu="arm"
6811f080313SClaudio Fontanaelif check_define __aarch64__ ; then
6821f080313SClaudio Fontana  cpu="aarch64"
683fdf7ed96Smalcelse
68489138857SStefan Weil  cpu=$(uname -m)
685ac0df51dSaliguorifi
686ac0df51dSaliguori
687359bc95dSPeter MaydellARCH=
688359bc95dSPeter Maydell# Normalise host CPU name and set ARCH.
689359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
6907d13299dSbellardcase "$cpu" in
691ee35e968SThomas Huth  ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
692898be3e0SPeter Maydell  ;;
693f8378accSRichard Henderson  ppc64le)
694f8378accSRichard Henderson    ARCH="ppc64"
695f8378accSRichard Henderson  ;;
6967d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
69797a847bcSbellard    cpu="i386"
6987d13299dSbellard  ;;
699aaa5fa14Saurel32  x86_64|amd64)
700aaa5fa14Saurel32    cpu="x86_64"
701aaa5fa14Saurel32  ;;
70221d89f84SPeter Maydell  armv*b|armv*l|arm)
70321d89f84SPeter Maydell    cpu="arm"
7047d13299dSbellard  ;;
7051f080313SClaudio Fontana  aarch64)
7061f080313SClaudio Fontana    cpu="aarch64"
7071f080313SClaudio Fontana  ;;
708afa05235SAurelien Jarno  mips*)
709afa05235SAurelien Jarno    cpu="mips"
710afa05235SAurelien Jarno  ;;
7113142255cSblueswir1  sparc|sun4[cdmuv])
712ae228531Sbellard    cpu="sparc"
713ae228531Sbellard  ;;
7147d13299dSbellard  *)
715359bc95dSPeter Maydell    # This will result in either an error or falling back to TCI later
716359bc95dSPeter Maydell    ARCH=unknown
7177d13299dSbellard  ;;
7187d13299dSbellardesac
719359bc95dSPeter Maydellif test -z "$ARCH"; then
720359bc95dSPeter Maydell  ARCH="$cpu"
721359bc95dSPeter Maydellfi
722e2d52ad3SJuan Quintela
7237d13299dSbellard# OS specific
7240dbfc675SJuan Quintela
7257d13299dSbellardcase $targetos in
72667b915a5SbellardMINGW32*)
72767b915a5Sbellard  mingw32="yes"
7283cec7cc2SKővágó, Zoltán  audio_possible_drivers="dsound sdl"
729307119e7SGerd Hoffmann  if check_include dsound.h; then
7303cec7cc2SKővágó, Zoltán    audio_drv_list="dsound"
731307119e7SGerd Hoffmann  else
732307119e7SGerd Hoffmann    audio_drv_list=""
733307119e7SGerd Hoffmann  fi
734898be3e0SPeter Maydell  supported_os="yes"
735fb648e9cSDaniel P. Berrangé  pie="no"
73667b915a5Sbellard;;
7375c40d2bdSthsGNU/kFreeBSD)
738a167ba50SAurelien Jarno  bsd="yes"
7396a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7400bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
7415c40d2bdSths;;
7427d3505c5SbellardFreeBSD)
7437d3505c5Sbellard  bsd="yes"
7440db4a067SPaolo Bonzini  make="${MAKE-gmake}"
7456a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7460bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
747f01576f1SJuergen Lock  # needed for kinfo_getvmmap(3) in libutil.h
74858952137SVincenzo Maffione  netmap=""  # enable netmap autodetect
7497d3505c5Sbellard;;
750c5e97233Sblueswir1DragonFly)
751c5e97233Sblueswir1  bsd="yes"
7520db4a067SPaolo Bonzini  make="${MAKE-gmake}"
7536a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7540bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
755c5e97233Sblueswir1;;
7567d3505c5SbellardNetBSD)
7577d3505c5Sbellard  bsd="yes"
7580db4a067SPaolo Bonzini  make="${MAKE-gmake}"
7596a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
7600bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl"
7618ef92a88Sblueswir1  oss_lib="-lossaudio"
7627d3505c5Sbellard;;
7637d3505c5SbellardOpenBSD)
7647d3505c5Sbellard  bsd="yes"
7650db4a067SPaolo Bonzini  make="${MAKE-gmake}"
766f92c7168SGerd Hoffmann  audio_drv_list="try-sdl"
7670bac1111SKővágó, Zoltán  audio_possible_drivers="sdl"
7687d3505c5Sbellard;;
76983fb7adfSbellardDarwin)
77083fb7adfSbellard  bsd="yes"
77183fb7adfSbellard  darwin="yes"
772422a5fd0SJoelle van Dyne  audio_drv_list="try-coreaudio try-sdl"
77314382605SKővágó, Zoltán  audio_possible_drivers="coreaudio sdl"
774a0b7cf6bSPeter Maydell  # Disable attempts to use ObjectiveC features in os/object.h since they
775a0b7cf6bSPeter Maydell  # won't work when we're compiling with gcc as a C compiler.
776a0b7cf6bSPeter Maydell  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
77783fb7adfSbellard;;
778ec530c81SbellardSunOS)
779ec530c81Sbellard  solaris="yes"
7800db4a067SPaolo Bonzini  make="${MAKE-gmake}"
781e2d8830eSBrad  smbd="${SMBD-/usr/sfw/sbin/smbd}"
7826b4d2ba1Sths  if test -f /usr/include/sys/soundcard.h ; then
7836a485418SGerd Hoffmann    audio_drv_list="oss try-sdl"
7846b4d2ba1Sths  fi
785c2de5c91Smalc  audio_possible_drivers="oss sdl"
786d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h
787d741429aSBlue Swirl  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
788d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h
789d741429aSBlue Swirl  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
790ec530c81Sbellard;;
791179cf400SAndreas FärberHaiku)
792179cf400SAndreas Färber  haiku="yes"
793cde99253SThomas Huth  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
794179cf400SAndreas Färber;;
795898be3e0SPeter MaydellLinux)
7967183834aSGerd Hoffmann  audio_drv_list="try-pa oss"
7970bac1111SKővágó, Zoltán  audio_possible_drivers="oss alsa sdl pa"
7985327cf48Sbellard  linux="yes"
799831b7825Sths  linux_user="yes"
800c87ea116SAlex Bennée  vhost_user=${default_feature:-yes}
801898be3e0SPeter Maydell;;
8027d13299dSbellardesac
8037d13299dSbellard
8047d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
805b1a550a0Spbrook  if [ "$darwin" != "yes" ] ; then
80684778508Sblueswir1    bsd_user="yes"
8077d3505c5Sbellard  fi
80808de3949SAndreas Färberfi
8097d3505c5Sbellard
8100db4a067SPaolo Bonzini: ${make=${MAKE-make}}
811b6daf4d3SPaolo Bonzini
812faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally
813faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so
814ddf90699SEduardo Habkost# we check that too
815faf44142SDaniel P. Berrangépython=
8160a01d76fSMarc-André Lureauexplicit_python=no
817ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python
818faf44142SDaniel P. Berrangédo
819faf44142SDaniel P. Berrangé    if has "$binary"
820faf44142SDaniel P. Berrangé    then
82195c5f2deSPaolo Bonzini        python=$(command -v "$binary")
822faf44142SDaniel P. Berrangé        break
823faf44142SDaniel P. Berrangé    fi
824faf44142SDaniel P. Berrangédone
825903458c8SMarkus Armbruster
826903458c8SMarkus Armbruster
82739d87c8cSAlex Bennée# Check for ancillary tools used in testing
82839d87c8cSAlex Bennéegenisoimage=
8293df437c7SAlex Bennéefor binary in genisoimage mkisofs
83039d87c8cSAlex Bennéedo
83139d87c8cSAlex Bennée    if has $binary
83239d87c8cSAlex Bennée    then
83339d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
83439d87c8cSAlex Bennée        break
83539d87c8cSAlex Bennée    fi
83639d87c8cSAlex Bennéedone
83739d87c8cSAlex Bennée
8383c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
8393c4a4d0dSPeter Maydellif has clang; then
8403c4a4d0dSPeter Maydell  objcc=clang
8413c4a4d0dSPeter Maydellelse
8423c4a4d0dSPeter Maydell  objcc="$cc"
8433c4a4d0dSPeter Maydellfi
8443c4a4d0dSPeter Maydell
8453457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
8463457a3f8SJuan Quintela  EXESUF=".exe"
847484e2cc7SPaolo Bonzini  HOST_DSOSUF=".dll"
84878e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
8495770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
85093b25869SJohn Snow  write_c_skeleton;
851d17f305aSPaolo Bonzini  prefix="/qemu"
85277433a5fSMarc-André Lureau  qemu_suffix=""
853105fad6bSBishara AbuHattoum  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
8543457a3f8SJuan Quintelafi
8553457a3f8SJuan Quintela
856487fefdbSAnthony Liguoriwerror=""
85785aa5189Sbellard
8587d13299dSbellardfor opt do
85989138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
8607d13299dSbellard  case "$opt" in
8612efc3265Sbellard  --help|-h) show_help=yes
8622efc3265Sbellard  ;;
86399123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
86499123e13SMike Frysinger  ;;
865b1a550a0Spbrook  --prefix=*) prefix="$optarg"
8667d13299dSbellard  ;;
867b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
86832ce6337Sbellard  ;;
869ac0df51dSaliguori  --cross-prefix=*)
8707d13299dSbellard  ;;
871ac0df51dSaliguori  --cc=*)
8727d13299dSbellard  ;;
873b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
87483469015Sbellard  ;;
87583f73fceSTomoki Sekiyama  --cxx=*)
87683f73fceSTomoki Sekiyama  ;;
877e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
878e007dbecSMichael S. Tsirkin  ;;
8793c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
8803c4a4d0dSPeter Maydell  ;;
881b1a550a0Spbrook  --make=*) make="$optarg"
8827d13299dSbellard  ;;
883b6daf4d3SPaolo Bonzini  --install=*)
8846a882643Spbrook  ;;
8850a01d76fSMarc-André Lureau  --python=*) python="$optarg" ; explicit_python=yes
886c886edfbSBlue Swirl  ;;
8872eb054c2SPeter Maydell  --sphinx-build=*) sphinx_build="$optarg"
8882eb054c2SPeter Maydell  ;;
889a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
890a5665051SPaolo Bonzini  ;;
891a5665051SPaolo Bonzini  --meson=*) meson="$optarg"
892a5665051SPaolo Bonzini  ;;
89348328880SPaolo Bonzini  --ninja=*) ninja="$optarg"
89448328880SPaolo Bonzini  ;;
895e2d8830eSBrad  --smbd=*) smbd="$optarg"
896e2d8830eSBrad  ;;
897e2a2ed06SJuan Quintela  --extra-cflags=*)
8987d13299dSbellard  ;;
89911cde1c8SBruno Dominguez  --extra-cxxflags=*)
90011cde1c8SBruno Dominguez  ;;
901e2a2ed06SJuan Quintela  --extra-ldflags=*)
9027d13299dSbellard  ;;
9035bc62e01SGerd Hoffmann  --enable-debug-info)
9045bc62e01SGerd Hoffmann  ;;
9055bc62e01SGerd Hoffmann  --disable-debug-info)
9065bc62e01SGerd Hoffmann  ;;
907d75402b5SAlex Bennée  --cross-cc-*)
908d75402b5SAlex Bennée  ;;
90917969268SFam Zheng  --enable-modules)
91017969268SFam Zheng      modules="yes"
91117969268SFam Zheng  ;;
9123aa88b31SStefan Hajnoczi  --disable-modules)
9133aa88b31SStefan Hajnoczi      modules="no"
9143aa88b31SStefan Hajnoczi  ;;
915bd83c861SChristian Ehrhardt  --disable-module-upgrades) module_upgrades="no"
916bd83c861SChristian Ehrhardt  ;;
917bd83c861SChristian Ehrhardt  --enable-module-upgrades) module_upgrades="yes"
918bd83c861SChristian Ehrhardt  ;;
9192ff6b91eSJuan Quintela  --cpu=*)
9207d13299dSbellard  ;;
921b1a550a0Spbrook  --target-list=*) target_list="$optarg"
922447e133fSAlex Bennée                   if test "$target_list_exclude"; then
923447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
924447e133fSAlex Bennée                   fi
925447e133fSAlex Bennée  ;;
926447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
927447e133fSAlex Bennée                   if test "$target_list"; then
928447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
929447e133fSAlex Bennée                   fi
930de83cd02Sbellard  ;;
9315b808275SLluís Vilanova  --enable-trace-backends=*) trace_backends="$optarg"
9325b808275SLluís Vilanova  ;;
9335b808275SLluís Vilanova  # XXX: backwards compatibility
9345b808275SLluís Vilanova  --enable-trace-backend=*) trace_backends="$optarg"
93594a420b1SStefan Hajnoczi  ;;
93674242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
9379410b56cSPrerna Saxena  ;;
9387bc3ca7fSPaolo Bonzini  --with-default-devices) default_devices="true"
939f3494749SPaolo Bonzini  ;;
9407bc3ca7fSPaolo Bonzini  --without-default-devices) default_devices="false"
941f3494749SPaolo Bonzini  ;;
942c87ea116SAlex Bennée  --without-default-features) # processed above
943c87ea116SAlex Bennée  ;;
9447d13299dSbellard  --enable-gprof) gprof="yes"
9457d13299dSbellard  ;;
9461d728c39SBlue Swirl  --enable-gcov) gcov="yes"
9471d728c39SBlue Swirl  ;;
94879427693SLoïc Minier  --static)
94979427693SLoïc Minier    static="yes"
95017884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
95143ce4dfeSbellard  ;;
9520b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
9530b24e75fSPaolo Bonzini  ;;
9540b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
9550b24e75fSPaolo Bonzini  ;;
9563aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
9573aa5d2beSAlon Levy  ;;
9588bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
9598bf188aaSMichael Tokarev  ;;
9600f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
9610f94d6daSAlon Levy  ;;
962528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
9630b24e75fSPaolo Bonzini  ;;
96477433a5fSMarc-André Lureau  --with-suffix=*) qemu_suffix="$optarg"
965023d3d67SEduardo Habkost  ;;
966c6502638SBruce Rogers  --docdir=*) docdir="$optarg"
9670b24e75fSPaolo Bonzini  ;;
968fe0038beSPaolo Bonzini  --localedir=*) localedir="$optarg"
969fe0038beSPaolo Bonzini  ;;
970ca2fb938SAndre Przywara  --sysconfdir=*) sysconfdir="$optarg"
97107381cc1SAnthony Liguori  ;;
972785c23aeSLuiz Capitulino  --localstatedir=*) local_statedir="$optarg"
973785c23aeSLuiz Capitulino  ;;
9743d5eecabSGerd Hoffmann  --firmwarepath=*) firmwarepath="$optarg"
9753d5eecabSGerd Hoffmann  ;;
976181ce1d0SOlaf Hering  --host=*|--build=*|\
977181ce1d0SOlaf Hering  --disable-dependency-tracking|\
978785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
979fe0038beSPaolo Bonzini  --oldincludedir=*|--datarootdir=*|--infodir=*|\
980023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
981023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
982023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
983023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
984023ddd74SMax Filippov    # lots of directory switches by default.
985023ddd74SMax Filippov  ;;
98635be72baSPaolo Bonzini  --disable-sdl) sdl="disabled"
98797a847bcSbellard  ;;
98835be72baSPaolo Bonzini  --enable-sdl) sdl="enabled"
989c4198157SJuan Quintela  ;;
99035be72baSPaolo Bonzini  --disable-sdl-image) sdl_image="disabled"
991a442fe2fSDaniel P. Berrangé  ;;
99235be72baSPaolo Bonzini  --enable-sdl-image) sdl_image="enabled"
993a442fe2fSDaniel P. Berrangé  ;;
9943556c233SPaolo Bonzini  --disable-qom-cast-debug) qom_cast_debug="no"
9953556c233SPaolo Bonzini  ;;
9963556c233SPaolo Bonzini  --enable-qom-cast-debug) qom_cast_debug="yes"
9973556c233SPaolo Bonzini  ;;
99869202b40SPaolo Bonzini  --disable-virtfs) virtfs="disabled"
999983eef5aSMeador Inge  ;;
100069202b40SPaolo Bonzini  --enable-virtfs) virtfs="enabled"
1001983eef5aSMeador Inge  ;;
10025c53015aSPaolo Bonzini  --disable-libudev) libudev="disabled"
10035c53015aSPaolo Bonzini  ;;
10045c53015aSPaolo Bonzini  --enable-libudev) libudev="enabled"
10055c53015aSPaolo Bonzini  ;;
1006cece116cSMisono Tomohiro  --disable-virtiofsd) virtiofsd="disabled"
1007cece116cSMisono Tomohiro  ;;
1008cece116cSMisono Tomohiro  --enable-virtiofsd) virtiofsd="enabled"
1009cece116cSMisono Tomohiro  ;;
10106ec0e15dSPaolo Bonzini  --disable-mpath) mpath="disabled"
1011fe8fc5aeSPaolo Bonzini  ;;
10126ec0e15dSPaolo Bonzini  --enable-mpath) mpath="enabled"
1013fe8fc5aeSPaolo Bonzini  ;;
1014a0b93237SPaolo Bonzini  --disable-vnc) vnc="disabled"
1015821601eaSJes Sorensen  ;;
1016a0b93237SPaolo Bonzini  --enable-vnc) vnc="enabled"
1017821601eaSJes Sorensen  ;;
10180e8e77d4SAlex Bennée  --disable-gettext) gettext="disabled"
1019e8f3bd71SMarc-André Lureau  ;;
10200e8e77d4SAlex Bennée  --enable-gettext) gettext="enabled"
1021e8f3bd71SMarc-André Lureau  ;;
10222f6a1ab0Sblueswir1  --oss-lib=*) oss_lib="$optarg"
10232f6a1ab0Sblueswir1  ;;
10240c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
10250c58ac1cSmalc  ;;
102689138857SStefan Weil  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1027b64ec4e4SFam Zheng  ;;
102889138857SStefan Weil  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1029eb852011SMarkus Armbruster  ;;
1030f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
1031f8393946Saurel32  ;;
1032f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
1033f8393946Saurel32  ;;
1034f3d08ee6SPaul Brook  --enable-debug)
1035f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
1036f3d08ee6SPaul Brook      debug_tcg="yes"
10371fcc6d42SPeter Xu      debug_mutex="yes"
1038f3d08ee6SPaul Brook      debug="yes"
1039f3d08ee6SPaul Brook      strip_opt="no"
1040b553a042SJohn Snow      fortify_source="no"
1041f3d08ee6SPaul Brook  ;;
1042247724cbSMarc-André Lureau  --enable-sanitizers) sanitizers="yes"
1043247724cbSMarc-André Lureau  ;;
1044247724cbSMarc-André Lureau  --disable-sanitizers) sanitizers="no"
1045247724cbSMarc-André Lureau  ;;
10460aebab04SLingfeng Yang  --enable-tsan) tsan="yes"
10470aebab04SLingfeng Yang  ;;
10480aebab04SLingfeng Yang  --disable-tsan) tsan="no"
10490aebab04SLingfeng Yang  ;;
1050deb62371SPaolo Bonzini  --enable-sparse) sparse="enabled"
105103b4fe7dSaliguori  ;;
1052deb62371SPaolo Bonzini  --disable-sparse) sparse="disabled"
105303b4fe7dSaliguori  ;;
10541625af87Saliguori  --disable-strip) strip_opt="no"
10551625af87Saliguori  ;;
1056a0b93237SPaolo Bonzini  --disable-vnc-sasl) vnc_sasl="disabled"
10572f9606b3Saliguori  ;;
1058a0b93237SPaolo Bonzini  --enable-vnc-sasl) vnc_sasl="enabled"
1059ea784e3bSJuan Quintela  ;;
1060a0b93237SPaolo Bonzini  --disable-vnc-jpeg) vnc_jpeg="disabled"
10612f6f5c7aSCorentin Chary  ;;
1062a0b93237SPaolo Bonzini  --enable-vnc-jpeg) vnc_jpeg="enabled"
10632f6f5c7aSCorentin Chary  ;;
1064a0b93237SPaolo Bonzini  --disable-vnc-png) vnc_png="disabled"
1065efe556adSCorentin Chary  ;;
1066a0b93237SPaolo Bonzini  --enable-vnc-png) vnc_png="enabled"
1067efe556adSCorentin Chary  ;;
10684d34a86bSPaolo Bonzini  --disable-slirp) slirp="disabled"
1069c20709aaSbellard  ;;
1070fd6fc214SPaolo Bonzini  --enable-slirp) slirp="enabled"
1071fd6fc214SPaolo Bonzini  ;;
10724d34a86bSPaolo Bonzini  --enable-slirp=git) slirp="internal"
10737c57bdd8SMarc-André Lureau  ;;
1074675b9b53SMarc-André Lureau  --enable-slirp=system) slirp="system"
1075675b9b53SMarc-André Lureau  ;;
1076e0e6c8c0Saliguori  --disable-vde) vde="no"
10778a16d273Sths  ;;
1078dfb278bdSJuan Quintela  --enable-vde) vde="yes"
1079dfb278bdSJuan Quintela  ;;
108058952137SVincenzo Maffione  --disable-netmap) netmap="no"
108158952137SVincenzo Maffione  ;;
108258952137SVincenzo Maffione  --enable-netmap) netmap="yes"
108358952137SVincenzo Maffione  ;;
10841badb709SPaolo Bonzini  --disable-xen) xen="disabled"
1085e37630caSaliguori  ;;
10861badb709SPaolo Bonzini  --enable-xen) xen="enabled"
1087fc321b4bSJuan Quintela  ;;
10881badb709SPaolo Bonzini  --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1089eb6fda0fSAnthony PERARD  ;;
10901badb709SPaolo Bonzini  --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1091eb6fda0fSAnthony PERARD  ;;
10928c6d4ff4SPaolo Bonzini  --disable-brlapi) brlapi="disabled"
10932e4d9fb1Saurel32  ;;
10948c6d4ff4SPaolo Bonzini  --enable-brlapi) brlapi="enabled"
10954ffcedb6SJuan Quintela  ;;
10961badb709SPaolo Bonzini  --disable-kvm) kvm="disabled"
10977ba1e619Saliguori  ;;
10981badb709SPaolo Bonzini  --enable-kvm) kvm="enabled"
1099b31a0277SJuan Quintela  ;;
11001badb709SPaolo Bonzini  --disable-hax) hax="disabled"
1101180fb750Szhanghailiang  ;;
11021badb709SPaolo Bonzini  --enable-hax) hax="enabled"
1103180fb750Szhanghailiang  ;;
11041badb709SPaolo Bonzini  --disable-hvf) hvf="disabled"
1105c97d6d2cSSergio Andres Gomez Del Real  ;;
11061badb709SPaolo Bonzini  --enable-hvf) hvf="enabled"
1107c97d6d2cSSergio Andres Gomez Del Real  ;;
110874a414a1SReinoud Zandijk  --disable-nvmm) nvmm="disabled"
110974a414a1SReinoud Zandijk  ;;
111074a414a1SReinoud Zandijk  --enable-nvmm) nvmm="enabled"
111174a414a1SReinoud Zandijk  ;;
11121badb709SPaolo Bonzini  --disable-whpx) whpx="disabled"
1113d661d9a4SJustin Terry (VM)  ;;
11141badb709SPaolo Bonzini  --enable-whpx) whpx="enabled"
1115d661d9a4SJustin Terry (VM)  ;;
1116c6fbea47SRichard Henderson  --disable-tcg-interpreter) tcg_interpreter="false"
11179195b2c2SStefan Weil  ;;
1118c6fbea47SRichard Henderson  --enable-tcg-interpreter) tcg_interpreter="true"
11199195b2c2SStefan Weil  ;;
1120727c8bb8SPaolo Bonzini  --disable-cap-ng)  cap_ng="disabled"
112147e98658SCorey Bryant  ;;
1122727c8bb8SPaolo Bonzini  --enable-cap-ng) cap_ng="enabled"
112347e98658SCorey Bryant  ;;
11241badb709SPaolo Bonzini  --disable-tcg) tcg="disabled"
1125b3f6ea7eSPaolo Bonzini  ;;
11261badb709SPaolo Bonzini  --enable-tcg) tcg="enabled"
1127b3f6ea7eSPaolo Bonzini  ;;
1128aa087962SPaolo Bonzini  --disable-malloc-trim) malloc_trim="disabled"
11295a22ab71SYang Zhong  ;;
1130aa087962SPaolo Bonzini  --enable-malloc-trim) malloc_trim="enabled"
11315a22ab71SYang Zhong  ;;
1132cd4ec0b4SGerd Hoffmann  --disable-spice) spice="no"
1133cd4ec0b4SGerd Hoffmann  ;;
113458d3f3ffSGerd Hoffmann  --enable-spice)
113558d3f3ffSGerd Hoffmann      spice_protocol="yes"
113658d3f3ffSGerd Hoffmann      spice="yes"
113758d3f3ffSGerd Hoffmann  ;;
113858d3f3ffSGerd Hoffmann  --disable-spice-protocol)
113958d3f3ffSGerd Hoffmann      spice_protocol="no"
114058d3f3ffSGerd Hoffmann      spice="no"
114158d3f3ffSGerd Hoffmann  ;;
114258d3f3ffSGerd Hoffmann  --enable-spice-protocol) spice_protocol="yes"
1143cd4ec0b4SGerd Hoffmann  ;;
11449db405a3SPaolo Bonzini  --disable-libiscsi) libiscsi="disabled"
1145c589b249SRonnie Sahlberg  ;;
11469db405a3SPaolo Bonzini  --enable-libiscsi) libiscsi="enabled"
1147c589b249SRonnie Sahlberg  ;;
114830045c05SPaolo Bonzini  --disable-libnfs) libnfs="disabled"
11496542aa9cSPeter Lieven  ;;
115030045c05SPaolo Bonzini  --enable-libnfs) libnfs="enabled"
11516542aa9cSPeter Lieven  ;;
115205c2a3e7Sbellard  --enable-profiler) profiler="yes"
115305c2a3e7Sbellard  ;;
1154b4e312e9SPaolo Bonzini  --disable-cocoa) cocoa="disabled"
115514821030SPavel Borzenkov  ;;
1156a23a6789SPaolo Bonzini  --enable-cocoa) cocoa="enabled"
11575b0753e0Sbellard  ;;
1158cad25d69Spbrook  --disable-system) softmmu="no"
11590a8e90f4Spbrook  ;;
1160cad25d69Spbrook  --enable-system) softmmu="yes"
11610a8e90f4Spbrook  ;;
11620953a80fSZachary Amsden  --disable-user)
11630953a80fSZachary Amsden      linux_user="no" ;
11640953a80fSZachary Amsden      bsd_user="no" ;
11650953a80fSZachary Amsden  ;;
11660953a80fSZachary Amsden  --enable-user) ;;
1167831b7825Sths  --disable-linux-user) linux_user="no"
11680a8e90f4Spbrook  ;;
1169831b7825Sths  --enable-linux-user) linux_user="yes"
1170831b7825Sths  ;;
117184778508Sblueswir1  --disable-bsd-user) bsd_user="no"
117284778508Sblueswir1  ;;
117384778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
117484778508Sblueswir1  ;;
117540d6444eSAvi Kivity  --enable-pie) pie="yes"
117634005a00SKirill A. Shutemov  ;;
117740d6444eSAvi Kivity  --disable-pie) pie="no"
117834005a00SKirill A. Shutemov  ;;
117985aa5189Sbellard  --enable-werror) werror="yes"
118085aa5189Sbellard  ;;
118185aa5189Sbellard  --disable-werror) werror="no"
118285aa5189Sbellard  ;;
1183cdad781dSDaniele Buono  --enable-lto) lto="true"
1184cdad781dSDaniele Buono  ;;
1185cdad781dSDaniele Buono  --disable-lto) lto="false"
1186cdad781dSDaniele Buono  ;;
118763678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
118863678e17SSteven Noonan  ;;
118963678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
119063678e17SSteven Noonan  ;;
11911e4f6065SDaniele Buono  --enable-safe-stack) safe_stack="yes"
11921e4f6065SDaniele Buono  ;;
11931e4f6065SDaniele Buono  --disable-safe-stack) safe_stack="no"
11941e4f6065SDaniele Buono  ;;
11959e62ba48SDaniele Buono  --enable-cfi)
11969e62ba48SDaniele Buono      cfi="true";
11979e62ba48SDaniele Buono      lto="true";
11989e62ba48SDaniele Buono  ;;
11999e62ba48SDaniele Buono  --disable-cfi) cfi="false"
12009e62ba48SDaniele Buono  ;;
12019e62ba48SDaniele Buono  --enable-cfi-debug) cfi_debug="true"
12029e62ba48SDaniele Buono  ;;
12039e62ba48SDaniele Buono  --disable-cfi-debug) cfi_debug="false"
12049e62ba48SDaniele Buono  ;;
12055285e593SYonggang Luo  --disable-curses) curses="disabled"
12064d3b6f6eSbalrog  ;;
12075285e593SYonggang Luo  --enable-curses) curses="enabled"
1208c584a6d0SJuan Quintela  ;;
12095285e593SYonggang Luo  --disable-iconv) iconv="disabled"
1210e08bb301SSamuel Thibault  ;;
12115285e593SYonggang Luo  --enable-iconv) iconv="enabled"
1212e08bb301SSamuel Thibault  ;;
1213f9cd86feSPaolo Bonzini  --disable-curl) curl="disabled"
1214769ce76dSAlexander Graf  ;;
1215f9cd86feSPaolo Bonzini  --enable-curl) curl="enabled"
1216788c8196SJuan Quintela  ;;
1217fbb4121dSPaolo Bonzini  --disable-fdt) fdt="disabled"
12182df87df7SJuan Quintela  ;;
1219fbb4121dSPaolo Bonzini  --enable-fdt) fdt="enabled"
1220fbb4121dSPaolo Bonzini  ;;
1221fbb4121dSPaolo Bonzini  --enable-fdt=git) fdt="internal"
1222fbb4121dSPaolo Bonzini  ;;
1223fbb4121dSPaolo Bonzini  --enable-fdt=system) fdt="system"
12242df87df7SJuan Quintela  ;;
12255c6c3a6cSChristoph Hellwig  --disable-linux-aio) linux_aio="no"
12265c6c3a6cSChristoph Hellwig  ;;
12275c6c3a6cSChristoph Hellwig  --enable-linux-aio) linux_aio="yes"
12285c6c3a6cSChristoph Hellwig  ;;
1229c10dd856SAarushi Mehta  --disable-linux-io-uring) linux_io_uring="no"
1230c10dd856SAarushi Mehta  ;;
1231c10dd856SAarushi Mehta  --enable-linux-io-uring) linux_io_uring="yes"
1232c10dd856SAarushi Mehta  ;;
1233f7f2d651SPaolo Bonzini  --disable-attr) attr="disabled"
1234758e8e38SVenkateswararao Jujjuri (JV)  ;;
1235f7f2d651SPaolo Bonzini  --enable-attr) attr="enabled"
1236758e8e38SVenkateswararao Jujjuri (JV)  ;;
1237a40161cbSPaolo Bonzini  --disable-membarrier) membarrier="no"
1238a40161cbSPaolo Bonzini  ;;
1239a40161cbSPaolo Bonzini  --enable-membarrier) membarrier="yes"
1240a40161cbSPaolo Bonzini  ;;
1241c8d5450bSPaolo Bonzini  --disable-blobs) blobs="false"
124277755340Sths  ;;
12437e563bfbSThomas Huth  --with-pkgversion=*) pkgversion="$optarg"
12444a19f1ecSpbrook  ;;
1245519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
1246519175a2SAlex Barcelo  ;;
124770c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
124870c60c08SStefan Hajnoczi  ;;
124970c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
125070c60c08SStefan Hajnoczi  ;;
12517d992e4dSPeter Lieven  --enable-debug-stack-usage) debug_stack_usage="yes"
12527d992e4dSPeter Lieven  ;;
1253f0d92b56SLongpeng(Mike)  --enable-crypto-afalg) crypto_afalg="yes"
1254f0d92b56SLongpeng(Mike)  ;;
1255f0d92b56SLongpeng(Mike)  --disable-crypto-afalg) crypto_afalg="no"
1256f0d92b56SLongpeng(Mike)  ;;
1257e3667660SYonggang Luo  --disable-docs) docs="disabled"
125870ec5dc0SAnthony Liguori  ;;
1259e3667660SYonggang Luo  --enable-docs) docs="enabled"
126083a3ab8bSJuan Quintela  ;;
1261d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
1262d5970055SMichael S. Tsirkin  ;;
1263d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
1264d5970055SMichael S. Tsirkin  ;;
1265042cea27SGonglei  --disable-vhost-crypto) vhost_crypto="no"
1266042cea27SGonglei  ;;
1267299e6f19SPaolo Bonzini  --enable-vhost-crypto) vhost_crypto="yes"
1268042cea27SGonglei  ;;
12695e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
12705e9be92dSNicholas Bellinger  ;;
12715e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
12725e9be92dSNicholas Bellinger  ;;
1273fc0b9b0eSStefan Hajnoczi  --disable-vhost-vsock) vhost_vsock="no"
1274fc0b9b0eSStefan Hajnoczi  ;;
1275fc0b9b0eSStefan Hajnoczi  --enable-vhost-vsock) vhost_vsock="yes"
1276fc0b9b0eSStefan Hajnoczi  ;;
1277e5e856c1SStefan Hajnoczi  --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
1278bc15e44cSStefan Hajnoczi  ;;
1279e5e856c1SStefan Hajnoczi  --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
1280bc15e44cSStefan Hajnoczi  ;;
128198fc1adaSDr. David Alan Gilbert  --disable-vhost-user-fs) vhost_user_fs="no"
128298fc1adaSDr. David Alan Gilbert  ;;
128398fc1adaSDr. David Alan Gilbert  --enable-vhost-user-fs) vhost_user_fs="yes"
128498fc1adaSDr. David Alan Gilbert  ;;
1285da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
128620ff075bSMichael Walle  ;;
1287da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
128820ff075bSMichael Walle  ;;
1289fabd1e93SPaolo Bonzini  --disable-rbd) rbd="disabled"
1290f27aaf4bSChristian Brunner  ;;
1291fabd1e93SPaolo Bonzini  --enable-rbd) rbd="enabled"
1292f27aaf4bSChristian Brunner  ;;
12938c84cf11SSergei Trofimovich  --disable-xfsctl) xfs="no"
12948c84cf11SSergei Trofimovich  ;;
12958c84cf11SSergei Trofimovich  --enable-xfsctl) xfs="yes"
12968c84cf11SSergei Trofimovich  ;;
12977b02f544SMarc-André Lureau  --disable-smartcard) smartcard="no"
1298111a38b0SRobert Relyea  ;;
12997b02f544SMarc-André Lureau  --enable-smartcard) smartcard="yes"
1300111a38b0SRobert Relyea  ;;
13010a40bcb7SCésar Belley  --disable-u2f) u2f="disabled"
13020a40bcb7SCésar Belley  ;;
13030a40bcb7SCésar Belley  --enable-u2f) u2f="enabled"
13040a40bcb7SCésar Belley  ;;
13052b2325ffSGerd Hoffmann  --disable-libusb) libusb="no"
13062b2325ffSGerd Hoffmann  ;;
13072b2325ffSGerd Hoffmann  --enable-libusb) libusb="yes"
13082b2325ffSGerd Hoffmann  ;;
130969354a83SHans de Goede  --disable-usb-redir) usb_redir="no"
131069354a83SHans de Goede  ;;
131169354a83SHans de Goede  --enable-usb-redir) usb_redir="yes"
131269354a83SHans de Goede  ;;
13131ffb3bbbSPaolo Bonzini  --disable-zlib-test)
13141ece9905SAlon Levy  ;;
13150c32a0aeSPaolo Bonzini  --disable-lzo) lzo="disabled"
1316b25c9dffSStefan Weil  ;;
13170c32a0aeSPaolo Bonzini  --enable-lzo) lzo="enabled"
1318607dacd0Sqiaonuohan  ;;
1319241611eaSPaolo Bonzini  --disable-snappy) snappy="disabled"
1320b25c9dffSStefan Weil  ;;
1321241611eaSPaolo Bonzini  --enable-snappy) snappy="enabled"
1322607dacd0Sqiaonuohan  ;;
132329ba6116SPaolo Bonzini  --disable-bzip2) bzip2="disabled"
13246b383c08SPeter Wu  ;;
132529ba6116SPaolo Bonzini  --enable-bzip2) bzip2="enabled"
13266b383c08SPeter Wu  ;;
1327ecea3696SPaolo Bonzini  --enable-lzfse) lzfse="enabled"
132883bc1f97SJulio Faracco  ;;
1329ecea3696SPaolo Bonzini  --disable-lzfse) lzfse="disabled"
133083bc1f97SJulio Faracco  ;;
1331b1def33dSPaolo Bonzini  --disable-zstd) zstd="disabled"
13323a678481SJuan Quintela  ;;
1333b1def33dSPaolo Bonzini  --enable-zstd) zstd="enabled"
13343a678481SJuan Quintela  ;;
1335d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1336d138cee9SMichael Roth  ;;
1337d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1338d138cee9SMichael Roth  ;;
1339b846ab7cSPaolo Bonzini  --enable-guest-agent-msi) guest_agent_msi="enabled"
13409dacf32dSYossi Hindin  ;;
1341b846ab7cSPaolo Bonzini  --disable-guest-agent-msi) guest_agent_msi="disabled"
13429dacf32dSYossi Hindin  ;;
1343d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1344d9840e25STomoki Sekiyama  ;;
1345d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1346d9840e25STomoki Sekiyama  ;;
1347d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1348d9840e25STomoki Sekiyama  ;;
1349d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1350d9840e25STomoki Sekiyama  ;;
1351d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1352d9840e25STomoki Sekiyama  ;;
1353d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1354d9840e25STomoki Sekiyama  ;;
13554b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
13564b1c11fdSDaniel P. Berrange  ;;
13574b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
13584b1c11fdSDaniel P. Berrange  ;;
135990835c2bSPaolo Bonzini  --enable-seccomp) seccomp="enabled"
1360f794573eSEduardo Otubo  ;;
136190835c2bSPaolo Bonzini  --disable-seccomp) seccomp="disabled"
1362f794573eSEduardo Otubo  ;;
136308821ca2SPaolo Bonzini  --disable-glusterfs) glusterfs="disabled"
1364eb100396SBharata B Rao  ;;
136586583a07SLiam Merwick  --disable-avx2) avx2_opt="no"
136686583a07SLiam Merwick  ;;
136786583a07SLiam Merwick  --enable-avx2) avx2_opt="yes"
136886583a07SLiam Merwick  ;;
13696b8cd447SRobert Hoo  --disable-avx512f) avx512f_opt="no"
13706b8cd447SRobert Hoo  ;;
13716b8cd447SRobert Hoo  --enable-avx512f) avx512f_opt="yes"
13726b8cd447SRobert Hoo  ;;
13736b8cd447SRobert Hoo
137408821ca2SPaolo Bonzini  --enable-glusterfs) glusterfs="enabled"
1375eb100396SBharata B Rao  ;;
137652b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
137752b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1378583f6e7bSStefan Hajnoczi  ;;
1379cb6414dfSFam Zheng  --enable-vhdx|--disable-vhdx)
1380cb6414dfSFam Zheng      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1381cb6414dfSFam Zheng  ;;
1382315d3184SFam Zheng  --enable-uuid|--disable-uuid)
1383315d3184SFam Zheng      echo "$0: $opt is obsolete, UUID support is always built" >&2
1384315d3184SFam Zheng  ;;
13851b695471SPaolo Bonzini  --disable-gtk) gtk="disabled"
1386a4ccabcfSAnthony Liguori  ;;
13871b695471SPaolo Bonzini  --enable-gtk) gtk="enabled"
1388a4ccabcfSAnthony Liguori  ;;
1389a1c5e949SDaniel P. Berrange  --tls-priority=*) tls_priority="$optarg"
1390a1c5e949SDaniel P. Berrange  ;;
1391ddbb0d09SDaniel P. Berrange  --disable-gnutls) gnutls="no"
1392ddbb0d09SDaniel P. Berrange  ;;
1393ddbb0d09SDaniel P. Berrange  --enable-gnutls) gnutls="yes"
1394ddbb0d09SDaniel P. Berrange  ;;
139591bfcdb0SDaniel P. Berrange  --disable-nettle) nettle="no"
139691bfcdb0SDaniel P. Berrange  ;;
139791bfcdb0SDaniel P. Berrange  --enable-nettle) nettle="yes"
139891bfcdb0SDaniel P. Berrange  ;;
139991bfcdb0SDaniel P. Berrange  --disable-gcrypt) gcrypt="no"
140091bfcdb0SDaniel P. Berrange  ;;
140191bfcdb0SDaniel P. Berrange  --enable-gcrypt) gcrypt="yes"
140291bfcdb0SDaniel P. Berrange  ;;
14038953caf3SDaniel P. Berrange  --disable-auth-pam) auth_pam="no"
14048953caf3SDaniel P. Berrange  ;;
14058953caf3SDaniel P. Berrange  --enable-auth-pam) auth_pam="yes"
14068953caf3SDaniel P. Berrange  ;;
14072da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
14082da776dbSMichael R. Hines  ;;
14092da776dbSMichael R. Hines  --disable-rdma) rdma="no"
14102da776dbSMichael R. Hines  ;;
141121ab34c9SMarcel Apfelbaum  --enable-pvrdma) pvrdma="yes"
141221ab34c9SMarcel Apfelbaum  ;;
141321ab34c9SMarcel Apfelbaum  --disable-pvrdma) pvrdma="no"
141421ab34c9SMarcel Apfelbaum  ;;
1415bbbf9bfbSStefan Weil  --disable-vte) vte="no"
1416bbbf9bfbSStefan Weil  ;;
1417bbbf9bfbSStefan Weil  --enable-vte) vte="yes"
1418bbbf9bfbSStefan Weil  ;;
14199d9e1521SGerd Hoffmann  --disable-virglrenderer) virglrenderer="no"
14209d9e1521SGerd Hoffmann  ;;
14219d9e1521SGerd Hoffmann  --enable-virglrenderer) virglrenderer="yes"
14229d9e1521SGerd Hoffmann  ;;
1423e91c793cSCole Robinson  --disable-tpm) tpm="no"
1424e91c793cSCole Robinson  ;;
1425ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1426ab214c29SStefan Berger  ;;
1427b10d49d7SPino Toscano  --disable-libssh) libssh="no"
14280a12ec87SRichard W.M. Jones  ;;
1429b10d49d7SPino Toscano  --enable-libssh) libssh="yes"
14300a12ec87SRichard W.M. Jones  ;;
1431ed1701c6SDr. David Alan Gilbert  --disable-live-block-migration) live_block_migration="no"
1432ed1701c6SDr. David Alan Gilbert  ;;
1433ed1701c6SDr. David Alan Gilbert  --enable-live-block-migration) live_block_migration="yes"
1434ed1701c6SDr. David Alan Gilbert  ;;
1435a99d57bbSWanlong Gao  --disable-numa) numa="no"
1436a99d57bbSWanlong Gao  ;;
1437a99d57bbSWanlong Gao  --enable-numa) numa="yes"
1438a99d57bbSWanlong Gao  ;;
1439ed279a06SKlim Kireev  --disable-libxml2) libxml2="no"
1440ed279a06SKlim Kireev  ;;
1441ed279a06SKlim Kireev  --enable-libxml2) libxml2="yes"
1442ed279a06SKlim Kireev  ;;
14432847b469SFam Zheng  --disable-tcmalloc) tcmalloc="no"
14442847b469SFam Zheng  ;;
14452847b469SFam Zheng  --enable-tcmalloc) tcmalloc="yes"
14462847b469SFam Zheng  ;;
14477b01cb97SAlexandre Derumier  --disable-jemalloc) jemalloc="no"
14487b01cb97SAlexandre Derumier  ;;
14497b01cb97SAlexandre Derumier  --enable-jemalloc) jemalloc="yes"
14507b01cb97SAlexandre Derumier  ;;
1451a6b1d4c0SChanglong Xie  --disable-replication) replication="no"
1452a6b1d4c0SChanglong Xie  ;;
1453a6b1d4c0SChanglong Xie  --enable-replication) replication="yes"
1454a6b1d4c0SChanglong Xie  ;;
14552f740136SJeff Cody  --disable-bochs) bochs="no"
14562f740136SJeff Cody  ;;
14572f740136SJeff Cody  --enable-bochs) bochs="yes"
14582f740136SJeff Cody  ;;
14592f740136SJeff Cody  --disable-cloop) cloop="no"
14602f740136SJeff Cody  ;;
14612f740136SJeff Cody  --enable-cloop) cloop="yes"
14622f740136SJeff Cody  ;;
14632f740136SJeff Cody  --disable-dmg) dmg="no"
14642f740136SJeff Cody  ;;
14652f740136SJeff Cody  --enable-dmg) dmg="yes"
14662f740136SJeff Cody  ;;
14672f740136SJeff Cody  --disable-qcow1) qcow1="no"
14682f740136SJeff Cody  ;;
14692f740136SJeff Cody  --enable-qcow1) qcow1="yes"
14702f740136SJeff Cody  ;;
14712f740136SJeff Cody  --disable-vdi) vdi="no"
14722f740136SJeff Cody  ;;
14732f740136SJeff Cody  --enable-vdi) vdi="yes"
14742f740136SJeff Cody  ;;
14752f740136SJeff Cody  --disable-vvfat) vvfat="no"
14762f740136SJeff Cody  ;;
14772f740136SJeff Cody  --enable-vvfat) vvfat="yes"
14782f740136SJeff Cody  ;;
14792f740136SJeff Cody  --disable-qed) qed="no"
14802f740136SJeff Cody  ;;
14812f740136SJeff Cody  --enable-qed) qed="yes"
14822f740136SJeff Cody  ;;
14832f740136SJeff Cody  --disable-parallels) parallels="no"
14842f740136SJeff Cody  ;;
14852f740136SJeff Cody  --enable-parallels) parallels="yes"
14862f740136SJeff Cody  ;;
1487e6a74868SMarc-André Lureau  --disable-vhost-user) vhost_user="no"
1488e6a74868SMarc-André Lureau  ;;
1489299e6f19SPaolo Bonzini  --enable-vhost-user) vhost_user="yes"
1490299e6f19SPaolo Bonzini  ;;
1491108a6481SCindy Lu  --disable-vhost-vdpa) vhost_vdpa="no"
1492108a6481SCindy Lu  ;;
1493108a6481SCindy Lu  --enable-vhost-vdpa) vhost_vdpa="yes"
1494108a6481SCindy Lu  ;;
1495299e6f19SPaolo Bonzini  --disable-vhost-kernel) vhost_kernel="no"
1496299e6f19SPaolo Bonzini  ;;
1497299e6f19SPaolo Bonzini  --enable-vhost-kernel) vhost_kernel="yes"
1498e6a74868SMarc-André Lureau  ;;
14998b18cdbfSRichard Henderson  --disable-capstone) capstone="disabled"
15008ca80760SRichard Henderson  ;;
15018b18cdbfSRichard Henderson  --enable-capstone) capstone="enabled"
15028ca80760SRichard Henderson  ;;
15038b18cdbfSRichard Henderson  --enable-capstone=git) capstone="internal"
1504e219c499SRichard Henderson  ;;
1505e219c499SRichard Henderson  --enable-capstone=system) capstone="system"
1506e219c499SRichard Henderson  ;;
1507cc84d63aSDaniel P. Berrange  --with-git=*) git="$optarg"
1508cc84d63aSDaniel P. Berrange  ;;
15097d7dbf9dSDan Streetman  --enable-git-update)
15107d7dbf9dSDan Streetman      git_submodules_action="update"
15117d7dbf9dSDan Streetman      echo "--enable-git-update deprecated, use --with-git-submodules=update"
1512f62bbee5SDaniel P. Berrange  ;;
15137d7dbf9dSDan Streetman  --disable-git-update)
15147d7dbf9dSDan Streetman      git_submodules_action="validate"
15157d7dbf9dSDan Streetman      echo "--disable-git-update deprecated, use --with-git-submodules=validate"
15167d7dbf9dSDan Streetman  ;;
15177d7dbf9dSDan Streetman  --with-git-submodules=*)
15187d7dbf9dSDan Streetman      git_submodules_action="$optarg"
1519f62bbee5SDaniel P. Berrange  ;;
1520ba59fb77SPaolo Bonzini  --enable-debug-mutex) debug_mutex=yes
1521ba59fb77SPaolo Bonzini  ;;
1522ba59fb77SPaolo Bonzini  --disable-debug-mutex) debug_mutex=no
1523ba59fb77SPaolo Bonzini  ;;
152417824406SJunyan He  --enable-libpmem) libpmem=yes
152517824406SJunyan He  ;;
152617824406SJunyan He  --disable-libpmem) libpmem=no
152717824406SJunyan He  ;;
15284113f4cfSLaurent Vivier  --enable-xkbcommon) xkbcommon="enabled"
152975411919SJames Le Cuirot  ;;
15304113f4cfSLaurent Vivier  --disable-xkbcommon) xkbcommon="disabled"
153175411919SJames Le Cuirot  ;;
153240e8c6f4SAlex Bennée  --enable-plugins) plugins="yes"
153340e8c6f4SAlex Bennée  ;;
153440e8c6f4SAlex Bennée  --disable-plugins) plugins="no"
153540e8c6f4SAlex Bennée  ;;
1536afc3a8f9SAlex Bennée  --enable-containers) use_containers="yes"
1537afc3a8f9SAlex Bennée  ;;
1538afc3a8f9SAlex Bennée  --disable-containers) use_containers="no"
1539afc3a8f9SAlex Bennée  ;;
1540adc28027SAlexander Bulekov  --enable-fuzzing) fuzzing=yes
1541adc28027SAlexander Bulekov  ;;
1542adc28027SAlexander Bulekov  --disable-fuzzing) fuzzing=no
1543adc28027SAlexander Bulekov  ;;
1544f48e590aSAlex Bennée  --gdb=*) gdb_bin="$optarg"
1545f48e590aSAlex Bennée  ;;
1546b767d257SMarek Marczykowski-Górecki  --enable-rng-none) rng_none=yes
1547b767d257SMarek Marczykowski-Górecki  ;;
1548b767d257SMarek Marczykowski-Górecki  --disable-rng-none) rng_none=no
1549b767d257SMarek Marczykowski-Górecki  ;;
155054e7aac0SAlexey Krasikov  --enable-keyring) secret_keyring="yes"
155154e7aac0SAlexey Krasikov  ;;
155254e7aac0SAlexey Krasikov  --disable-keyring) secret_keyring="no"
155354e7aac0SAlexey Krasikov  ;;
155421b2eca6SJingqi Liu  --enable-libdaxctl) libdaxctl=yes
155521b2eca6SJingqi Liu  ;;
155621b2eca6SJingqi Liu  --disable-libdaxctl) libdaxctl=no
155721b2eca6SJingqi Liu  ;;
1558a484a719SMax Reitz  --enable-fuse) fuse="enabled"
1559a484a719SMax Reitz  ;;
1560a484a719SMax Reitz  --disable-fuse) fuse="disabled"
1561a484a719SMax Reitz  ;;
1562df4ea709SMax Reitz  --enable-fuse-lseek) fuse_lseek="enabled"
1563df4ea709SMax Reitz  ;;
1564df4ea709SMax Reitz  --disable-fuse-lseek) fuse_lseek="disabled"
1565df4ea709SMax Reitz  ;;
1566106ad1f9SPaolo Bonzini  --enable-multiprocess) multiprocess="enabled"
15673090de69SJagannathan Raman  ;;
1568106ad1f9SPaolo Bonzini  --disable-multiprocess) multiprocess="disabled"
15693090de69SJagannathan Raman  ;;
157020cf7b8eSDenis Plotnikov  --enable-gio) gio=yes
157120cf7b8eSDenis Plotnikov  ;;
157220cf7b8eSDenis Plotnikov  --disable-gio) gio=no
157320cf7b8eSDenis Plotnikov  ;;
1574b8e0c493SJoelle van Dyne  --enable-slirp-smbd) slirp_smbd=yes
1575b8e0c493SJoelle van Dyne  ;;
1576b8e0c493SJoelle van Dyne  --disable-slirp-smbd) slirp_smbd=no
1577b8e0c493SJoelle van Dyne  ;;
15782d2ad6d0SFam Zheng  *)
15792d2ad6d0SFam Zheng      echo "ERROR: unknown option $opt"
15802d2ad6d0SFam Zheng      echo "Try '$0 --help' for more information"
15812d2ad6d0SFam Zheng      exit 1
15827f1559c6Sbalrog  ;;
15837d13299dSbellard  esac
15847d13299dSbellarddone
15857d13299dSbellard
15867d7dbf9dSDan Streetmancase $git_submodules_action in
15877d7dbf9dSDan Streetman    update|validate)
15887d7dbf9dSDan Streetman        if test ! -e "$source_path/.git"; then
15897d7dbf9dSDan Streetman            echo "ERROR: cannot $git_submodules_action git submodules without .git"
15907d7dbf9dSDan Streetman            exit 1
15917d7dbf9dSDan Streetman        fi
15927d7dbf9dSDan Streetman    ;;
15937d7dbf9dSDan Streetman    ignore)
15947d7dbf9dSDan Streetman    ;;
15957d7dbf9dSDan Streetman    *)
15967d7dbf9dSDan Streetman        echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
15977d7dbf9dSDan Streetman        exit 1
15987d7dbf9dSDan Streetman    ;;
15997d7dbf9dSDan Streetmanesac
16007d7dbf9dSDan Streetman
160122a87800SMarc-André Lureaulibdir="${libdir:-$prefix/lib}"
160222a87800SMarc-André Lureaulibexecdir="${libexecdir:-$prefix/libexec}"
160322a87800SMarc-André Lureauincludedir="${includedir:-$prefix/include}"
160422a87800SMarc-André Lureau
160522a87800SMarc-André Lureauif test "$mingw32" = "yes" ; then
160615588a62SJoshua Watt    bindir="${bindir:-$prefix}"
160722a87800SMarc-André Lureauelse
160815588a62SJoshua Watt    bindir="${bindir:-$prefix/bin}"
160915588a62SJoshua Wattfi
161022a87800SMarc-André Lureaumandir="${mandir:-$prefix/share/man}"
161122a87800SMarc-André Lureaudatadir="${datadir:-$prefix/share}"
1612ca8c0909SMarc-André Lureaudocdir="${docdir:-$prefix/share/doc}"
161322a87800SMarc-André Lureausysconfdir="${sysconfdir:-$prefix/etc}"
161422a87800SMarc-André Lureaulocal_statedir="${local_statedir:-$prefix/var}"
161516bf7a33SPaolo Bonzinifirmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
161616bf7a33SPaolo Bonzinilocaledir="${localedir:-$datadir/locale}"
161722a87800SMarc-André Lureau
161840293e58Sbellardcase "$cpu" in
1619e3608d66SRichard Henderson    ppc)
1620e3608d66SRichard Henderson           CPU_CFLAGS="-m32"
1621db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1622e3608d66SRichard Henderson           ;;
1623e3608d66SRichard Henderson    ppc64)
1624e3608d66SRichard Henderson           CPU_CFLAGS="-m64"
1625db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1626e3608d66SRichard Henderson           ;;
16279b9c37c3SRichard Henderson    sparc)
1628f1079bb8SRichard Henderson           CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1629db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
16303142255cSblueswir1           ;;
1631ed968ff1SJuan Quintela    sparc64)
163279f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1633db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
16343142255cSblueswir1           ;;
163576d83bdeSths    s390)
1636061cdd81SRichard Henderson           CPU_CFLAGS="-m31"
1637db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
163828d7cc49SRichard Henderson           ;;
163928d7cc49SRichard Henderson    s390x)
1640061cdd81SRichard Henderson           CPU_CFLAGS="-m64"
1641db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
164276d83bdeSths           ;;
164340293e58Sbellard    i386)
164479f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m32"
1645db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
164640293e58Sbellard           ;;
164740293e58Sbellard    x86_64)
16487ebee43eSRichard Henderson           # ??? Only extremely old AMD cpus do not have cmpxchg16b.
16497ebee43eSRichard Henderson           # If we truly care, we should simply detect this case at
16507ebee43eSRichard Henderson           # runtime and generate the fallback to serial emulation.
16517ebee43eSRichard Henderson           CPU_CFLAGS="-m64 -mcx16"
1652db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1653379f6698SPaul Brook           ;;
1654c72b26ecSRichard Henderson    x32)
1655c72b26ecSRichard Henderson           CPU_CFLAGS="-mx32"
1656db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1657c72b26ecSRichard Henderson           ;;
165830163d89SPeter Maydell    # No special flags required for other host CPUs
16593142255cSblueswir1esac
16603142255cSblueswir1
1661b1aa4de1SAlex Bennéeeval "cross_cc_${cpu}=\$cc"
16622038f8c8SPaolo Bonzinicross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
166379f3b12fSPeter CrosthwaiteQEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
166479f3b12fSPeter Crosthwaite
1665affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly
1666affc88ccSPeter Maydell# support, even if we're using TCI.
1667affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then
1668affc88ccSPeter Maydell  bsd_user="no"
1669affc88ccSPeter Maydell  linux_user="no"
1670affc88ccSPeter Maydellfi
1671affc88ccSPeter Maydell
167260e0df25SPeter Maydelldefault_target_list=""
167343692239SMarkus Armbrusterdeprecated_targets_list=ppc64abi32-linux-user
1674fdb75aefSPaolo Bonzinideprecated_features=""
16756e92f823SPeter Maydellmak_wilds=""
16766e92f823SPeter Maydell
167760e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
167873362fc0SPaolo Bonzini    mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
167960e0df25SPeter Maydellfi
168060e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
168173362fc0SPaolo Bonzini    mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
168260e0df25SPeter Maydellfi
168360e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
168473362fc0SPaolo Bonzini    mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
168560e0df25SPeter Maydellfi
168660e0df25SPeter Maydell
16873a5ae4a9SAlex Bennée# If the user doesn't explicitly specify a deprecated target we will
16883a5ae4a9SAlex Bennée# skip it.
16893a5ae4a9SAlex Bennéeif test -z "$target_list"; then
16903a5ae4a9SAlex Bennée    if test -z "$target_list_exclude"; then
16913a5ae4a9SAlex Bennée        target_list_exclude="$deprecated_targets_list"
16923a5ae4a9SAlex Bennée    else
16933a5ae4a9SAlex Bennée        target_list_exclude="$target_list_exclude,$deprecated_targets_list"
16943a5ae4a9SAlex Bennée    fi
16952d838d9bSAlex Bennéefi
16962d838d9bSAlex Bennée
1697447e133fSAlex Bennéefor config in $mak_wilds; do
1698447e133fSAlex Bennée    target="$(basename "$config" .mak)"
169998db9a06SAlex Bennée    if echo "$target_list_exclude" | grep -vq "$target"; then
1700447e133fSAlex Bennée        default_target_list="${default_target_list} $target"
1701447e133fSAlex Bennée    fi
1702447e133fSAlex Bennéedone
17036e92f823SPeter Maydell
1704c53eeaf7SStefan Hajnoczi# Enumerate public trace backends for --help output
170564a6047dSGreg Kurztrace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1706c53eeaf7SStefan Hajnoczi
1707af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1708af5db58eSpbrookcat << EOF
1709af5db58eSpbrook
1710af5db58eSpbrookUsage: configure [options]
1711af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1712af5db58eSpbrook
171308fb77edSStefan WeilStandard options:
171408fb77edSStefan Weil  --help                   print this message
171508fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
171608fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
171708fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
17182deca810SAlex Bennée  --target-list=LIST       set target list (default: build all non-deprecated)
171908fb77edSStefan Weil$(echo Available targets: $default_target_list | \
172008fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
17212deca810SAlex Bennée$(echo Deprecated targets: $deprecated_targets_list | \
17222deca810SAlex Bennée  fold -s -w 53 | sed -e 's/^/                           /')
1723447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
172408fb77edSStefan Weil
172508fb77edSStefan WeilAdvanced options (experts only):
17263812c0c4SJoelle van Dyne  --cross-prefix=PREFIX    use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
172708fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
172808fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
172908fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
173008fb77edSStefan Weil                           build time
173108fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
173208fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
173308fb77edSStefan Weil  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
173411cde1c8SBruno Dominguez  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
173508fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1736d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1737d422b2bcSAlex Bennée  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
173808fb77edSStefan Weil  --make=MAKE              use specified make [$make]
173908fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
17402eb054c2SPeter Maydell  --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1741a5665051SPaolo Bonzini  --meson=MESON            use specified meson [$meson]
174248328880SPaolo Bonzini  --ninja=NINJA            use specified ninja [$ninja]
174308fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1744db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
17457d7dbf9dSDan Streetman  --with-git-submodules=update   update git submodules (default if .git dir exists)
17467d7dbf9dSDan Streetman  --with-git-submodules=validate fail if git submodules are not up to date
17477d7dbf9dSDan Streetman  --with-git-submodules=ignore   do not update or check git submodules (default if no .git dir)
174808fb77edSStefan Weil  --static                 enable static build [$static]
174908fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
175010ff82d1SMarc-André Lureau  --datadir=PATH           install firmware in PATH/$qemu_suffix
1751fe0038beSPaolo Bonzini  --localedir=PATH         install translation in PATH/$qemu_suffix
175210ff82d1SMarc-André Lureau  --docdir=PATH            install documentation in PATH/$qemu_suffix
175308fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
175408fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
1755db1b5f13SThomas Huth  --libexecdir=PATH        install helper binaries in PATH
175610ff82d1SMarc-André Lureau  --sysconfdir=PATH        install config in PATH/$qemu_suffix
175708fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
17583d5eecabSGerd Hoffmann  --firmwarepath=PATH      search PATH for firmware files
175913336606SRobert Foley  --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1760ca8c0909SMarc-André Lureau  --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1761db1b5f13SThomas Huth  --with-pkgversion=VERS   use specified string as sub-version of the package
1762c035c8d6SPaolo Bonzini  --without-default-features default all --enable-* options to "disabled"
1763c035c8d6SPaolo Bonzini  --without-default-devices  do not include any device that is not needed to
1764c035c8d6SPaolo Bonzini                           start the emulator (only use if you are including
1765c035c8d6SPaolo Bonzini                           desired devices in default-configs/devices/)
176608fb77edSStefan Weil  --enable-debug           enable common debug build options
1767247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
17680aebab04SLingfeng Yang  --enable-tsan            enable thread sanitizer
176908fb77edSStefan Weil  --disable-strip          disable stripping binaries
177008fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
177163678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
177208fb77edSStefan Weil  --audio-drv-list=LIST    set audio drivers list:
177308fb77edSStefan Weil                           Available drivers: $audio_possible_drivers
177408fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
177508fb77edSStefan Weil  --block-drv-rw-whitelist=L
177608fb77edSStefan Weil                           set block driver read-write whitelist
177708fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
177808fb77edSStefan Weil  --block-drv-ro-whitelist=L
177908fb77edSStefan Weil                           set block driver read-only whitelist
178008fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
17815b808275SLluís Vilanova  --enable-trace-backends=B Set trace backend
1782c53eeaf7SStefan Hajnoczi                           Available backends: $trace_backend_list
178308fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
178408fb77edSStefan Weil                           Default:trace-<pid>
1785c23f23b9SMichael Tokarev  --disable-slirp          disable SLIRP userspace network connectivity
1786e9a16e38SPhilippe Mathieu-Daudé  --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
17875a22ab71SYang Zhong  --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1788c23f23b9SMichael Tokarev  --oss-lib                path to OSS library
1789c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
179008fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
179133c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
179208fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
1793c23f23b9SMichael Tokarev  --disable-blobs          disable installing provided firmware blobs
1794c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1795c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1796a1c5e949SDaniel P. Berrange  --tls-priority           default TLS protocol/cipher priority string
1797c12d66aaSLin Ma  --enable-gprof           QEMU profiling with gprof
1798c12d66aaSLin Ma  --enable-profiler        profiler support
1799c12d66aaSLin Ma  --enable-debug-stack-usage
1800c12d66aaSLin Ma                           track the maximum stack usage of stacks created by qemu_alloc_stack
180140e8c6f4SAlex Bennée  --enable-plugins
180240e8c6f4SAlex Bennée                           enable plugins via shared library loading
1803afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
1804f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
1805c23f23b9SMichael Tokarev
1806c23f23b9SMichael TokarevOptional features, enabled with --enable-FEATURE and
1807c87ea116SAlex Bennéedisabled with --disable-FEATURE, default is enabled if available
1808c87ea116SAlex Bennée(unless built with --without-default-features):
1809c23f23b9SMichael Tokarev
1810c23f23b9SMichael Tokarev  system          all system emulation targets
1811c23f23b9SMichael Tokarev  user            supported user emulation targets
1812c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1813c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1814c23f23b9SMichael Tokarev  docs            build documentation
1815c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1816c23f23b9SMichael Tokarev  guest-agent-msi build guest agent Windows MSI installation package
1817c23f23b9SMichael Tokarev  pie             Position Independent Executables
181821e709aaSMarc-André Lureau  modules         modules support (non-Windows)
1819bd83c861SChristian Ehrhardt  module-upgrades try to load modules from alternate paths for upgrades
1820c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1821c23f23b9SMichael Tokarev  debug-info      debugging information
1822cdad781dSDaniele Buono  lto             Enable Link-Time Optimization.
1823c23f23b9SMichael Tokarev  sparse          sparse checker
18241e4f6065SDaniele Buono  safe-stack      SafeStack Stack Smash Protection. Depends on
18251e4f6065SDaniele Buono                  clang/llvm >= 3.7 and requires coroutine backend ucontext.
18269e62ba48SDaniele Buono  cfi             Enable Control-Flow Integrity for indirect function calls.
18279e62ba48SDaniele Buono                  In case of a cfi violation, QEMU is terminated with SIGILL
18289e62ba48SDaniele Buono                  Depends on lto and is incompatible with modules
18299e62ba48SDaniele Buono                  Automatically enables Link-Time Optimization (lto)
18309e62ba48SDaniele Buono  cfi-debug       In case of a cfi violation, a message containing the line that
18319e62ba48SDaniele Buono                  triggered the error is written to stderr. After the error,
18329e62ba48SDaniele Buono                  QEMU is still terminated with SIGILL
1833ddbb0d09SDaniel P. Berrange  gnutls          GNUTLS cryptography support
183491bfcdb0SDaniel P. Berrange  nettle          nettle cryptography support
183591bfcdb0SDaniel P. Berrange  gcrypt          libgcrypt cryptography support
18368953caf3SDaniel P. Berrange  auth-pam        PAM access control
1837c23f23b9SMichael Tokarev  sdl             SDL UI
183804c6e16fSMarkus Armbruster  sdl-image       SDL Image support for icons
1839c23f23b9SMichael Tokarev  gtk             gtk UI
1840c23f23b9SMichael Tokarev  vte             vte support for the gtk UI
1841c23f23b9SMichael Tokarev  curses          curses UI
1842e08bb301SSamuel Thibault  iconv           font glyph conversion support
1843c23f23b9SMichael Tokarev  vnc             VNC UI support
1844c23f23b9SMichael Tokarev  vnc-sasl        SASL encryption for VNC server
1845c23f23b9SMichael Tokarev  vnc-jpeg        JPEG lossy compression for VNC server
1846c23f23b9SMichael Tokarev  vnc-png         PNG compression for VNC server
1847c23f23b9SMichael Tokarev  cocoa           Cocoa UI (Mac OS X only)
1848c23f23b9SMichael Tokarev  virtfs          VirtFS
1849cece116cSMisono Tomohiro  virtiofsd       build virtiofs daemon (virtiofsd)
18505c53015aSPaolo Bonzini  libudev         Use libudev to enumerate host devices
1851fe8fc5aeSPaolo Bonzini  mpath           Multipath persistent reservation passthrough
1852c23f23b9SMichael Tokarev  xen             xen backend driver support
185370c292afSAnthony PERARD  xen-pci-passthrough    PCI passthrough support for Xen
1854c23f23b9SMichael Tokarev  brlapi          BrlAPI (Braile)
1855c23f23b9SMichael Tokarev  curl            curl connectivity
1856a40161cbSPaolo Bonzini  membarrier      membarrier system call (for Linux 4.14+ or Windows)
1857c23f23b9SMichael Tokarev  fdt             fdt device tree
1858c23f23b9SMichael Tokarev  kvm             KVM acceleration support
1859b0cb0a66SVincent Palatin  hax             HAX acceleration support
1860c97d6d2cSSergio Andres Gomez Del Real  hvf             Hypervisor.framework acceleration support
186174a414a1SReinoud Zandijk  nvmm            NVMM acceleration support
1862d661d9a4SJustin Terry (VM)  whpx            Windows Hypervisor Platform acceleration support
186321ab34c9SMarcel Apfelbaum  rdma            Enable RDMA-based migration
186421ab34c9SMarcel Apfelbaum  pvrdma          Enable PVRDMA support
1865c23f23b9SMichael Tokarev  vde             support for vde network
1866c23f23b9SMichael Tokarev  netmap          support for netmap network
1867c23f23b9SMichael Tokarev  linux-aio       Linux AIO support
1868c10dd856SAarushi Mehta  linux-io-uring  Linux io_uring support
1869c23f23b9SMichael Tokarev  cap-ng          libcap-ng support
1870c23f23b9SMichael Tokarev  attr            attr and xattr support
1871299e6f19SPaolo Bonzini  vhost-net       vhost-net kernel acceleration support
1872299e6f19SPaolo Bonzini  vhost-vsock     virtio sockets device support
1873299e6f19SPaolo Bonzini  vhost-scsi      vhost-scsi kernel target support
1874299e6f19SPaolo Bonzini  vhost-crypto    vhost-user-crypto backend support
1875299e6f19SPaolo Bonzini  vhost-kernel    vhost kernel backend support
1876299e6f19SPaolo Bonzini  vhost-user      vhost-user backend support
1877bc15e44cSStefan Hajnoczi  vhost-user-blk-server    vhost-user-blk server support
1878108a6481SCindy Lu  vhost-vdpa      vhost-vdpa kernel backend support
1879c23f23b9SMichael Tokarev  spice           spice
188058d3f3ffSGerd Hoffmann  spice-protocol  spice-protocol
1881c23f23b9SMichael Tokarev  rbd             rados block device (rbd)
1882c23f23b9SMichael Tokarev  libiscsi        iscsi support
1883c23f23b9SMichael Tokarev  libnfs          nfs support
18847b02f544SMarc-André Lureau  smartcard       smartcard support (libcacard)
18850a40bcb7SCésar Belley  u2f             U2F support (u2f-emu)
1886c23f23b9SMichael Tokarev  libusb          libusb (for usb passthrough)
1887ed1701c6SDr. David Alan Gilbert  live-block-migration   Block migration in the main migration stream
1888c23f23b9SMichael Tokarev  usb-redir       usb network redirection support
1889c23f23b9SMichael Tokarev  lzo             support of lzo compression library
1890c23f23b9SMichael Tokarev  snappy          support of snappy compression library
1891c23f23b9SMichael Tokarev  bzip2           support of bzip2 compression library
1892c23f23b9SMichael Tokarev                  (for reading bzip2-compressed dmg images)
189383bc1f97SJulio Faracco  lzfse           support of lzfse compression library
189483bc1f97SJulio Faracco                  (for reading lzfse-compressed dmg images)
18953a678481SJuan Quintela  zstd            support for zstd compression library
1896d298ac10SDenis Plotnikov                  (for migration compression and qcow2 cluster compression)
1897c23f23b9SMichael Tokarev  seccomp         seccomp support
1898c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1899c23f23b9SMichael Tokarev  glusterfs       GlusterFS backend
1900c23f23b9SMichael Tokarev  tpm             TPM support
1901b10d49d7SPino Toscano  libssh          ssh block device support
1902c23f23b9SMichael Tokarev  numa            libnuma support
1903ed279a06SKlim Kireev  libxml2         for Parallels image format
1904c23f23b9SMichael Tokarev  tcmalloc        tcmalloc support
19057b01cb97SAlexandre Derumier  jemalloc        jemalloc support
190686583a07SLiam Merwick  avx2            AVX2 optimization support
19076b8cd447SRobert Hoo  avx512f         AVX512F optimization support
1908a6b1d4c0SChanglong Xie  replication     replication support
1909c12d66aaSLin Ma  opengl          opengl support
1910c12d66aaSLin Ma  virglrenderer   virgl rendering support
1911c12d66aaSLin Ma  xfsctl          xfsctl support
1912c12d66aaSLin Ma  qom-cast-debug  cast debugging support
19138de73fa8SCleber Rosa  tools           build qemu-io, qemu-nbd and qemu-img tools
19142f740136SJeff Cody  bochs           bochs image format support
19152f740136SJeff Cody  cloop           cloop image format support
19162f740136SJeff Cody  dmg             dmg image format support
19172f740136SJeff Cody  qcow1           qcow v1 image format support
19182f740136SJeff Cody  vdi             vdi image format support
19192f740136SJeff Cody  vvfat           vvfat image format support
19202f740136SJeff Cody  qed             qed image format support
19212f740136SJeff Cody  parallels       parallels image format support
1922f0d92b56SLongpeng(Mike)  crypto-afalg    Linux AF_ALG crypto backend driver
19238ca80760SRichard Henderson  capstone        capstone disassembler support
1924ba59fb77SPaolo Bonzini  debug-mutex     mutex debugging support
192517824406SJunyan He  libpmem         libpmem support
192675411919SJames Le Cuirot  xkbcommon       xkbcommon support
1927b767d257SMarek Marczykowski-Górecki  rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
192821b2eca6SJingqi Liu  libdaxctl       libdaxctl support
1929a484a719SMax Reitz  fuse            FUSE block device export
1930df4ea709SMax Reitz  fuse-lseek      SEEK_HOLE/SEEK_DATA support for FUSE exports
1931106ad1f9SPaolo Bonzini  multiprocess    Out of process device emulation support
193220cf7b8eSDenis Plotnikov  gio             libgio support
1933b8e0c493SJoelle van Dyne  slirp-smbd      use smbd (at path --smbd=*) in slirp networking
193408fb77edSStefan Weil
193508fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1936af5db58eSpbrookEOF
19372d2ad6d0SFam Zhengexit 0
1938af5db58eSpbrookfi
1939af5db58eSpbrook
19409c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
1941bb768f71SThomas Huthrm -f */config-devices.mak.d
19429c790242SThomas Huth
1943faf44142SDaniel P. Berrangéif test -z "$python"
1944faf44142SDaniel P. Berrangéthen
1945c53eeaf7SStefan Hajnoczi    error_exit "Python not found. Use --python=/path/to/python"
1946c53eeaf7SStefan Hajnoczifi
19478e2c76bdSRoman Bolshakovif ! has "$make"
19488e2c76bdSRoman Bolshakovthen
19498e2c76bdSRoman Bolshakov    error_exit "GNU make ($make) not found"
19508e2c76bdSRoman Bolshakovfi
1951c53eeaf7SStefan Hajnoczi
1952c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit
1953c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value.
19541b11f28dSThomas Huthif ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
19551b11f28dSThomas Huth  error_exit "Cannot use '$python', Python >= 3.6 is required." \
1956c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
1957c53eeaf7SStefan Hajnoczifi
1958c53eeaf7SStefan Hajnoczi
1959755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it
1960406ab2f3SCleber 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)
1961755ee70fSCleber Rosa
1962c53eeaf7SStefan Hajnoczi# Suppress writing compiled files
1963c53eeaf7SStefan Hajnoczipython="$python -B"
1964c53eeaf7SStefan Hajnoczi
19650a01d76fSMarc-André Lureauif test -z "$meson"; then
19666ebd89cfSPaolo Bonzini    if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
19670a01d76fSMarc-André Lureau        meson=meson
19687d7dbf9dSDan Streetman    elif test $git_submodules_action != 'ignore' ; then
19690a01d76fSMarc-André Lureau        meson=git
19700a01d76fSMarc-André Lureau    elif test -e "${source_path}/meson/meson.py" ; then
19710a01d76fSMarc-André Lureau        meson=internal
19720a01d76fSMarc-André Lureau    else
19730a01d76fSMarc-André Lureau        if test "$explicit_python" = yes; then
19740a01d76fSMarc-André Lureau            error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
19750a01d76fSMarc-André Lureau        else
1976a5665051SPaolo Bonzini            error_exit "Meson not found.  Use --meson=/path/to/meson"
1977a5665051SPaolo Bonzini        fi
19780a01d76fSMarc-André Lureau    fi
19790a01d76fSMarc-André Lureauelse
19800a01d76fSMarc-André Lureau    # Meson uses its own Python interpreter to invoke other Python scripts,
19810a01d76fSMarc-André Lureau    # but the user wants to use the one they specified with --python.
19820a01d76fSMarc-André Lureau    #
19830a01d76fSMarc-André Lureau    # We do not want to override the distro Python interpreter (and sometimes
19840a01d76fSMarc-André Lureau    # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
19850a01d76fSMarc-André Lureau    # just require --meson=git|internal together with --python.
19860a01d76fSMarc-André Lureau    if test "$explicit_python" = yes; then
19870a01d76fSMarc-André Lureau        case "$meson" in
19880a01d76fSMarc-André Lureau            git | internal) ;;
19890a01d76fSMarc-André Lureau            *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
19900a01d76fSMarc-André Lureau        esac
19910a01d76fSMarc-André Lureau    fi
19920a01d76fSMarc-André Lureaufi
1993a5665051SPaolo Bonzini
19940a01d76fSMarc-André Lureauif test "$meson" = git; then
19950a01d76fSMarc-André Lureau    git_submodules="${git_submodules} meson"
19960a01d76fSMarc-André Lureaufi
19970a01d76fSMarc-André Lureau
19980a01d76fSMarc-André Lureaucase "$meson" in
19990a01d76fSMarc-André Lureau    git | internal)
20000a01d76fSMarc-André Lureau        meson="$python ${source_path}/meson/meson.py"
20010a01d76fSMarc-André Lureau        ;;
200284ec0c24SPaolo Bonzini    *) meson=$(command -v "$meson") ;;
20030a01d76fSMarc-André Lureauesac
20040a01d76fSMarc-André Lureau
200509e93326SPaolo Bonzini# Probe for ninja
200648328880SPaolo Bonzini
200748328880SPaolo Bonziniif test -z "$ninja"; then
200848328880SPaolo Bonzini    for c in ninja ninja-build samu; do
200948328880SPaolo Bonzini        if has $c; then
201048328880SPaolo Bonzini            ninja=$(command -v "$c")
201148328880SPaolo Bonzini            break
201248328880SPaolo Bonzini        fi
201348328880SPaolo Bonzini    done
201409e93326SPaolo Bonzini    if test -z "$ninja"; then
201509e93326SPaolo Bonzini      error_exit "Cannot find Ninja"
201609e93326SPaolo Bonzini    fi
201748328880SPaolo Bonzinifi
2018a5665051SPaolo Bonzini
20199aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
20209aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
20219aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
20229aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
20239aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
20249aae6e54SDaniel Henrique Barbozaif compile_object ; then
20259aae6e54SDaniel Henrique Barboza  : C compiler works ok
20269aae6e54SDaniel Henrique Barbozaelse
20279aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
20289aae6e54SDaniel Henrique Barbozafi
20299aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
20309aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
20319aae6e54SDaniel Henrique Barbozafi
20329aae6e54SDaniel Henrique Barboza
20339c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
20349c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
20359c83ffd8SPeter Maydellif test -z "$werror" ; then
20367d7dbf9dSDan Streetman    if test "$git_submodules_action" != "ignore" && \
2037e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
20389c83ffd8SPeter Maydell        werror="yes"
20399c83ffd8SPeter Maydell    else
20409c83ffd8SPeter Maydell        werror="no"
20419c83ffd8SPeter Maydell    fi
20429c83ffd8SPeter Maydellfi
20439c83ffd8SPeter Maydell
2044975ff037SPaolo Bonziniif test "$targetos" = "bogus"; then
2045fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
2046fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
2047fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
2048fb59dabdSPeter Maydell    # host OS we should stop now.
2049951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2050fb59dabdSPeter Maydellfi
2051fb59dabdSPeter Maydell
2052efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
2053efc6c070SThomas Huthcat > $TMPC << EOF
2054efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
2055efc6c070SThomas Huth# ifdef __apple_build_version__
2056efc6c070SThomas Huth#  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2057efc6c070SThomas Huth#   error You need at least XCode Clang v5.1 to compile QEMU
2058efc6c070SThomas Huth#  endif
2059efc6c070SThomas Huth# else
2060efc6c070SThomas Huth#  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2061efc6c070SThomas Huth#   error You need at least Clang v3.4 to compile QEMU
2062efc6c070SThomas Huth#  endif
2063efc6c070SThomas Huth# endif
2064efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2065efc6c070SThomas Huth# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2066efc6c070SThomas Huth#  error You need at least GCC v4.8 to compile QEMU
2067efc6c070SThomas Huth# endif
2068efc6c070SThomas Huth#else
2069efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
2070efc6c070SThomas Huth#endif
2071efc6c070SThomas Huthint main (void) { return 0; }
2072efc6c070SThomas HuthEOF
2073efc6c070SThomas Huthif ! compile_prog "" "" ; then
2074efc6c070SThomas Huth    error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2075efc6c070SThomas Huthfi
2076efc6c070SThomas Huth
207700849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately.
207800849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second.
207900849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all
208000849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would
208100849b92SRichard Henderson# just silently disable some features, so it's too error prone.
208200849b92SRichard Henderson
208300849b92SRichard Hendersonwarn_flags=
208400849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration
208500849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition
208600849b92SRichard Hendersonadd_to warn_flags -Wtype-limits
208700849b92SRichard Hendersonadd_to warn_flags -Wformat-security
208800849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k
208900849b92SRichard Hendersonadd_to warn_flags -Winit-self
209000849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers
209100849b92SRichard Hendersonadd_to warn_flags -Wempty-body
209200849b92SRichard Hendersonadd_to warn_flags -Wnested-externs
209300849b92SRichard Hendersonadd_to warn_flags -Wendif-labels
209400849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined
20950a2ebce9SThomas Huthadd_to warn_flags -Wimplicit-fallthrough=2
209600849b92SRichard Henderson
209700849b92SRichard Hendersonnowarn_flags=
209800849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides
209900849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs
210000849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value
210100849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int
210200849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition
2103aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare
2104bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi
210500849b92SRichard Henderson
210600849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags"
210793b25869SJohn Snow
210893b25869SJohn Snowcc_has_warning_flag() {
210993b25869SJohn Snow    write_c_skeleton;
211093b25869SJohn Snow
2111a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
2112a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
2113a1d29d6cSPeter Maydell    # warning options).
211493b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
211593b25869SJohn Snow    compile_prog "-Werror $optflag" ""
211693b25869SJohn Snow}
211793b25869SJohn Snow
211893b25869SJohn Snowfor flag in $gcc_flags; do
211993b25869SJohn Snow    if cc_has_warning_flag $flag ; then
21208d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
21218d05095cSPaolo Bonzini    fi
21228d05095cSPaolo Bonzinidone
21238d05095cSPaolo Bonzini
212463678e17SSteven Noonanif test "$stack_protector" != "no"; then
2125fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
2126fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
2127fccd35a0SRodrigo Rebello{
2128fccd35a0SRodrigo Rebello    char arr[64], *p = arr, *c = argv[0];
2129fccd35a0SRodrigo Rebello    while (*c) {
2130fccd35a0SRodrigo Rebello        *p++ = *c++;
2131fccd35a0SRodrigo Rebello    }
2132fccd35a0SRodrigo Rebello    return 0;
2133fccd35a0SRodrigo Rebello}
2134fccd35a0SRodrigo RebelloEOF
213563678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
21363b463a3fSMiroslav Rezanina  sp_on=0
213763678e17SSteven Noonan  for flag in $gcc_flags; do
2138590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
2139590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
2140086d5f75SPaolo Bonzini    if compile_object "-Werror $flag" &&
2141590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
214263678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2143db5adeaaSPaolo Bonzini      QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
21443b463a3fSMiroslav Rezanina      sp_on=1
214563678e17SSteven Noonan      break
214663678e17SSteven Noonan    fi
214763678e17SSteven Noonan  done
21483b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
21493b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
21503b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
21513b463a3fSMiroslav Rezanina    fi
21523b463a3fSMiroslav Rezanina  fi
215337746c5eSMarc-André Lureaufi
215437746c5eSMarc-André Lureau
215520bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for
215620bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}.
215720bc94a2SPaolo Bonzinicat > $TMPC << EOF
215820bc94a2SPaolo Bonzinistruct {
215920bc94a2SPaolo Bonzini  int a[2];
216020bc94a2SPaolo Bonzini} x = {0};
216120bc94a2SPaolo BonziniEOF
216220bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then
216320bc94a2SPaolo Bonzini  :
216420bc94a2SPaolo Bonzinielse
216520bc94a2SPaolo Bonzini  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
216620bc94a2SPaolo Bonzinifi
216720bc94a2SPaolo Bonzini
216821e709aaSMarc-André Lureau# Our module code doesn't support Windows
216921e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then
217021e709aaSMarc-André Lureau  error_exit "Modules are not available for Windows"
217121e709aaSMarc-André Lureaufi
217221e709aaSMarc-André Lureau
2173bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled
2174bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2175bd83c861SChristian Ehrhardt  error_exit "Can't enable module-upgrades as Modules are not enabled"
2176bd83c861SChristian Ehrhardtfi
2177bd83c861SChristian Ehrhardt
2178d376e9deSThomas Huth# Static linking is not possible with modules or PIE
217940d6444eSAvi Kivityif test "$static" = "yes" ; then
2180aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
2181aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
2182aa0d1f44SPaolo Bonzini  fi
218340d6444eSAvi Kivityfi
218440d6444eSAvi Kivity
2185768b7855SEmilio G. Cota# Unconditional check for compiler __thread support
2186768b7855SEmilio G. Cota  cat > $TMPC << EOF
2187768b7855SEmilio G. Cotastatic __thread int tls_var;
2188768b7855SEmilio G. Cotaint main(void) { return tls_var; }
2189768b7855SEmilio G. CotaEOF
2190768b7855SEmilio G. Cota
2191768b7855SEmilio G. Cotaif ! compile_prog "-Werror" "" ; then
2192768b7855SEmilio G. Cota    error_exit "Your compiler does not support the __thread specifier for " \
2193768b7855SEmilio G. Cota	"Thread-Local Storage (TLS). Please upgrade to a version that does."
2194768b7855SEmilio G. Cotafi
2195768b7855SEmilio G. Cota
219640d6444eSAvi Kivitycat > $TMPC << EOF
219721d4a791SAvi Kivity
219821d4a791SAvi Kivity#ifdef __linux__
219921d4a791SAvi Kivity#  define THREAD __thread
220021d4a791SAvi Kivity#else
220121d4a791SAvi Kivity#  define THREAD
220221d4a791SAvi Kivity#endif
220321d4a791SAvi Kivitystatic THREAD int tls_var;
220421d4a791SAvi Kivityint main(void) { return tls_var; }
220540d6444eSAvi KivityEOF
2206b2634124SRichard Henderson
2207b2634124SRichard Henderson# Check we support --no-pie first; we will need this for building ROMs.
2208412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then
2209412aeacdSAlex Bennée  CFLAGS_NOPIE="-fno-pie"
2210412aeacdSAlex Bennéefi
2211412aeacdSAlex Bennée
221212781462SRichard Hendersonif test "$static" = "yes"; then
2213eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
22145770e8afSPaolo Bonzini    CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
221512781462SRichard Henderson    QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
221612781462SRichard Henderson    pie="yes"
221712781462SRichard Henderson  elif test "$pie" = "yes"; then
221812781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
221912781462SRichard Henderson  else
222012781462SRichard Henderson    QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
222112781462SRichard Henderson    pie="no"
222212781462SRichard Henderson  fi
222312781462SRichard Hendersonelif test "$pie" = "no"; then
22245770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2225eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
22265770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
22275770e8afSPaolo Bonzini  CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
222840d6444eSAvi Kivity  pie="yes"
22292c674109SRichard Hendersonelif test "$pie" = "yes"; then
223076ad07a4SPeter Maydell  error_exit "PIE not available due to missing toolchain support"
223140d6444eSAvi Kivityelse
223240d6444eSAvi Kivity  echo "Disabling PIE due to missing toolchain support"
223340d6444eSAvi Kivity  pie="no"
223440d6444eSAvi Kivityfi
223540d6444eSAvi Kivity
2236e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2237e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too.
2238e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2239e6cbd751SRichard Henderson  QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2240e6cbd751SRichard Hendersonfi
2241e6cbd751SRichard Henderson
224209dada40SPaolo Bonzini##########################################
224309dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
224409dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
224509dada40SPaolo Bonzini# specification is necessary
224609dada40SPaolo Bonzini
224709dada40SPaolo Bonziniif test "$cpu" = "i386"; then
224809dada40SPaolo Bonzini  cat > $TMPC << EOF
224909dada40SPaolo Bonzinistatic int sfaa(int *ptr)
225009dada40SPaolo Bonzini{
225109dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
225209dada40SPaolo Bonzini}
225309dada40SPaolo Bonzini
225409dada40SPaolo Bonziniint main(void)
225509dada40SPaolo Bonzini{
225609dada40SPaolo Bonzini  int val = 42;
22571405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
225809dada40SPaolo Bonzini  sfaa(&val);
225909dada40SPaolo Bonzini  return val;
226009dada40SPaolo Bonzini}
226109dada40SPaolo BonziniEOF
226209dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
226309dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
226409dada40SPaolo Bonzini  fi
226509dada40SPaolo Bonzinifi
226609dada40SPaolo Bonzini
226709dada40SPaolo Bonzini#########################################
2268ec530c81Sbellard# Solaris specific configure tool chain decisions
226909dada40SPaolo Bonzini
2270ec530c81Sbellardif test "$solaris" = "yes" ; then
22716792aa11SLoïc Minier  if has ar; then
22726792aa11SLoïc Minier    :
22736792aa11SLoïc Minier  else
2274ec530c81Sbellard    if test -f /usr/ccs/bin/ar ; then
227576ad07a4SPeter Maydell      error_exit "No path includes ar" \
227676ad07a4SPeter Maydell          "Add /usr/ccs/bin to your path and rerun configure"
2277ec530c81Sbellard    fi
227876ad07a4SPeter Maydell    error_exit "No path includes ar"
2279ec530c81Sbellard  fi
2280ec530c81Sbellardfi
2281ec530c81Sbellard
2282*56267b62SPhilippe Mathieu-Daudéif test "$tcg" = "enabled"; then
2283*56267b62SPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
2284*56267b62SPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
2285*56267b62SPhilippe Mathieu-Daudéfi
2286*56267b62SPhilippe Mathieu-Daudé
2287afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
2288fdb75aefSPaolo Bonzini    default_targets=yes
2289d880a3baSPaolo Bonzini    for target in $default_target_list; do
2290d880a3baSPaolo Bonzini        target_list="$target_list $target"
2291d880a3baSPaolo Bonzini    done
2292d880a3baSPaolo Bonzini    target_list="${target_list# }"
2293121afa9eSAnthony Liguorielse
2294fdb75aefSPaolo Bonzini    default_targets=no
229589138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2296d880a3baSPaolo Bonzini    for target in $target_list; do
229725b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
229825b48338SPeter Maydell        # friendly error message than if we let it fall through.
229925b48338SPeter Maydell        case " $default_target_list " in
230025b48338SPeter Maydell            *" $target "*)
230125b48338SPeter Maydell                ;;
230225b48338SPeter Maydell            *)
230325b48338SPeter Maydell                error_exit "Unknown target name '$target'"
230425b48338SPeter Maydell                ;;
230525b48338SPeter Maydell        esac
230625b48338SPeter Maydell    done
2307d880a3baSPaolo Bonzinifi
230825b48338SPeter Maydell
2309fdb75aefSPaolo Bonzinifor target in $target_list; do
2310fdb75aefSPaolo Bonzini    # if a deprecated target is enabled we note it here
2311fdb75aefSPaolo Bonzini    if echo "$deprecated_targets_list" | grep -q "$target"; then
2312fdb75aefSPaolo Bonzini        add_to deprecated_features $target
2313fdb75aefSPaolo Bonzini    fi
2314fdb75aefSPaolo Bonzinidone
2315fdb75aefSPaolo Bonzini
2316f55fe278SPaolo Bonzini# see if system emulation was really requested
2317f55fe278SPaolo Bonzinicase " $target_list " in
2318f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
2319f55fe278SPaolo Bonzini  ;;
2320f55fe278SPaolo Bonzini  *) softmmu=no
2321f55fe278SPaolo Bonzini  ;;
2322f55fe278SPaolo Bonziniesac
23235327cf48Sbellard
2324249247c9SJuan Quintelafeature_not_found() {
2325249247c9SJuan Quintela  feature=$1
232621684af0SStewart Smith  remedy=$2
2327249247c9SJuan Quintela
232876ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
232921684af0SStewart Smith      "configure was not able to find it." \
233021684af0SStewart Smith      "$remedy"
2331249247c9SJuan Quintela}
2332249247c9SJuan Quintela
23337d13299dSbellard# ---
23347d13299dSbellard# big/little endian test
23357d13299dSbellardcat > $TMPC << EOF
233661cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
233761cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
233861cc919fSMike Frysingerextern int foo(short *, short *);
233961cc919fSMike Frysingerint main(int argc, char *argv[]) {
234061cc919fSMike Frysinger    return foo(big_endian, little_endian);
23417d13299dSbellard}
23427d13299dSbellardEOF
23437d13299dSbellard
234461cc919fSMike Frysingerif compile_object ; then
234512f15c91SAlice Frosi    if strings -a $TMPO | grep -q BiGeNdIaN ; then
234661cc919fSMike Frysinger        bigendian="yes"
234712f15c91SAlice Frosi    elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
234861cc919fSMike Frysinger        bigendian="no"
23497d13299dSbellard    else
23507d13299dSbellard        echo big/little test failed
23517d13299dSbellard    fi
23527d13299dSbellardelse
235361cc919fSMike Frysinger    echo big/little test failed
23547d13299dSbellardfi
23557d13299dSbellard
2356b0a47e79SJuan Quintela##########################################
2357e10ee3f5SPhilippe Mathieu-Daudé# system tools
2358e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then
2359e10ee3f5SPhilippe Mathieu-Daudé    if test "$softmmu" = "no"; then
2360e10ee3f5SPhilippe Mathieu-Daudé        want_tools=no
2361e10ee3f5SPhilippe Mathieu-Daudé    else
2362e10ee3f5SPhilippe Mathieu-Daudé        want_tools=yes
2363e10ee3f5SPhilippe Mathieu-Daudé    fi
2364e10ee3f5SPhilippe Mathieu-Daudéfi
2365e10ee3f5SPhilippe Mathieu-Daudé
2366e10ee3f5SPhilippe Mathieu-Daudé##########################################
236790520ee4SPhilippe Mathieu-Daudé# Disable features only meaningful for system-mode emulation
236890520ee4SPhilippe Mathieu-Daudéif test "$softmmu" = "no"; then
236990520ee4SPhilippe Mathieu-Daudé    audio_drv_list=""
237090520ee4SPhilippe Mathieu-Daudéfi
237190520ee4SPhilippe Mathieu-Daudé
237290520ee4SPhilippe Mathieu-Daudé##########################################
23736b39b063SEric Blake# Some versions of Mac OS X incorrectly define SIZE_MAX
23746b39b063SEric Blakecat > $TMPC << EOF
23756b39b063SEric Blake#include <stdint.h>
23766b39b063SEric Blake#include <stdio.h>
23776b39b063SEric Blakeint main(int argc, char *argv[]) {
23786b39b063SEric Blake    return printf("%zu", SIZE_MAX);
23796b39b063SEric Blake}
23806b39b063SEric BlakeEOF
23816b39b063SEric Blakehave_broken_size_max=no
23826b39b063SEric Blakeif ! compile_object -Werror ; then
23836b39b063SEric Blake    have_broken_size_max=yes
23846b39b063SEric Blakefi
23856b39b063SEric Blake
2386a30878e7SPeter Maydell##########################################
2387015a33bdSGonglei# L2TPV3 probe
2388015a33bdSGonglei
2389015a33bdSGongleicat > $TMPC <<EOF
2390015a33bdSGonglei#include <sys/socket.h>
2391bff6cb72SMichael Tokarev#include <linux/ip.h>
2392015a33bdSGongleiint main(void) { return sizeof(struct mmsghdr); }
2393015a33bdSGongleiEOF
2394015a33bdSGongleiif compile_prog "" "" ; then
2395015a33bdSGonglei  l2tpv3=yes
2396015a33bdSGongleielse
2397015a33bdSGonglei  l2tpv3=no
2398015a33bdSGongleifi
2399015a33bdSGonglei
2400195588ccSDavid CARLIERcat > $TMPC <<EOF
2401195588ccSDavid CARLIER#include <sys/mman.h>
2402195588ccSDavid CARLIERint main(int argc, char *argv[]) {
2403195588ccSDavid CARLIER    return mlockall(MCL_FUTURE);
2404195588ccSDavid CARLIER}
2405195588ccSDavid CARLIEREOF
2406195588ccSDavid CARLIERif compile_prog "" "" ; then
2407195588ccSDavid CARLIER  have_mlockall=yes
2408195588ccSDavid CARLIERelse
2409195588ccSDavid CARLIER  have_mlockall=no
2410195588ccSDavid CARLIERfi
2411195588ccSDavid CARLIER
2412299e6f19SPaolo Bonzini#########################################
2413299e6f19SPaolo Bonzini# vhost interdependencies and host support
2414299e6f19SPaolo Bonzini
2415299e6f19SPaolo Bonzini# vhost backends
2416d88618f7SStefan Hajnocziif test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2417d88618f7SStefan Hajnoczi  error_exit "vhost-user is only available on Linux"
2418299e6f19SPaolo Bonzinifi
2419108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux
2420108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2421108a6481SCindy Lu  error_exit "vhost-vdpa is only available on Linux"
2422108a6481SCindy Lufi
2423299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux
2424299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2425299e6f19SPaolo Bonzini  error_exit "vhost-kernel is only available on Linux"
2426299e6f19SPaolo Bonzinifi
2427299e6f19SPaolo Bonzini
2428299e6f19SPaolo Bonzini# vhost-kernel devices
2429299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2430299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2431299e6f19SPaolo Bonzini  error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2432299e6f19SPaolo Bonzinifi
2433299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2434299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2435299e6f19SPaolo Bonzini  error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2436299e6f19SPaolo Bonzinifi
2437299e6f19SPaolo Bonzini
2438299e6f19SPaolo Bonzini# vhost-user backends
2439299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2440299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2441299e6f19SPaolo Bonzini  error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2442299e6f19SPaolo Bonzinifi
2443299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2444299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2445299e6f19SPaolo Bonzini  error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2446299e6f19SPaolo Bonzinifi
244798fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
244898fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
244998fc1adaSDr. David Alan Gilbert  error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
245098fc1adaSDr. David Alan Gilbertfi
2451108a6481SCindy Lu#vhost-vdpa backends
2452108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2453108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2454108a6481SCindy Lu  error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2455108a6481SCindy Lufi
2456299e6f19SPaolo Bonzini
245740bc0ca9SLaurent Vivier# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2458299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then
2459299e6f19SPaolo Bonzini  test "$vhost_net_user" = "yes" && vhost_net=yes
246040bc0ca9SLaurent Vivier  test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2461299e6f19SPaolo Bonzini  test "$vhost_kernel" = "yes" && vhost_net=yes
2462299e6f19SPaolo Bonzinifi
2463299e6f19SPaolo Bonzini
2464015a33bdSGonglei##########################################
2465779ab5e3SStefan Weil# pkg-config probe
2466779ab5e3SStefan Weil
2467779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
246876ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
2469779ab5e3SStefan Weilfi
2470779ab5e3SStefan Weil
2471779ab5e3SStefan Weil##########################################
2472b0a47e79SJuan Quintela# NPTL probe
2473b0a47e79SJuan Quintela
247424cb36a6SPeter Maydellif test "$linux_user" = "yes"; then
2475bd0c5661Spbrook  cat > $TMPC <<EOF
2476bd0c5661Spbrook#include <sched.h>
247730813ceaSpbrook#include <linux/futex.h>
2478182eacc0SStefan Weilint main(void) {
2479bd0c5661Spbrook#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2480bd0c5661Spbrook#error bork
2481bd0c5661Spbrook#endif
2482182eacc0SStefan Weil  return 0;
2483bd0c5661Spbrook}
2484bd0c5661SpbrookEOF
248524cb36a6SPeter Maydell  if ! compile_object ; then
248621684af0SStewart Smith    feature_not_found "nptl" "Install glibc and linux kernel headers."
2487b0a47e79SJuan Quintela  fi
2488bd0c5661Spbrookfi
2489bd0c5661Spbrook
2490ac62922eSbalrog##########################################
2491e37630caSaliguori# xen probe
2492e37630caSaliguori
24931badb709SPaolo Bonziniif test "$xen" != "disabled" ; then
2494c1cdd9d5SJuergen Gross  # Check whether Xen library path is specified via --extra-ldflags to avoid
2495c1cdd9d5SJuergen Gross  # overriding this setting with pkg-config output. If not, try pkg-config
2496c1cdd9d5SJuergen Gross  # to obtain all needed flags.
2497c1cdd9d5SJuergen Gross
2498c1cdd9d5SJuergen Gross  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2499c1cdd9d5SJuergen Gross     $pkg_config --exists xencontrol ; then
2500c1cdd9d5SJuergen Gross    xen_ctrl_version="$(printf '%d%02d%02d' \
2501c1cdd9d5SJuergen Gross      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
25021badb709SPaolo Bonzini    xen=enabled
25035b6a8f43SMichael Tokarev    xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2504c1cdd9d5SJuergen Gross    xen_pc="$xen_pc xenevtchn xendevicemodel"
250558ea9a7aSAnthony PERARD    if $pkg_config --exists xentoolcore; then
250658ea9a7aSAnthony PERARD      xen_pc="$xen_pc xentoolcore"
250758ea9a7aSAnthony PERARD    fi
2508582ea95fSMarc-André Lureau    xen_cflags="$($pkg_config --cflags $xen_pc)"
2509582ea95fSMarc-André Lureau    xen_libs="$($pkg_config --libs $xen_pc)"
2510c1cdd9d5SJuergen Gross  else
2511c1cdd9d5SJuergen Gross
25125b6a8f43SMichael Tokarev    xen_libs="-lxenstore -lxenctrl"
2513d9506cabSAnthony PERARD    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2514d5b93ddfSAnthony PERARD
251550ced5b3SStefan Weil    # First we test whether Xen headers and libraries are available.
251650ced5b3SStefan Weil    # If no, we are done and there is no Xen support.
251750ced5b3SStefan Weil    # If yes, more tests are run to detect the Xen version.
251850ced5b3SStefan Weil
251950ced5b3SStefan Weil    # Xen (any)
252050ced5b3SStefan Weil    cat > $TMPC <<EOF
252150ced5b3SStefan Weil#include <xenctrl.h>
252250ced5b3SStefan Weilint main(void) {
252350ced5b3SStefan Weil  return 0;
252450ced5b3SStefan Weil}
252550ced5b3SStefan WeilEOF
252650ced5b3SStefan Weil    if ! compile_prog "" "$xen_libs" ; then
252750ced5b3SStefan Weil      # Xen not found
25281badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
252921684af0SStewart Smith        feature_not_found "xen" "Install xen devel"
253050ced5b3SStefan Weil      fi
25311badb709SPaolo Bonzini      xen=disabled
253250ced5b3SStefan Weil
2533d5b93ddfSAnthony PERARD    # Xen unstable
253469deef08SPeter Maydell    elif
253569deef08SPeter Maydell        cat > $TMPC <<EOF &&
25362cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API
25372cbf8903SRoss Lagerwall#define __XEN_TOOLS__
25382cbf8903SRoss Lagerwall#include <xendevicemodel.h>
2539d3c49ebbSPaul Durrant#include <xenforeignmemory.h>
25402cbf8903SRoss Lagerwallint main(void) {
25412cbf8903SRoss Lagerwall  xendevicemodel_handle *xd;
2542d3c49ebbSPaul Durrant  xenforeignmemory_handle *xfmem;
25432cbf8903SRoss Lagerwall
25442cbf8903SRoss Lagerwall  xd = xendevicemodel_open(0, 0);
25452cbf8903SRoss Lagerwall  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
25462cbf8903SRoss Lagerwall
2547d3c49ebbSPaul Durrant  xfmem = xenforeignmemory_open(0, 0);
2548d3c49ebbSPaul Durrant  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2549d3c49ebbSPaul Durrant
25502cbf8903SRoss Lagerwall  return 0;
25512cbf8903SRoss Lagerwall}
25522cbf8903SRoss LagerwallEOF
25532cbf8903SRoss Lagerwall        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
25542cbf8903SRoss Lagerwall      then
25552cbf8903SRoss Lagerwall      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
25562cbf8903SRoss Lagerwall      xen_ctrl_version=41100
25571badb709SPaolo Bonzini      xen=enabled
25582cbf8903SRoss Lagerwall    elif
25592cbf8903SRoss Lagerwall        cat > $TMPC <<EOF &&
25605ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API
25615ba3d756SIgor Druzhinin#include <xenforeignmemory.h>
256258ea9a7aSAnthony PERARD#include <xentoolcore.h>
25635ba3d756SIgor Druzhininint main(void) {
25645ba3d756SIgor Druzhinin  xenforeignmemory_handle *xfmem;
25655ba3d756SIgor Druzhinin
25665ba3d756SIgor Druzhinin  xfmem = xenforeignmemory_open(0, 0);
25675ba3d756SIgor Druzhinin  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
256858ea9a7aSAnthony PERARD  xentoolcore_restrict_all(0);
25695ba3d756SIgor Druzhinin
25705ba3d756SIgor Druzhinin  return 0;
25715ba3d756SIgor Druzhinin}
25725ba3d756SIgor DruzhininEOF
257358ea9a7aSAnthony PERARD        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
25745ba3d756SIgor Druzhinin      then
257558ea9a7aSAnthony PERARD      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
25765ba3d756SIgor Druzhinin      xen_ctrl_version=41000
25771badb709SPaolo Bonzini      xen=enabled
25785ba3d756SIgor Druzhinin    elif
25795ba3d756SIgor Druzhinin        cat > $TMPC <<EOF &&
2580da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API
2581da8090ccSPaul Durrant#define __XEN_TOOLS__
2582da8090ccSPaul Durrant#include <xendevicemodel.h>
2583da8090ccSPaul Durrantint main(void) {
2584da8090ccSPaul Durrant  xendevicemodel_handle *xd;
2585da8090ccSPaul Durrant
2586da8090ccSPaul Durrant  xd = xendevicemodel_open(0, 0);
2587da8090ccSPaul Durrant  xendevicemodel_close(xd);
2588da8090ccSPaul Durrant
2589da8090ccSPaul Durrant  return 0;
2590da8090ccSPaul Durrant}
2591da8090ccSPaul DurrantEOF
2592da8090ccSPaul Durrant        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2593da8090ccSPaul Durrant      then
2594da8090ccSPaul Durrant      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2595f1167ee6SJuergen Gross      xen_ctrl_version=40900
25961badb709SPaolo Bonzini      xen=enabled
2597da8090ccSPaul Durrant    elif
2598da8090ccSPaul Durrant        cat > $TMPC <<EOF &&
25995eeb39c2SIan Campbell/*
26005eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat
26015eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given.
2602b6eb9b45SPaulina Szubarczyk *
2603b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and
2604b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented.
2605b6eb9b45SPaulina Szubarczyk */
2606b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API
2607b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API
2608b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2609b6eb9b45SPaulina Szubarczyk#include <xenctrl.h>
2610b6eb9b45SPaulina Szubarczyk#include <xenstore.h>
2611b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h>
2612b6eb9b45SPaulina Szubarczyk#include <xengnttab.h>
2613b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h>
2614b6eb9b45SPaulina Szubarczyk#include <stdint.h>
2615b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h>
2616b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS)
2617b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined
2618b6eb9b45SPaulina Szubarczyk#endif
2619b6eb9b45SPaulina Szubarczykint main(void) {
2620b6eb9b45SPaulina Szubarczyk  xc_interface *xc = NULL;
2621b6eb9b45SPaulina Szubarczyk  xenforeignmemory_handle *xfmem;
2622b6eb9b45SPaulina Szubarczyk  xenevtchn_handle *xe;
2623b6eb9b45SPaulina Szubarczyk  xengnttab_handle *xg;
2624b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy_segment_t* seg = NULL;
2625b6eb9b45SPaulina Szubarczyk
2626b6eb9b45SPaulina Szubarczyk  xs_daemon_open();
2627b6eb9b45SPaulina Szubarczyk
2628b6eb9b45SPaulina Szubarczyk  xc = xc_interface_open(0, 0, 0);
2629b6eb9b45SPaulina Szubarczyk  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2630b6eb9b45SPaulina Szubarczyk  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2631b6eb9b45SPaulina Szubarczyk  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2632b6eb9b45SPaulina Szubarczyk  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2633b6eb9b45SPaulina Szubarczyk
2634b6eb9b45SPaulina Szubarczyk  xfmem = xenforeignmemory_open(0, 0);
2635b6eb9b45SPaulina Szubarczyk  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2636b6eb9b45SPaulina Szubarczyk
2637b6eb9b45SPaulina Szubarczyk  xe = xenevtchn_open(0, 0);
2638b6eb9b45SPaulina Szubarczyk  xenevtchn_fd(xe);
2639b6eb9b45SPaulina Szubarczyk
2640b6eb9b45SPaulina Szubarczyk  xg = xengnttab_open(0, 0);
2641b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy(xg, 0, seg);
2642b6eb9b45SPaulina Szubarczyk
2643b6eb9b45SPaulina Szubarczyk  return 0;
2644b6eb9b45SPaulina Szubarczyk}
2645b6eb9b45SPaulina SzubarczykEOF
2646b6eb9b45SPaulina Szubarczyk        compile_prog "" "$xen_libs $xen_stable_libs"
2647b6eb9b45SPaulina Szubarczyk      then
2648f1167ee6SJuergen Gross      xen_ctrl_version=40800
26491badb709SPaolo Bonzini      xen=enabled
2650b6eb9b45SPaulina Szubarczyk    elif
2651b6eb9b45SPaulina Szubarczyk        cat > $TMPC <<EOF &&
2652b6eb9b45SPaulina Szubarczyk/*
2653b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat
2654b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given.
26555eeb39c2SIan Campbell */
26565eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API
26575eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API
26585eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API
26595eeb39c2SIan Campbell#include <xenctrl.h>
26605eeb39c2SIan Campbell#include <xenstore.h>
26615eeb39c2SIan Campbell#include <xenevtchn.h>
26625eeb39c2SIan Campbell#include <xengnttab.h>
26635eeb39c2SIan Campbell#include <xenforeignmemory.h>
26645eeb39c2SIan Campbell#include <stdint.h>
26655eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h>
26665eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS)
26675eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined
26685eeb39c2SIan Campbell#endif
26695eeb39c2SIan Campbellint main(void) {
26705eeb39c2SIan Campbell  xc_interface *xc = NULL;
26715eeb39c2SIan Campbell  xenforeignmemory_handle *xfmem;
26725eeb39c2SIan Campbell  xenevtchn_handle *xe;
26735eeb39c2SIan Campbell  xengnttab_handle *xg;
26745eeb39c2SIan Campbell
26755eeb39c2SIan Campbell  xs_daemon_open();
26765eeb39c2SIan Campbell
26775eeb39c2SIan Campbell  xc = xc_interface_open(0, 0, 0);
26785eeb39c2SIan Campbell  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
26795eeb39c2SIan Campbell  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
26805eeb39c2SIan Campbell  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
26815eeb39c2SIan Campbell  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
26825eeb39c2SIan Campbell
26835eeb39c2SIan Campbell  xfmem = xenforeignmemory_open(0, 0);
26845eeb39c2SIan Campbell  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
26855eeb39c2SIan Campbell
26865eeb39c2SIan Campbell  xe = xenevtchn_open(0, 0);
26875eeb39c2SIan Campbell  xenevtchn_fd(xe);
26885eeb39c2SIan Campbell
26895eeb39c2SIan Campbell  xg = xengnttab_open(0, 0);
26905eeb39c2SIan Campbell  xengnttab_map_grant_ref(xg, 0, 0, 0);
26915eeb39c2SIan Campbell
26925eeb39c2SIan Campbell  return 0;
26935eeb39c2SIan Campbell}
26945eeb39c2SIan CampbellEOF
26955eeb39c2SIan Campbell        compile_prog "" "$xen_libs $xen_stable_libs"
26965eeb39c2SIan Campbell      then
2697f1167ee6SJuergen Gross      xen_ctrl_version=40701
26981badb709SPaolo Bonzini      xen=enabled
2699cdadde39SRoger Pau Monne
2700cdadde39SRoger Pau Monne    # Xen 4.6
2701cdadde39SRoger Pau Monne    elif
2702cdadde39SRoger Pau Monne        cat > $TMPC <<EOF &&
2703cdadde39SRoger Pau Monne#include <xenctrl.h>
2704e108a3c1SAnthony PERARD#include <xenstore.h>
2705d5b93ddfSAnthony PERARD#include <stdint.h>
2706d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
2707d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
2708d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
2709d5b93ddfSAnthony PERARD#endif
2710d5b93ddfSAnthony PERARDint main(void) {
2711d5b93ddfSAnthony PERARD  xc_interface *xc;
2712d5b93ddfSAnthony PERARD  xs_daemon_open();
2713d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
2714d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2715d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
2716b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
27178688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2718d8b441a3SJan Beulich  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
271920a544c7SKonrad Rzeszutek Wilk  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2720d8b441a3SJan Beulich  return 0;
2721d8b441a3SJan Beulich}
2722d8b441a3SJan BeulichEOF
2723d8b441a3SJan Beulich        compile_prog "" "$xen_libs"
2724d8b441a3SJan Beulich      then
2725f1167ee6SJuergen Gross      xen_ctrl_version=40600
27261badb709SPaolo Bonzini      xen=enabled
2727d8b441a3SJan Beulich
2728d8b441a3SJan Beulich    # Xen 4.5
2729d8b441a3SJan Beulich    elif
2730d8b441a3SJan Beulich        cat > $TMPC <<EOF &&
2731d8b441a3SJan Beulich#include <xenctrl.h>
2732d8b441a3SJan Beulich#include <xenstore.h>
2733d8b441a3SJan Beulich#include <stdint.h>
2734d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h>
2735d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS)
2736d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined
2737d8b441a3SJan Beulich#endif
2738d8b441a3SJan Beulichint main(void) {
2739d8b441a3SJan Beulich  xc_interface *xc;
2740d8b441a3SJan Beulich  xs_daemon_open();
2741d8b441a3SJan Beulich  xc = xc_interface_open(0, 0, 0);
2742d8b441a3SJan Beulich  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2743d8b441a3SJan Beulich  xc_gnttab_open(NULL, 0);
2744d8b441a3SJan Beulich  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2745d8b441a3SJan Beulich  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
27463996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
27473996e85cSPaul Durrant  return 0;
27483996e85cSPaul Durrant}
27493996e85cSPaul DurrantEOF
27503996e85cSPaul Durrant        compile_prog "" "$xen_libs"
27513996e85cSPaul Durrant      then
2752f1167ee6SJuergen Gross      xen_ctrl_version=40500
27531badb709SPaolo Bonzini      xen=enabled
27543996e85cSPaul Durrant
27553996e85cSPaul Durrant    elif
27563996e85cSPaul Durrant        cat > $TMPC <<EOF &&
27573996e85cSPaul Durrant#include <xenctrl.h>
27583996e85cSPaul Durrant#include <xenstore.h>
27593996e85cSPaul Durrant#include <stdint.h>
27603996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
27613996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
27623996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
27633996e85cSPaul Durrant#endif
27643996e85cSPaul Durrantint main(void) {
27653996e85cSPaul Durrant  xc_interface *xc;
27663996e85cSPaul Durrant  xs_daemon_open();
27673996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
27683996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
27693996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
27703996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
27713996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
27728688e065SStefano Stabellini  return 0;
27738688e065SStefano Stabellini}
27748688e065SStefano StabelliniEOF
27758688e065SStefano Stabellini        compile_prog "" "$xen_libs"
277669deef08SPeter Maydell      then
2777f1167ee6SJuergen Gross      xen_ctrl_version=40200
27781badb709SPaolo Bonzini      xen=enabled
27798688e065SStefano Stabellini
2780e37630caSaliguori    else
27811badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
2782edfb07edSIan Campbell        feature_not_found "xen (unsupported version)" \
2783edfb07edSIan Campbell                          "Install a supported xen (xen 4.2 or newer)"
2784fc321b4bSJuan Quintela      fi
27851badb709SPaolo Bonzini      xen=disabled
2786e37630caSaliguori    fi
2787d5b93ddfSAnthony PERARD
27881badb709SPaolo Bonzini    if test "$xen" = enabled; then
2789f1167ee6SJuergen Gross      if test $xen_ctrl_version -ge 40701  ; then
2790582ea95fSMarc-André Lureau        xen_libs="$xen_libs $xen_stable_libs "
27915eeb39c2SIan Campbell      fi
2792d5b93ddfSAnthony PERARD    fi
2793e37630caSaliguori  fi
2794c1cdd9d5SJuergen Grossfi
2795e37630caSaliguori
2796d661d9a4SJustin Terry (VM)##########################################
2797ddbb0d09SDaniel P. Berrange# GNUTLS probe
2798ddbb0d09SDaniel P. Berrange
2799ddbb0d09SDaniel P. Berrangeif test "$gnutls" != "no"; then
2800a73e82efSRichard Henderson    pass="no"
2801a0722409SDaniel P. Berrangé    if $pkg_config --exists "gnutls >= 3.1.18"; then
280289138857SStefan Weil        gnutls_cflags=$($pkg_config --cflags gnutls)
280389138857SStefan Weil        gnutls_libs=$($pkg_config --libs gnutls)
2804a73e82efSRichard Henderson        # Packaging for the static libraries is not always correct.
2805a73e82efSRichard Henderson        # At least ubuntu 18.04 ships only shared libraries.
2806a73e82efSRichard Henderson        write_c_skeleton
2807a73e82efSRichard Henderson        if compile_prog "" "$gnutls_libs" ; then
2808a73e82efSRichard Henderson            pass="yes"
2809a73e82efSRichard Henderson        fi
2810a73e82efSRichard Henderson    fi
2811a73e82efSRichard Henderson    if test "$pass" = "no" && test "$gnutls" = "yes"; then
2812a0722409SDaniel P. Berrangé	feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2813ddbb0d09SDaniel P. Berrange    else
2814a73e82efSRichard Henderson        gnutls="$pass"
2815ddbb0d09SDaniel P. Berrange    fi
2816ddbb0d09SDaniel P. Berrangefi
2817ddbb0d09SDaniel P. Berrange
281891bfcdb0SDaniel P. Berrange
281991bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-gcrypt flag,
282091bfcdb0SDaniel P. Berrange# then mark as disabled if user requested nettle
2821a0722409SDaniel P. Berrangé# explicitly
282291bfcdb0SDaniel P. Berrangeif test -z "$gcrypt"
282391bfcdb0SDaniel P. Berrangethen
2824a0722409SDaniel P. Berrangé    if test "$nettle" = "yes"
282591bfcdb0SDaniel P. Berrange    then
282691bfcdb0SDaniel P. Berrange        gcrypt="no"
282791bfcdb0SDaniel P. Berrange    fi
282891bfcdb0SDaniel P. Berrangefi
282991bfcdb0SDaniel P. Berrange
283091bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-nettle flag,
283191bfcdb0SDaniel P. Berrange# then mark as disabled if user requested gcrypt
2832a0722409SDaniel P. Berrangé# explicitly
283391bfcdb0SDaniel P. Berrangeif test -z "$nettle"
283491bfcdb0SDaniel P. Berrangethen
2835a0722409SDaniel P. Berrangé    if test "$gcrypt" = "yes"
283691bfcdb0SDaniel P. Berrange    then
283791bfcdb0SDaniel P. Berrange        nettle="no"
283891bfcdb0SDaniel P. Berrange    fi
283991bfcdb0SDaniel P. Berrangefi
284091bfcdb0SDaniel P. Berrange
2841dea7a64eSDaniel P. Berrangéhas_libgcrypt() {
284291bfcdb0SDaniel P. Berrange    if ! has "libgcrypt-config"
284391bfcdb0SDaniel P. Berrange    then
284491bfcdb0SDaniel P. Berrange	return 1
284591bfcdb0SDaniel P. Berrange    fi
284691bfcdb0SDaniel P. Berrange
284791bfcdb0SDaniel P. Berrange    if test -n "$cross_prefix"
284891bfcdb0SDaniel P. Berrange    then
284989138857SStefan Weil	host=$(libgcrypt-config --host)
285091bfcdb0SDaniel P. Berrange	if test "$host-" != $cross_prefix
285191bfcdb0SDaniel P. Berrange	then
285291bfcdb0SDaniel P. Berrange	    return 1
285391bfcdb0SDaniel P. Berrange	fi
285491bfcdb0SDaniel P. Berrange    fi
285591bfcdb0SDaniel P. Berrange
2856dea7a64eSDaniel P. Berrangé    maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2857dea7a64eSDaniel P. Berrangé    min=`libgcrypt-config --version | awk -F . '{print $2}'`
2858dea7a64eSDaniel P. Berrangé
2859dea7a64eSDaniel P. Berrangé    if test $maj != 1 || test $min -lt 5
2860dea7a64eSDaniel P. Berrangé    then
2861dea7a64eSDaniel P. Berrangé       return 1
2862dea7a64eSDaniel P. Berrangé    fi
2863dea7a64eSDaniel P. Berrangé
286491bfcdb0SDaniel P. Berrange    return 0
286591bfcdb0SDaniel P. Berrange}
286691bfcdb0SDaniel P. Berrange
2867a0722409SDaniel P. Berrangé
2868a0722409SDaniel P. Berrangéif test "$nettle" != "no"; then
2869a73e82efSRichard Henderson    pass="no"
287064dd2f3bSDaniel P. Berrangé    if $pkg_config --exists "nettle >= 2.7.1"; then
2871a0722409SDaniel P. Berrangé        nettle_cflags=$($pkg_config --cflags nettle)
2872a0722409SDaniel P. Berrangé        nettle_libs=$($pkg_config --libs nettle)
2873a0722409SDaniel P. Berrangé        nettle_version=$($pkg_config --modversion nettle)
2874a73e82efSRichard Henderson        # Link test to make sure the given libraries work (e.g for static).
2875a73e82efSRichard Henderson        write_c_skeleton
2876a73e82efSRichard Henderson        if compile_prog "" "$nettle_libs" ; then
2877a0722409SDaniel P. Berrangé            if test -z "$gcrypt"; then
2878a0722409SDaniel P. Berrangé               gcrypt="no"
2879a0722409SDaniel P. Berrangé            fi
2880a73e82efSRichard Henderson            pass="yes"
2881a73e82efSRichard Henderson        fi
2882a73e82efSRichard Henderson    fi
2883dc2207afSDaniel P. Berrangé    if test "$pass" = "yes"
2884dc2207afSDaniel P. Berrangé    then
2885dc2207afSDaniel P. Berrangé        cat > $TMPC << EOF
2886dc2207afSDaniel P. Berrangé#include <nettle/xts.h>
2887dc2207afSDaniel P. Berrangéint main(void) {
2888dc2207afSDaniel P. Berrangé  return 0;
2889dc2207afSDaniel P. Berrangé}
2890dc2207afSDaniel P. BerrangéEOF
2891dc2207afSDaniel P. Berrangé        if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2892dc2207afSDaniel P. Berrangé            nettle_xts=yes
2893dc2207afSDaniel P. Berrangé            qemu_private_xts=no
2894dc2207afSDaniel P. Berrangé        fi
2895dc2207afSDaniel P. Berrangé    fi
2896a73e82efSRichard Henderson    if test "$pass" = "no" && test "$nettle" = "yes"; then
289764dd2f3bSDaniel P. Berrangé        feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2898a0722409SDaniel P. Berrangé    else
2899a73e82efSRichard Henderson        nettle="$pass"
2900a0722409SDaniel P. Berrangé    fi
2901a0722409SDaniel P. Berrangéfi
2902a0722409SDaniel P. Berrangé
290391bfcdb0SDaniel P. Berrangeif test "$gcrypt" != "no"; then
2904a73e82efSRichard Henderson    pass="no"
2905dea7a64eSDaniel P. Berrangé    if has_libgcrypt; then
290689138857SStefan Weil        gcrypt_cflags=$(libgcrypt-config --cflags)
290789138857SStefan Weil        gcrypt_libs=$(libgcrypt-config --libs)
2908a73e82efSRichard Henderson        # Debian has removed -lgpg-error from libgcrypt-config
290991bfcdb0SDaniel P. Berrange        # as it "spreads unnecessary dependencies" which in
291091bfcdb0SDaniel P. Berrange        # turn breaks static builds...
291191bfcdb0SDaniel P. Berrange        if test "$static" = "yes"
291291bfcdb0SDaniel P. Berrange        then
291391bfcdb0SDaniel P. Berrange            gcrypt_libs="$gcrypt_libs -lgpg-error"
291491bfcdb0SDaniel P. Berrange        fi
29151f923c70SLongpeng(Mike)
2916a73e82efSRichard Henderson        # Link test to make sure the given libraries work (e.g for static).
2917a73e82efSRichard Henderson        write_c_skeleton
2918a73e82efSRichard Henderson        if compile_prog "" "$gcrypt_libs" ; then
2919a73e82efSRichard Henderson            pass="yes"
2920a73e82efSRichard Henderson        fi
2921a73e82efSRichard Henderson    fi
2922a73e82efSRichard Henderson    if test "$pass" = "yes"; then
292337788f25SDaniel P. Berrange        gcrypt="yes"
29241f923c70SLongpeng(Mike)        cat > $TMPC << EOF
29251f923c70SLongpeng(Mike)#include <gcrypt.h>
29261f923c70SLongpeng(Mike)int main(void) {
29271f923c70SLongpeng(Mike)  gcry_mac_hd_t handle;
29281f923c70SLongpeng(Mike)  gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
29291f923c70SLongpeng(Mike)                GCRY_MAC_FLAG_SECURE, NULL);
29301f923c70SLongpeng(Mike)  return 0;
29311f923c70SLongpeng(Mike)}
29321f923c70SLongpeng(Mike)EOF
29331f923c70SLongpeng(Mike)        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
29341f923c70SLongpeng(Mike)            gcrypt_hmac=yes
29351f923c70SLongpeng(Mike)        fi
2936e0576942SDaniel P. Berrangé        cat > $TMPC << EOF
2937e0576942SDaniel P. Berrangé#include <gcrypt.h>
2938e0576942SDaniel P. Berrangéint main(void) {
2939e0576942SDaniel P. Berrangé  gcry_cipher_hd_t handle;
2940e0576942SDaniel P. Berrangé  gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
2941e0576942SDaniel P. Berrangé  return 0;
2942e0576942SDaniel P. Berrangé}
2943e0576942SDaniel P. BerrangéEOF
2944e0576942SDaniel P. Berrangé        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2945e0576942SDaniel P. Berrangé            gcrypt_xts=yes
2946e0576942SDaniel P. Berrangé            qemu_private_xts=no
2947e0576942SDaniel P. Berrangé        fi
2948a73e82efSRichard Henderson    elif test "$gcrypt" = "yes"; then
2949dea7a64eSDaniel P. Berrangé        feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
295091bfcdb0SDaniel P. Berrange    else
295191bfcdb0SDaniel P. Berrange        gcrypt="no"
295291bfcdb0SDaniel P. Berrange    fi
295362893b67SDaniel P. Berrangefi
295462893b67SDaniel P. Berrange
2955ddbb0d09SDaniel P. Berrange
295691bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" && test "$nettle" = "yes"
295791bfcdb0SDaniel P. Berrangethen
295891bfcdb0SDaniel P. Berrange    error_exit "Only one of gcrypt & nettle can be enabled"
295991bfcdb0SDaniel P. Berrangefi
2960ed754746SDaniel P. Berrange
29619a2fd434SDaniel P. Berrange##########################################
29629a2fd434SDaniel P. Berrange# libtasn1 - only for the TLS creds/session test suite
29639a2fd434SDaniel P. Berrange
29649a2fd434SDaniel P. Berrangetasn1=yes
296590246037SDaniel P. Berrangetasn1_cflags=""
296690246037SDaniel P. Berrangetasn1_libs=""
29679a2fd434SDaniel P. Berrangeif $pkg_config --exists "libtasn1"; then
296889138857SStefan Weil    tasn1_cflags=$($pkg_config --cflags libtasn1)
296989138857SStefan Weil    tasn1_libs=$($pkg_config --libs libtasn1)
29709a2fd434SDaniel P. Berrangeelse
29719a2fd434SDaniel P. Berrange    tasn1=no
29729a2fd434SDaniel P. Berrangefi
29739a2fd434SDaniel P. Berrange
2974ed754746SDaniel P. Berrange
2975bbbf9bfbSStefan Weil##########################################
29768953caf3SDaniel P. Berrange# PAM probe
29778953caf3SDaniel P. Berrange
29788953caf3SDaniel P. Berrangeif test "$auth_pam" != "no"; then
29798953caf3SDaniel P. Berrange    cat > $TMPC <<EOF
29808953caf3SDaniel P. Berrange#include <security/pam_appl.h>
29818953caf3SDaniel P. Berrange#include <stdio.h>
29828953caf3SDaniel P. Berrangeint main(void) {
29838953caf3SDaniel P. Berrange   const char *service_name = "qemu";
29848953caf3SDaniel P. Berrange   const char *user = "frank";
29859c9642d0SDr. David Alan Gilbert   const struct pam_conv pam_conv = { 0 };
29868953caf3SDaniel P. Berrange   pam_handle_t *pamh = NULL;
29879c9642d0SDr. David Alan Gilbert   pam_start(service_name, user, &pam_conv, &pamh);
29888953caf3SDaniel P. Berrange   return 0;
29898953caf3SDaniel P. Berrange}
29908953caf3SDaniel P. BerrangeEOF
29918953caf3SDaniel P. Berrange    if compile_prog "" "-lpam" ; then
29928953caf3SDaniel P. Berrange        auth_pam=yes
29938953caf3SDaniel P. Berrange    else
29948953caf3SDaniel P. Berrange        if test "$auth_pam" = "yes"; then
29958953caf3SDaniel P. Berrange            feature_not_found "PAM" "Install PAM development package"
29968953caf3SDaniel P. Berrange        else
29978953caf3SDaniel P. Berrange            auth_pam=no
29988953caf3SDaniel P. Berrange        fi
29998953caf3SDaniel P. Berrange    fi
30008953caf3SDaniel P. Berrangefi
30018953caf3SDaniel P. Berrange
3002559607eaSDaniel P. Berrange##########################################
3003bbbf9bfbSStefan Weil# VTE probe
3004bbbf9bfbSStefan Weil
3005bbbf9bfbSStefan Weilif test "$vte" != "no"; then
3006c6feff9eSCole Robinson    vteminversion="0.32.0"
3007c6feff9eSCole Robinson    if $pkg_config --exists "vte-2.91"; then
3008c6feff9eSCole Robinson      vtepackage="vte-2.91"
3009c6feff9eSCole Robinson    else
3010528de90aSDaniel P. Berrange      vtepackage="vte-2.90"
3011c6feff9eSCole Robinson    fi
3012c6feff9eSCole Robinson    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
301389138857SStefan Weil        vte_cflags=$($pkg_config --cflags $vtepackage)
301489138857SStefan Weil        vte_libs=$($pkg_config --libs $vtepackage)
301589138857SStefan Weil        vteversion=$($pkg_config --modversion $vtepackage)
3016bbbf9bfbSStefan Weil        vte="yes"
3017bbbf9bfbSStefan Weil    elif test "$vte" = "yes"; then
3018c6feff9eSCole Robinson        feature_not_found "vte" "Install libvte-2.90/2.91 devel"
30199e04c683SStefan Weil    else
3020bbbf9bfbSStefan Weil        vte="no"
3021a4ccabcfSAnthony Liguori    fi
3022a4ccabcfSAnthony Liguorifi
3023a4ccabcfSAnthony Liguori
3024a4ccabcfSAnthony Liguori##########################################
30252da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
30262da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
30272da776dbSMichael R. Hines  cat > $TMPC <<EOF
30282da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
30292da776dbSMichael R. Hinesint main(void) { return 0; }
30302da776dbSMichael R. HinesEOF
3031ef6d4ccdSYuval Shaia  rdma_libs="-lrdmacm -libverbs -libumad"
30322da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
30332da776dbSMichael R. Hines    rdma="yes"
30342da776dbSMichael R. Hines  else
30352da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
30362da776dbSMichael R. Hines        error_exit \
3037ef6d4ccdSYuval Shaia            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
30382da776dbSMichael R. Hines            " Your options:" \
3039ef6d4ccdSYuval Shaia            "  (1) Fast: Install infiniband packages (devel) from your distro." \
30402da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
30412da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
30422da776dbSMichael R. Hines    fi
30432da776dbSMichael R. Hines    rdma="no"
30442da776dbSMichael R. Hines  fi
30452da776dbSMichael R. Hinesfi
30462da776dbSMichael R. Hines
304721ab34c9SMarcel Apfelbaum##########################################
304821ab34c9SMarcel Apfelbaum# PVRDMA detection
304921ab34c9SMarcel Apfelbaum
305021ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF &&
305121ab34c9SMarcel Apfelbaum#include <sys/mman.h>
305221ab34c9SMarcel Apfelbaum
305321ab34c9SMarcel Apfelbaumint
305421ab34c9SMarcel Apfelbaummain(void)
305521ab34c9SMarcel Apfelbaum{
305621ab34c9SMarcel Apfelbaum    char buf = 0;
305721ab34c9SMarcel Apfelbaum    void *addr = &buf;
305821ab34c9SMarcel Apfelbaum    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
305921ab34c9SMarcel Apfelbaum
306021ab34c9SMarcel Apfelbaum    return 0;
306121ab34c9SMarcel Apfelbaum}
306221ab34c9SMarcel ApfelbaumEOF
306321ab34c9SMarcel Apfelbaum
306421ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then
306521ab34c9SMarcel Apfelbaum    case "$pvrdma" in
306621ab34c9SMarcel Apfelbaum    "")
306721ab34c9SMarcel Apfelbaum        if compile_prog "" ""; then
306821ab34c9SMarcel Apfelbaum            pvrdma="yes"
306921ab34c9SMarcel Apfelbaum        else
307021ab34c9SMarcel Apfelbaum            pvrdma="no"
307121ab34c9SMarcel Apfelbaum        fi
307221ab34c9SMarcel Apfelbaum        ;;
307321ab34c9SMarcel Apfelbaum    "yes")
307421ab34c9SMarcel Apfelbaum        if ! compile_prog "" ""; then
307521ab34c9SMarcel Apfelbaum            error_exit "PVRDMA is not supported since mremap is not implemented"
307621ab34c9SMarcel Apfelbaum        fi
307721ab34c9SMarcel Apfelbaum        pvrdma="yes"
307821ab34c9SMarcel Apfelbaum        ;;
307921ab34c9SMarcel Apfelbaum    "no")
308021ab34c9SMarcel Apfelbaum        pvrdma="no"
308121ab34c9SMarcel Apfelbaum        ;;
308221ab34c9SMarcel Apfelbaum    esac
308321ab34c9SMarcel Apfelbaumelse
308421ab34c9SMarcel Apfelbaum    if test "$pvrdma" = "yes" ; then
308521ab34c9SMarcel Apfelbaum        error_exit "PVRDMA requires rdma suppport"
308621ab34c9SMarcel Apfelbaum    fi
308721ab34c9SMarcel Apfelbaum    pvrdma="no"
308821ab34c9SMarcel Apfelbaumfi
308995c6bff3SBenoît Canet
3090ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported
3091ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then
3092ee108585SYuval Shaia
3093ee108585SYuval Shaiacat > $TMPC <<EOF &&
3094ee108585SYuval Shaia#include <infiniband/verbs.h>
3095ee108585SYuval Shaia
3096ee108585SYuval Shaiaint
3097ee108585SYuval Shaiamain(void)
3098ee108585SYuval Shaia{
3099ee108585SYuval Shaia    struct ibv_mr *mr;
3100ee108585SYuval Shaia    struct ibv_pd *pd = NULL;
3101ee108585SYuval Shaia    size_t length = 10;
3102ee108585SYuval Shaia    uint64_t iova = 0;
3103ee108585SYuval Shaia    int access = 0;
3104ee108585SYuval Shaia    void *addr = NULL;
3105ee108585SYuval Shaia
3106ee108585SYuval Shaia    mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3107ee108585SYuval Shaia
3108ee108585SYuval Shaia    ibv_dereg_mr(mr);
3109ee108585SYuval Shaia
3110ee108585SYuval Shaia    return 0;
3111ee108585SYuval Shaia}
3112ee108585SYuval ShaiaEOF
3113ee108585SYuval Shaia    if ! compile_prog "" "-libverbs"; then
3114ee108585SYuval Shaia        QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3115ee108585SYuval Shaia    fi
3116ee108585SYuval Shaiafi
3117ee108585SYuval Shaia
311895c6bff3SBenoît Canet##########################################
3119c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c
3120dce512deSChristoph Hellwigif test "$xfs" != "no" ; then
3121dce512deSChristoph Hellwig  cat > $TMPC << EOF
3122ffc41d10SStefan Weil#include <stddef.h>  /* NULL */
3123dce512deSChristoph Hellwig#include <xfs/xfs.h>
3124dce512deSChristoph Hellwigint main(void)
3125dce512deSChristoph Hellwig{
3126dce512deSChristoph Hellwig    xfsctl(NULL, 0, 0, NULL);
3127dce512deSChristoph Hellwig    return 0;
3128dce512deSChristoph Hellwig}
3129dce512deSChristoph HellwigEOF
3130dce512deSChristoph Hellwig  if compile_prog "" "" ; then
3131dce512deSChristoph Hellwig    xfs="yes"
3132dce512deSChristoph Hellwig  else
3133dce512deSChristoph Hellwig    if test "$xfs" = "yes" ; then
3134e3a6e0daSzhaolichang      feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3135dce512deSChristoph Hellwig    fi
3136dce512deSChristoph Hellwig    xfs=no
3137dce512deSChristoph Hellwig  fi
3138dce512deSChristoph Hellwigfi
3139dce512deSChristoph Hellwig
3140dce512deSChristoph Hellwig##########################################
31418a16d273Sths# vde libraries probe
3142dfb278bdSJuan Quintelaif test "$vde" != "no" ; then
31434baae0acSJuan Quintela  vde_libs="-lvdeplug"
31448a16d273Sths  cat > $TMPC << EOF
31458a16d273Sths#include <libvdeplug.h>
31464a7f0e06Spbrookint main(void)
31474a7f0e06Spbrook{
31484a7f0e06Spbrook    struct vde_open_args a = {0, 0, 0};
3149fea08e08SPeter Maydell    char s[] = "";
3150fea08e08SPeter Maydell    vde_open(s, s, &a);
31514a7f0e06Spbrook    return 0;
31524a7f0e06Spbrook}
31538a16d273SthsEOF
315452166aa0SJuan Quintela  if compile_prog "" "$vde_libs" ; then
31554baae0acSJuan Quintela    vde=yes
3156dfb278bdSJuan Quintela  else
3157dfb278bdSJuan Quintela    if test "$vde" = "yes" ; then
315821684af0SStewart Smith      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3159dfb278bdSJuan Quintela    fi
3160dfb278bdSJuan Quintela    vde=no
31618a16d273Sths  fi
31628a16d273Sthsfi
31638a16d273Sths
31648a16d273Sths##########################################
31650a985b37SVincenzo Maffione# netmap support probe
31660a985b37SVincenzo Maffione# Apart from looking for netmap headers, we make sure that the host API version
31670a985b37SVincenzo Maffione# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
31680a985b37SVincenzo Maffione# a minor/major version number. Minor new features will be marked with values up
31690a985b37SVincenzo Maffione# to 15, and if something happens that requires a change to the backend we will
31700a985b37SVincenzo Maffione# move above 15, submit the backend fixes and modify this two bounds.
317158952137SVincenzo Maffioneif test "$netmap" != "no" ; then
317258952137SVincenzo Maffione  cat > $TMPC << EOF
317358952137SVincenzo Maffione#include <inttypes.h>
317458952137SVincenzo Maffione#include <net/if.h>
317558952137SVincenzo Maffione#include <net/netmap.h>
317658952137SVincenzo Maffione#include <net/netmap_user.h>
31770a985b37SVincenzo Maffione#if (NETMAP_API < 11) || (NETMAP_API > 15)
31780a985b37SVincenzo Maffione#error
31790a985b37SVincenzo Maffione#endif
318058952137SVincenzo Maffioneint main(void) { return 0; }
318158952137SVincenzo MaffioneEOF
318258952137SVincenzo Maffione  if compile_prog "" "" ; then
318358952137SVincenzo Maffione    netmap=yes
318458952137SVincenzo Maffione  else
318558952137SVincenzo Maffione    if test "$netmap" = "yes" ; then
318658952137SVincenzo Maffione      feature_not_found "netmap"
318758952137SVincenzo Maffione    fi
318858952137SVincenzo Maffione    netmap=no
318958952137SVincenzo Maffione  fi
319058952137SVincenzo Maffionefi
319158952137SVincenzo Maffione
319258952137SVincenzo Maffione##########################################
3193422a5fd0SJoelle van Dyne# detect CoreAudio
3194422a5fd0SJoelle van Dyneif test "$coreaudio" != "no" ; then
3195422a5fd0SJoelle van Dyne  coreaudio_libs="-framework CoreAudio"
3196422a5fd0SJoelle van Dyne  cat > $TMPC << EOF
3197422a5fd0SJoelle van Dyne#include <CoreAudio/CoreAudio.h>
3198422a5fd0SJoelle van Dyneint main(void)
3199422a5fd0SJoelle van Dyne{
3200422a5fd0SJoelle van Dyne  return (int)AudioGetCurrentHostTime();
3201422a5fd0SJoelle van Dyne}
3202422a5fd0SJoelle van DyneEOF
3203422a5fd0SJoelle van Dyne  if compile_prog "" "$coreaudio_libs" ; then
3204422a5fd0SJoelle van Dyne    coreaudio=yes
3205422a5fd0SJoelle van Dyne  else
3206422a5fd0SJoelle van Dyne    coreaudio=no
3207422a5fd0SJoelle van Dyne  fi
3208422a5fd0SJoelle van Dynefi
3209422a5fd0SJoelle van Dyne
3210422a5fd0SJoelle van Dyne##########################################
3211c2de5c91Smalc# Sound support libraries probe
32128f28f3fbSths
321389138857SStefan Weilaudio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3214c2de5c91Smalcfor drv in $audio_drv_list; do
3215c2de5c91Smalc    case $drv in
3216e42975a1SGerd Hoffmann    alsa | try-alsa)
3217c80a867fSGerd Hoffmann    if $pkg_config alsa --exists; then
3218c80a867fSGerd Hoffmann        alsa_libs=$($pkg_config alsa --libs)
3219478e943fSPaolo Bonzini        alsa_cflags=$($pkg_config alsa --cflags)
3220478e943fSPaolo Bonzini        alsa=yes
3221e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3222e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3223e42975a1SGerd Hoffmann        fi
3224e42975a1SGerd Hoffmann    else
3225e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3226e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3227c80a867fSGerd Hoffmann        else
3228c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3229c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3230c80a867fSGerd Hoffmann        fi
3231e42975a1SGerd Hoffmann    fi
3232c2de5c91Smalc    ;;
3233c2de5c91Smalc
3234e42975a1SGerd Hoffmann    pa | try-pa)
3235c80a867fSGerd Hoffmann    if $pkg_config libpulse --exists; then
3236478e943fSPaolo Bonzini        libpulse=yes
3237c80a867fSGerd Hoffmann        pulse_libs=$($pkg_config libpulse --libs)
3238478e943fSPaolo Bonzini        pulse_cflags=$($pkg_config libpulse --cflags)
3239e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3240e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3241e42975a1SGerd Hoffmann        fi
3242e42975a1SGerd Hoffmann    else
3243e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3244e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3245c80a867fSGerd Hoffmann        else
3246c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3247c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3248c80a867fSGerd Hoffmann        fi
3249e42975a1SGerd Hoffmann    fi
3250b8e59f18Smalc    ;;
3251b8e59f18Smalc
3252373967b2SGerd Hoffmann    sdl)
3253373967b2SGerd Hoffmann    if test "$sdl" = "no"; then
3254373967b2SGerd Hoffmann        error_exit "sdl not found or disabled, can not use sdl audio driver"
3255373967b2SGerd Hoffmann    fi
3256373967b2SGerd Hoffmann    ;;
3257373967b2SGerd Hoffmann
3258e42975a1SGerd Hoffmann    try-sdl)
3259e42975a1SGerd Hoffmann    if test "$sdl" = "no"; then
3260e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3261e42975a1SGerd Hoffmann    else
3262e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3263e42975a1SGerd Hoffmann    fi
3264e42975a1SGerd Hoffmann    ;;
3265e42975a1SGerd Hoffmann
3266422a5fd0SJoelle van Dyne    coreaudio | try-coreaudio)
3267422a5fd0SJoelle van Dyne    if test "$coreaudio" = "no"; then
3268422a5fd0SJoelle van Dyne      if test "$drv" = "try-coreaudio"; then
3269422a5fd0SJoelle van Dyne        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio//')
3270422a5fd0SJoelle van Dyne      else
3271422a5fd0SJoelle van Dyne        error_exit "$drv check failed" \
3272422a5fd0SJoelle van Dyne                "Make sure to have the $drv is available."
3273422a5fd0SJoelle van Dyne      fi
3274422a5fd0SJoelle van Dyne    else
3275b1149911SFam Zheng      coreaudio_libs="-framework CoreAudio"
3276422a5fd0SJoelle van Dyne      if test "$drv" = "try-coreaudio"; then
3277422a5fd0SJoelle van Dyne        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio/coreaudio/')
3278422a5fd0SJoelle van Dyne      fi
3279422a5fd0SJoelle van Dyne    fi
3280997e690aSJuan Quintela    ;;
3281997e690aSJuan Quintela
3282a4bf6780SJuan Quintela    dsound)
3283b1149911SFam Zheng      dsound_libs="-lole32 -ldxguid"
3284d5631638Smalc      audio_win_int="yes"
3285a4bf6780SJuan Quintela    ;;
3286a4bf6780SJuan Quintela
3287a4bf6780SJuan Quintela    oss)
3288b1149911SFam Zheng      oss_libs="$oss_lib"
3289a4bf6780SJuan Quintela    ;;
3290a4bf6780SJuan Quintela
32912e445703SGeoffrey McRae    jack | try-jack)
32922e445703SGeoffrey McRae    if $pkg_config jack --exists; then
3293478e943fSPaolo Bonzini        libjack=yes
32942e445703SGeoffrey McRae        jack_libs=$($pkg_config jack --libs)
32952e445703SGeoffrey McRae        if test "$drv" = "try-jack"; then
32962e445703SGeoffrey McRae            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
32972e445703SGeoffrey McRae        fi
32982e445703SGeoffrey McRae    else
32992e445703SGeoffrey McRae        if test "$drv" = "try-jack"; then
33002e445703SGeoffrey McRae            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
33012e445703SGeoffrey McRae        else
33022e445703SGeoffrey McRae            error_exit "$drv check failed" \
33032e445703SGeoffrey McRae                "Make sure to have the $drv libs and headers installed."
33042e445703SGeoffrey McRae        fi
33052e445703SGeoffrey McRae    fi
33062e445703SGeoffrey McRae    ;;
33072e445703SGeoffrey McRae
3308e4c63a6aSmalc    *)
33091c9b2a52Smalc    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
331076ad07a4SPeter Maydell        error_exit "Unknown driver '$drv' selected" \
331176ad07a4SPeter Maydell            "Possible drivers are: $audio_possible_drivers"
3312e4c63a6aSmalc    }
3313e4c63a6aSmalc    ;;
3314c2de5c91Smalc    esac
3315c2de5c91Smalcdone
33168f28f3fbSths
33174d3b6f6eSbalrog##########################################
3318e18df141SAnthony Liguori# glib support probe
3319a52d28afSPaolo Bonzini
332000f2cfbbSDaniel P. Berrangéglib_req_ver=2.48
3321aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
3322aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
3323a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
3324aa0d1f44SPaolo Bonzinifi
332554cb65d8SEmilio G. Cotaif test "$plugins" = yes; then
332654cb65d8SEmilio G. Cota    glib_modules="$glib_modules gmodule-2.0"
332754cb65d8SEmilio G. Cotafi
3328e26110cfSFam Zheng
3329aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
3330e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
333189138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
333289138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
3333e18df141SAnthony Liguori    else
3334e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3335e26110cfSFam Zheng    fi
3336e26110cfSFam Zhengdone
3337e26110cfSFam Zheng
3338215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it
3339215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3340215b0c2fSPaolo Bonzini
3341215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then
3342215b0c2fSPaolo Bonzini    glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3343215b0c2fSPaolo Bonzinifi
3344215b0c2fSPaolo Bonzini
334520cf7b8eSDenis Plotnikovif ! test "$gio" = "no"; then
334620cf7b8eSDenis Plotnikov    pass=no
3347f876b765SMarc-André Lureau    if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3348f876b765SMarc-André Lureau        gio_cflags=$($pkg_config --cflags gio-2.0)
3349f876b765SMarc-André Lureau        gio_libs=$($pkg_config --libs gio-2.0)
335025a97a56SMarc-André Lureau        gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
33515ecfb76cSPaolo Bonzini        if ! has "$gdbus_codegen"; then
33520dba4897SMarc-André Lureau            gdbus_codegen=
33530dba4897SMarc-André Lureau        fi
335476346b62SPeter Maydell        # Check that the libraries actually work -- Ubuntu 18.04 ships
335576346b62SPeter Maydell        # with pkg-config --static --libs data for gio-2.0 that is missing
335676346b62SPeter Maydell        # -lblkid and will give a link error.
335713ceae66SPeter Maydell        cat > $TMPC <<EOF
335813ceae66SPeter Maydell#include <gio/gio.h>
335913ceae66SPeter Maydellint main(void)
336013ceae66SPeter Maydell{
336113ceae66SPeter Maydell    g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
336213ceae66SPeter Maydell    return 0;
336313ceae66SPeter Maydell}
336413ceae66SPeter MaydellEOF
336513ceae66SPeter Maydell        if compile_prog "$gio_cflags" "$gio_libs" ; then
336620cf7b8eSDenis Plotnikov            pass=yes
336776346b62SPeter Maydell        else
336820cf7b8eSDenis Plotnikov            pass=no
3369f876b765SMarc-André Lureau        fi
3370f876b765SMarc-André Lureau
337120cf7b8eSDenis Plotnikov        if test "$pass" = "yes" &&
337220cf7b8eSDenis Plotnikov            $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
337325a97a56SMarc-André Lureau            gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
337425a97a56SMarc-André Lureau            gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
337525a97a56SMarc-André Lureau        fi
337620cf7b8eSDenis Plotnikov    fi
337720cf7b8eSDenis Plotnikov
337820cf7b8eSDenis Plotnikov    if test "$pass" = "no"; then
337920cf7b8eSDenis Plotnikov        if test "$gio" = "yes"; then
338020cf7b8eSDenis Plotnikov            feature_not_found "gio" "Install libgio >= 2.0"
338120cf7b8eSDenis Plotnikov        else
338220cf7b8eSDenis Plotnikov            gio=no
338320cf7b8eSDenis Plotnikov        fi
338420cf7b8eSDenis Plotnikov    else
338520cf7b8eSDenis Plotnikov        gio=yes
338620cf7b8eSDenis Plotnikov    fi
338720cf7b8eSDenis Plotnikovfi
338825a97a56SMarc-André Lureau
3389977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
3390977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
3391977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
3392977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
3393977a82abSDaniel P. Berrangecat > $TMPC <<EOF
3394977a82abSDaniel P. Berrange#include <glib.h>
3395977a82abSDaniel P. Berrange#include <unistd.h>
3396977a82abSDaniel P. Berrange
3397977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
3398977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3399977a82abSDaniel P. Berrange
3400977a82abSDaniel P. Berrangeint main(void) {
3401977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3402977a82abSDaniel P. Berrange   return 0;
3403977a82abSDaniel P. Berrange}
3404977a82abSDaniel P. BerrangeEOF
3405977a82abSDaniel P. Berrange
3406215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then
3407977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3408977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
3409977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
3410977a82abSDaniel P. Berrange	       "build target"
3411977a82abSDaniel P. Berrangefi
3412977a82abSDaniel P. Berrange
3413bbbf2e04SJohn Snow# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3414bbbf2e04SJohn Snowcat > $TMPC << EOF
3415bbbf2e04SJohn Snow#include <glib.h>
3416bbbf2e04SJohn Snowint main(void) { return 0; }
3417bbbf2e04SJohn SnowEOF
3418bbbf2e04SJohn Snowif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3419bbbf2e04SJohn Snow    if cc_has_warning_flag "-Wno-unknown-attributes"; then
3420bbbf2e04SJohn Snow        glib_cflags="-Wno-unknown-attributes $glib_cflags"
34215770e8afSPaolo Bonzini        CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3422bbbf2e04SJohn Snow    fi
3423bbbf2e04SJohn Snowfi
3424bbbf2e04SJohn Snow
34259bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2
34269bda600bSEric Blakecat > $TMPC << EOF
34279bda600bSEric Blake#include <glib.h>
34289bda600bSEric Blaketypedef struct Foo {
34299bda600bSEric Blake    int i;
34309bda600bSEric Blake} Foo;
34319bda600bSEric Blakestatic void foo_free(Foo *f)
34329bda600bSEric Blake{
34339bda600bSEric Blake    g_free(f);
34349bda600bSEric Blake}
34359bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
34369bda600bSEric Blakeint main(void) { return 0; }
34379bda600bSEric BlakeEOF
34389bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
34399bda600bSEric Blake    if cc_has_warning_flag "-Wno-unused-function"; then
34409bda600bSEric Blake        glib_cflags="$glib_cflags -Wno-unused-function"
34415770e8afSPaolo Bonzini        CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
34429bda600bSEric Blake    fi
34439bda600bSEric Blakefi
34449bda600bSEric Blake
3445e26110cfSFam Zheng##########################################
3446e26110cfSFam Zheng# SHA command probe for modules
3447e26110cfSFam Zhengif test "$modules" = yes; then
3448e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
3449e26110cfSFam Zheng    for c in $shacmd_probe; do
34508ccefb91SFam Zheng        if has $c; then
3451e26110cfSFam Zheng            shacmd="$c"
3452e26110cfSFam Zheng            break
3453e26110cfSFam Zheng        fi
3454e26110cfSFam Zheng    done
3455e26110cfSFam Zheng    if test "$shacmd" = ""; then
3456e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3457e26110cfSFam Zheng    fi
3458e18df141SAnthony Liguorifi
3459e18df141SAnthony Liguori
3460e18df141SAnthony Liguori##########################################
3461e5d355d1Saliguori# pthread probe
34624b29ec41SBradPTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
34633c529d93Saliguori
3464e5d355d1Saliguoripthread=no
3465414f0dabSblueswir1cat > $TMPC << EOF
34663c529d93Saliguori#include <pthread.h>
34677a42bbe4SStefan Weilstatic void *f(void *p) { return NULL; }
34687a42bbe4SStefan Weilint main(void) {
34697a42bbe4SStefan Weil  pthread_t thread;
34707a42bbe4SStefan Weil  pthread_create(&thread, 0, f, 0);
34717a42bbe4SStefan Weil  return 0;
34727a42bbe4SStefan Weil}
3473414f0dabSblueswir1EOF
3474bd00d539SAndreas Färberif compile_prog "" "" ; then
3475bd00d539SAndreas Färber  pthread=yes
3476bd00d539SAndreas Färberelse
3477de65fe0fSSebastian Herbszt  for pthread_lib in $PTHREADLIBS_LIST; do
347852166aa0SJuan Quintela    if compile_prog "" "$pthread_lib" ; then
3479e5d355d1Saliguori      pthread=yes
3480de65fe0fSSebastian Herbszt      break
3481414f0dabSblueswir1    fi
3482de65fe0fSSebastian Herbszt  done
3483bd00d539SAndreas Färberfi
3484414f0dabSblueswir1
3485e633a5c6SEric Blakeif test "$mingw32" != yes && test "$pthread" = no; then
348676ad07a4SPeter Maydell  error_exit "pthread check failed" \
348776ad07a4SPeter Maydell      "Make sure to have the pthread libs and headers installed."
3488e5d355d1Saliguorifi
3489e5d355d1Saliguori
3490479a5747SRoman Bolshakov# check for pthread_setname_np with thread id
3491479a5747SRoman Bolshakovpthread_setname_np_w_tid=no
34925c312079SDr. David Alan Gilbertcat > $TMPC << EOF
34935c312079SDr. David Alan Gilbert#include <pthread.h>
34945c312079SDr. David Alan Gilbert
34955c312079SDr. David Alan Gilbertstatic void *f(void *p) { return NULL; }
34965c312079SDr. David Alan Gilbertint main(void)
34975c312079SDr. David Alan Gilbert{
34985c312079SDr. David Alan Gilbert    pthread_t thread;
34995c312079SDr. David Alan Gilbert    pthread_create(&thread, 0, f, 0);
35005c312079SDr. David Alan Gilbert    pthread_setname_np(thread, "QEMU");
35015c312079SDr. David Alan Gilbert    return 0;
35025c312079SDr. David Alan Gilbert}
35035c312079SDr. David Alan GilbertEOF
35045c312079SDr. David Alan Gilbertif compile_prog "" "$pthread_lib" ; then
3505479a5747SRoman Bolshakov  pthread_setname_np_w_tid=yes
3506479a5747SRoman Bolshakovfi
3507479a5747SRoman Bolshakov
3508479a5747SRoman Bolshakov# check for pthread_setname_np without thread id
3509479a5747SRoman Bolshakovpthread_setname_np_wo_tid=no
3510479a5747SRoman Bolshakovcat > $TMPC << EOF
3511479a5747SRoman Bolshakov#include <pthread.h>
3512479a5747SRoman Bolshakov
351312a9b8d8SThomas Huthstatic void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3514479a5747SRoman Bolshakovint main(void)
3515479a5747SRoman Bolshakov{
3516479a5747SRoman Bolshakov    pthread_t thread;
3517479a5747SRoman Bolshakov    pthread_create(&thread, 0, f, 0);
3518479a5747SRoman Bolshakov    return 0;
3519479a5747SRoman Bolshakov}
3520479a5747SRoman BolshakovEOF
3521479a5747SRoman Bolshakovif compile_prog "" "$pthread_lib" ; then
3522479a5747SRoman Bolshakov  pthread_setname_np_wo_tid=yes
35235c312079SDr. David Alan Gilbertfi
35245c312079SDr. David Alan Gilbert
3525bf9298b9Saliguori##########################################
3526b10d49d7SPino Toscano# libssh probe
3527b10d49d7SPino Toscanoif test "$libssh" != "no" ; then
3528b10d49d7SPino Toscano  if $pkg_config --exists libssh; then
3529b10d49d7SPino Toscano    libssh_cflags=$($pkg_config libssh --cflags)
3530b10d49d7SPino Toscano    libssh_libs=$($pkg_config libssh --libs)
3531b10d49d7SPino Toscano    libssh=yes
35320a12ec87SRichard W.M. Jones  else
3533b10d49d7SPino Toscano    if test "$libssh" = "yes" ; then
3534b10d49d7SPino Toscano      error_exit "libssh required for --enable-libssh"
35350a12ec87SRichard W.M. Jones    fi
3536b10d49d7SPino Toscano    libssh=no
35370a12ec87SRichard W.M. Jones  fi
35380a12ec87SRichard W.M. Jonesfi
35390a12ec87SRichard W.M. Jones
35400a12ec87SRichard W.M. Jones##########################################
3541b10d49d7SPino Toscano# Check for libssh 0.8
3542b10d49d7SPino Toscano# This is done like this instead of using the LIBSSH_VERSION_* and
3543b10d49d7SPino Toscano# SSH_VERSION_* macros because some distributions in the past shipped
3544b10d49d7SPino Toscano# snapshots of the future 0.8 from Git, and those snapshots did not
3545b10d49d7SPino Toscano# have updated version numbers (still referring to 0.7.0).
35469a2d462eSRichard W.M. Jones
3547b10d49d7SPino Toscanoif test "$libssh" = "yes"; then
35489a2d462eSRichard W.M. Jones  cat > $TMPC <<EOF
3549b10d49d7SPino Toscano#include <libssh/libssh.h>
3550b10d49d7SPino Toscanoint main(void) { return ssh_get_server_publickey(NULL, NULL); }
35519a2d462eSRichard W.M. JonesEOF
3552b10d49d7SPino Toscano  if compile_prog "$libssh_cflags" "$libssh_libs"; then
3553b10d49d7SPino Toscano    libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
35549a2d462eSRichard W.M. Jones  fi
35559a2d462eSRichard W.M. Jonesfi
35569a2d462eSRichard W.M. Jones
35579a2d462eSRichard W.M. Jones##########################################
35585c6c3a6cSChristoph Hellwig# linux-aio probe
35595c6c3a6cSChristoph Hellwig
35605c6c3a6cSChristoph Hellwigif test "$linux_aio" != "no" ; then
35615c6c3a6cSChristoph Hellwig  cat > $TMPC <<EOF
35625c6c3a6cSChristoph Hellwig#include <libaio.h>
35635c6c3a6cSChristoph Hellwig#include <sys/eventfd.h>
3564832ce9c2SScott Wood#include <stddef.h>
35655c6c3a6cSChristoph Hellwigint main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
35665c6c3a6cSChristoph HellwigEOF
35675c6c3a6cSChristoph Hellwig  if compile_prog "" "-laio" ; then
35685c6c3a6cSChristoph Hellwig    linux_aio=yes
35695c6c3a6cSChristoph Hellwig  else
35705c6c3a6cSChristoph Hellwig    if test "$linux_aio" = "yes" ; then
357121684af0SStewart Smith      feature_not_found "linux AIO" "Install libaio devel"
35725c6c3a6cSChristoph Hellwig    fi
35733cfcae3cSLuiz Capitulino    linux_aio=no
35745c6c3a6cSChristoph Hellwig  fi
35755c6c3a6cSChristoph Hellwigfi
3576c10dd856SAarushi Mehta##########################################
3577c10dd856SAarushi Mehta# linux-io-uring probe
3578c10dd856SAarushi Mehta
3579c10dd856SAarushi Mehtaif test "$linux_io_uring" != "no" ; then
3580c10dd856SAarushi Mehta  if $pkg_config liburing; then
3581c10dd856SAarushi Mehta    linux_io_uring_cflags=$($pkg_config --cflags liburing)
3582c10dd856SAarushi Mehta    linux_io_uring_libs=$($pkg_config --libs liburing)
3583c10dd856SAarushi Mehta    linux_io_uring=yes
3584c10dd856SAarushi Mehta  else
3585c10dd856SAarushi Mehta    if test "$linux_io_uring" = "yes" ; then
3586c10dd856SAarushi Mehta      feature_not_found "linux io_uring" "Install liburing devel"
3587c10dd856SAarushi Mehta    fi
3588c10dd856SAarushi Mehta    linux_io_uring=no
3589c10dd856SAarushi Mehta  fi
3590c10dd856SAarushi Mehtafi
35915c6c3a6cSChristoph Hellwig
35925c6c3a6cSChristoph Hellwig##########################################
35937aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX
35943b8acc11SPaolo Bonzini
35957aaa6a16SPaolo Bonziniif test "$tpm" = ""; then
35967aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes"; then
35977aaa6a16SPaolo Bonzini    tpm=no
35983b8acc11SPaolo Bonzini  else
35997aaa6a16SPaolo Bonzini    tpm=yes
36007aaa6a16SPaolo Bonzini  fi
36017aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then
36027aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes" ; then
36037aaa6a16SPaolo Bonzini    error_exit "TPM emulation only available on POSIX systems"
36047aaa6a16SPaolo Bonzini  fi
36053b8acc11SPaolo Bonzinifi
36063b8acc11SPaolo Bonzini
36073b8acc11SPaolo Bonzini##########################################
3608bf9298b9Saliguori# iovec probe
3609bf9298b9Saliguoricat > $TMPC <<EOF
3610db34f0b3Sblueswir1#include <sys/types.h>
3611bf9298b9Saliguori#include <sys/uio.h>
3612db34f0b3Sblueswir1#include <unistd.h>
3613f91f9beeSStefan Weilint main(void) { return sizeof(struct iovec); }
3614bf9298b9SaliguoriEOF
3615bf9298b9Saliguoriiovec=no
361652166aa0SJuan Quintelaif compile_prog "" "" ; then
3617bf9298b9Saliguori  iovec=yes
3618bf9298b9Saliguorifi
3619bf9298b9Saliguori
3620f652e6afSaurel32##########################################
3621f652e6afSaurel32# fdt probe
3622e169e1e1SPeter Maydell
3623fbb4121dSPaolo Bonzinicase "$fdt" in
3624fbb4121dSPaolo Bonzini  auto | enabled | internal)
3625fbb4121dSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
36267d7dbf9dSDan Streetman    if test "$git_submodules_action" != "ignore"; then
3627aef45d51SDaniel P. Berrange      git_submodules="${git_submodules} dtc"
3628aef45d51SDaniel P. Berrange    fi
3629fbb4121dSPaolo Bonzini    ;;
3630fbb4121dSPaolo Bonziniesac
3631f652e6afSaurel32
363220ff075bSMichael Walle##########################################
36339d49bcf6SMarkus Armbruster# opengl probe (for sdl2, gtk)
3634b1546f32SGerd Hoffmann
3635d52c454aSMarc-André Lureaugbm="no"
3636d52c454aSMarc-André Lureauif $pkg_config gbm; then
3637d52c454aSMarc-André Lureau    gbm_cflags="$($pkg_config --cflags gbm)"
3638d52c454aSMarc-André Lureau    gbm_libs="$($pkg_config --libs gbm)"
3639d52c454aSMarc-André Lureau    gbm="yes"
3640d52c454aSMarc-André Lureaufi
3641d52c454aSMarc-André Lureau
3642da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
3643bc6a3565SAkihiko Odaki  epoxy=no
3644bc6a3565SAkihiko Odaki  if $pkg_config epoxy; then
3645bc6a3565SAkihiko Odaki    cat > $TMPC << EOF
3646bc6a3565SAkihiko Odaki#include <epoxy/egl.h>
3647bc6a3565SAkihiko Odakiint main(void) { return 0; }
3648bc6a3565SAkihiko OdakiEOF
3649bc6a3565SAkihiko Odaki    if compile_prog "" "" ; then
3650bc6a3565SAkihiko Odaki      epoxy=yes
3651bc6a3565SAkihiko Odaki    fi
3652bc6a3565SAkihiko Odaki  fi
3653bc6a3565SAkihiko Odaki
3654bc6a3565SAkihiko Odaki  if test "$epoxy" = "yes" ; then
3655bc6a3565SAkihiko Odaki    opengl_cflags="$($pkg_config --cflags epoxy)"
3656bc6a3565SAkihiko Odaki    opengl_libs="$($pkg_config --libs epoxy)"
3657da076ffeSGerd Hoffmann    opengl=yes
365820ff075bSMichael Walle  else
3659da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
3660bc6a3565SAkihiko Odaki      feature_not_found "opengl" "Please install epoxy with EGL"
366120ff075bSMichael Walle    fi
3662f676c67eSJeremy White    opengl_cflags=""
3663da076ffeSGerd Hoffmann    opengl_libs=""
3664da076ffeSGerd Hoffmann    opengl=no
366520ff075bSMichael Walle  fi
366620ff075bSMichael Wallefi
366720ff075bSMichael Walle
3668ed279a06SKlim Kireev##########################################
3669ed279a06SKlim Kireev# libxml2 probe
3670ed279a06SKlim Kireevif test "$libxml2" != "no" ; then
3671ed279a06SKlim Kireev    if $pkg_config --exists libxml-2.0; then
3672ed279a06SKlim Kireev        libxml2="yes"
3673ed279a06SKlim Kireev        libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3674ed279a06SKlim Kireev        libxml2_libs=$($pkg_config --libs libxml-2.0)
3675ed279a06SKlim Kireev    else
3676ed279a06SKlim Kireev        if test "$libxml2" = "yes"; then
3677ed279a06SKlim Kireev            feature_not_found "libxml2" "Install libxml2 devel"
3678ed279a06SKlim Kireev        fi
3679ed279a06SKlim Kireev        libxml2="no"
3680ed279a06SKlim Kireev    fi
3681ed279a06SKlim Kireevfi
3682c9a12e75SChrysostomos Nanakos
368339386ac7Saurel32# Check for inotify functions when we are building linux-user
36843b3f24adSaurel32# emulator.  This is done because older glibc versions don't
36853b3f24adSaurel32# have syscall stubs for these implemented.  In that case we
36863b3f24adSaurel32# don't provide them even if kernel supports them.
36873b3f24adSaurel32#
36883b3f24adSaurel32inotify=no
36893b3f24adSaurel32cat > $TMPC << EOF
36903b3f24adSaurel32#include <sys/inotify.h>
36913b3f24adSaurel32
36923b3f24adSaurel32int
36933b3f24adSaurel32main(void)
36943b3f24adSaurel32{
36953b3f24adSaurel32	/* try to start inotify */
36968690e420Saurel32	return inotify_init();
36973b3f24adSaurel32}
36983b3f24adSaurel32EOF
369952166aa0SJuan Quintelaif compile_prog "" "" ; then
37003b3f24adSaurel32  inotify=yes
37013b3f24adSaurel32fi
37023b3f24adSaurel32
3703c05c7a73SRiku Voipioinotify1=no
3704c05c7a73SRiku Voipiocat > $TMPC << EOF
3705c05c7a73SRiku Voipio#include <sys/inotify.h>
3706c05c7a73SRiku Voipio
3707c05c7a73SRiku Voipioint
3708c05c7a73SRiku Voipiomain(void)
3709c05c7a73SRiku Voipio{
3710c05c7a73SRiku Voipio    /* try to start inotify */
3711c05c7a73SRiku Voipio    return inotify_init1(0);
3712c05c7a73SRiku Voipio}
3713c05c7a73SRiku VoipioEOF
3714c05c7a73SRiku Voipioif compile_prog "" "" ; then
3715c05c7a73SRiku Voipio  inotify1=yes
3716c05c7a73SRiku Voipiofi
3717c05c7a73SRiku Voipio
3718099d6b0fSRiku Voipio# check if pipe2 is there
3719099d6b0fSRiku Voipiopipe2=no
3720099d6b0fSRiku Voipiocat > $TMPC << EOF
3721099d6b0fSRiku Voipio#include <unistd.h>
3722099d6b0fSRiku Voipio#include <fcntl.h>
3723099d6b0fSRiku Voipio
3724099d6b0fSRiku Voipioint main(void)
3725099d6b0fSRiku Voipio{
3726099d6b0fSRiku Voipio    int pipefd[2];
37279bca8162SBruce Rogers    return pipe2(pipefd, O_CLOEXEC);
3728099d6b0fSRiku Voipio}
3729099d6b0fSRiku VoipioEOF
373052166aa0SJuan Quintelaif compile_prog "" "" ; then
3731099d6b0fSRiku Voipio  pipe2=yes
3732099d6b0fSRiku Voipiofi
3733099d6b0fSRiku Voipio
373440ff6d7eSKevin Wolf# check if accept4 is there
373540ff6d7eSKevin Wolfaccept4=no
373640ff6d7eSKevin Wolfcat > $TMPC << EOF
373740ff6d7eSKevin Wolf#include <sys/socket.h>
373840ff6d7eSKevin Wolf#include <stddef.h>
373940ff6d7eSKevin Wolf
374040ff6d7eSKevin Wolfint main(void)
374140ff6d7eSKevin Wolf{
374240ff6d7eSKevin Wolf    accept4(0, NULL, NULL, SOCK_CLOEXEC);
374340ff6d7eSKevin Wolf    return 0;
374440ff6d7eSKevin Wolf}
374540ff6d7eSKevin WolfEOF
374640ff6d7eSKevin Wolfif compile_prog "" "" ; then
374740ff6d7eSKevin Wolf  accept4=yes
374840ff6d7eSKevin Wolffi
374940ff6d7eSKevin Wolf
37503ce34dfbSvibisreenivasan# check if tee/splice is there. vmsplice was added same time.
37513ce34dfbSvibisreenivasansplice=no
37523ce34dfbSvibisreenivasancat > $TMPC << EOF
37533ce34dfbSvibisreenivasan#include <unistd.h>
37543ce34dfbSvibisreenivasan#include <fcntl.h>
37553ce34dfbSvibisreenivasan#include <limits.h>
37563ce34dfbSvibisreenivasan
37573ce34dfbSvibisreenivasanint main(void)
37583ce34dfbSvibisreenivasan{
375966ea0f22SStefan Weil    int len, fd = 0;
37603ce34dfbSvibisreenivasan    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
37613ce34dfbSvibisreenivasan    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
37623ce34dfbSvibisreenivasan    return 0;
37633ce34dfbSvibisreenivasan}
37643ce34dfbSvibisreenivasanEOF
376552166aa0SJuan Quintelaif compile_prog "" "" ; then
37663ce34dfbSvibisreenivasan  splice=yes
37673ce34dfbSvibisreenivasanfi
37683ce34dfbSvibisreenivasan
3769dcc38d1cSMarcelo Tosatti##########################################
3770a99d57bbSWanlong Gao# libnuma probe
3771a99d57bbSWanlong Gao
3772a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
3773a99d57bbSWanlong Gao  cat > $TMPC << EOF
3774a99d57bbSWanlong Gao#include <numa.h>
3775a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
3776a99d57bbSWanlong GaoEOF
3777a99d57bbSWanlong Gao
3778a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
3779a99d57bbSWanlong Gao    numa=yes
3780ab318051SMarc-André Lureau    numa_libs="-lnuma"
3781a99d57bbSWanlong Gao  else
3782a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
3783a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
3784a99d57bbSWanlong Gao    fi
3785a99d57bbSWanlong Gao    numa=no
3786a99d57bbSWanlong Gao  fi
3787a99d57bbSWanlong Gaofi
3788a99d57bbSWanlong Gao
3789aa087962SPaolo Bonzinimalloc=system
37907b01cb97SAlexandre Derumierif test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
37917b01cb97SAlexandre Derumier    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
37927b01cb97SAlexandre Derumier    exit 1
3793aa087962SPaolo Bonzinielif test "$tcmalloc" = "yes" ; then
3794aa087962SPaolo Bonzini    malloc=tcmalloc
3795aa087962SPaolo Bonzinielif test "$jemalloc" = "yes" ; then
3796aa087962SPaolo Bonzini    malloc=jemalloc
37977b01cb97SAlexandre Derumierfi
37987b01cb97SAlexandre Derumier
37997b01cb97SAlexandre Derumier##########################################
3800dcc38d1cSMarcelo Tosatti# signalfd probe
3801dcc38d1cSMarcelo Tosattisignalfd="no"
3802dcc38d1cSMarcelo Tosatticat > $TMPC << EOF
3803dcc38d1cSMarcelo Tosatti#include <unistd.h>
3804dcc38d1cSMarcelo Tosatti#include <sys/syscall.h>
3805dcc38d1cSMarcelo Tosatti#include <signal.h>
3806dcc38d1cSMarcelo Tosattiint main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3807dcc38d1cSMarcelo TosattiEOF
3808dcc38d1cSMarcelo Tosatti
3809dcc38d1cSMarcelo Tosattiif compile_prog "" "" ; then
3810dcc38d1cSMarcelo Tosatti  signalfd=yes
3811dcc38d1cSMarcelo Tosattifi
3812dcc38d1cSMarcelo Tosatti
3813d339d766SRichard W.M. Jones# check if optreset global is declared by <getopt.h>
3814d339d766SRichard W.M. Jonesoptreset="no"
3815d339d766SRichard W.M. Jonescat > $TMPC << EOF
3816d339d766SRichard W.M. Jones#include <getopt.h>
3817d339d766SRichard W.M. Jonesint main(void) { return optreset; }
3818d339d766SRichard W.M. JonesEOF
3819d339d766SRichard W.M. Jones
3820d339d766SRichard W.M. Jonesif compile_prog "" "" ; then
3821d339d766SRichard W.M. Jones  optreset=yes
3822d339d766SRichard W.M. Jonesfi
3823d339d766SRichard W.M. Jones
3824c2882b96SRiku Voipio# check if eventfd is supported
3825c2882b96SRiku Voipioeventfd=no
3826c2882b96SRiku Voipiocat > $TMPC << EOF
3827c2882b96SRiku Voipio#include <sys/eventfd.h>
3828c2882b96SRiku Voipio
3829c2882b96SRiku Voipioint main(void)
3830c2882b96SRiku Voipio{
383155cc7f3eSStefan Weil    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3832c2882b96SRiku Voipio}
3833c2882b96SRiku VoipioEOF
3834c2882b96SRiku Voipioif compile_prog "" "" ; then
3835c2882b96SRiku Voipio  eventfd=yes
3836c2882b96SRiku Voipiofi
3837c2882b96SRiku Voipio
3838751bcc39SMarc-André Lureau# check if memfd is supported
3839751bcc39SMarc-André Lureaumemfd=no
3840751bcc39SMarc-André Lureaucat > $TMPC << EOF
384175e5b70eSPaolo Bonzini#include <sys/mman.h>
3842751bcc39SMarc-André Lureau
3843751bcc39SMarc-André Lureauint main(void)
3844751bcc39SMarc-André Lureau{
3845751bcc39SMarc-André Lureau    return memfd_create("foo", MFD_ALLOW_SEALING);
3846751bcc39SMarc-André Lureau}
3847751bcc39SMarc-André LureauEOF
3848751bcc39SMarc-André Lureauif compile_prog "" "" ; then
3849751bcc39SMarc-André Lureau  memfd=yes
3850751bcc39SMarc-André Lureaufi
3851751bcc39SMarc-André Lureau
3852955727d2SCortland Tölva# check for usbfs
3853955727d2SCortland Tölvahave_usbfs=no
3854955727d2SCortland Tölvaif test "$linux_user" = "yes"; then
385596566d09SThomas Petazzoni  cat > $TMPC << EOF
385696566d09SThomas Petazzoni#include <linux/usbdevice_fs.h>
385796566d09SThomas Petazzoni
385896566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES
385996566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined"
386096566d09SThomas Petazzoni#endif
386196566d09SThomas Petazzoni
386296566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM
386396566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined"
386496566d09SThomas Petazzoni#endif
386596566d09SThomas Petazzoni
386696566d09SThomas Petazzoniint main(void)
386796566d09SThomas Petazzoni{
386896566d09SThomas Petazzoni    return 0;
386996566d09SThomas Petazzoni}
387096566d09SThomas PetazzoniEOF
387196566d09SThomas Petazzoni  if compile_prog "" ""; then
3872955727d2SCortland Tölva    have_usbfs=yes
3873955727d2SCortland Tölva  fi
3874955727d2SCortland Tölvafi
3875751bcc39SMarc-André Lureau
3876d0927938SUlrich Hecht# check for fallocate
3877d0927938SUlrich Hechtfallocate=no
3878d0927938SUlrich Hechtcat > $TMPC << EOF
3879d0927938SUlrich Hecht#include <fcntl.h>
3880d0927938SUlrich Hecht
3881d0927938SUlrich Hechtint main(void)
3882d0927938SUlrich Hecht{
3883d0927938SUlrich Hecht    fallocate(0, 0, 0, 0);
3884d0927938SUlrich Hecht    return 0;
3885d0927938SUlrich Hecht}
3886d0927938SUlrich HechtEOF
38878fb03151SPeter Maydellif compile_prog "" "" ; then
3888d0927938SUlrich Hecht  fallocate=yes
3889d0927938SUlrich Hechtfi
3890d0927938SUlrich Hecht
38913d4fa43eSKusanagi Kouichi# check for fallocate hole punching
38923d4fa43eSKusanagi Kouichifallocate_punch_hole=no
38933d4fa43eSKusanagi Kouichicat > $TMPC << EOF
38943d4fa43eSKusanagi Kouichi#include <fcntl.h>
38953d4fa43eSKusanagi Kouichi#include <linux/falloc.h>
38963d4fa43eSKusanagi Kouichi
38973d4fa43eSKusanagi Kouichiint main(void)
38983d4fa43eSKusanagi Kouichi{
38993d4fa43eSKusanagi Kouichi    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
39003d4fa43eSKusanagi Kouichi    return 0;
39013d4fa43eSKusanagi Kouichi}
39023d4fa43eSKusanagi KouichiEOF
39033d4fa43eSKusanagi Kouichiif compile_prog "" "" ; then
39043d4fa43eSKusanagi Kouichi  fallocate_punch_hole=yes
39053d4fa43eSKusanagi Kouichifi
39063d4fa43eSKusanagi Kouichi
3907b953f075SDenis V. Lunev# check that fallocate supports range zeroing inside the file
3908b953f075SDenis V. Lunevfallocate_zero_range=no
3909b953f075SDenis V. Lunevcat > $TMPC << EOF
3910b953f075SDenis V. Lunev#include <fcntl.h>
3911b953f075SDenis V. Lunev#include <linux/falloc.h>
3912b953f075SDenis V. Lunev
3913b953f075SDenis V. Lunevint main(void)
3914b953f075SDenis V. Lunev{
3915b953f075SDenis V. Lunev    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3916b953f075SDenis V. Lunev    return 0;
3917b953f075SDenis V. Lunev}
3918b953f075SDenis V. LunevEOF
3919b953f075SDenis V. Lunevif compile_prog "" "" ; then
3920b953f075SDenis V. Lunev  fallocate_zero_range=yes
3921b953f075SDenis V. Lunevfi
3922b953f075SDenis V. Lunev
3923ed911435SKevin Wolf# check for posix_fallocate
3924ed911435SKevin Wolfposix_fallocate=no
3925ed911435SKevin Wolfcat > $TMPC << EOF
3926ed911435SKevin Wolf#include <fcntl.h>
3927ed911435SKevin Wolf
3928ed911435SKevin Wolfint main(void)
3929ed911435SKevin Wolf{
3930ed911435SKevin Wolf    posix_fallocate(0, 0, 0);
3931ed911435SKevin Wolf    return 0;
3932ed911435SKevin Wolf}
3933ed911435SKevin WolfEOF
3934ed911435SKevin Wolfif compile_prog "" "" ; then
3935ed911435SKevin Wolf    posix_fallocate=yes
3936ed911435SKevin Wolffi
3937ed911435SKevin Wolf
3938c727f47dSPeter Maydell# check for sync_file_range
3939c727f47dSPeter Maydellsync_file_range=no
3940c727f47dSPeter Maydellcat > $TMPC << EOF
3941c727f47dSPeter Maydell#include <fcntl.h>
3942c727f47dSPeter Maydell
3943c727f47dSPeter Maydellint main(void)
3944c727f47dSPeter Maydell{
3945c727f47dSPeter Maydell    sync_file_range(0, 0, 0, 0);
3946c727f47dSPeter Maydell    return 0;
3947c727f47dSPeter Maydell}
3948c727f47dSPeter MaydellEOF
39498fb03151SPeter Maydellif compile_prog "" "" ; then
3950c727f47dSPeter Maydell  sync_file_range=yes
3951c727f47dSPeter Maydellfi
3952c727f47dSPeter Maydell
3953dace20dcSPeter Maydell# check for linux/fiemap.h and FS_IOC_FIEMAP
3954dace20dcSPeter Maydellfiemap=no
3955dace20dcSPeter Maydellcat > $TMPC << EOF
3956dace20dcSPeter Maydell#include <sys/ioctl.h>
3957dace20dcSPeter Maydell#include <linux/fs.h>
3958dace20dcSPeter Maydell#include <linux/fiemap.h>
3959dace20dcSPeter Maydell
3960dace20dcSPeter Maydellint main(void)
3961dace20dcSPeter Maydell{
3962dace20dcSPeter Maydell    ioctl(0, FS_IOC_FIEMAP, 0);
3963dace20dcSPeter Maydell    return 0;
3964dace20dcSPeter Maydell}
3965dace20dcSPeter MaydellEOF
39668fb03151SPeter Maydellif compile_prog "" "" ; then
3967dace20dcSPeter Maydell  fiemap=yes
3968dace20dcSPeter Maydellfi
3969dace20dcSPeter Maydell
3970d0927938SUlrich Hecht# check for dup3
3971d0927938SUlrich Hechtdup3=no
3972d0927938SUlrich Hechtcat > $TMPC << EOF
3973d0927938SUlrich Hecht#include <unistd.h>
3974d0927938SUlrich Hecht
3975d0927938SUlrich Hechtint main(void)
3976d0927938SUlrich Hecht{
3977d0927938SUlrich Hecht    dup3(0, 0, 0);
3978d0927938SUlrich Hecht    return 0;
3979d0927938SUlrich Hecht}
3980d0927938SUlrich HechtEOF
398178f5d726SJan Kiszkaif compile_prog "" "" ; then
3982d0927938SUlrich Hecht  dup3=yes
3983d0927938SUlrich Hechtfi
3984d0927938SUlrich Hecht
39854e0c6529SAlex Bligh# check for ppoll support
39864e0c6529SAlex Blighppoll=no
39874e0c6529SAlex Blighcat > $TMPC << EOF
39884e0c6529SAlex Bligh#include <poll.h>
39894e0c6529SAlex Bligh
39904e0c6529SAlex Blighint main(void)
39914e0c6529SAlex Bligh{
39924e0c6529SAlex Bligh    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
39934e0c6529SAlex Bligh    ppoll(&pfd, 1, 0, 0);
39944e0c6529SAlex Bligh    return 0;
39954e0c6529SAlex Bligh}
39964e0c6529SAlex BlighEOF
39974e0c6529SAlex Blighif compile_prog "" "" ; then
39984e0c6529SAlex Bligh  ppoll=yes
39994e0c6529SAlex Blighfi
40004e0c6529SAlex Bligh
4001cd758dd0SAlex Bligh# check for prctl(PR_SET_TIMERSLACK , ... ) support
4002cd758dd0SAlex Blighprctl_pr_set_timerslack=no
4003cd758dd0SAlex Blighcat > $TMPC << EOF
4004cd758dd0SAlex Bligh#include <sys/prctl.h>
4005cd758dd0SAlex Bligh
4006cd758dd0SAlex Blighint main(void)
4007cd758dd0SAlex Bligh{
4008cd758dd0SAlex Bligh    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4009cd758dd0SAlex Bligh    return 0;
4010cd758dd0SAlex Bligh}
4011cd758dd0SAlex BlighEOF
4012cd758dd0SAlex Blighif compile_prog "" "" ; then
4013cd758dd0SAlex Bligh  prctl_pr_set_timerslack=yes
4014cd758dd0SAlex Blighfi
4015cd758dd0SAlex Bligh
40163b6edd16SPeter Maydell# check for epoll support
40173b6edd16SPeter Maydellepoll=no
40183b6edd16SPeter Maydellcat > $TMPC << EOF
40193b6edd16SPeter Maydell#include <sys/epoll.h>
40203b6edd16SPeter Maydell
40213b6edd16SPeter Maydellint main(void)
40223b6edd16SPeter Maydell{
40233b6edd16SPeter Maydell    epoll_create(0);
40243b6edd16SPeter Maydell    return 0;
40253b6edd16SPeter Maydell}
40263b6edd16SPeter MaydellEOF
40278fb03151SPeter Maydellif compile_prog "" "" ; then
40283b6edd16SPeter Maydell  epoll=yes
40293b6edd16SPeter Maydellfi
40303b6edd16SPeter Maydell
4031227f0214SPeter Maydell# epoll_create1 is a later addition
4032227f0214SPeter Maydell# so we must check separately for its presence
40333b6edd16SPeter Maydellepoll_create1=no
40343b6edd16SPeter Maydellcat > $TMPC << EOF
40353b6edd16SPeter Maydell#include <sys/epoll.h>
40363b6edd16SPeter Maydell
40373b6edd16SPeter Maydellint main(void)
40383b6edd16SPeter Maydell{
403919e83f6bSPeter Maydell    /* Note that we use epoll_create1 as a value, not as
404019e83f6bSPeter Maydell     * a function being called. This is necessary so that on
404119e83f6bSPeter Maydell     * old SPARC glibc versions where the function was present in
404219e83f6bSPeter Maydell     * the library but not declared in the header file we will
404319e83f6bSPeter Maydell     * fail the configure check. (Otherwise we will get a compiler
404419e83f6bSPeter Maydell     * warning but not an error, and will proceed to fail the
404519e83f6bSPeter Maydell     * qemu compile where we compile with -Werror.)
404619e83f6bSPeter Maydell     */
4047c075a723SBlue Swirl    return (int)(uintptr_t)&epoll_create1;
40483b6edd16SPeter Maydell}
40493b6edd16SPeter MaydellEOF
40508fb03151SPeter Maydellif compile_prog "" "" ; then
40513b6edd16SPeter Maydell  epoll_create1=yes
40523b6edd16SPeter Maydellfi
40533b6edd16SPeter Maydell
4054a8fd1abaSPeter Maydell# check for sendfile support
4055a8fd1abaSPeter Maydellsendfile=no
4056a8fd1abaSPeter Maydellcat > $TMPC << EOF
4057a8fd1abaSPeter Maydell#include <sys/sendfile.h>
4058a8fd1abaSPeter Maydell
4059a8fd1abaSPeter Maydellint main(void)
4060a8fd1abaSPeter Maydell{
4061a8fd1abaSPeter Maydell    return sendfile(0, 0, 0, 0);
4062a8fd1abaSPeter Maydell}
4063a8fd1abaSPeter MaydellEOF
4064a8fd1abaSPeter Maydellif compile_prog "" "" ; then
4065a8fd1abaSPeter Maydell  sendfile=yes
4066a8fd1abaSPeter Maydellfi
4067a8fd1abaSPeter Maydell
406851834341SRiku Voipio# check for timerfd support (glibc 2.8 and newer)
406951834341SRiku Voipiotimerfd=no
407051834341SRiku Voipiocat > $TMPC << EOF
407151834341SRiku Voipio#include <sys/timerfd.h>
407251834341SRiku Voipio
407351834341SRiku Voipioint main(void)
407451834341SRiku Voipio{
407551834341SRiku Voipio    return(timerfd_create(CLOCK_REALTIME, 0));
407651834341SRiku Voipio}
407751834341SRiku VoipioEOF
407851834341SRiku Voipioif compile_prog "" "" ; then
407951834341SRiku Voipio  timerfd=yes
408051834341SRiku Voipiofi
408151834341SRiku Voipio
40829af5c906SRiku Voipio# check for setns and unshare support
40839af5c906SRiku Voipiosetns=no
40849af5c906SRiku Voipiocat > $TMPC << EOF
40859af5c906SRiku Voipio#include <sched.h>
40869af5c906SRiku Voipio
40879af5c906SRiku Voipioint main(void)
40889af5c906SRiku Voipio{
40899af5c906SRiku Voipio    int ret;
40909af5c906SRiku Voipio    ret = setns(0, 0);
40919af5c906SRiku Voipio    ret = unshare(0);
40929af5c906SRiku Voipio    return ret;
40939af5c906SRiku Voipio}
40949af5c906SRiku VoipioEOF
40959af5c906SRiku Voipioif compile_prog "" "" ; then
40969af5c906SRiku Voipio  setns=yes
40979af5c906SRiku Voipiofi
40989af5c906SRiku Voipio
409938860a03SAleksandar Markovic# clock_adjtime probe
410038860a03SAleksandar Markovicclock_adjtime=no
410138860a03SAleksandar Markoviccat > $TMPC <<EOF
410238860a03SAleksandar Markovic#include <time.h>
4103cd5d20efSJiaxun Yang#include <sys/timex.h>
410438860a03SAleksandar Markovic
410538860a03SAleksandar Markovicint main(void)
410638860a03SAleksandar Markovic{
410738860a03SAleksandar Markovic    return clock_adjtime(0, 0);
410838860a03SAleksandar Markovic}
410938860a03SAleksandar MarkovicEOF
411038860a03SAleksandar Markovicclock_adjtime=no
411138860a03SAleksandar Markovicif compile_prog "" "" ; then
411238860a03SAleksandar Markovic  clock_adjtime=yes
411338860a03SAleksandar Markovicfi
411438860a03SAleksandar Markovic
41155a03cd00SAleksandar Markovic# syncfs probe
41165a03cd00SAleksandar Markovicsyncfs=no
41175a03cd00SAleksandar Markoviccat > $TMPC <<EOF
41185a03cd00SAleksandar Markovic#include <unistd.h>
41195a03cd00SAleksandar Markovic
41205a03cd00SAleksandar Markovicint main(void)
41215a03cd00SAleksandar Markovic{
41225a03cd00SAleksandar Markovic    return syncfs(0);
41235a03cd00SAleksandar Markovic}
41245a03cd00SAleksandar MarkovicEOF
41255a03cd00SAleksandar Markovicsyncfs=no
41265a03cd00SAleksandar Markovicif compile_prog "" "" ; then
41275a03cd00SAleksandar Markovic  syncfs=yes
41285a03cd00SAleksandar Markovicfi
41295a03cd00SAleksandar Markovic
4130f514f41cSStefan Weil# Search for bswap_32 function
41316ae9a1f4SJuan Quintelabyteswap_h=no
41326ae9a1f4SJuan Quintelacat > $TMPC << EOF
41336ae9a1f4SJuan Quintela#include <byteswap.h>
41346ae9a1f4SJuan Quintelaint main(void) { return bswap_32(0); }
41356ae9a1f4SJuan QuintelaEOF
413652166aa0SJuan Quintelaif compile_prog "" "" ; then
41376ae9a1f4SJuan Quintela  byteswap_h=yes
41386ae9a1f4SJuan Quintelafi
41396ae9a1f4SJuan Quintela
414075f13596SStefan Weil# Search for bswap32 function
41416ae9a1f4SJuan Quintelabswap_h=no
41426ae9a1f4SJuan Quintelacat > $TMPC << EOF
41436ae9a1f4SJuan Quintela#include <sys/endian.h>
41446ae9a1f4SJuan Quintela#include <sys/types.h>
41456ae9a1f4SJuan Quintela#include <machine/bswap.h>
41466ae9a1f4SJuan Quintelaint main(void) { return bswap32(0); }
41476ae9a1f4SJuan QuintelaEOF
414852166aa0SJuan Quintelaif compile_prog "" "" ; then
41496ae9a1f4SJuan Quintela  bswap_h=yes
41506ae9a1f4SJuan Quintelafi
41516ae9a1f4SJuan Quintela
4152f2995ee4SPaolo Bonzini# Check whether we have openpty() in either libc or libutil
4153d99e97e6SThomas Huthcat > $TMPC << EOF
4154d99e97e6SThomas Huthextern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4155d99e97e6SThomas Huthint main(void) { return openpty(0, 0, 0, 0, 0); }
4156d99e97e6SThomas HuthEOF
4157d99e97e6SThomas Huth
41589df8b20dSThomas Huthhave_openpty="no"
41599df8b20dSThomas Huthif compile_prog "" "" ; then
41609df8b20dSThomas Huth  have_openpty="yes"
41619df8b20dSThomas Huthelse
4162d99e97e6SThomas Huth  if compile_prog "" "-lutil" ; then
41639df8b20dSThomas Huth    have_openpty="yes"
4164d99e97e6SThomas Huth  fi
41656362a53fSJuan Quintelafi
41666362a53fSJuan Quintela
4167de5071c5SBlue Swirl##########################################
4168cd4ec0b4SGerd Hoffmann# spice probe
416958d3f3ffSGerd Hoffmannif test "$spice_protocol" != "no" ; then
417058d3f3ffSGerd Hoffmann  spice_protocol_cflags=$($pkg_config --cflags spice-protocol 2>/dev/null)
417158d3f3ffSGerd Hoffmann  if $pkg_config --atleast-version=0.12.3 spice-protocol; then
417258d3f3ffSGerd Hoffmann    spice_protocol="yes"
417358d3f3ffSGerd Hoffmann  else
417458d3f3ffSGerd Hoffmann    if test "$spice_protocol" = "yes" ; then
417558d3f3ffSGerd Hoffmann      feature_not_found "spice_protocol" \
417658d3f3ffSGerd Hoffmann          "Install spice-protocol(>=0.12.3) devel"
417758d3f3ffSGerd Hoffmann    fi
417858d3f3ffSGerd Hoffmann    spice_protocol="no"
417958d3f3ffSGerd Hoffmann  fi
418058d3f3ffSGerd Hoffmannfi
418158d3f3ffSGerd Hoffmann
4182cd4ec0b4SGerd Hoffmannif test "$spice" != "no" ; then
4183cd4ec0b4SGerd Hoffmann  cat > $TMPC << EOF
4184cd4ec0b4SGerd Hoffmann#include <spice.h>
4185cd4ec0b4SGerd Hoffmannint main(void) { spice_server_new(); return 0; }
4186cd4ec0b4SGerd HoffmannEOF
4187710fc4f5SJiri Denemark  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4188710fc4f5SJiri Denemark  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
41891b63665cSMarc-André Lureau  if $pkg_config --atleast-version=0.12.5 spice-server && \
419058d3f3ffSGerd Hoffmann     test "$spice_protocol" = "yes" && \
4191cd4ec0b4SGerd Hoffmann     compile_prog "$spice_cflags" "$spice_libs" ; then
4192cd4ec0b4SGerd Hoffmann    spice="yes"
4193cd4ec0b4SGerd Hoffmann  else
4194cd4ec0b4SGerd Hoffmann    if test "$spice" = "yes" ; then
41958efc9363SHu Tao      feature_not_found "spice" \
419658d3f3ffSGerd Hoffmann          "Install spice-server(>=0.12.5) devel"
4197cd4ec0b4SGerd Hoffmann    fi
4198cd4ec0b4SGerd Hoffmann    spice="no"
4199cd4ec0b4SGerd Hoffmann  fi
4200cd4ec0b4SGerd Hoffmannfi
4201cd4ec0b4SGerd Hoffmann
42027b02f544SMarc-André Lureau# check for smartcard support
42037b02f544SMarc-André Lureauif test "$smartcard" != "no"; then
42040f5c642dSMichal Privoznik    if $pkg_config --atleast-version=2.5.1 libcacard; then
42057b02f544SMarc-André Lureau        libcacard_cflags=$($pkg_config --cflags libcacard)
42067b02f544SMarc-André Lureau        libcacard_libs=$($pkg_config --libs libcacard)
42077b02f544SMarc-André Lureau        smartcard="yes"
4208111a38b0SRobert Relyea    else
42097b02f544SMarc-André Lureau        if test "$smartcard" = "yes"; then
42107b02f544SMarc-André Lureau            feature_not_found "smartcard" "Install libcacard devel"
4211111a38b0SRobert Relyea        fi
42127b02f544SMarc-André Lureau        smartcard="no"
4213111a38b0SRobert Relyea    fi
4214111a38b0SRobert Relyeafi
4215111a38b0SRobert Relyea
42162b2325ffSGerd Hoffmann# check for libusb
42172b2325ffSGerd Hoffmannif test "$libusb" != "no" ; then
421865d5d3f9SStefan Weil    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
42192b2325ffSGerd Hoffmann        libusb="yes"
4220ca871ec8SStefan Weil        libusb_cflags=$($pkg_config --cflags libusb-1.0)
4221ca871ec8SStefan Weil        libusb_libs=$($pkg_config --libs libusb-1.0)
42222b2325ffSGerd Hoffmann    else
42232b2325ffSGerd Hoffmann        if test "$libusb" = "yes"; then
42248efc9363SHu Tao            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
42252b2325ffSGerd Hoffmann        fi
42262b2325ffSGerd Hoffmann        libusb="no"
42272b2325ffSGerd Hoffmann    fi
42282b2325ffSGerd Hoffmannfi
42292b2325ffSGerd Hoffmann
423069354a83SHans de Goede# check for usbredirparser for usb network redirection support
423169354a83SHans de Goedeif test "$usb_redir" != "no" ; then
423265d5d3f9SStefan Weil    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
423369354a83SHans de Goede        usb_redir="yes"
4234ca871ec8SStefan Weil        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4235ca871ec8SStefan Weil        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
423669354a83SHans de Goede    else
423769354a83SHans de Goede        if test "$usb_redir" = "yes"; then
423821684af0SStewart Smith            feature_not_found "usb-redir" "Install usbredir devel"
423969354a83SHans de Goede        fi
424069354a83SHans de Goede        usb_redir="no"
424169354a83SHans de Goede    fi
424269354a83SHans de Goedefi
424369354a83SHans de Goede
4244cd4ec0b4SGerd Hoffmann##########################################
4245d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
4246d9840e25STomoki Sekiyama
4247e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4248e633a5c6SEric Blake        test "$vss_win32_sdk" != "no" ; then
4249d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
4250690604f6SMichael Roth    "")   vss_win32_include="-isystem $source_path" ;;
4251d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4252d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4253690604f6SMichael Roth          vss_win32_include="-isystem $source_path/.sdk/vss"
4254d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4255d9840e25STomoki Sekiyama	  ;;
4256690604f6SMichael Roth    *)    vss_win32_include="-isystem $vss_win32_sdk"
4257d9840e25STomoki Sekiyama  esac
4258d9840e25STomoki Sekiyama  cat > $TMPC << EOF
4259d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
4260d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
4261d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
4262d9840e25STomoki SekiyamaEOF
4263d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
4264d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
4265d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4266315d3184SFam Zheng    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4267f33ca81fSMichael Roth    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4268d9840e25STomoki Sekiyama  else
4269d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
4270d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
4271d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4272d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4273d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4274d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
4275d9840e25STomoki Sekiyama      feature_not_found "VSS support"
4276d9840e25STomoki Sekiyama    fi
4277d9840e25STomoki Sekiyama    guest_agent_with_vss="no"
4278d9840e25STomoki Sekiyama  fi
4279d9840e25STomoki Sekiyamafi
4280d9840e25STomoki Sekiyama
4281d9840e25STomoki Sekiyama##########################################
4282d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
4283d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
4284d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
4285d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
4286d9840e25STomoki Sekiyama
4287e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4288e633a5c6SEric Blake        test "$guest_agent_with_vss" = "yes" ; then
4289d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
4290d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
4291d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4292d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
4293d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4294d9840e25STomoki Sekiyama    else
4295d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
4296d9840e25STomoki Sekiyama    fi
4297d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
4298d9840e25STomoki Sekiyama    win_sdk=""
4299d9840e25STomoki Sekiyama  fi
4300d9840e25STomoki Sekiyamafi
4301d9840e25STomoki Sekiyama
4302d9840e25STomoki Sekiyama##########################################
430350cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h
4304e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
430550cbebb9SMichael Roth  cat > $TMPC << EOF
430650cbebb9SMichael Roth#include <windows.h>
430750cbebb9SMichael Roth#include <ntddscsi.h>
430850cbebb9SMichael Rothint main(void) {
430950cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS)
431050cbebb9SMichael Roth#error Missing required ioctl definitions
431150cbebb9SMichael Roth#endif
431250cbebb9SMichael Roth  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
431350cbebb9SMichael Roth  return addr.Lun;
431450cbebb9SMichael Roth}
431550cbebb9SMichael RothEOF
431650cbebb9SMichael Roth  if compile_prog "" "" ; then
431750cbebb9SMichael Roth    guest_agent_ntddscsi=yes
4318996b9cdcSMatt Hines    libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
431950cbebb9SMichael Roth  fi
432050cbebb9SMichael Rothfi
432150cbebb9SMichael Roth
432250cbebb9SMichael Roth##########################################
43239d9e1521SGerd Hoffmann# virgl renderer probe
43249d9e1521SGerd Hoffmann
43259d9e1521SGerd Hoffmannif test "$virglrenderer" != "no" ; then
43269d9e1521SGerd Hoffmann  cat > $TMPC << EOF
43279d9e1521SGerd Hoffmann#include <virglrenderer.h>
43289d9e1521SGerd Hoffmannint main(void) { virgl_renderer_poll(); return 0; }
43299d9e1521SGerd HoffmannEOF
43309d9e1521SGerd Hoffmann  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
43319d9e1521SGerd Hoffmann  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
433247479c55SMarc-André Lureau  virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
43339d9e1521SGerd Hoffmann  if $pkg_config virglrenderer >/dev/null 2>&1 && \
43349d9e1521SGerd Hoffmann     compile_prog "$virgl_cflags" "$virgl_libs" ; then
43359d9e1521SGerd Hoffmann    virglrenderer="yes"
43369d9e1521SGerd Hoffmann  else
43379d9e1521SGerd Hoffmann    if test "$virglrenderer" = "yes" ; then
43389d9e1521SGerd Hoffmann      feature_not_found "virglrenderer"
43399d9e1521SGerd Hoffmann    fi
43409d9e1521SGerd Hoffmann    virglrenderer="no"
43419d9e1521SGerd Hoffmann  fi
43429d9e1521SGerd Hoffmannfi
43439d9e1521SGerd Hoffmann
43449d9e1521SGerd Hoffmann##########################################
43458ca80760SRichard Henderson# capstone
43468ca80760SRichard Henderson
4347e219c499SRichard Hendersoncase "$capstone" in
43488b18cdbfSRichard Henderson  auto | enabled | internal)
43498b18cdbfSRichard Henderson    # Simpler to always update submodule, even if not needed.
43507d7dbf9dSDan Streetman    if test "$git_submodules_action" != "ignore"; then
4351e219c499SRichard Henderson      git_submodules="${git_submodules} capstone"
4352e219c499SRichard Henderson    fi
4353e219c499SRichard Henderson    ;;
4354e219c499SRichard Hendersonesac
43558ca80760SRichard Henderson
43568ca80760SRichard Henderson##########################################
43575f6b9e8fSBlue Swirl# check if we have fdatasync
43585f6b9e8fSBlue Swirl
43595f6b9e8fSBlue Swirlfdatasync=no
43605f6b9e8fSBlue Swirlcat > $TMPC << EOF
43615f6b9e8fSBlue Swirl#include <unistd.h>
4362d1722a27SAlexandre Raymondint main(void) {
4363d1722a27SAlexandre Raymond#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4364d1722a27SAlexandre Raymondreturn fdatasync(0);
4365d1722a27SAlexandre Raymond#else
4366e172fe11SStefan Weil#error Not supported
4367d1722a27SAlexandre Raymond#endif
4368d1722a27SAlexandre Raymond}
43695f6b9e8fSBlue SwirlEOF
43705f6b9e8fSBlue Swirlif compile_prog "" "" ; then
43715f6b9e8fSBlue Swirl    fdatasync=yes
43725f6b9e8fSBlue Swirlfi
43735f6b9e8fSBlue Swirl
437494a420b1SStefan Hajnoczi##########################################
4375e78815a5SAndreas Färber# check if we have madvise
4376e78815a5SAndreas Färber
4377e78815a5SAndreas Färbermadvise=no
4378e78815a5SAndreas Färbercat > $TMPC << EOF
4379e78815a5SAndreas Färber#include <sys/types.h>
4380e78815a5SAndreas Färber#include <sys/mman.h>
4381832ce9c2SScott Wood#include <stddef.h>
4382e78815a5SAndreas Färberint main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4383e78815a5SAndreas FärberEOF
4384e78815a5SAndreas Färberif compile_prog "" "" ; then
4385e78815a5SAndreas Färber    madvise=yes
4386e78815a5SAndreas Färberfi
4387e78815a5SAndreas Färber
4388e78815a5SAndreas Färber##########################################
4389e78815a5SAndreas Färber# check if we have posix_madvise
4390e78815a5SAndreas Färber
4391e78815a5SAndreas Färberposix_madvise=no
4392e78815a5SAndreas Färbercat > $TMPC << EOF
4393e78815a5SAndreas Färber#include <sys/mman.h>
4394832ce9c2SScott Wood#include <stddef.h>
4395e78815a5SAndreas Färberint main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4396e78815a5SAndreas FärberEOF
4397e78815a5SAndreas Färberif compile_prog "" "" ; then
4398e78815a5SAndreas Färber    posix_madvise=yes
4399e78815a5SAndreas Färberfi
4400e78815a5SAndreas Färber
4401e78815a5SAndreas Färber##########################################
44029bc5a719SAndreas Gustafsson# check if we have posix_memalign()
44039bc5a719SAndreas Gustafsson
44049bc5a719SAndreas Gustafssonposix_memalign=no
44059bc5a719SAndreas Gustafssoncat > $TMPC << EOF
44069bc5a719SAndreas Gustafsson#include <stdlib.h>
44079bc5a719SAndreas Gustafssonint main(void) {
44089bc5a719SAndreas Gustafsson    void *p;
44099bc5a719SAndreas Gustafsson    return posix_memalign(&p, 8, 8);
44109bc5a719SAndreas Gustafsson}
44119bc5a719SAndreas GustafssonEOF
44129bc5a719SAndreas Gustafssonif compile_prog "" "" ; then
44139bc5a719SAndreas Gustafsson    posix_memalign=yes
44149bc5a719SAndreas Gustafssonfi
44159bc5a719SAndreas Gustafsson
44169bc5a719SAndreas Gustafsson##########################################
44170a852417SPaul Durrant# check if we have posix_syslog
44180a852417SPaul Durrant
44190a852417SPaul Durrantposix_syslog=no
44200a852417SPaul Durrantcat > $TMPC << EOF
44210a852417SPaul Durrant#include <syslog.h>
44220a852417SPaul Durrantint main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
44230a852417SPaul DurrantEOF
44240a852417SPaul Durrantif compile_prog "" "" ; then
44250a852417SPaul Durrant    posix_syslog=yes
44260a852417SPaul Durrantfi
44270a852417SPaul Durrant
44280a852417SPaul Durrant##########################################
4429401bc051SPeter Maydell# check if we have sem_timedwait
4430401bc051SPeter Maydell
4431401bc051SPeter Maydellsem_timedwait=no
4432401bc051SPeter Maydellcat > $TMPC << EOF
4433401bc051SPeter Maydell#include <semaphore.h>
4434811294b7SDaniel P. Berrangéint main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4435401bc051SPeter MaydellEOF
4436401bc051SPeter Maydellif compile_prog "" "" ; then
4437401bc051SPeter Maydell    sem_timedwait=yes
4438401bc051SPeter Maydellfi
4439401bc051SPeter Maydell
4440401bc051SPeter Maydell##########################################
44415c99fa37SKeno Fischer# check if we have strchrnul
44425c99fa37SKeno Fischer
44435c99fa37SKeno Fischerstrchrnul=no
44445c99fa37SKeno Fischercat > $TMPC << EOF
44455c99fa37SKeno Fischer#include <string.h>
44465c99fa37SKeno Fischerint main(void);
44475c99fa37SKeno Fischer// Use a haystack that the compiler shouldn't be able to constant fold
44485c99fa37SKeno Fischerchar *haystack = (char*)&main;
44495c99fa37SKeno Fischerint main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
44505c99fa37SKeno FischerEOF
44515c99fa37SKeno Fischerif compile_prog "" "" ; then
44525c99fa37SKeno Fischer    strchrnul=yes
44535c99fa37SKeno Fischerfi
44545c99fa37SKeno Fischer
44558a792b03SJiufei Xue#########################################
44568a792b03SJiufei Xue# check if we have st_atim
44578a792b03SJiufei Xue
44588a792b03SJiufei Xuest_atim=no
44598a792b03SJiufei Xuecat > $TMPC << EOF
44608a792b03SJiufei Xue#include <sys/stat.h>
44618a792b03SJiufei Xue#include <stddef.h>
44628a792b03SJiufei Xueint main(void) { return offsetof(struct stat, st_atim); }
44638a792b03SJiufei XueEOF
44648a792b03SJiufei Xueif compile_prog "" "" ; then
44658a792b03SJiufei Xue    st_atim=yes
44668a792b03SJiufei Xuefi
44678a792b03SJiufei Xue
44685c99fa37SKeno Fischer##########################################
446994a420b1SStefan Hajnoczi# check if trace backend exists
447094a420b1SStefan Hajnoczi
44715b808275SLluís Vilanova$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
447294a420b1SStefan Hajnocziif test "$?" -ne 0 ; then
44735b808275SLluís Vilanova  error_exit "invalid trace backends" \
44745b808275SLluís Vilanova      "Please choose supported trace backends."
447594a420b1SStefan Hajnoczifi
447694a420b1SStefan Hajnoczi
44777e24e92aSStefan Hajnoczi##########################################
44787e24e92aSStefan Hajnoczi# For 'ust' backend, test if ust headers are present
44795b808275SLluís Vilanovaif have_backend "ust"; then
44807e24e92aSStefan Hajnoczi  cat > $TMPC << EOF
4481bf15f63cSMohamad Gebai#include <lttng/tracepoint.h>
44827e24e92aSStefan Hajnocziint main(void) { return 0; }
44837e24e92aSStefan HajnocziEOF
4484c79ed23dSFrancis Deslauriers  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4485bf15f63cSMohamad Gebai    if $pkg_config lttng-ust --exists; then
448689138857SStefan Weil      lttng_ust_libs=$($pkg_config --libs lttng-ust)
44877e24e92aSStefan Hajnoczi    else
4488c79ed23dSFrancis Deslauriers      lttng_ust_libs="-llttng-ust -ldl"
4489bf15f63cSMohamad Gebai    fi
4490bf15f63cSMohamad Gebai    if $pkg_config liburcu-bp --exists; then
449189138857SStefan Weil      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4492bf15f63cSMohamad Gebai    else
4493bf15f63cSMohamad Gebai      urcu_bp_libs="-lurcu-bp"
4494bf15f63cSMohamad Gebai    fi
4495bf15f63cSMohamad Gebai  else
4496bf15f63cSMohamad Gebai    error_exit "Trace backend 'ust' missing lttng-ust header files"
44977e24e92aSStefan Hajnoczi  fi
44987e24e92aSStefan Hajnoczifi
4499b3d08c02SDaniel P. Berrange
4500b3d08c02SDaniel P. Berrange##########################################
4501b3d08c02SDaniel P. Berrange# For 'dtrace' backend, test if 'dtrace' command is present
45025b808275SLluís Vilanovaif have_backend "dtrace"; then
4503b3d08c02SDaniel P. Berrange  if ! has 'dtrace' ; then
450476ad07a4SPeter Maydell    error_exit "dtrace command is not found in PATH $PATH"
4505b3d08c02SDaniel P. Berrange  fi
4506c276b17dSDaniel P. Berrange  trace_backend_stap="no"
4507c276b17dSDaniel P. Berrange  if has 'stap' ; then
4508c276b17dSDaniel P. Berrange    trace_backend_stap="yes"
45094b265c79SStefan Hajnoczi
45104b265c79SStefan Hajnoczi    # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
45114b265c79SStefan Hajnoczi    # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
45124b265c79SStefan Hajnoczi    # instead. QEMU --enable-modules depends on this because the SystemTap
45134b265c79SStefan Hajnoczi    # semaphores are linked into the main binary and not the module's shared
45144b265c79SStefan Hajnoczi    # object.
45154b265c79SStefan Hajnoczi    QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
4516c276b17dSDaniel P. Berrange  fi
4517b3d08c02SDaniel P. Berrangefi
4518b3d08c02SDaniel P. Berrange
45197e24e92aSStefan Hajnoczi##########################################
4520519175a2SAlex Barcelo# check and set a backend for coroutine
4521d0e2fce5SAneesh Kumar K.V
45227c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
452333c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows
452433c53c54SDaniel P. Berrange# specific one.
45257c2acc70SPeter Maydell
45267c2acc70SPeter Maydellucontext_works=no
4527d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
4528d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
4529d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
4530cdf84806SPeter Maydell#ifdef __stub_makecontext
4531cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
4532cdf84806SPeter Maydell#endif
453375cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
4534d0e2fce5SAneesh Kumar K.VEOF
4535d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
45367c2acc70SPeter Maydell    ucontext_works=yes
4537d0e2fce5SAneesh Kumar K.V  fi
4538519175a2SAlex Barcelofi
45397c2acc70SPeter Maydell
45407c2acc70SPeter Maydellif test "$coroutine" = ""; then
45417c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
45427c2acc70SPeter Maydell    coroutine=win32
45437c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
45447c2acc70SPeter Maydell    coroutine=ucontext
4545519175a2SAlex Barcelo  else
45467c2acc70SPeter Maydell    coroutine=sigaltstack
45477c2acc70SPeter Maydell  fi
45487c2acc70SPeter Maydellelse
45497c2acc70SPeter Maydell  case $coroutine in
45507c2acc70SPeter Maydell  windows)
45517c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
45527c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
45537c2acc70SPeter Maydell    fi
45547c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
45557c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
45567c2acc70SPeter Maydell    coroutine=win32
45577c2acc70SPeter Maydell    ;;
45587c2acc70SPeter Maydell  ucontext)
45597c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
45607c2acc70SPeter Maydell      feature_not_found "ucontext"
45617c2acc70SPeter Maydell    fi
45627c2acc70SPeter Maydell    ;;
456333c53c54SDaniel P. Berrange  sigaltstack)
45647c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
45657c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
45667c2acc70SPeter Maydell    fi
45677c2acc70SPeter Maydell    ;;
45687c2acc70SPeter Maydell  *)
456976ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
45707c2acc70SPeter Maydell    ;;
45717c2acc70SPeter Maydell  esac
4572d0e2fce5SAneesh Kumar K.Vfi
4573d0e2fce5SAneesh Kumar K.V
457470c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then
457570c60c08SStefan Hajnoczi  coroutine_pool=yes
457670c60c08SStefan Hajnoczifi
457770c60c08SStefan Hajnoczi
45787d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then
45797d992e4dSPeter Lieven  if test "$coroutine_pool" = "yes"; then
45807d992e4dSPeter Lieven    echo "WARN: disabling coroutine pool for stack usage debugging"
45817d992e4dSPeter Lieven    coroutine_pool=no
45827d992e4dSPeter Lieven  fi
45837d992e4dSPeter Lievenfi
45847d992e4dSPeter Lieven
45851e4f6065SDaniele Buono##################################################
45861e4f6065SDaniele Buono# SafeStack
45871e4f6065SDaniele Buono
45881e4f6065SDaniele Buono
45891e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
45901e4f6065SDaniele Buonocat > $TMPC << EOF
45911e4f6065SDaniele Buonoint main(int argc, char *argv[])
45921e4f6065SDaniele Buono{
45931e4f6065SDaniele Buono#if ! __has_feature(safe_stack)
45941e4f6065SDaniele Buono#error SafeStack Disabled
45951e4f6065SDaniele Buono#endif
45961e4f6065SDaniele Buono    return 0;
45971e4f6065SDaniele Buono}
45981e4f6065SDaniele BuonoEOF
45991e4f6065SDaniele Buono  flag="-fsanitize=safe-stack"
46001e4f6065SDaniele Buono  # Check that safe-stack is supported and enabled.
46011e4f6065SDaniele Buono  if compile_prog "-Werror $flag" "$flag"; then
46021e4f6065SDaniele Buono    # Flag needed both at compilation and at linking
46031e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
46041e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
46051e4f6065SDaniele Buono  else
46061e4f6065SDaniele Buono    error_exit "SafeStack not supported by your compiler"
46071e4f6065SDaniele Buono  fi
46081e4f6065SDaniele Buono  if test "$coroutine" != "ucontext"; then
46091e4f6065SDaniele Buono    error_exit "SafeStack is only supported by the coroutine backend ucontext"
46101e4f6065SDaniele Buono  fi
46111e4f6065SDaniele Buonoelse
46121e4f6065SDaniele Buonocat > $TMPC << EOF
46131e4f6065SDaniele Buonoint main(int argc, char *argv[])
46141e4f6065SDaniele Buono{
46151e4f6065SDaniele Buono#if defined(__has_feature)
46161e4f6065SDaniele Buono#if __has_feature(safe_stack)
46171e4f6065SDaniele Buono#error SafeStack Enabled
46181e4f6065SDaniele Buono#endif
46191e4f6065SDaniele Buono#endif
46201e4f6065SDaniele Buono    return 0;
46211e4f6065SDaniele Buono}
46221e4f6065SDaniele BuonoEOF
46231e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then
46241e4f6065SDaniele Buono  # Make sure that safe-stack is disabled
46251e4f6065SDaniele Buono  if ! compile_prog "-Werror" ""; then
46261e4f6065SDaniele Buono    # SafeStack was already enabled, try to explicitly remove the feature
46271e4f6065SDaniele Buono    flag="-fno-sanitize=safe-stack"
46281e4f6065SDaniele Buono    if ! compile_prog "-Werror $flag" "$flag"; then
46291e4f6065SDaniele Buono      error_exit "Configure cannot disable SafeStack"
46301e4f6065SDaniele Buono    fi
46311e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
46321e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
46331e4f6065SDaniele Buono  fi
46341e4f6065SDaniele Buonoelse # "$safe_stack" = ""
46351e4f6065SDaniele Buono  # Set safe_stack to yes or no based on pre-existing flags
46361e4f6065SDaniele Buono  if compile_prog "-Werror" ""; then
46371e4f6065SDaniele Buono    safe_stack="no"
46381e4f6065SDaniele Buono  else
46391e4f6065SDaniele Buono    safe_stack="yes"
46401e4f6065SDaniele Buono    if test "$coroutine" != "ucontext"; then
46411e4f6065SDaniele Buono      error_exit "SafeStack is only supported by the coroutine backend ucontext"
46421e4f6065SDaniele Buono    fi
46431e4f6065SDaniele Buono  fi
46441e4f6065SDaniele Buonofi
46451e4f6065SDaniele Buonofi
46467d992e4dSPeter Lieven
4647d0e2fce5SAneesh Kumar K.V##########################################
4648d2042378SAneesh Kumar K.V# check if we have open_by_handle_at
4649d2042378SAneesh Kumar K.V
46504e1797f9SStefan Weilopen_by_handle_at=no
4651d2042378SAneesh Kumar K.Vcat > $TMPC << EOF
4652d2042378SAneesh Kumar K.V#include <fcntl.h>
4653acc55ba8SStefan Weil#if !defined(AT_EMPTY_PATH)
4654acc55ba8SStefan Weil# error missing definition
4655acc55ba8SStefan Weil#else
465675cafad7SStefan Weilint main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4657acc55ba8SStefan Weil#endif
4658d2042378SAneesh Kumar K.VEOF
4659d2042378SAneesh Kumar K.Vif compile_prog "" "" ; then
4660d2042378SAneesh Kumar K.V    open_by_handle_at=yes
4661d2042378SAneesh Kumar K.Vfi
4662d2042378SAneesh Kumar K.V
4663e06a765eSHarsh Prateek Bora########################################
4664e06a765eSHarsh Prateek Bora# check if we have linux/magic.h
4665e06a765eSHarsh Prateek Bora
4666e06a765eSHarsh Prateek Boralinux_magic_h=no
4667e06a765eSHarsh Prateek Boracat > $TMPC << EOF
4668e06a765eSHarsh Prateek Bora#include <linux/magic.h>
4669e06a765eSHarsh Prateek Boraint main(void) {
467075cafad7SStefan Weil  return 0;
4671e06a765eSHarsh Prateek Bora}
4672e06a765eSHarsh Prateek BoraEOF
4673e06a765eSHarsh Prateek Boraif compile_prog "" "" ; then
4674e06a765eSHarsh Prateek Bora    linux_magic_h=yes
4675e06a765eSHarsh Prateek Borafi
4676e06a765eSHarsh Prateek Bora
46778ab1bf12SLuiz Capitulino########################################
4678541be927SChristian Borntraeger# check if we have valgrind/valgrind.h
46793f4349dcSKevin Wolf
46803f4349dcSKevin Wolfvalgrind_h=no
46813f4349dcSKevin Wolfcat > $TMPC << EOF
46823f4349dcSKevin Wolf#include <valgrind/valgrind.h>
46833f4349dcSKevin Wolfint main(void) {
46843f4349dcSKevin Wolf  return 0;
46853f4349dcSKevin Wolf}
46863f4349dcSKevin WolfEOF
46873f4349dcSKevin Wolfif compile_prog "" "" ; then
46883f4349dcSKevin Wolf    valgrind_h=yes
46893f4349dcSKevin Wolffi
46903f4349dcSKevin Wolf
46913f4349dcSKevin Wolf########################################
46928ab1bf12SLuiz Capitulino# check if environ is declared
46938ab1bf12SLuiz Capitulino
46948ab1bf12SLuiz Capitulinohas_environ=no
46958ab1bf12SLuiz Capitulinocat > $TMPC << EOF
46968ab1bf12SLuiz Capitulino#include <unistd.h>
46978ab1bf12SLuiz Capitulinoint main(void) {
4698c075a723SBlue Swirl    environ = 0;
46998ab1bf12SLuiz Capitulino    return 0;
47008ab1bf12SLuiz Capitulino}
47018ab1bf12SLuiz CapitulinoEOF
47028ab1bf12SLuiz Capitulinoif compile_prog "" "" ; then
47038ab1bf12SLuiz Capitulino    has_environ=yes
47048ab1bf12SLuiz Capitulinofi
47058ab1bf12SLuiz Capitulino
470676a347e1SRichard Henderson########################################
470776a347e1SRichard Henderson# check if cpuid.h is usable.
470876a347e1SRichard Henderson
470976a347e1SRichard Hendersoncat > $TMPC << EOF
471076a347e1SRichard Henderson#include <cpuid.h>
471176a347e1SRichard Hendersonint main(void) {
4712774d566cSPeter Maydell    unsigned a, b, c, d;
4713774d566cSPeter Maydell    int max = __get_cpuid_max(0, 0);
4714774d566cSPeter Maydell
4715774d566cSPeter Maydell    if (max >= 1) {
4716774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
4717774d566cSPeter Maydell    }
4718774d566cSPeter Maydell
4719774d566cSPeter Maydell    if (max >= 7) {
4720774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
4721774d566cSPeter Maydell    }
4722774d566cSPeter Maydell
472376a347e1SRichard Henderson    return 0;
472476a347e1SRichard Henderson}
472576a347e1SRichard HendersonEOF
472676a347e1SRichard Hendersonif compile_prog "" "" ; then
472776a347e1SRichard Henderson    cpuid_h=yes
472876a347e1SRichard Hendersonfi
472976a347e1SRichard Henderson
47305dd89908SRichard Henderson##########################################
47315dd89908SRichard Henderson# avx2 optimization requirement check
47325dd89908SRichard Henderson#
47335dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable,
47345dd89908SRichard Henderson# since we won't be able to select the new routines.
47355dd89908SRichard Henderson
4736e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
47375dd89908SRichard Henderson  cat > $TMPC << EOF
47385dd89908SRichard Henderson#pragma GCC push_options
47395dd89908SRichard Henderson#pragma GCC target("avx2")
47405dd89908SRichard Henderson#include <cpuid.h>
47415dd89908SRichard Henderson#include <immintrin.h>
47425dd89908SRichard Hendersonstatic int bar(void *a) {
47435dd89908SRichard Henderson    __m256i x = *(__m256i *)a;
47445dd89908SRichard Henderson    return _mm256_testz_si256(x, x);
47455dd89908SRichard Henderson}
47465dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); }
47475dd89908SRichard HendersonEOF
47485dd89908SRichard Henderson  if compile_object "" ; then
47495dd89908SRichard Henderson    avx2_opt="yes"
475086583a07SLiam Merwick  else
475186583a07SLiam Merwick    avx2_opt="no"
47525dd89908SRichard Henderson  fi
47535dd89908SRichard Hendersonfi
47545dd89908SRichard Henderson
47556b8cd447SRobert Hoo##########################################
47566b8cd447SRobert Hoo# avx512f optimization requirement check
47576b8cd447SRobert Hoo#
47586b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable,
47596b8cd447SRobert Hoo# since we won't be able to select the new routines.
47606b8cd447SRobert Hoo# by default, it is turned off.
47616b8cd447SRobert Hoo# if user explicitly want to enable it, check environment
47626b8cd447SRobert Hoo
47636b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
47646b8cd447SRobert Hoo  cat > $TMPC << EOF
47656b8cd447SRobert Hoo#pragma GCC push_options
47666b8cd447SRobert Hoo#pragma GCC target("avx512f")
47676b8cd447SRobert Hoo#include <cpuid.h>
47686b8cd447SRobert Hoo#include <immintrin.h>
47696b8cd447SRobert Hoostatic int bar(void *a) {
47706b8cd447SRobert Hoo    __m512i x = *(__m512i *)a;
47716b8cd447SRobert Hoo    return _mm512_test_epi64_mask(x, x);
47726b8cd447SRobert Hoo}
47736b8cd447SRobert Hooint main(int argc, char *argv[])
47746b8cd447SRobert Hoo{
47756b8cd447SRobert Hoo	return bar(argv[0]);
47766b8cd447SRobert Hoo}
47776b8cd447SRobert HooEOF
47786b8cd447SRobert Hoo  if ! compile_object "" ; then
47796b8cd447SRobert Hoo    avx512f_opt="no"
47806b8cd447SRobert Hoo  fi
47816b8cd447SRobert Hooelse
47826b8cd447SRobert Hoo  avx512f_opt="no"
47836b8cd447SRobert Hoofi
47846b8cd447SRobert Hoo
4785f540166bSRichard Henderson########################################
4786f540166bSRichard Henderson# check if __[u]int128_t is usable.
4787f540166bSRichard Henderson
4788f540166bSRichard Hendersonint128=no
4789f540166bSRichard Hendersoncat > $TMPC << EOF
4790f540166bSRichard Henderson__int128_t a;
4791f540166bSRichard Henderson__uint128_t b;
4792f540166bSRichard Hendersonint main (void) {
4793f540166bSRichard Henderson  a = a + b;
4794f540166bSRichard Henderson  b = a * b;
4795464e3671SPeter Maydell  a = a * a;
4796f540166bSRichard Henderson  return 0;
4797f540166bSRichard Henderson}
4798f540166bSRichard HendersonEOF
4799f540166bSRichard Hendersonif compile_prog "" "" ; then
4800f540166bSRichard Henderson    int128=yes
4801f540166bSRichard Hendersonfi
480276a347e1SRichard Henderson
48037ebee43eSRichard Henderson#########################################
48047ebee43eSRichard Henderson# See if 128-bit atomic operations are supported.
48057ebee43eSRichard Henderson
48067ebee43eSRichard Hendersonatomic128=no
48077ebee43eSRichard Hendersonif test "$int128" = "yes"; then
48087ebee43eSRichard Henderson  cat > $TMPC << EOF
48097ebee43eSRichard Hendersonint main(void)
48107ebee43eSRichard Henderson{
48117ebee43eSRichard Henderson  unsigned __int128 x = 0, y = 0;
4812bceac547SThomas Huth  y = __atomic_load(&x, 0);
4813bceac547SThomas Huth  __atomic_store(&x, y, 0);
4814bceac547SThomas Huth  __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
48157ebee43eSRichard Henderson  return 0;
48167ebee43eSRichard Henderson}
48177ebee43eSRichard HendersonEOF
48187ebee43eSRichard Henderson  if compile_prog "" "" ; then
48197ebee43eSRichard Henderson    atomic128=yes
48207ebee43eSRichard Henderson  fi
48217ebee43eSRichard Hendersonfi
48227ebee43eSRichard Henderson
4823e6cd4bb5SRichard Hendersoncmpxchg128=no
4824e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then
4825e6cd4bb5SRichard Henderson  cat > $TMPC << EOF
4826e6cd4bb5SRichard Hendersonint main(void)
4827e6cd4bb5SRichard Henderson{
4828e6cd4bb5SRichard Henderson  unsigned __int128 x = 0, y = 0;
4829e6cd4bb5SRichard Henderson  __sync_val_compare_and_swap_16(&x, y, x);
4830e6cd4bb5SRichard Henderson  return 0;
4831e6cd4bb5SRichard Henderson}
4832e6cd4bb5SRichard HendersonEOF
4833e6cd4bb5SRichard Henderson  if compile_prog "" "" ; then
4834e6cd4bb5SRichard Henderson    cmpxchg128=yes
4835e6cd4bb5SRichard Henderson  fi
4836e6cd4bb5SRichard Hendersonfi
4837e6cd4bb5SRichard Henderson
4838df79b996SRichard Henderson#########################################
4839df79b996SRichard Henderson# See if 64-bit atomic operations are supported.
4840df79b996SRichard Henderson# Note that without __atomic builtins, we can only
4841df79b996SRichard Henderson# assume atomic loads/stores max at pointer size.
4842df79b996SRichard Henderson
4843df79b996SRichard Hendersoncat > $TMPC << EOF
4844df79b996SRichard Henderson#include <stdint.h>
4845df79b996SRichard Hendersonint main(void)
4846df79b996SRichard Henderson{
4847df79b996SRichard Henderson  uint64_t x = 0, y = 0;
4848df79b996SRichard Henderson#ifdef __ATOMIC_RELAXED
48495fe40765SThomas Huth  y = __atomic_load_n(&x, __ATOMIC_RELAXED);
48505fe40765SThomas Huth  __atomic_store_n(&x, y, __ATOMIC_RELAXED);
48515fe40765SThomas Huth  __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
48525fe40765SThomas Huth  __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
48535fe40765SThomas Huth  __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
4854df79b996SRichard Henderson#else
4855df79b996SRichard Henderson  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4856df79b996SRichard Henderson  __sync_lock_test_and_set(&x, y);
4857df79b996SRichard Henderson  __sync_val_compare_and_swap(&x, y, 0);
4858df79b996SRichard Henderson  __sync_fetch_and_add(&x, y);
4859df79b996SRichard Henderson#endif
4860df79b996SRichard Henderson  return 0;
4861df79b996SRichard Henderson}
4862df79b996SRichard HendersonEOF
4863df79b996SRichard Hendersonif compile_prog "" "" ; then
4864df79b996SRichard Henderson  atomic64=yes
4865df79b996SRichard Hendersonfi
4866df79b996SRichard Henderson
486726fffe29SEmilio G. Cota#########################################
486826fffe29SEmilio G. Cota# See if --dynamic-list is supported by the linker
486926fffe29SEmilio G. Cotald_dynamic_list="no"
487026fffe29SEmilio G. Cotaif test "$static" = "no" ; then
487126fffe29SEmilio G. Cota    cat > $TMPTXT <<EOF
487226fffe29SEmilio G. Cota{
487326fffe29SEmilio G. Cota  foo;
487426fffe29SEmilio G. Cota};
487526fffe29SEmilio G. CotaEOF
487626fffe29SEmilio G. Cota
487726fffe29SEmilio G. Cota    cat > $TMPC <<EOF
487826fffe29SEmilio G. Cota#include <stdio.h>
487926fffe29SEmilio G. Cotavoid foo(void);
488026fffe29SEmilio G. Cota
488126fffe29SEmilio G. Cotavoid foo(void)
488226fffe29SEmilio G. Cota{
488326fffe29SEmilio G. Cota  printf("foo\n");
488426fffe29SEmilio G. Cota}
488526fffe29SEmilio G. Cota
488626fffe29SEmilio G. Cotaint main(void)
488726fffe29SEmilio G. Cota{
488826fffe29SEmilio G. Cota  foo();
488926fffe29SEmilio G. Cota  return 0;
489026fffe29SEmilio G. Cota}
489126fffe29SEmilio G. CotaEOF
489226fffe29SEmilio G. Cota
489326fffe29SEmilio G. Cota    if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
489426fffe29SEmilio G. Cota        ld_dynamic_list="yes"
489526fffe29SEmilio G. Cota    fi
489626fffe29SEmilio G. Cotafi
489726fffe29SEmilio G. Cota
489826fffe29SEmilio G. Cota#########################################
489926fffe29SEmilio G. Cota# See if -exported_symbols_list is supported by the linker
490026fffe29SEmilio G. Cota
490126fffe29SEmilio G. Cotald_exported_symbols_list="no"
490226fffe29SEmilio G. Cotaif test "$static" = "no" ; then
490326fffe29SEmilio G. Cota    cat > $TMPTXT <<EOF
490426fffe29SEmilio G. Cota  _foo
490526fffe29SEmilio G. CotaEOF
490626fffe29SEmilio G. Cota
490726fffe29SEmilio G. Cota    if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
490826fffe29SEmilio G. Cota        ld_exported_symbols_list="yes"
490926fffe29SEmilio G. Cota    fi
491026fffe29SEmilio G. Cotafi
491126fffe29SEmilio G. Cota
491226fffe29SEmilio G. Cotaif  test "$plugins" = "yes" &&
491326fffe29SEmilio G. Cota    test "$ld_dynamic_list" = "no" &&
491426fffe29SEmilio G. Cota    test "$ld_exported_symbols_list" = "no" ; then
491526fffe29SEmilio G. Cota  error_exit \
491626fffe29SEmilio G. Cota      "Plugin support requires dynamic linking and specifying a set of symbols " \
491726fffe29SEmilio G. Cota      "that are exported to plugins. Unfortunately your linker doesn't " \
491826fffe29SEmilio G. Cota      "support the flag (--dynamic-list or -exported_symbols_list) used " \
491926fffe29SEmilio G. Cota      "for this purpose. You can't build with --static."
492026fffe29SEmilio G. Cotafi
492126fffe29SEmilio G. Cota
49221e6e9acaSRichard Henderson########################################
49231e6e9acaSRichard Henderson# check if getauxval is available.
49241e6e9acaSRichard Henderson
49251e6e9acaSRichard Hendersongetauxval=no
49261e6e9acaSRichard Hendersoncat > $TMPC << EOF
49271e6e9acaSRichard Henderson#include <sys/auxv.h>
49281e6e9acaSRichard Hendersonint main(void) {
49291e6e9acaSRichard Henderson  return getauxval(AT_HWCAP) == 0;
49301e6e9acaSRichard Henderson}
49311e6e9acaSRichard HendersonEOF
49321e6e9acaSRichard Hendersonif compile_prog "" "" ; then
49331e6e9acaSRichard Henderson    getauxval=yes
49341e6e9acaSRichard Hendersonfi
49351e6e9acaSRichard Henderson
4936fd0e6053SJohn Snow########################################
4937fd0e6053SJohn Snow# check if ccache is interfering with
4938fd0e6053SJohn Snow# semantic analysis of macros
4939fd0e6053SJohn Snow
49405e4dfd3dSJohn Snowunset CCACHE_CPP2
4941fd0e6053SJohn Snowccache_cpp2=no
4942fd0e6053SJohn Snowcat > $TMPC << EOF
4943fd0e6053SJohn Snowstatic const int Z = 1;
4944fd0e6053SJohn Snow#define fn() ({ Z; })
4945fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
4946fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
4947fd0e6053SJohn Snow#define ID(X) (X)
4948fd0e6053SJohn Snowint main(int argc, char *argv[])
4949fd0e6053SJohn Snow{
4950fd0e6053SJohn Snow    int x = 0, y = 0;
4951fd0e6053SJohn Snow    x = ID(x);
4952fd0e6053SJohn Snow    x = fn();
4953fd0e6053SJohn Snow    fn();
4954fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
4955fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
4956fd0e6053SJohn Snow    return 0;
4957fd0e6053SJohn Snow}
4958fd0e6053SJohn SnowEOF
4959fd0e6053SJohn Snow
4960fd0e6053SJohn Snowif ! compile_object "-Werror"; then
4961fd0e6053SJohn Snow    ccache_cpp2=yes
4962fd0e6053SJohn Snowfi
4963fd0e6053SJohn Snow
4964b553a042SJohn Snow#################################################
4965b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
4966b553a042SJohn Snow
4967b553a042SJohn Snowif test "$fortify_source" != "no"; then
4968b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4969b553a042SJohn Snow    fortify_source="no";
4970e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
4971cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4972b553a042SJohn Snow    fortify_source="no";
4973b553a042SJohn Snow  else
4974b553a042SJohn Snow    fortify_source="yes"
4975b553a042SJohn Snow  fi
4976b553a042SJohn Snowfi
4977b553a042SJohn Snow
49781efad060SFam Zheng###############################################
49791efad060SFam Zheng# Check if copy_file_range is provided by glibc
49801efad060SFam Zhenghave_copy_file_range=no
49811efad060SFam Zhengcat > $TMPC << EOF
49821efad060SFam Zheng#include <unistd.h>
49831efad060SFam Zhengint main(void) {
49841efad060SFam Zheng  copy_file_range(0, NULL, 0, NULL, 0, 0);
49851efad060SFam Zheng  return 0;
49861efad060SFam Zheng}
49871efad060SFam ZhengEOF
49881efad060SFam Zhengif compile_prog "" "" ; then
49891efad060SFam Zheng    have_copy_file_range=yes
49901efad060SFam Zhengfi
49911efad060SFam Zheng
4992d2042378SAneesh Kumar K.V##########################################
4993277abf15SJan Vesely# check if struct fsxattr is available via linux/fs.h
4994277abf15SJan Vesely
4995277abf15SJan Veselyhave_fsxattr=no
4996277abf15SJan Veselycat > $TMPC << EOF
4997277abf15SJan Vesely#include <linux/fs.h>
4998277abf15SJan Veselystruct fsxattr foo;
4999277abf15SJan Veselyint main(void) {
5000277abf15SJan Vesely  return 0;
5001277abf15SJan Vesely}
5002277abf15SJan VeselyEOF
5003277abf15SJan Veselyif compile_prog "" "" ; then
5004277abf15SJan Vesely    have_fsxattr=yes
5005277abf15SJan Veselyfi
5006277abf15SJan Vesely
5007b66e10e4SPeter Maydell##########################################
5008a40161cbSPaolo Bonzini# check for usable membarrier system call
5009a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then
5010a40161cbSPaolo Bonzini    have_membarrier=no
5011a40161cbSPaolo Bonzini    if test "$mingw32" = "yes" ; then
5012a40161cbSPaolo Bonzini        have_membarrier=yes
5013a40161cbSPaolo Bonzini    elif test "$linux" = "yes" ; then
5014a40161cbSPaolo Bonzini        cat > $TMPC << EOF
5015a40161cbSPaolo Bonzini    #include <linux/membarrier.h>
5016a40161cbSPaolo Bonzini    #include <sys/syscall.h>
5017a40161cbSPaolo Bonzini    #include <unistd.h>
5018a40161cbSPaolo Bonzini    #include <stdlib.h>
5019a40161cbSPaolo Bonzini    int main(void) {
5020a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5021a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5022a40161cbSPaolo Bonzini	exit(0);
5023a40161cbSPaolo Bonzini    }
5024a40161cbSPaolo BonziniEOF
5025a40161cbSPaolo Bonzini        if compile_prog "" "" ; then
5026a40161cbSPaolo Bonzini            have_membarrier=yes
5027a40161cbSPaolo Bonzini        fi
5028a40161cbSPaolo Bonzini    fi
5029a40161cbSPaolo Bonzini    if test "$have_membarrier" = "no"; then
5030a40161cbSPaolo Bonzini      feature_not_found "membarrier" "membarrier system call not available"
5031a40161cbSPaolo Bonzini    fi
5032a40161cbSPaolo Bonzinielse
5033a40161cbSPaolo Bonzini    # Do not enable it by default even for Mingw32, because it doesn't
5034a40161cbSPaolo Bonzini    # work on Wine.
5035a40161cbSPaolo Bonzini    membarrier=no
5036a40161cbSPaolo Bonzinifi
5037a40161cbSPaolo Bonzini
5038a40161cbSPaolo Bonzini##########################################
5039b66e10e4SPeter Maydell# check if rtnetlink.h exists and is useful
5040575b22b1SLaurent Vivierhave_rtnetlink=no
5041575b22b1SLaurent Viviercat > $TMPC << EOF
5042575b22b1SLaurent Vivier#include <linux/rtnetlink.h>
5043575b22b1SLaurent Vivierint main(void) {
5044575b22b1SLaurent Vivier  return IFLA_PROTO_DOWN;
5045575b22b1SLaurent Vivier}
5046575b22b1SLaurent VivierEOF
5047575b22b1SLaurent Vivierif compile_prog "" "" ; then
5048575b22b1SLaurent Vivier    have_rtnetlink=yes
5049575b22b1SLaurent Vivierfi
5050575b22b1SLaurent Vivier
50516a02c806SStefan Hajnoczi##########################################
50526a02c806SStefan Hajnoczi# check for usable AF_VSOCK environment
50536a02c806SStefan Hajnoczihave_af_vsock=no
50546a02c806SStefan Hajnoczicat > $TMPC << EOF
50556a02c806SStefan Hajnoczi#include <errno.h>
50566a02c806SStefan Hajnoczi#include <sys/types.h>
50576a02c806SStefan Hajnoczi#include <sys/socket.h>
50586a02c806SStefan Hajnoczi#if !defined(AF_VSOCK)
50596a02c806SStefan Hajnoczi# error missing AF_VSOCK flag
50606a02c806SStefan Hajnoczi#endif
50616a02c806SStefan Hajnoczi#include <linux/vm_sockets.h>
50626a02c806SStefan Hajnocziint main(void) {
50636a02c806SStefan Hajnoczi    int sock, ret;
50646a02c806SStefan Hajnoczi    struct sockaddr_vm svm;
50656a02c806SStefan Hajnoczi    socklen_t len = sizeof(svm);
50666a02c806SStefan Hajnoczi    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
50676a02c806SStefan Hajnoczi    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
50686a02c806SStefan Hajnoczi    if ((ret == -1) && (errno == ENOTCONN)) {
50696a02c806SStefan Hajnoczi        return 0;
50706a02c806SStefan Hajnoczi    }
50716a02c806SStefan Hajnoczi    return -1;
50726a02c806SStefan Hajnoczi}
50736a02c806SStefan HajnocziEOF
50746a02c806SStefan Hajnocziif compile_prog "" "" ; then
50756a02c806SStefan Hajnoczi    have_af_vsock=yes
50766a02c806SStefan Hajnoczifi
50776a02c806SStefan Hajnoczi
5078f0d92b56SLongpeng(Mike)##########################################
5079f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment
50804f67366eSThomas Huthhave_afalg=no
5081f0d92b56SLongpeng(Mike)cat > $TMPC << EOF
5082f0d92b56SLongpeng(Mike)#include <errno.h>
5083f0d92b56SLongpeng(Mike)#include <sys/types.h>
5084f0d92b56SLongpeng(Mike)#include <sys/socket.h>
5085f0d92b56SLongpeng(Mike)#include <linux/if_alg.h>
5086f0d92b56SLongpeng(Mike)int main(void) {
5087f0d92b56SLongpeng(Mike)    int sock;
5088f0d92b56SLongpeng(Mike)    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5089f0d92b56SLongpeng(Mike)    return sock;
5090f0d92b56SLongpeng(Mike)}
5091f0d92b56SLongpeng(Mike)EOF
5092f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then
5093f0d92b56SLongpeng(Mike)    have_afalg=yes
5094f0d92b56SLongpeng(Mike)fi
5095f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes"
5096f0d92b56SLongpeng(Mike)then
5097f0d92b56SLongpeng(Mike)    if test "$have_afalg" != "yes"
5098f0d92b56SLongpeng(Mike)    then
5099f0d92b56SLongpeng(Mike)	error_exit "AF_ALG requested but could not be detected"
5100f0d92b56SLongpeng(Mike)    fi
5101f0d92b56SLongpeng(Mike)fi
5102f0d92b56SLongpeng(Mike)
5103f0d92b56SLongpeng(Mike)
51046969ec6cSJames Clarke#################################################
51054d04351fSChristopher Covington# check for sysmacros.h
51064d04351fSChristopher Covington
51074d04351fSChristopher Covingtonhave_sysmacros=no
51084d04351fSChristopher Covingtoncat > $TMPC << EOF
51094d04351fSChristopher Covington#include <sys/sysmacros.h>
51104d04351fSChristopher Covingtonint main(void) {
51114d04351fSChristopher Covington    return makedev(0, 0);
51124d04351fSChristopher Covington}
51134d04351fSChristopher CovingtonEOF
51144d04351fSChristopher Covingtonif compile_prog "" "" ; then
51154d04351fSChristopher Covington    have_sysmacros=yes
51164d04351fSChristopher Covingtonfi
51174d04351fSChristopher Covington
51184d04351fSChristopher Covington##########################################
511949e00a18SAndreas Grapentin# check for _Static_assert()
512049e00a18SAndreas Grapentin
512149e00a18SAndreas Grapentinhave_static_assert=no
512249e00a18SAndreas Grapentincat > $TMPC << EOF
512349e00a18SAndreas Grapentin_Static_assert(1, "success");
512449e00a18SAndreas Grapentinint main(void) {
512549e00a18SAndreas Grapentin    return 0;
512649e00a18SAndreas Grapentin}
512749e00a18SAndreas GrapentinEOF
512849e00a18SAndreas Grapentinif compile_prog "" "" ; then
512949e00a18SAndreas Grapentin    have_static_assert=yes
513049e00a18SAndreas Grapentinfi
513149e00a18SAndreas Grapentin
513249e00a18SAndreas Grapentin##########################################
5133e674605fSTomáš Golembiovský# check for utmpx.h, it is missing e.g. on OpenBSD
5134e674605fSTomáš Golembiovský
5135e674605fSTomáš Golembiovskýhave_utmpx=no
5136e674605fSTomáš Golembiovskýcat > $TMPC << EOF
5137e674605fSTomáš Golembiovský#include <utmpx.h>
5138e674605fSTomáš Golembiovskýstruct utmpx user_info;
5139e674605fSTomáš Golembiovskýint main(void) {
5140e674605fSTomáš Golembiovský    return 0;
5141e674605fSTomáš Golembiovský}
5142e674605fSTomáš GolembiovskýEOF
5143e674605fSTomáš Golembiovskýif compile_prog "" "" ; then
5144e674605fSTomáš Golembiovský    have_utmpx=yes
5145e674605fSTomáš Golembiovskýfi
5146e674605fSTomáš Golembiovský
5147e674605fSTomáš Golembiovský##########################################
5148db1ed1abSRichard Henderson# check for getrandom()
5149db1ed1abSRichard Henderson
5150db1ed1abSRichard Hendersonhave_getrandom=no
5151db1ed1abSRichard Hendersoncat > $TMPC << EOF
5152db1ed1abSRichard Henderson#include <sys/random.h>
5153db1ed1abSRichard Hendersonint main(void) {
5154db1ed1abSRichard Henderson    return getrandom(0, 0, GRND_NONBLOCK);
5155db1ed1abSRichard Henderson}
5156db1ed1abSRichard HendersonEOF
5157db1ed1abSRichard Hendersonif compile_prog "" "" ; then
5158db1ed1abSRichard Henderson    have_getrandom=yes
5159db1ed1abSRichard Hendersonfi
5160db1ed1abSRichard Henderson
5161db1ed1abSRichard Henderson##########################################
5162247724cbSMarc-André Lureau# checks for sanitizers
5163247724cbSMarc-André Lureau
5164247724cbSMarc-André Lureauhave_asan=no
5165247724cbSMarc-André Lureauhave_ubsan=no
5166d83414e1SMarc-André Lureauhave_asan_iface_h=no
5167d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
5168247724cbSMarc-André Lureau
5169247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
5170b9f44da2SMarc-André Lureau  write_c_skeleton
5171247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5172247724cbSMarc-André Lureau      have_asan=yes
5173247724cbSMarc-André Lureau  fi
5174b9f44da2SMarc-André Lureau
5175b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
5176b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
5177b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5178b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
5179b9f44da2SMarc-André Lureau#include <stdlib.h>
5180b9f44da2SMarc-André Lureauint main(void) {
5181b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
5182f2dfe54cSLeonid Bloch    if (tmp != NULL) {
5183b9f44da2SMarc-André Lureau        return *(int *)(tmp + 2);
5184b9f44da2SMarc-André Lureau    }
5185d1abf3fcSOlaf Hering    return 1;
5186f2dfe54cSLeonid Bloch}
5187b9f44da2SMarc-André LureauEOF
5188247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5189247724cbSMarc-André Lureau      have_ubsan=yes
5190247724cbSMarc-André Lureau  fi
5191d83414e1SMarc-André Lureau
5192d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
5193d83414e1SMarc-André Lureau      have_asan_iface_h=yes
5194d83414e1SMarc-André Lureau  fi
5195d83414e1SMarc-André Lureau
5196d83414e1SMarc-André Lureau  cat > $TMPC << EOF
5197d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
5198d83414e1SMarc-André Lureauint main(void) {
5199d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
5200d83414e1SMarc-André Lureau  return 0;
5201d83414e1SMarc-André Lureau}
5202d83414e1SMarc-André LureauEOF
5203d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5204d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
5205d83414e1SMarc-André Lureau  fi
5206247724cbSMarc-André Lureaufi
5207247724cbSMarc-André Lureau
5208247724cbSMarc-André Lureau##########################################
5209adc28027SAlexander Bulekov# checks for fuzzer
521054c9e41dSAlexander Bulekovif test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5211adc28027SAlexander Bulekov  write_c_fuzzer_skeleton
5212dd016265SAlexander Bulekov  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5213adc28027SAlexander Bulekov    have_fuzzer=yes
521464ed6f92SPaolo Bonzini  else
521564ed6f92SPaolo Bonzini    error_exit "Your compiler doesn't support -fsanitize=fuzzer"
521664ed6f92SPaolo Bonzini    exit 1
5217adc28027SAlexander Bulekov  fi
5218adc28027SAlexander Bulekovfi
5219adc28027SAlexander Bulekov
52200aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers;
52210aebab04SLingfeng Yang# keep it separate until that is not the case.
52220aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
52230aebab04SLingfeng Yang  error_exit "TSAN is not supported with other sanitiziers."
52240aebab04SLingfeng Yangfi
52250aebab04SLingfeng Yanghave_tsan=no
52260aebab04SLingfeng Yanghave_tsan_iface_fiber=no
52270aebab04SLingfeng Yangif test "$tsan" = "yes" ; then
52280aebab04SLingfeng Yang  write_c_skeleton
52290aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
52300aebab04SLingfeng Yang      have_tsan=yes
52310aebab04SLingfeng Yang  fi
52320aebab04SLingfeng Yang  cat > $TMPC << EOF
52330aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h>
52340aebab04SLingfeng Yangint main(void) {
52350aebab04SLingfeng Yang  __tsan_create_fiber(0);
52360aebab04SLingfeng Yang  return 0;
52370aebab04SLingfeng Yang}
52380aebab04SLingfeng YangEOF
52390aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
52400aebab04SLingfeng Yang      have_tsan_iface_fiber=yes
52410aebab04SLingfeng Yang  fi
52420aebab04SLingfeng Yangfi
52430aebab04SLingfeng Yang
5244adc28027SAlexander Bulekov##########################################
524517824406SJunyan He# check for libpmem
524617824406SJunyan He
524717824406SJunyan Heif test "$libpmem" != "no"; then
524817824406SJunyan He	if $pkg_config --exists "libpmem"; then
524917824406SJunyan He		libpmem="yes"
525017824406SJunyan He		libpmem_libs=$($pkg_config --libs libpmem)
525117824406SJunyan He		libpmem_cflags=$($pkg_config --cflags libpmem)
525217824406SJunyan He	else
525317824406SJunyan He		if test "$libpmem" = "yes" ; then
525417824406SJunyan He			feature_not_found "libpmem" "Install nvml or pmdk"
525517824406SJunyan He		fi
525617824406SJunyan He		libpmem="no"
525717824406SJunyan He	fi
525817824406SJunyan Hefi
525917824406SJunyan He
526017824406SJunyan He##########################################
526121b2eca6SJingqi Liu# check for libdaxctl
526221b2eca6SJingqi Liu
526321b2eca6SJingqi Liuif test "$libdaxctl" != "no"; then
526421b2eca6SJingqi Liu	if $pkg_config --atleast-version=57 "libdaxctl"; then
526521b2eca6SJingqi Liu		libdaxctl="yes"
526621b2eca6SJingqi Liu		libdaxctl_libs=$($pkg_config --libs libdaxctl)
526721b2eca6SJingqi Liu		libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
526821b2eca6SJingqi Liu	else
526921b2eca6SJingqi Liu		if test "$libdaxctl" = "yes" ; then
527021b2eca6SJingqi Liu			feature_not_found "libdaxctl" "Install libdaxctl"
527121b2eca6SJingqi Liu		fi
527221b2eca6SJingqi Liu		libdaxctl="no"
527321b2eca6SJingqi Liu	fi
527421b2eca6SJingqi Liufi
527521b2eca6SJingqi Liu
527621b2eca6SJingqi Liu##########################################
5277675b9b53SMarc-André Lureau# check for slirp
5278675b9b53SMarc-André Lureau
5279675b9b53SMarc-André Lureaucase "$slirp" in
52804d34a86bSPaolo Bonzini  auto | enabled | internal)
52814d34a86bSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
52827d7dbf9dSDan Streetman    if test "$git_submodules_action" != "ignore"; then
52837c57bdd8SMarc-André Lureau      git_submodules="${git_submodules} slirp"
52847c57bdd8SMarc-André Lureau    fi
5285675b9b53SMarc-André Lureau    ;;
5286675b9b53SMarc-André Lureauesac
5287675b9b53SMarc-André Lureau
5288b8e0c493SJoelle van Dyne# Check for slirp smbd dupport
5289b8e0c493SJoelle van Dyne: ${smbd=${SMBD-/usr/sbin/smbd}}
5290b8e0c493SJoelle van Dyneif test "$slirp_smbd" != "no" ; then
5291b8e0c493SJoelle van Dyne  if test "$mingw32" = "yes" ; then
5292b8e0c493SJoelle van Dyne    if test "$slirp_smbd" = "yes" ; then
5293b8e0c493SJoelle van Dyne      error_exit "Host smbd not supported on this platform."
5294b8e0c493SJoelle van Dyne    fi
5295b8e0c493SJoelle van Dyne    slirp_smbd=no
5296b8e0c493SJoelle van Dyne  else
5297b8e0c493SJoelle van Dyne    slirp_smbd=yes
5298b8e0c493SJoelle van Dyne  fi
5299b8e0c493SJoelle van Dynefi
5300b8e0c493SJoelle van Dyne
530154e7aac0SAlexey Krasikov##########################################
530254e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall
530354e7aac0SAlexey Krasikov
530454e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then
530554e7aac0SAlexey Krasikov
530654e7aac0SAlexey Krasikov    have_keyring=no
530754e7aac0SAlexey Krasikov    cat > $TMPC << EOF
530854e7aac0SAlexey Krasikov#include <errno.h>
530954e7aac0SAlexey Krasikov#include <asm/unistd.h>
531054e7aac0SAlexey Krasikov#include <linux/keyctl.h>
531154e7aac0SAlexey Krasikov#include <unistd.h>
531254e7aac0SAlexey Krasikovint main(void) {
531354e7aac0SAlexey Krasikov    return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
531454e7aac0SAlexey Krasikov}
531554e7aac0SAlexey KrasikovEOF
531654e7aac0SAlexey Krasikov    if compile_prog "" "" ; then
531754e7aac0SAlexey Krasikov        have_keyring=yes
531854e7aac0SAlexey Krasikov    fi
531954e7aac0SAlexey Krasikovfi
532054e7aac0SAlexey Krasikovif test "$secret_keyring" != "no"
532154e7aac0SAlexey Krasikovthen
5322b418d265SDavid Edmondson    if test "$have_keyring" = "yes"
532354e7aac0SAlexey Krasikov    then
532454e7aac0SAlexey Krasikov	secret_keyring=yes
532554e7aac0SAlexey Krasikov    else
532654e7aac0SAlexey Krasikov	if test "$secret_keyring" = "yes"
532754e7aac0SAlexey Krasikov	then
532854e7aac0SAlexey Krasikov	    error_exit "syscall __NR_keyctl requested, \
532954e7aac0SAlexey Krasikovbut not implemented on your system"
533054e7aac0SAlexey Krasikov	else
533154e7aac0SAlexey Krasikov	    secret_keyring=no
533254e7aac0SAlexey Krasikov	fi
533354e7aac0SAlexey Krasikov    fi
533454e7aac0SAlexey Krasikovfi
533554e7aac0SAlexey Krasikov
533692500362SAlexey Krasikov##########################################
5337e86ecd4bSJuan Quintela# End of CC checks
5338e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
5339e86ecd4bSJuan Quintela
5340d83414e1SMarc-André Lureauwrite_c_skeleton
5341d83414e1SMarc-André Lureau
53421d728c39SBlue Swirlif test "$gcov" = "yes" ; then
5343bf0e56a3SMarc-André Lureau  :
5344b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then
5345086d5f75SPaolo Bonzini  QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5346086d5f75SPaolo Bonzini  debug=no
5347086d5f75SPaolo Bonzinifi
5348086d5f75SPaolo Bonzini
5349086d5f75SPaolo Bonzinicase "$ARCH" in
5350086d5f75SPaolo Bonzinialpha)
5351086d5f75SPaolo Bonzini  # Ensure there's only a single GP
5352086d5f75SPaolo Bonzini  QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5353086d5f75SPaolo Bonzini;;
5354086d5f75SPaolo Bonziniesac
5355086d5f75SPaolo Bonzini
5356086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then
5357086d5f75SPaolo Bonzini  QEMU_CFLAGS="-p $QEMU_CFLAGS"
5358086d5f75SPaolo Bonzini  QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5359086d5f75SPaolo Bonzinifi
5360a316e378SJuan Quintela
5361247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
5362db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5363db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5364d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
5365d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
5366d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
5367d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
5368d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
5369d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
5370d83414e1SMarc-André Lureau  fi
5371247724cbSMarc-André Lureaufi
53720aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then
53730aebab04SLingfeng Yang  if test "$have_tsan_iface_fiber" = "yes" ; then
53740aebab04SLingfeng Yang    QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
53750aebab04SLingfeng Yang    QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
53760aebab04SLingfeng Yang  else
53770aebab04SLingfeng Yang    error_exit "Cannot enable TSAN due to missing fiber annotation interface."
53780aebab04SLingfeng Yang  fi
53790aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then
53800aebab04SLingfeng Yang  error_exit "Cannot enable TSAN due to missing sanitize thread interface."
53810aebab04SLingfeng Yangfi
5382247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
5383db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5384db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
5385247724cbSMarc-André Lureaufi
5386247724cbSMarc-André Lureau
53876542aa9cSPeter Lieven##########################################
53883efac6ebSTomáš Golembiovský
53890aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
53900aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then
5391e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5392db5adeaaSPaolo Bonzini        QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
5393e86ecd4bSJuan Quintela    fi
5394e86ecd4bSJuan Quintelafi
5395e86ecd4bSJuan Quintela
5396952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
5397952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
5398cb8baa77SMark Cave-Ayland    flags="--no-seh --nxcompat"
5399cb8baa77SMark Cave-Ayland
5400cb8baa77SMark Cave-Ayland    # Disable ASLR for debug builds to allow debugging with gdb
5401cb8baa77SMark Cave-Ayland    if test "$debug" = "no" ; then
5402cb8baa77SMark Cave-Ayland        flags="--dynamicbase $flags"
5403cb8baa77SMark Cave-Ayland    fi
5404cb8baa77SMark Cave-Ayland
5405cb8baa77SMark Cave-Ayland    for flag in $flags; do
5406e9a3591fSChristian Borntraeger        if ld_has $flag ; then
5407db5adeaaSPaolo Bonzini            QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
5408952afb71SBlue Swirl        fi
5409952afb71SBlue Swirl    done
5410952afb71SBlue Swirlfi
5411952afb71SBlue Swirl
5412e0580342SKamil Rytarowski# We can only support ivshmem if we have eventfd
5413e0580342SKamil Rytarowskiif [ "$eventfd" = "yes" ]; then
5414e0580342SKamil Rytarowski  ivshmem=yes
5415e0580342SKamil Rytarowskifi
5416e0580342SKamil Rytarowski
54179d6bc27bSMichael Roth# Probe for guest agent support/options
54189d6bc27bSMichael Roth
5419e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
5420a5125905SLaurent Vivier  if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5421a5125905SLaurent Vivier      guest_agent=no
5422a5125905SLaurent Vivier  elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5423e8ef31a3SMichael Tokarev      guest_agent=yes
5424e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
5425e8ef31a3SMichael Tokarev      guest_agent=no
5426e8ef31a3SMichael Tokarev  else
5427e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
5428ca35f780SPaolo Bonzini  fi
54294b1c11fdSDaniel P. Berrangefi
5430ca35f780SPaolo Bonzini
5431b846ab7cSPaolo Bonzini# Guest agent Windows MSI package
54329d6bc27bSMichael Roth
54339d6bc27bSMichael Rothif test "$QEMU_GA_MANUFACTURER" = ""; then
54349d6bc27bSMichael Roth  QEMU_GA_MANUFACTURER=QEMU
54359d6bc27bSMichael Rothfi
54369d6bc27bSMichael Rothif test "$QEMU_GA_DISTRO" = ""; then
54379d6bc27bSMichael Roth  QEMU_GA_DISTRO=Linux
54389d6bc27bSMichael Rothfi
54399d6bc27bSMichael Rothif test "$QEMU_GA_VERSION" = ""; then
544089138857SStefan Weil    QEMU_GA_VERSION=$(cat $source_path/VERSION)
54419d6bc27bSMichael Rothfi
54429d6bc27bSMichael Roth
5443b846ab7cSPaolo BonziniQEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
54449d6bc27bSMichael Roth
5445ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
5446ca35f780SPaolo Bonziniroms=
5447e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5448e633a5c6SEric Blake        test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
54497000a12eSThomas Huth        test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5450e57218b6SPeter Maydell    # Different host OS linkers have different ideas about the name of the ELF
5451c65d5e4eSBrad Smith    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5452c65d5e4eSBrad Smith    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5453c65d5e4eSBrad Smith    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5454e57218b6SPeter Maydell        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5455e57218b6SPeter Maydell            ld_i386_emulation="$emu"
5456ca35f780SPaolo Bonzini            roms="optionrom"
5457e57218b6SPeter Maydell            break
5458e57218b6SPeter Maydell        fi
5459e57218b6SPeter Maydell    done
5460ca35f780SPaolo Bonzinifi
5461ca35f780SPaolo Bonzini
54622e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5463a5b2afd5SThomas Huth# or -march=z10 (which is the lowest architecture level that Clang supports)
54649933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
54652e33c3f8SThomas Huth  write_c_skeleton
5466a5b2afd5SThomas Huth  compile_prog "-march=z900" ""
5467a5b2afd5SThomas Huth  has_z900=$?
5468a5b2afd5SThomas Huth  if [ $has_z900 = 0 ] || compile_prog "-march=z10" ""; then
5469a5b2afd5SThomas Huth    if [ $has_z900 != 0 ]; then
5470a5b2afd5SThomas Huth      echo "WARNING: Your compiler does not support the z900!"
5471a5b2afd5SThomas Huth      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
5472a5b2afd5SThomas Huth    fi
54739933c305SChristian Borntraeger    roms="$roms s390-ccw"
54741ef6bfc2SPhilippe Mathieu-Daudé    # SLOF is required for building the s390-ccw firmware on s390x,
54751ef6bfc2SPhilippe Mathieu-Daudé    # since it is using the libnet code from SLOF for network booting.
54767d7dbf9dSDan Streetman    if test "$git_submodules_action" != "ignore"; then
54771ef6bfc2SPhilippe Mathieu-Daudé      git_submodules="${git_submodules} roms/SLOF"
54781ef6bfc2SPhilippe Mathieu-Daudé    fi
54799933c305SChristian Borntraeger  fi
54802e33c3f8SThomas Huthfi
54819933c305SChristian Borntraeger
548211cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler.
548311cde1c8SBruno 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.
548411cde1c8SBruno Dominguezif has $cxx; then
548511cde1c8SBruno Dominguez    cat > $TMPC <<EOF
548611cde1c8SBruno Dominguezint c_function(void);
548711cde1c8SBruno Dominguezint main(void) { return c_function(); }
548811cde1c8SBruno DominguezEOF
548911cde1c8SBruno Dominguez
549011cde1c8SBruno Dominguez    compile_object
549111cde1c8SBruno Dominguez
549211cde1c8SBruno Dominguez    cat > $TMPCXX <<EOF
549311cde1c8SBruno Dominguezextern "C" {
549411cde1c8SBruno Dominguez   int c_function(void);
549511cde1c8SBruno Dominguez}
549611cde1c8SBruno Dominguezint c_function(void) { return 42; }
549711cde1c8SBruno DominguezEOF
549811cde1c8SBruno Dominguez
549911cde1c8SBruno Dominguez    update_cxxflags
550011cde1c8SBruno Dominguez
55015770e8afSPaolo Bonzini    if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
550211cde1c8SBruno Dominguez        # C++ compiler $cxx works ok with C compiler $cc
550311cde1c8SBruno Dominguez        :
550411cde1c8SBruno Dominguez    else
550511cde1c8SBruno Dominguez        echo "C++ compiler $cxx does not work with C compiler $cc"
550611cde1c8SBruno Dominguez        echo "Disabling C++ specific optional code"
550711cde1c8SBruno Dominguez        cxx=
550811cde1c8SBruno Dominguez    fi
550911cde1c8SBruno Dominguezelse
551011cde1c8SBruno Dominguez    echo "No C++ compiler available; disabling C++ specific optional code"
551111cde1c8SBruno Dominguez    cxx=
551211cde1c8SBruno Dominguezfi
551311cde1c8SBruno Dominguez
55147d7dbf9dSDan Streetmanif !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
55157d7dbf9dSDan Streetman    exit 1
55165d91a2edSYonggang Luofi
55175d91a2edSYonggang Luo
551898ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
551997a847bcSbellard
552098ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
552198ec69acSJuan Quintelaecho >> $config_host_mak
552298ec69acSJuan Quintela
5523e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
5524cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
5525aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
55267d7dbf9dSDan Streetmanecho "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
5527804edf29SJuan Quintela
552898ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak
5529727e5283SPaolo Bonzini
5530f8393946Saurel32if test "$debug_tcg" = "yes" ; then
55312358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5532f8393946Saurel32fi
55331625af87Saliguoriif test "$strip_opt" = "yes" ; then
553452ba784dSHollis Blanchard  echo "STRIP=${strip}" >> $config_host_mak
55351625af87Saliguorifi
55367d13299dSbellardif test "$bigendian" = "yes" ; then
5537e2542fe2SJuan Quintela  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
553897a847bcSbellardfi
553967b915a5Sbellardif test "$mingw32" = "yes" ; then
554098ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
5541d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
5542d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5543f33ca81fSMichael Roth    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5544d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5545d9840e25STomoki Sekiyama  fi
554650cbebb9SMichael Roth  if test "$guest_agent_ntddscsi" = "yes" ; then
554776dc75caSTomáš Golembiovský    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
554850cbebb9SMichael Roth  fi
55499dacf32dSYossi Hindin  echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
55509dacf32dSYossi Hindin  echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
55519dacf32dSYossi Hindin  echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
55529dacf32dSYossi Hindin  echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5553210fa556Spbrookelse
555435f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
5555210fa556Spbrookfi
5556128ab2ffSblueswir1
5557dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
5558dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
5559dffcb71cSMark McLoughlinfi
5560dffcb71cSMark McLoughlin
556183fb7adfSbellardif test "$darwin" = "yes" ; then
556298ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
556383fb7adfSbellardfi
5564b29fe3edSmalc
5565ec530c81Sbellardif test "$solaris" = "yes" ; then
556698ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
5567ec530c81Sbellardfi
5568179cf400SAndreas Färberif test "$haiku" = "yes" ; then
5569179cf400SAndreas Färber  echo "CONFIG_HAIKU=y" >> $config_host_mak
5570179cf400SAndreas Färberfi
557197a847bcSbellardif test "$static" = "yes" ; then
557298ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
557397a847bcSbellardfi
55741ba16968SStefan Weilif test "$profiler" = "yes" ; then
55752358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
557605c2a3e7Sbellardfi
5577c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then
5578c932ce31SPaolo Bonzini  echo "CONFIG_TOOLS=y" >> $config_host_mak
5579c932ce31SPaolo Bonzinifi
5580f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then
5581f15bff25SPaolo Bonzini  echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5582f15bff25SPaolo Bonzinifi
5583b8e0c493SJoelle van Dyneif test "$slirp_smbd" = "yes" ; then
5584b8e0c493SJoelle van Dyne  echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
5585e2d8830eSBrad  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5586b8e0c493SJoelle van Dynefi
55878a16d273Sthsif test "$vde" = "yes" ; then
558898ec69acSJuan Quintela  echo "CONFIG_VDE=y" >> $config_host_mak
5589e2ad6f16SFam Zheng  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
55908a16d273Sthsfi
559158952137SVincenzo Maffioneif test "$netmap" = "yes" ; then
559258952137SVincenzo Maffione  echo "CONFIG_NETMAP=y" >> $config_host_mak
559358952137SVincenzo Maffionefi
5594015a33bdSGongleiif test "$l2tpv3" = "yes" ; then
5595015a33bdSGonglei  echo "CONFIG_L2TPV3=y" >> $config_host_mak
5596015a33bdSGongleifi
55974cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then
55984cc600d2SPaolo Bonzini  echo "CONFIG_GPROF=y" >> $config_host_mak
55994cc600d2SPaolo Bonzinifi
56002358a494SJuan Quintelaecho "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
56010c58ac1cSmalcfor drv in $audio_drv_list; do
56021ef1ec2aSGerd Hoffmann    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5603484e2cc7SPaolo Bonzini    echo "$def=y" >> $config_host_mak
56040c58ac1cSmalcdone
5605478e943fSPaolo Bonziniif test "$alsa" = "yes" ; then
5606478e943fSPaolo Bonzini    echo "CONFIG_ALSA=y" >> $config_host_mak
5607478e943fSPaolo Bonzinifi
5608b1149911SFam Zhengecho "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5609478e943fSPaolo Bonziniecho "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
5610478e943fSPaolo Bonziniif test "$libpulse" = "yes" ; then
5611478e943fSPaolo Bonzini    echo "CONFIG_LIBPULSE=y" >> $config_host_mak
5612478e943fSPaolo Bonzinifi
5613b1149911SFam Zhengecho "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5614478e943fSPaolo Bonziniecho "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
5615b1149911SFam Zhengecho "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5616b1149911SFam Zhengecho "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5617b1149911SFam Zhengecho "OSS_LIBS=$oss_libs" >> $config_host_mak
5618478e943fSPaolo Bonziniif test "$libjack" = "yes" ; then
5619478e943fSPaolo Bonzini    echo "CONFIG_LIBJACK=y" >> $config_host_mak
5620478e943fSPaolo Bonzinifi
56212e445703SGeoffrey McRaeecho "JACK_LIBS=$jack_libs" >> $config_host_mak
5622d5631638Smalcif test "$audio_win_int" = "yes" ; then
5623d5631638Smalc  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5624d5631638Smalcfi
5625b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5626b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5627dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then
5628dce512deSChristoph Hellwig  echo "CONFIG_XFS=y" >> $config_host_mak
5629dce512deSChristoph Hellwigfi
563089138857SStefan Weilqemu_version=$(head $source_path/VERSION)
56312358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
563298ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
56332b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
563417969268SFam Zhengif test "$modules" = "yes"; then
5635e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
5636e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
563789138857SStefan Weil  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
563817969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
563917969268SFam Zhengfi
5640bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then
5641bd83c861SChristian Ehrhardt  echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
5642bd83c861SChristian Ehrhardtfi
5643099d6b0fSRiku Voipioif test "$pipe2" = "yes" ; then
56442358a494SJuan Quintela  echo "CONFIG_PIPE2=y" >> $config_host_mak
5645099d6b0fSRiku Voipiofi
564640ff6d7eSKevin Wolfif test "$accept4" = "yes" ; then
564740ff6d7eSKevin Wolf  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
564840ff6d7eSKevin Wolffi
56493ce34dfbSvibisreenivasanif test "$splice" = "yes" ; then
56502358a494SJuan Quintela  echo "CONFIG_SPLICE=y" >> $config_host_mak
56513ce34dfbSvibisreenivasanfi
5652c2882b96SRiku Voipioif test "$eventfd" = "yes" ; then
5653c2882b96SRiku Voipio  echo "CONFIG_EVENTFD=y" >> $config_host_mak
5654c2882b96SRiku Voipiofi
5655751bcc39SMarc-André Lureauif test "$memfd" = "yes" ; then
5656751bcc39SMarc-André Lureau  echo "CONFIG_MEMFD=y" >> $config_host_mak
5657751bcc39SMarc-André Lureaufi
5658955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then
5659955727d2SCortland Tölva  echo "CONFIG_USBFS=y" >> $config_host_mak
5660955727d2SCortland Tölvafi
5661d0927938SUlrich Hechtif test "$fallocate" = "yes" ; then
5662d0927938SUlrich Hecht  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5663d0927938SUlrich Hechtfi
56643d4fa43eSKusanagi Kouichiif test "$fallocate_punch_hole" = "yes" ; then
56653d4fa43eSKusanagi Kouichi  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
56663d4fa43eSKusanagi Kouichifi
5667b953f075SDenis V. Lunevif test "$fallocate_zero_range" = "yes" ; then
5668b953f075SDenis V. Lunev  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5669b953f075SDenis V. Lunevfi
5670ed911435SKevin Wolfif test "$posix_fallocate" = "yes" ; then
5671ed911435SKevin Wolf  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5672ed911435SKevin Wolffi
5673c727f47dSPeter Maydellif test "$sync_file_range" = "yes" ; then
5674c727f47dSPeter Maydell  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5675c727f47dSPeter Maydellfi
5676dace20dcSPeter Maydellif test "$fiemap" = "yes" ; then
5677dace20dcSPeter Maydell  echo "CONFIG_FIEMAP=y" >> $config_host_mak
5678dace20dcSPeter Maydellfi
5679d0927938SUlrich Hechtif test "$dup3" = "yes" ; then
5680d0927938SUlrich Hecht  echo "CONFIG_DUP3=y" >> $config_host_mak
5681d0927938SUlrich Hechtfi
56824e0c6529SAlex Blighif test "$ppoll" = "yes" ; then
56834e0c6529SAlex Bligh  echo "CONFIG_PPOLL=y" >> $config_host_mak
56844e0c6529SAlex Blighfi
5685cd758dd0SAlex Blighif test "$prctl_pr_set_timerslack" = "yes" ; then
5686cd758dd0SAlex Bligh  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5687cd758dd0SAlex Blighfi
56883b6edd16SPeter Maydellif test "$epoll" = "yes" ; then
56893b6edd16SPeter Maydell  echo "CONFIG_EPOLL=y" >> $config_host_mak
56903b6edd16SPeter Maydellfi
56913b6edd16SPeter Maydellif test "$epoll_create1" = "yes" ; then
56923b6edd16SPeter Maydell  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
56933b6edd16SPeter Maydellfi
5694a8fd1abaSPeter Maydellif test "$sendfile" = "yes" ; then
5695a8fd1abaSPeter Maydell  echo "CONFIG_SENDFILE=y" >> $config_host_mak
5696a8fd1abaSPeter Maydellfi
569751834341SRiku Voipioif test "$timerfd" = "yes" ; then
569851834341SRiku Voipio  echo "CONFIG_TIMERFD=y" >> $config_host_mak
569951834341SRiku Voipiofi
57009af5c906SRiku Voipioif test "$setns" = "yes" ; then
57019af5c906SRiku Voipio  echo "CONFIG_SETNS=y" >> $config_host_mak
57029af5c906SRiku Voipiofi
570338860a03SAleksandar Markovicif test "$clock_adjtime" = "yes" ; then
570438860a03SAleksandar Markovic  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
570538860a03SAleksandar Markovicfi
57065a03cd00SAleksandar Markovicif test "$syncfs" = "yes" ; then
57075a03cd00SAleksandar Markovic  echo "CONFIG_SYNCFS=y" >> $config_host_mak
57085a03cd00SAleksandar Markovicfi
57093b3f24adSaurel32if test "$inotify" = "yes" ; then
57102358a494SJuan Quintela  echo "CONFIG_INOTIFY=y" >> $config_host_mak
57113b3f24adSaurel32fi
5712c05c7a73SRiku Voipioif test "$inotify1" = "yes" ; then
5713c05c7a73SRiku Voipio  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5714c05c7a73SRiku Voipiofi
5715401bc051SPeter Maydellif test "$sem_timedwait" = "yes" ; then
5716401bc051SPeter Maydell  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5717401bc051SPeter Maydellfi
57185c99fa37SKeno Fischerif test "$strchrnul" = "yes" ; then
57195c99fa37SKeno Fischer  echo "HAVE_STRCHRNUL=y" >> $config_host_mak
57205c99fa37SKeno Fischerfi
57218a792b03SJiufei Xueif test "$st_atim" = "yes" ; then
57228a792b03SJiufei Xue  echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
57238a792b03SJiufei Xuefi
57246ae9a1f4SJuan Quintelaif test "$byteswap_h" = "yes" ; then
57256ae9a1f4SJuan Quintela  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
57266ae9a1f4SJuan Quintelafi
57276ae9a1f4SJuan Quintelaif test "$bswap_h" = "yes" ; then
57286ae9a1f4SJuan Quintela  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
57296ae9a1f4SJuan Quintelafi
5730f876b765SMarc-André Lureauif test "$gio" = "yes" ; then
5731f876b765SMarc-André Lureau    echo "CONFIG_GIO=y" >> $config_host_mak
5732f876b765SMarc-André Lureau    echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
5733f876b765SMarc-André Lureau    echo "GIO_LIBS=$gio_libs" >> $config_host_mak
57345ecfb76cSPaolo Bonzinifi
57355ecfb76cSPaolo Bonziniif test "$gdbus_codegen" != "" ; then
573625a97a56SMarc-André Lureau    echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
5737f876b765SMarc-André Lureaufi
5738a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5739ddbb0d09SDaniel P. Berrangeif test "$gnutls" = "yes" ; then
5740ddbb0d09SDaniel P. Berrange  echo "CONFIG_GNUTLS=y" >> $config_host_mak
5741a81df1b6SPaolo Bonzini  echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
5742a81df1b6SPaolo Bonzini  echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
5743ddbb0d09SDaniel P. Berrangefi
574491bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" ; then
574591bfcdb0SDaniel P. Berrange  echo "CONFIG_GCRYPT=y" >> $config_host_mak
57461f923c70SLongpeng(Mike)  if test "$gcrypt_hmac" = "yes" ; then
57471f923c70SLongpeng(Mike)    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
57481f923c70SLongpeng(Mike)  fi
574946859d93SDaniel P. Berrangé  echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
575046859d93SDaniel P. Berrangé  echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
575162893b67SDaniel P. Berrangefi
575291bfcdb0SDaniel P. Berrangeif test "$nettle" = "yes" ; then
575391bfcdb0SDaniel P. Berrange  echo "CONFIG_NETTLE=y" >> $config_host_mak
5754becaeb72SRadim Krčmář  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5755a81df1b6SPaolo Bonzini  echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
5756a81df1b6SPaolo Bonzini  echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
5757ed754746SDaniel P. Berrangefi
5758e0576942SDaniel P. Berrangéif test "$qemu_private_xts" = "yes" ; then
5759e0576942SDaniel P. Berrangé  echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
5760e0576942SDaniel P. Berrangéfi
57619a2fd434SDaniel P. Berrangeif test "$tasn1" = "yes" ; then
57629a2fd434SDaniel P. Berrange  echo "CONFIG_TASN1=y" >> $config_host_mak
57639a2fd434SDaniel P. Berrangefi
57648953caf3SDaniel P. Berrangeif test "$auth_pam" = "yes" ; then
57658953caf3SDaniel P. Berrange    echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
57668953caf3SDaniel P. Berrangefi
57676b39b063SEric Blakeif test "$have_broken_size_max" = "yes" ; then
57686b39b063SEric Blake    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
57696b39b063SEric Blakefi
57709df8b20dSThomas Huthif test "$have_openpty" = "yes" ; then
57719df8b20dSThomas Huth    echo "HAVE_OPENPTY=y" >> $config_host_mak
57729df8b20dSThomas Huthfi
5773277abf15SJan Vesely
5774277abf15SJan Vesely# Work around a system header bug with some kernel/XFS header
5775277abf15SJan Vesely# versions where they both try to define 'struct fsxattr':
5776277abf15SJan Vesely# xfs headers will not try to redefine structs from linux headers
5777277abf15SJan Vesely# if this macro is set.
5778277abf15SJan Veselyif test "$have_fsxattr" = "yes" ; then
5779277abf15SJan Vesely    echo "HAVE_FSXATTR=y" >> $config_host_mak
5780277abf15SJan Veselyfi
57811efad060SFam Zhengif test "$have_copy_file_range" = "yes" ; then
57821efad060SFam Zheng    echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
57831efad060SFam Zhengfi
5784bbbf9bfbSStefan Weilif test "$vte" = "yes" ; then
5785bbbf9bfbSStefan Weil  echo "CONFIG_VTE=y" >> $config_host_mak
5786a4ccabcfSAnthony Liguori  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5787e0fb129cSGerd Hoffmann  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
5788a4ccabcfSAnthony Liguorifi
57899d9e1521SGerd Hoffmannif test "$virglrenderer" = "yes" ; then
57909d9e1521SGerd Hoffmann  echo "CONFIG_VIRGL=y" >> $config_host_mak
57919d9e1521SGerd Hoffmann  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
57929d9e1521SGerd Hoffmann  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
57939d9e1521SGerd Hoffmannfi
57941badb709SPaolo Bonziniif test "$xen" = "enabled" ; then
57956dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5796d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5797582ea95fSMarc-André Lureau  echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
5798582ea95fSMarc-André Lureau  echo "XEN_LIBS=$xen_libs" >> $config_host_mak
5799e37630caSaliguorifi
58005c6c3a6cSChristoph Hellwigif test "$linux_aio" = "yes" ; then
58015c6c3a6cSChristoph Hellwig  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
58025c6c3a6cSChristoph Hellwigfi
5803c10dd856SAarushi Mehtaif test "$linux_io_uring" = "yes" ; then
5804c10dd856SAarushi Mehta  echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
5805c10dd856SAarushi Mehta  echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
5806c10dd856SAarushi Mehta  echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
5807c10dd856SAarushi Mehtafi
58085e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
58095e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
58105e9be92dSNicholas Bellingerfi
5811af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then
5812af3bba76SPaolo Bonzini  echo "CONFIG_VHOST_NET=y" >> $config_host_mak
5813af3bba76SPaolo Bonzinifi
5814af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then
581556f41de7SPaolo Bonzini  echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
581603ce5744SNikolay Nikolaevfi
5817108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then
5818108a6481SCindy Lu  echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
5819108a6481SCindy Lufi
5820042cea27SGongleiif test "$vhost_crypto" = "yes" ; then
5821042cea27SGonglei  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
5822042cea27SGongleifi
5823fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then
5824fc0b9b0eSStefan Hajnoczi  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
58255fe97d88SStefano Garzarella  if test "$vhost_user" = "yes" ; then
58265fe97d88SStefano Garzarella    echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
58275fe97d88SStefano Garzarella  fi
5828fc0b9b0eSStefan Hajnoczifi
5829299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then
5830299e6f19SPaolo Bonzini  echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
5831299e6f19SPaolo Bonzinifi
5832e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then
5833e6a74868SMarc-André Lureau  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5834e6a74868SMarc-André Lureaufi
5835108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then
5836108a6481SCindy Lu  echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
5837108a6481SCindy Lufi
583898fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then
583998fc1adaSDr. David Alan Gilbert  echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
584098fc1adaSDr. David Alan Gilbertfi
5841bf9298b9Saliguoriif test "$iovec" = "yes" ; then
58422358a494SJuan Quintela  echo "CONFIG_IOVEC=y" >> $config_host_mak
5843bf9298b9Saliguorifi
5844a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then
5845a40161cbSPaolo Bonzini  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
5846a40161cbSPaolo Bonzinifi
5847dcc38d1cSMarcelo Tosattiif test "$signalfd" = "yes" ; then
5848dcc38d1cSMarcelo Tosatti  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5849dcc38d1cSMarcelo Tosattifi
5850d339d766SRichard W.M. Jonesif test "$optreset" = "yes" ; then
5851d339d766SRichard W.M. Jones  echo "HAVE_OPTRESET=y" >> $config_host_mak
5852d339d766SRichard W.M. Jonesfi
58535f6b9e8fSBlue Swirlif test "$fdatasync" = "yes" ; then
58545f6b9e8fSBlue Swirl  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
58555f6b9e8fSBlue Swirlfi
5856e78815a5SAndreas Färberif test "$madvise" = "yes" ; then
5857e78815a5SAndreas Färber  echo "CONFIG_MADVISE=y" >> $config_host_mak
5858e78815a5SAndreas Färberfi
5859e78815a5SAndreas Färberif test "$posix_madvise" = "yes" ; then
5860e78815a5SAndreas Färber  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5861e78815a5SAndreas Färberfi
58629bc5a719SAndreas Gustafssonif test "$posix_memalign" = "yes" ; then
58639bc5a719SAndreas Gustafsson  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
58649bc5a719SAndreas Gustafssonfi
586558d3f3ffSGerd Hoffmann
586658d3f3ffSGerd Hoffmannif test "$spice_protocol" = "yes" ; then
586758d3f3ffSGerd Hoffmann  echo "CONFIG_SPICE_PROTOCOL=y" >> $config_host_mak
586858d3f3ffSGerd Hoffmann  echo "SPICE_PROTOCOL_CFLAGS=$spice_protocol_cflags" >> $config_host_mak
586958d3f3ffSGerd Hoffmannfi
5870cd4ec0b4SGerd Hoffmannif test "$spice" = "yes" ; then
5871cd4ec0b4SGerd Hoffmann  echo "CONFIG_SPICE=y" >> $config_host_mak
587258d3f3ffSGerd Hoffmann  echo "SPICE_CFLAGS=$spice_cflags $spice_protocol_cflags" >> $config_host_mak
58732634733cSPaolo Bonzini  echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
5874cd4ec0b4SGerd Hoffmannfi
5875cd4ec0b4SGerd Hoffmann
58767b02f544SMarc-André Lureauif test "$smartcard" = "yes" ; then
58777b02f544SMarc-André Lureau  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
58787b62bf5aSFam Zheng  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
58797b62bf5aSFam Zheng  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
5880111a38b0SRobert Relyeafi
5881111a38b0SRobert Relyea
58822b2325ffSGerd Hoffmannif test "$libusb" = "yes" ; then
58832b2325ffSGerd Hoffmann  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5884b878b652SFam Zheng  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
5885b878b652SFam Zheng  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
58862b2325ffSGerd Hoffmannfi
58872b2325ffSGerd Hoffmann
588869354a83SHans de Goedeif test "$usb_redir" = "yes" ; then
588969354a83SHans de Goede  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5890cc7923fcSFam Zheng  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
5891cc7923fcSFam Zheng  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
589269354a83SHans de Goedefi
589369354a83SHans de Goede
5894da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
5895da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
5896de2d3005SPaolo Bonzini  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5897da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
589820ff075bSMichael Wallefi
589920ff075bSMichael Walle
5900d52c454aSMarc-André Lureauif test "$gbm" = "yes" ; then
5901d52c454aSMarc-André Lureau    echo "CONFIG_GBM=y" >> $config_host_mak
5902d52c454aSMarc-André Lureau    echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
5903d52c454aSMarc-André Lureau    echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
5904d52c454aSMarc-André Lureaufi
5905d52c454aSMarc-André Lureau
5906d52c454aSMarc-André Lureau
590799f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then
590899f2dbd3SLiang Li  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
590999f2dbd3SLiang Lifi
591099f2dbd3SLiang Li
59116b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then
59126b8cd447SRobert Hoo  echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
59136b8cd447SRobert Hoofi
59146b8cd447SRobert Hoo
591583fb7adfSbellard# XXX: suppress that
59167d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
59172358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
59187d3505c5Sbellardfi
59197d3505c5Sbellard
59203556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
59213556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
59223556c233SPaolo Bonzinifi
592320ff6c80SAnthony Liguori
59247c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
592570c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
592670c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
592770c60c08SStefan Hajnoczielse
592870c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
592970c60c08SStefan Hajnoczifi
5930d0e2fce5SAneesh Kumar K.V
59317d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then
59327d992e4dSPeter Lieven  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
59337d992e4dSPeter Lievenfi
59347d992e4dSPeter Lieven
5935f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then
5936f0d92b56SLongpeng(Mike)  echo "CONFIG_AF_ALG=y" >> $config_host_mak
5937f0d92b56SLongpeng(Mike)fi
5938f0d92b56SLongpeng(Mike)
5939d2042378SAneesh Kumar K.Vif test "$open_by_handle_at" = "yes" ; then
5940d2042378SAneesh Kumar K.V  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5941d2042378SAneesh Kumar K.Vfi
5942d2042378SAneesh Kumar K.V
5943e06a765eSHarsh Prateek Boraif test "$linux_magic_h" = "yes" ; then
5944e06a765eSHarsh Prateek Bora  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5945e06a765eSHarsh Prateek Borafi
5946e06a765eSHarsh Prateek Bora
59473f4349dcSKevin Wolfif test "$valgrind_h" = "yes" ; then
59483f4349dcSKevin Wolf  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
59493f4349dcSKevin Wolffi
59503f4349dcSKevin Wolf
5951d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
5952d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
5953d83414e1SMarc-André Lureaufi
5954d83414e1SMarc-André Lureau
59550aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
59560aebab04SLingfeng Yang    echo "CONFIG_TSAN=y" >> $config_host_mak
59570aebab04SLingfeng Yangfi
59580aebab04SLingfeng Yang
59598ab1bf12SLuiz Capitulinoif test "$has_environ" = "yes" ; then
59608ab1bf12SLuiz Capitulino  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
59618ab1bf12SLuiz Capitulinofi
59628ab1bf12SLuiz Capitulino
596376a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
596476a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
596576a347e1SRichard Hendersonfi
596676a347e1SRichard Henderson
5967f540166bSRichard Hendersonif test "$int128" = "yes" ; then
5968f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
5969f540166bSRichard Hendersonfi
5970f540166bSRichard Henderson
59717ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then
59727ebee43eSRichard Henderson  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
59737ebee43eSRichard Hendersonfi
59747ebee43eSRichard Henderson
5975e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then
5976e6cd4bb5SRichard Henderson  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
5977e6cd4bb5SRichard Hendersonfi
5978e6cd4bb5SRichard Henderson
5979df79b996SRichard Hendersonif test "$atomic64" = "yes" ; then
5980df79b996SRichard Henderson  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5981df79b996SRichard Hendersonfi
5982df79b996SRichard Henderson
59831e6e9acaSRichard Hendersonif test "$getauxval" = "yes" ; then
59841e6e9acaSRichard Henderson  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
59851e6e9acaSRichard Hendersonfi
59861e6e9acaSRichard Henderson
5987b10d49d7SPino Toscanoif test "$libssh" = "yes" ; then
5988484e2cc7SPaolo Bonzini  echo "CONFIG_LIBSSH=y" >> $config_host_mak
5989b10d49d7SPino Toscano  echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
5990b10d49d7SPino Toscano  echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
59910a12ec87SRichard W.M. Jonesfi
59920a12ec87SRichard W.M. Jones
5993ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then
5994ed1701c6SDr. David Alan Gilbert  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
5995ed1701c6SDr. David Alan Gilbertfi
5996ed1701c6SDr. David Alan Gilbert
59973b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
59983cae16dbSPaolo Bonzini  echo 'CONFIG_TPM=y' >> $config_host_mak
59993b8acc11SPaolo Bonzinifi
60003b8acc11SPaolo Bonzini
60015b808275SLluís Vilanovaecho "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
60025b808275SLluís Vilanovaif have_backend "nop"; then
60036d8a764eSLluís  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
600422890ab5SPrerna Saxenafi
60055b808275SLluís Vilanovaif have_backend "simple"; then
60066d8a764eSLluís  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
60076d8a764eSLluís  # Set the appropriate trace file.
6008953ffe0fSAndreas Färber  trace_file="\"$trace_file-\" FMT_pid"
60099410b56cSPrerna Saxenafi
6010ed7f5f1dSPaolo Bonziniif have_backend "log"; then
6011ed7f5f1dSPaolo Bonzini  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
60126d8a764eSLluísfi
60135b808275SLluís Vilanovaif have_backend "ust"; then
60146d8a764eSLluís  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6015a81df1b6SPaolo Bonzini  echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6016a81df1b6SPaolo Bonzini  echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
60176d8a764eSLluísfi
60185b808275SLluís Vilanovaif have_backend "dtrace"; then
60196d8a764eSLluís  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
60206d8a764eSLluís  if test "$trace_backend_stap" = "yes" ; then
60216d8a764eSLluís    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
60226d8a764eSLluís  fi
6023c276b17dSDaniel P. Berrangefi
60245b808275SLluís Vilanovaif have_backend "ftrace"; then
6025781e9545SEiichi Tsukata  if test "$linux" = "yes" ; then
6026781e9545SEiichi Tsukata    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6027781e9545SEiichi Tsukata  else
602821684af0SStewart Smith    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6029781e9545SEiichi Tsukata  fi
6030781e9545SEiichi Tsukatafi
60310a852417SPaul Durrantif have_backend "syslog"; then
60320a852417SPaul Durrant  if test "$posix_syslog" = "yes" ; then
60330a852417SPaul Durrant    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
60340a852417SPaul Durrant  else
60350a852417SPaul Durrant    feature_not_found "syslog(trace backend)" "syslog not available"
60360a852417SPaul Durrant  fi
60370a852417SPaul Durrantfi
60389410b56cSPrerna Saxenaecho "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
60399410b56cSPrerna Saxena
60402da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
60412da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
6042392fb643SFam Zheng  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
60432da776dbSMichael R. Hinesfi
60442da776dbSMichael R. Hines
604521ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then
604621ab34c9SMarcel Apfelbaum  echo "CONFIG_PVRDMA=y" >> $config_host_mak
604721ab34c9SMarcel Apfelbaumfi
604821ab34c9SMarcel Apfelbaum
6049575b22b1SLaurent Vivierif test "$have_rtnetlink" = "yes" ; then
6050575b22b1SLaurent Vivier  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6051575b22b1SLaurent Vivierfi
6052575b22b1SLaurent Vivier
6053ed279a06SKlim Kireevif test "$libxml2" = "yes" ; then
6054ed279a06SKlim Kireev  echo "CONFIG_LIBXML2=y" >> $config_host_mak
6055ed279a06SKlim Kireev  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6056ed279a06SKlim Kireev  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6057ed279a06SKlim Kireevfi
6058ed279a06SKlim Kireev
6059a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then
6060a6b1d4c0SChanglong Xie  echo "CONFIG_REPLICATION=y" >> $config_host_mak
6061a6b1d4c0SChanglong Xiefi
6062a6b1d4c0SChanglong Xie
60636a02c806SStefan Hajnocziif test "$have_af_vsock" = "yes" ; then
60646a02c806SStefan Hajnoczi  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
60656a02c806SStefan Hajnoczifi
60666a02c806SStefan Hajnoczi
60674d04351fSChristopher Covingtonif test "$have_sysmacros" = "yes" ; then
60684d04351fSChristopher Covington  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
60694d04351fSChristopher Covingtonfi
60704d04351fSChristopher Covington
607149e00a18SAndreas Grapentinif test "$have_static_assert" = "yes" ; then
607249e00a18SAndreas Grapentin  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
607349e00a18SAndreas Grapentinfi
607449e00a18SAndreas Grapentin
6075e674605fSTomáš Golembiovskýif test "$have_utmpx" = "yes" ; then
6076e674605fSTomáš Golembiovský  echo "HAVE_UTMPX=y" >> $config_host_mak
6077e674605fSTomáš Golembiovskýfi
6078db1ed1abSRichard Hendersonif test "$have_getrandom" = "yes" ; then
6079db1ed1abSRichard Henderson  echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6080db1ed1abSRichard Hendersonfi
6081e0580342SKamil Rytarowskiif test "$ivshmem" = "yes" ; then
6082e0580342SKamil Rytarowski  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6083e0580342SKamil Rytarowskifi
6084ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then
6085ba59fb77SPaolo Bonzini  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6086ba59fb77SPaolo Bonzinifi
6087e0580342SKamil Rytarowski
60885c312079SDr. David Alan Gilbert# Hold two types of flag:
60895c312079SDr. David Alan Gilbert#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
60905c312079SDr. David Alan Gilbert#                                     a thread we have a handle to
6091479a5747SRoman Bolshakov#   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
60925c312079SDr. David Alan Gilbert#                                     platform
6093479a5747SRoman Bolshakovif test "$pthread_setname_np_w_tid" = "yes" ; then
60945c312079SDr. David Alan Gilbert  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6095479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6096479a5747SRoman Bolshakovelif test "$pthread_setname_np_wo_tid" = "yes" ; then
6097479a5747SRoman Bolshakov  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6098479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
60995c312079SDr. David Alan Gilbertfi
61005c312079SDr. David Alan Gilbert
610117824406SJunyan Heif test "$libpmem" = "yes" ; then
610217824406SJunyan He  echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6103c9322ab5SMarc-André Lureau  echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6104c9322ab5SMarc-André Lureau  echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
610517824406SJunyan Hefi
610617824406SJunyan He
610721b2eca6SJingqi Liuif test "$libdaxctl" = "yes" ; then
610821b2eca6SJingqi Liu  echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6109c7c91a74SBruce Rogers  echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
611021b2eca6SJingqi Liufi
611121b2eca6SJingqi Liu
61122f740136SJeff Codyif test "$bochs" = "yes" ; then
61132f740136SJeff Cody  echo "CONFIG_BOCHS=y" >> $config_host_mak
61142f740136SJeff Codyfi
61152f740136SJeff Codyif test "$cloop" = "yes" ; then
61162f740136SJeff Cody  echo "CONFIG_CLOOP=y" >> $config_host_mak
61172f740136SJeff Codyfi
61182f740136SJeff Codyif test "$dmg" = "yes" ; then
61192f740136SJeff Cody  echo "CONFIG_DMG=y" >> $config_host_mak
61202f740136SJeff Codyfi
61212f740136SJeff Codyif test "$qcow1" = "yes" ; then
61222f740136SJeff Cody  echo "CONFIG_QCOW1=y" >> $config_host_mak
61232f740136SJeff Codyfi
61242f740136SJeff Codyif test "$vdi" = "yes" ; then
61252f740136SJeff Cody  echo "CONFIG_VDI=y" >> $config_host_mak
61262f740136SJeff Codyfi
61272f740136SJeff Codyif test "$vvfat" = "yes" ; then
61282f740136SJeff Cody  echo "CONFIG_VVFAT=y" >> $config_host_mak
61292f740136SJeff Codyfi
61302f740136SJeff Codyif test "$qed" = "yes" ; then
61312f740136SJeff Cody  echo "CONFIG_QED=y" >> $config_host_mak
61322f740136SJeff Codyfi
61332f740136SJeff Codyif test "$parallels" = "yes" ; then
61342f740136SJeff Cody  echo "CONFIG_PARALLELS=y" >> $config_host_mak
61352f740136SJeff Codyfi
6136195588ccSDavid CARLIERif test "$have_mlockall" = "yes" ; then
6137195588ccSDavid CARLIER  echo "HAVE_MLOCKALL=y" >> $config_host_mak
6138195588ccSDavid CARLIERfi
6139adc28027SAlexander Bulekovif test "$fuzzing" = "yes" ; then
614054c9e41dSAlexander Bulekov  # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
614154c9e41dSAlexander Bulekov  # needed CFLAGS have already been provided
614254c9e41dSAlexander Bulekov  if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6143efce01bcSAlexander Bulekov    # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
6144efce01bcSAlexander Bulekov    # compiled code.
6145086d5f75SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6146efce01bcSAlexander Bulekov    # To build non-fuzzer binaries with --enable-fuzzing, link everything with
6147efce01bcSAlexander Bulekov    # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind
6148efce01bcSAlexander Bulekov    # the fuzzer-related callbacks added by instrumentation.
6149efce01bcSAlexander Bulekov    QEMU_LDFLAGS="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link"
6150efce01bcSAlexander Bulekov    # For the actual fuzzer binaries, we need to link against the libfuzzer
6151efce01bcSAlexander Bulekov    # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson
6152efce01bcSAlexander Bulekov    # rule for the fuzzer adds these to the link_args. They need to be
6153efce01bcSAlexander Bulekov    # configurable, to support OSS-Fuzz
615454c9e41dSAlexander Bulekov    FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
615554c9e41dSAlexander Bulekov  else
615654c9e41dSAlexander Bulekov    FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
615754c9e41dSAlexander Bulekov  fi
6158adc28027SAlexander Bulekovfi
61592f740136SJeff Cody
616040e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
616140e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
616226fffe29SEmilio G. Cota    # Copy the export object list to the build dir
616326fffe29SEmilio G. Cota    if test "$ld_dynamic_list" = "yes" ; then
616426fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
616526fffe29SEmilio G. Cota	ld_symbols=qemu-plugins-ld.symbols
616626fffe29SEmilio G. Cota	cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
616726fffe29SEmilio G. Cota    elif test "$ld_exported_symbols_list" = "yes" ; then
616826fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
616926fffe29SEmilio G. Cota	ld64_symbols=qemu-plugins-ld64.symbols
617026fffe29SEmilio G. Cota	echo "# Automatically generated by configure - do not modify" > $ld64_symbols
617126fffe29SEmilio G. Cota	grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
617226fffe29SEmilio G. Cota	    sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
617326fffe29SEmilio G. Cota    else
617426fffe29SEmilio G. Cota	error_exit \
617526fffe29SEmilio G. Cota	    "If \$plugins=yes, either \$ld_dynamic_list or " \
617626fffe29SEmilio G. Cota	    "\$ld_exported_symbols_list should have been set to 'yes'."
617726fffe29SEmilio G. Cota    fi
617840e8c6f4SAlex Bennéefi
617940e8c6f4SAlex Bennée
6180f48e590aSAlex Bennéeif test -n "$gdb_bin"; then
6181b1863cccSAlex Bennée    gdb_version=$($gdb_bin --version | head -n 1)
6182d6a66c81SAlex Bennée    if version_ge ${gdb_version##* } 9.1; then
6183f48e590aSAlex Bennée        echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6184f48e590aSAlex Bennée    fi
6185b1863cccSAlex Bennéefi
6186f48e590aSAlex Bennée
618754e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then
618854e7aac0SAlexey Krasikov  echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
618954e7aac0SAlexey Krasikovfi
619054e7aac0SAlexey Krasikov
619198ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
6192804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
6193c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
619439d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
6195a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
619609e93326SPaolo Bonziniecho "NINJA=$ninja" >> $config_host_mak
6197804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
6198433de74cSBastian Koppelmannecho "HOST_CC=$host_cc" >> $config_host_mak
6199a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
6200859aef02SPaolo Bonzini  echo "CONFIG_IASL=$iasl" >> $config_host_mak
6201a31a8642SMichael S. Tsirkinfi
620283f73fceSTomoki Sekiyamaecho "CXX=$cxx" >> $config_host_mak
62033c4a4d0dSPeter Maydellecho "OBJCC=$objcc" >> $config_host_mak
6204804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
620545d285abSPeter Maydellecho "ARFLAGS=$ARFLAGS" >> $config_host_mak
6206cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak
62075f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak
62083dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
6209804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
6210804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
62119f81aeb5SAlistair Francisecho "RANLIB=$ranlib" >> $config_host_mak
62124852ee95SStefan Weilecho "NM=$nm" >> $config_host_mak
6213daa79d9aSAlex Bennéeecho "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
62149fe6de94SBlue Swirlecho "WINDRES=$windres" >> $config_host_mak
621546eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6216a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
621711cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6218a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6219a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak
62208a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6221e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6222804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
6223484e2cc7SPaolo Bonziniecho "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6224f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak
622590246037SDaniel P. Berrangeecho "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
622690246037SDaniel P. Berrangeecho "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
62271d728c39SBlue Swirlif test "$gcov" = "yes" ; then
62281d728c39SBlue Swirl  echo "CONFIG_GCOV=y" >> $config_host_mak
62291d728c39SBlue Swirlfi
6230804edf29SJuan Quintela
6231adc28027SAlexander Bulekovif test "$fuzzing" != "no"; then
6232adc28027SAlexander Bulekov    echo "CONFIG_FUZZ=y" >> $config_host_mak
6233adc28027SAlexander Bulekovfi
623454c9e41dSAlexander Bulekovecho "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
62353efac6ebSTomáš Golembiovský
6236b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then
6237b767d257SMarek Marczykowski-Górecki  echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6238b767d257SMarek Marczykowski-Góreckifi
6239b767d257SMarek Marczykowski-Górecki
62406efd7517SPeter Maydell# use included Linux headers
62416efd7517SPeter Maydellif test "$linux" = "yes" ; then
6242a307beb6SAndreas Färber  mkdir -p linux-headers
62436efd7517SPeter Maydell  case "$cpu" in
6244c72b26ecSRichard Henderson  i386|x86_64|x32)
624508312a63SPeter Maydell    linux_arch=x86
62466efd7517SPeter Maydell    ;;
6247f8378accSRichard Henderson  ppc|ppc64|ppc64le)
624808312a63SPeter Maydell    linux_arch=powerpc
62496efd7517SPeter Maydell    ;;
62506efd7517SPeter Maydell  s390x)
625108312a63SPeter Maydell    linux_arch=s390
625208312a63SPeter Maydell    ;;
62531f080313SClaudio Fontana  aarch64)
62541f080313SClaudio Fontana    linux_arch=arm64
62551f080313SClaudio Fontana    ;;
6256222e7d11SSanjay Lal  mips64)
6257222e7d11SSanjay Lal    linux_arch=mips
6258222e7d11SSanjay Lal    ;;
625908312a63SPeter Maydell  *)
626008312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
626108312a63SPeter Maydell    linux_arch="$cpu"
62626efd7517SPeter Maydell    ;;
62636efd7517SPeter Maydell  esac
626408312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
626508312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
626608312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
626708312a63SPeter Maydell    fi
62686efd7517SPeter Maydellfi
62696efd7517SPeter Maydell
627097a847bcSbellardfor target in $target_list; do
627197a847bcSbellard    target_dir="$target"
627289138857SStefan Weil    target_name=$(echo $target | cut -d '-' -f 1)
627397a847bcSbellard    mkdir -p $target_dir
6274fdb75aefSPaolo Bonzini    case $target in
6275fdb75aefSPaolo Bonzini        *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6276fdb75aefSPaolo Bonzini        *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
62772408a527Saurel32    esac
627856aebc89Spbrookdone
62797d13299dSbellard
6280765686d6SPaolo Bonziniecho "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
6281fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then
6282fdb75aefSPaolo Bonzini  echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6283fdb75aefSPaolo Bonzinifi
6284a540f158SPeter Crosthwaite
6285a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
6286a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
6287ab318051SMarc-André Lureau  echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6288a99d57bbSWanlong Gaofi
6289a99d57bbSWanlong Gao
6290fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
6291fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
6292fd0e6053SJohn Snowfi
6293fd0e6053SJohn Snow
62941e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
62951e4f6065SDaniele Buono  echo "CONFIG_SAFESTACK=y" >> $config_host_mak
62961e4f6065SDaniele Buonofi
62971e4f6065SDaniele Buono
6298e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now.
6299e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree;
6300e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree
6301e29e5c6eSPeter Maydell# (these can be both files and directories).
6302e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This
6303e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is
6304e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun
6305e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and
6306e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own
6307e29e5c6eSPeter Maydell# directory and symlink the directory instead.
630809db9b9dSGerd Hoffmann# UNLINK is used to remove symlinks from older development versions
630909db9b9dSGerd Hoffmann# that might get into the way when doing "git update" without doing
631009db9b9dSGerd Hoffmann# a "make distclean" in between.
63119d49bcf6SMarkus ArmbrusterDIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
63121cf4323eSThomas HuthDIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6313b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi"
6314744a928cSAlexey KardashevskiyDIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
63158db2a4fdSGerd HoffmannDIRS="$DIRS roms/seabios"
6316c17a386bSAlex BennéeDIRS="$DIRS contrib/plugins/"
63172038f8c8SPaolo BonziniLINKS="Makefile"
63183941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target"
6319ddcf607fSGerd HoffmannLINKS="$LINKS pc-bios/optionrom/Makefile"
6320e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile"
63218db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile"
6322e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp"
6323e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
632439950353SPeter MaydellLINKS="$LINKS tests/acceptance tests/data"
632539950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check"
63268f8fd9edSCleber RosaLINKS="$LINKS python"
6327c17a386bSAlex BennéeLINKS="$LINKS contrib/plugins/Makefile "
632809db9b9dSGerd HoffmannUNLINK="pc-bios/keymaps"
6329753d11f2SRichard Hendersonfor bios_file in \
6330753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
63313a631b8eSBin Meng    $source_path/pc-bios/*.elf \
6332225a9ab8SAlexey Kardashevskiy    $source_path/pc-bios/*.lid \
6333753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
6334753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
6335e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
6336753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
63374e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
633826ce90fdSLaszlo Ersek    $source_path/pc-bios/edk2-*.fd.bz2 \
6339753d11f2SRichard Henderson    $source_path/pc-bios/palcode-*
6340753d11f2SRichard Hendersondo
6341e29e5c6eSPeter Maydell    LINKS="$LINKS pc-bios/$(basename $bios_file)"
63427ea78b74SJan Kiszkadone
6343d1807a4fSPaolo Bonzinimkdir -p $DIRS
6344e29e5c6eSPeter Maydellfor f in $LINKS ; do
63450f4d8894SPaolo Bonzini    if [ -e "$source_path/$f" ]; then
6346f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
6347f9245e10SPeter Maydell    fi
63487d13299dSbellarddone
634909db9b9dSGerd Hoffmannfor f in $UNLINK ; do
635009db9b9dSGerd Hoffmann    if [ -L "$f" ]; then
635109db9b9dSGerd Hoffmann        rm -f "$f"
635209db9b9dSGerd Hoffmann    fi
635309db9b9dSGerd Hoffmanndone
63541ad2134fSPaul Brook
63552038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do
63562038f8c8SPaolo Bonzini  export $i
63572038f8c8SPaolo Bonzinidone
6358de6d7e6bSAlex Bennéeexport target_list source_path use_containers ARCH
63592038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh)
63602038f8c8SPaolo Bonzini
6361c34ebfdcSAnthony Liguori# temporary config to build submodules
63628db2a4fdSGerd Hoffmannfor rom in seabios; do
6363c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
636437116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
6365c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6366cdbd727cSRichard Henderson    echo "AS=$as" >> $config_mak
63675f6f0e27SRichard Henderson    echo "CCAS=$ccas" >> $config_mak
6368c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
6369c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
63703dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
6371c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
6372a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
6373c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
63749f81aeb5SAlistair Francis    echo "RANLIB=$ranlib" >> $config_mak
6375c34ebfdcSAnthony Liguoridone
6376c34ebfdcSAnthony Liguori
6377a5665051SPaolo Bonziniif test "$skip_meson" = no; then
6378fc929892SMarc-André Lureau  cross="config-meson.cross.new"
6379fc929892SMarc-André Lureau  meson_quote() {
638047b30835SPaolo Bonzini    echo "'$(echo $* | sed "s/ /','/g")'"
6381fc929892SMarc-André Lureau  }
6382fc929892SMarc-André Lureau
6383fc929892SMarc-André Lureau  echo "# Automatically generated by configure - do not modify" > $cross
6384fc929892SMarc-André Lureau  echo "[properties]" >> $cross
6385fc929892SMarc-André Lureau  test -z "$cxx" && echo "link_language = 'c'" >> $cross
638647b30835SPaolo Bonzini  echo "[built-in options]" >> $cross
638747b30835SPaolo Bonzini  echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
638847b30835SPaolo Bonzini  echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
638947b30835SPaolo Bonzini  echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
639047b30835SPaolo Bonzini  echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6391fc929892SMarc-André Lureau  echo "[binaries]" >> $cross
639247b30835SPaolo Bonzini  echo "c = [$(meson_quote $cc)]" >> $cross
639347b30835SPaolo Bonzini  test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
63940ca321eaSJoelle van Dyne  test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross
639547b30835SPaolo Bonzini  echo "ar = [$(meson_quote $ar)]" >> $cross
639647b30835SPaolo Bonzini  echo "nm = [$(meson_quote $nm)]" >> $cross
639747b30835SPaolo Bonzini  echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
639847b30835SPaolo Bonzini  echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
6399e8178514SPaolo Bonzini  if has $sdl2_config; then
640047b30835SPaolo Bonzini    echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6401e8178514SPaolo Bonzini  fi
640247b30835SPaolo Bonzini  echo "strip = [$(meson_quote $strip)]" >> $cross
640347b30835SPaolo Bonzini  echo "windres = [$(meson_quote $windres)]" >> $cross
64043812c0c4SJoelle van Dyne  if test "$cross_compile" = "yes"; then
6405fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
6406fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
6407fc929892SMarc-André Lureau    if test "$mingw32" = "yes" ; then
6408fc929892SMarc-André Lureau        echo "system = 'windows'" >> $cross
6409fc929892SMarc-André Lureau    fi
6410853b4bafSThomas Huth    if test "$linux" = "yes" ; then
6411853b4bafSThomas Huth        echo "system = 'linux'" >> $cross
6412853b4bafSThomas Huth    fi
64130ca321eaSJoelle van Dyne    if test "$darwin" = "yes" ; then
64140ca321eaSJoelle van Dyne        echo "system = 'darwin'" >> $cross
64150ca321eaSJoelle van Dyne    fi
6416fc929892SMarc-André Lureau    case "$ARCH" in
6417f6bca9dfSJoelle van Dyne        i386)
6418fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
6419fc929892SMarc-André Lureau            ;;
6420f6bca9dfSJoelle van Dyne        x86_64)
6421f6bca9dfSJoelle van Dyne            echo "cpu_family = 'x86_64'" >> $cross
6422f6bca9dfSJoelle van Dyne            ;;
6423fc929892SMarc-André Lureau        ppc64le)
6424fc929892SMarc-André Lureau            echo "cpu_family = 'ppc64'" >> $cross
6425fc929892SMarc-André Lureau            ;;
6426fc929892SMarc-André Lureau        *)
6427fc929892SMarc-André Lureau            echo "cpu_family = '$ARCH'" >> $cross
6428fc929892SMarc-André Lureau            ;;
6429fc929892SMarc-André Lureau    esac
6430fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
6431fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
6432fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
6433fc929892SMarc-André Lureau    else
6434fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
6435fc929892SMarc-André Lureau    fi
6436fc929892SMarc-André Lureau  else
6437fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
6438fc929892SMarc-André Lureau  fi
6439fc929892SMarc-André Lureau  mv $cross config-meson.cross
6440fc929892SMarc-André Lureau
6441a5665051SPaolo Bonzini  rm -rf meson-private meson-info meson-logs
6442a5cb7c5aSPaolo Bonzini  unset staticpic
6443a5cb7c5aSPaolo Bonzini  if ! version_ge "$($meson --version)" 0.56.0; then
6444a5cb7c5aSPaolo Bonzini    staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
6445a5cb7c5aSPaolo Bonzini  fi
644609e93326SPaolo Bonzini  NINJA=$ninja $meson setup \
6447d17f305aSPaolo Bonzini        --prefix "$prefix" \
6448d17f305aSPaolo Bonzini        --libdir "$libdir" \
6449d17f305aSPaolo Bonzini        --libexecdir "$libexecdir" \
6450d17f305aSPaolo Bonzini        --bindir "$bindir" \
6451d17f305aSPaolo Bonzini        --includedir "$includedir" \
6452d17f305aSPaolo Bonzini        --datadir "$datadir" \
6453d17f305aSPaolo Bonzini        --mandir "$mandir" \
6454d17f305aSPaolo Bonzini        --sysconfdir "$sysconfdir" \
645516bf7a33SPaolo Bonzini        --localedir "$localedir" \
6456d17f305aSPaolo Bonzini        --localstatedir "$local_statedir" \
6457d17f305aSPaolo Bonzini        -Ddocdir="$docdir" \
645816bf7a33SPaolo Bonzini        -Dqemu_firmwarepath="$firmwarepath" \
645973f3aa37SMarc-André Lureau        -Dqemu_suffix="$qemu_suffix" \
6460a5665051SPaolo Bonzini        -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
6461a5665051SPaolo Bonzini        -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
6462a5665051SPaolo Bonzini        -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
6463a5665051SPaolo Bonzini        -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
6464da6d48b9SMarc-André Lureau        -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
6465a5cb7c5aSPaolo Bonzini        ${staticpic:+-Db_staticpic=$staticpic} \
6466bf0e56a3SMarc-André Lureau        -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
64679e62ba48SDaniele Buono        -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \
6468deb62371SPaolo Bonzini        -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
646974a414a1SReinoud Zandijk        -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
64701badb709SPaolo Bonzini        -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
64711b695471SPaolo Bonzini        -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
6472a0b93237SPaolo Bonzini        -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
6473cece116cSMisono Tomohiro        -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
64748c6d4ff4SPaolo Bonzini        -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
64759db405a3SPaolo Bonzini        -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
647630045c05SPaolo Bonzini        -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
6477ecea3696SPaolo Bonzini        -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse \
6478727c8bb8SPaolo Bonzini        -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
64797bc3ca7fSPaolo Bonzini        -Dattr=$attr -Ddefault_devices=$default_devices \
6480c8d5450bSPaolo Bonzini        -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
6481106ad1f9SPaolo Bonzini        -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
6482b846ab7cSPaolo Bonzini        -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi \
6483c87ea116SAlex Bennée        $(if test "$default_features" = no; then echo "-Dauto_features=disabled"; fi) \
6484c6fbea47SRichard Henderson	-Dtcg_interpreter=$tcg_interpreter \
6485fc929892SMarc-André Lureau        $cross_arg \
6486a5665051SPaolo Bonzini        "$PWD" "$source_path"
6487a5665051SPaolo Bonzini
6488a5665051SPaolo Bonzini  if test "$?" -ne 0 ; then
6489a5665051SPaolo Bonzini      error_exit "meson setup failed"
6490a5665051SPaolo Bonzini  fi
6491699d3884SPaolo Bonzinielse
6492699d3884SPaolo Bonzini  if test -f meson-private/cmd_line.txt; then
6493699d3884SPaolo Bonzini    # Adjust old command line options whose type was changed
6494699d3884SPaolo Bonzini    # Avoids having to use "setup --wipe" when Meson is upgraded
6495699d3884SPaolo Bonzini    perl -i -ne '
6496699d3884SPaolo Bonzini      s/^gettext = true$/gettext = auto/;
6497699d3884SPaolo Bonzini      s/^gettext = false$/gettext = disabled/;
6498699d3884SPaolo Bonzini      print;' meson-private/cmd_line.txt
6499699d3884SPaolo Bonzini  fi
6500a5665051SPaolo Bonzinifi
6501a5665051SPaolo Bonzini
65022d838d9bSAlex Bennéeif test -n "${deprecated_features}"; then
65032d838d9bSAlex Bennée    echo "Warning, deprecated features enabled."
65042d838d9bSAlex Bennée    echo "Please see docs/system/deprecated.rst"
65052d838d9bSAlex Bennée    echo "  features: ${deprecated_features}"
65062d838d9bSAlex Bennéefi
65072d838d9bSAlex Bennée
6508e0447a83SThomas Huth# Create list of config switches that should be poisoned in common code...
6509e0447a83SThomas Huth# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
6510e0447a83SThomas Huthsed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
6511e0447a83SThomas Huth    -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
6512e0447a83SThomas Huth    *-config-devices.h *-config-target.h | \
6513e0447a83SThomas Huth    sort -u > config-poison.h
6514e0447a83SThomas Huth
6515dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
6516dc655404SMichael S. Tsirkincat <<EOD >config.status
6517dc655404SMichael S. Tsirkin#!/bin/sh
6518dc655404SMichael S. Tsirkin# Generated by configure.
6519dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
6520dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
6521dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
6522dc655404SMichael S. TsirkinEOD
6523e811da7fSDaniel P. Berrangé
6524e811da7fSDaniel P. Berrangépreserve_env() {
6525e811da7fSDaniel P. Berrangé    envname=$1
6526e811da7fSDaniel P. Berrangé
6527e811da7fSDaniel P. Berrangé    eval envval=\$$envname
6528e811da7fSDaniel P. Berrangé
6529e811da7fSDaniel P. Berrangé    if test -n "$envval"
6530e811da7fSDaniel P. Berrangé    then
6531e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
6532e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
6533e811da7fSDaniel P. Berrangé    else
6534e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
6535e811da7fSDaniel P. Berrangé    fi
6536e811da7fSDaniel P. Berrangé}
6537e811da7fSDaniel P. Berrangé
6538e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
6539e811da7fSDaniel P. Berrangé# features/build target configure will detect
6540e811da7fSDaniel P. Berrangépreserve_env AR
6541e811da7fSDaniel P. Berrangépreserve_env AS
6542e811da7fSDaniel P. Berrangépreserve_env CC
6543e811da7fSDaniel P. Berrangépreserve_env CPP
6544e811da7fSDaniel P. Berrangépreserve_env CXX
6545e811da7fSDaniel P. Berrangépreserve_env INSTALL
6546e811da7fSDaniel P. Berrangépreserve_env LD
6547e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
6548e811da7fSDaniel P. Berrangépreserve_env LIBTOOL
6549e811da7fSDaniel P. Berrangépreserve_env MAKE
6550e811da7fSDaniel P. Berrangépreserve_env NM
6551e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
6552e811da7fSDaniel P. Berrangépreserve_env PATH
6553e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
6554e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
6555e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
6556e811da7fSDaniel P. Berrangépreserve_env PYTHON
6557e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
6558e811da7fSDaniel P. Berrangépreserve_env SMBD
6559e811da7fSDaniel P. Berrangépreserve_env STRIP
6560e811da7fSDaniel P. Berrangépreserve_env WINDRES
6561e811da7fSDaniel P. Berrangé
6562dc655404SMichael S. Tsirkinprintf "exec" >>config.status
6563a5665051SPaolo Bonzinifor i in "$0" "$@"; do
6564835af899SPaolo Bonzini  test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
6565a5665051SPaolo Bonzinidone
6566cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
6567dc655404SMichael S. Tsirkinchmod +x config.status
6568dc655404SMichael S. Tsirkin
65698cd05ab6SPeter Maydellrm -r "$TMPDIR1"
6570