xref: /openbmc/qemu/configure (revision 5dce7b8d)
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() {
1454dba2789SPaolo Bonzini    do_compiler "$cc" $CPU_CFLAGS "$@"
1469c83ffd8SPeter Maydell}
1479c83ffd8SPeter Maydell
1489c83ffd8SPeter Maydelldo_cxx() {
1494dba2789SPaolo Bonzini    do_compiler "$cxx" $CPU_CFLAGS "$@"
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.
161de38c0ccSPaolo Bonzini    QEMU_CXXFLAGS="-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
1628a9d3d56SRichard Henderson    CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-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"
177a2866660SPaolo Bonzini  do_cc $CFLAGS $EXTRA_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"
183a2866660SPaolo Bonzini  do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
184a2866660SPaolo Bonzini      $LDFLAGS $EXTRA_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
2193b6b7550SPaolo Bonziniglob() {
2203b6b7550SPaolo Bonzini    eval test -z '"${1#'"$2"'}"'
2213b6b7550SPaolo Bonzini}
2223b6b7550SPaolo Bonzini
223e9a3591fSChristian Borntraegerld_has() {
224e9a3591fSChristian Borntraeger    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
225e9a3591fSChristian Borntraeger}
226e9a3591fSChristian Borntraeger
2274ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
2284ace32e2SAntonio Ospitethen
2294ace32e2SAntonio Ospite  error_exit "main directory cannot contain spaces nor colons"
2304ace32e2SAntonio Ospitefi
2314ace32e2SAntonio Ospite
23214211825SAntonio Ospite# default parameters
2332ff6b91eSJuan Quintelacpu=""
234a31a8642SMichael S. Tsirkiniasl="iasl"
2351e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M"
23643ce4dfeSbellardstatic="no"
2373812c0c4SJoelle van Dynecross_compile="no"
2387d13299dSbellardcross_prefix=""
23987430d5bSPaolo Bonziniaudio_drv_list="default"
240b64ec4e4SFam Zhengblock_drv_rw_whitelist=""
241b64ec4e4SFam Zhengblock_drv_ro_whitelist=""
242e5f05f8cSKevin Wolfblock_drv_whitelist_tools="no"
243e49d021eSPeter Maydellhost_cc="cc"
244957f1f99SMichael Rothlibs_qga=""
2455bc62e01SGerd Hoffmanndebug_info="yes"
246cdad781dSDaniele Buonolto="false"
24763678e17SSteven Noonanstack_protector=""
2481e4f6065SDaniele Buonosafe_stack=""
249afc3a8f9SAlex Bennéeuse_containers="yes"
250f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
251ac0df51dSaliguori
25292712822SDaniel P. Berrangeif test -e "$source_path/.git"
25392712822SDaniel P. Berrangethen
2547d7dbf9dSDan Streetman    git_submodules_action="update"
25592712822SDaniel P. Berrangeelse
2567d7dbf9dSDan Streetman    git_submodules_action="ignore"
25792712822SDaniel P. Berrangefi
2582d652f24SPaolo Bonzini
2592d652f24SPaolo Bonzinigit_submodules="ui/keycodemapdb"
260cc84d63aSDaniel P. Berrangegit="git"
261ac0df51dSaliguori
262afb63ebdSStefan Weil# Don't accept a target_list environment variable.
263afb63ebdSStefan Weilunset target_list
264447e133fSAlex Bennéeunset target_list_exclude
265377529c0SPaolo Bonzini
266377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
267377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
268377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
269377529c0SPaolo Bonzini#              unless --disable-foo is given
270377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
271377529c0SPaolo Bonzini#              feature will searched for,
272377529c0SPaolo Bonzini#              if not found, configure exits with error
273377529c0SPaolo Bonzini#
274377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
275377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
276377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
277377529c0SPaolo Bonzini
278c87ea116SAlex Bennéedefault_feature=""
279c87ea116SAlex Bennée# parse CC options second
280c87ea116SAlex Bennéefor opt do
281c87ea116SAlex Bennée  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
282c87ea116SAlex Bennée  case "$opt" in
283c87ea116SAlex Bennée      --without-default-features)
284c87ea116SAlex Bennée          default_feature="no"
285c87ea116SAlex Bennée  ;;
286c87ea116SAlex Bennée  esac
287c87ea116SAlex Bennéedone
288c87ea116SAlex Bennée
289a2866660SPaolo BonziniEXTRA_CFLAGS=""
290a2866660SPaolo BonziniEXTRA_CXXFLAGS=""
291a2866660SPaolo BonziniEXTRA_LDFLAGS=""
292a2866660SPaolo Bonzini
293c87ea116SAlex Bennéexen_ctrl_version="$default_feature"
294c87ea116SAlex Bennéexfs="$default_feature"
295c87ea116SAlex Bennéemembarrier="$default_feature"
2960848f8acSThomas Huthvhost_kernel="$default_feature"
297c87ea116SAlex Bennéevhost_net="$default_feature"
298c87ea116SAlex Bennéevhost_crypto="$default_feature"
299c87ea116SAlex Bennéevhost_scsi="$default_feature"
300c87ea116SAlex Bennéevhost_vsock="$default_feature"
301d88618f7SStefan Hajnoczivhost_user="no"
302c87ea116SAlex Bennéevhost_user_fs="$default_feature"
3030848f8acSThomas Huthvhost_vdpa="$default_feature"
304c87ea116SAlex Bennéerdma="$default_feature"
305c87ea116SAlex Bennéepvrdma="$default_feature"
306377529c0SPaolo Bonzinigprof="no"
307377529c0SPaolo Bonzinidebug_tcg="no"
308377529c0SPaolo Bonzinidebug="no"
309247724cbSMarc-André Lureausanitizers="no"
3100aebab04SLingfeng Yangtsan="no"
311c87ea116SAlex Bennéefortify_source="$default_feature"
312377529c0SPaolo Bonzinistrip_opt="yes"
313377529c0SPaolo Bonzinimingw32="no"
3141d728c39SBlue Swirlgcov="no"
315c7328271SMiroslav RezaninaEXESUF=""
31617969268SFam Zhengmodules="no"
317bd83c861SChristian Ehrhardtmodule_upgrades="no"
318377529c0SPaolo Bonziniprefix="/usr/local"
31910ff82d1SMarc-André Lureauqemu_suffix="qemu"
320377529c0SPaolo Bonzinibsd="no"
321377529c0SPaolo Bonzinilinux="no"
322377529c0SPaolo Bonzinisolaris="no"
323377529c0SPaolo Bonziniprofiler="no"
324377529c0SPaolo Bonzinisoftmmu="yes"
325377529c0SPaolo Bonzinilinux_user="no"
326377529c0SPaolo Bonzinibsd_user="no"
327377529c0SPaolo Bonzinipkgversion=""
32840d6444eSAvi Kivitypie=""
3293556c233SPaolo Bonziniqom_cast_debug="yes"
330baf86d6bSPaolo Bonzinitrace_backends="log"
331377529c0SPaolo Bonzinitrace_file="trace"
332c87ea116SAlex Bennéeopengl="$default_feature"
3335dd89908SRichard Hendersoncpuid_h="no"
334c87ea116SAlex Bennéeavx2_opt="$default_feature"
335c87ea116SAlex Bennéeguest_agent="$default_feature"
336d9840e25STomoki Sekiyamaguest_agent_with_vss="no"
33750cbebb9SMichael Rothguest_agent_ntddscsi="no"
338c87ea116SAlex Bennéevss_win32_sdk="$default_feature"
339d9840e25STomoki Sekiyamawin_sdk="no"
340c87ea116SAlex Bennéewant_tools="$default_feature"
341519175a2SAlex Barcelocoroutine=""
342c87ea116SAlex Bennéecoroutine_pool="$default_feature"
3437d992e4dSPeter Lievendebug_stack_usage="no"
344f0d92b56SLongpeng(Mike)crypto_afalg="no"
345a1c5e949SDaniel P. Berrangetls_priority="NORMAL"
346c87ea116SAlex Bennéetpm="$default_feature"
347c87ea116SAlex Bennéelive_block_migration=${default_feature:-yes}
348c87ea116SAlex Bennéenuma="$default_feature"
349c87ea116SAlex Bennéereplication=${default_feature:-yes}
350c87ea116SAlex Bennéebochs=${default_feature:-yes}
351c87ea116SAlex Bennéecloop=${default_feature:-yes}
352c87ea116SAlex Bennéedmg=${default_feature:-yes}
353c87ea116SAlex Bennéeqcow1=${default_feature:-yes}
354c87ea116SAlex Bennéevdi=${default_feature:-yes}
355c87ea116SAlex Bennéevvfat=${default_feature:-yes}
356c87ea116SAlex Bennéeqed=${default_feature:-yes}
357c87ea116SAlex Bennéeparallels=${default_feature:-yes}
358ba59fb77SPaolo Bonzinidebug_mutex="no"
359ba4dd2aaSAlex Bennéeplugins="$default_feature"
360b767d257SMarek Marczykowski-Góreckirng_none="no"
361c87ea116SAlex Bennéesecret_keyring="$default_feature"
362a5665051SPaolo Bonzinimeson=""
3633b4da132SPaolo Bonzinimeson_args=""
36448328880SPaolo Bonzinininja=""
3653b4da132SPaolo Bonzinigio="$default_feature"
366a5665051SPaolo Bonziniskip_meson=no
367b8e0c493SJoelle van Dyneslirp_smbd="$default_feature"
368377529c0SPaolo Bonzini
3693b4da132SPaolo Bonzini# The following Meson options are handled manually (still they
3703b4da132SPaolo Bonzini# are included in the automatically generated help message)
3713b4da132SPaolo Bonzini
3723b4da132SPaolo Bonzini# 1. Track which submodules are needed
3733b4da132SPaolo Bonzinicapstone="auto"
3743b4da132SPaolo Bonzinifdt="auto"
3753b4da132SPaolo Bonzinislirp="auto"
3763b4da132SPaolo Bonzini
3773b4da132SPaolo Bonzini# 2. Support --with/--without option
3783b4da132SPaolo Bonzinidefault_devices="true"
3793b4da132SPaolo Bonzini
3803b4da132SPaolo Bonzini# 3. Automatically enable/disable other options
3813b4da132SPaolo Bonzinitcg="enabled"
3823b4da132SPaolo Bonzinicfi="false"
3833b4da132SPaolo Bonzini
3843b4da132SPaolo Bonzini# 4. Detection partly done in configure
3853b4da132SPaolo Bonzinixen=${default_feature:+disabled}
386898be3e0SPeter Maydell
387c87ea116SAlex Bennée# parse CC options second
388ac0df51dSaliguorifor opt do
38989138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
390ac0df51dSaliguori  case "$opt" in
391ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
3923812c0c4SJoelle van Dyne                    cross_compile="yes"
393ac0df51dSaliguori  ;;
3943d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
395ac0df51dSaliguori  ;;
39683f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
39783f73fceSTomoki Sekiyama  ;;
3982ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
3992ff6b91eSJuan Quintela  ;;
400a2866660SPaolo Bonzini  --extra-cflags=*)
401a2866660SPaolo Bonzini    EXTRA_CFLAGS="$EXTRA_CFLAGS $optarg"
402a2866660SPaolo Bonzini    EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
403e2a2ed06SJuan Quintela    ;;
404a2866660SPaolo Bonzini  --extra-cxxflags=*) EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
40511cde1c8SBruno Dominguez  ;;
406a2866660SPaolo Bonzini  --extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg"
407e2a2ed06SJuan Quintela  ;;
4085bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
4095bc62e01SGerd Hoffmann  ;;
4105bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
4115bc62e01SGerd Hoffmann  ;;
412d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
413d75402b5SAlex Bennée  ;;
414d422b2bcSAlex Bennée  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
415d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
4162038f8c8SPaolo Bonzini                      cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
417d422b2bcSAlex Bennée  ;;
418d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
4192038f8c8SPaolo Bonzini                cc_archs="$cc_archs $cc_arch"
420d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
4212038f8c8SPaolo Bonzini                cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
422d75402b5SAlex Bennée  ;;
423ac0df51dSaliguori  esac
424ac0df51dSaliguoridone
425ac0df51dSaliguori# OS specific
426ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
42793148aa5SStefan Weil# we can eliminate its usage altogether.
428ac0df51dSaliguori
429e49d021eSPeter Maydell# Preferred compiler:
430e49d021eSPeter Maydell#  ${CC} (if set)
431e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
432e49d021eSPeter Maydell#  system compiler
433e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
434e49d021eSPeter Maydell  cc="$host_cc"
435e49d021eSPeter Maydellelse
436b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
437e49d021eSPeter Maydellfi
438e49d021eSPeter Maydell
43983f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
44083f73fceSTomoki Sekiyama  cxx="c++"
44183f73fceSTomoki Sekiyamaelse
44283f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
44383f73fceSTomoki Sekiyamafi
44483f73fceSTomoki Sekiyama
445b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
446cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
4475f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
4483dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
449b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
450b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
4519f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
4524852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
453b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
454b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
45517884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
45617884d7bSSergei Trofimovichquery_pkg_config() {
45717884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
45817884d7bSSergei Trofimovich}
45917884d7bSSergei Trofimovichpkg_config=query_pkg_config
46047c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
461ac0df51dSaliguori
462be17dc90SMichael S. Tsirkin# default flags for all hosts
4632d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
4642d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
4652d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
4662d31515bSPeter Maydell# provides these semantics.)
467de38c0ccSPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv"
468086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
469c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
470be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
4715770e8afSPaolo Bonzini
472de38c0ccSPaolo BonziniQEMU_LDFLAGS=
473de38c0ccSPaolo Bonzini
4745770e8afSPaolo Bonzini# Flags that are needed during configure but later taken care of by Meson
4758a9d3d56SRichard HendersonCONFIGURE_CFLAGS="-std=gnu11 -Wall"
4765770e8afSPaolo BonziniCONFIGURE_LDFLAGS=
477086d5f75SPaolo Bonzini
478be17dc90SMichael S. Tsirkin
479ac0df51dSaliguoricheck_define() {
480ac0df51dSaliguoricat > $TMPC <<EOF
481ac0df51dSaliguori#if !defined($1)
482fd786e1aSPeter Maydell#error $1 not defined
483ac0df51dSaliguori#endif
484ac0df51dSaliguoriint main(void) { return 0; }
485ac0df51dSaliguoriEOF
48652166aa0SJuan Quintela  compile_object
487ac0df51dSaliguori}
488ac0df51dSaliguori
489307119e7SGerd Hoffmanncheck_include() {
490307119e7SGerd Hoffmanncat > $TMPC <<EOF
491307119e7SGerd Hoffmann#include <$1>
492307119e7SGerd Hoffmannint main(void) { return 0; }
493307119e7SGerd HoffmannEOF
494307119e7SGerd Hoffmann  compile_object
495307119e7SGerd Hoffmann}
496307119e7SGerd Hoffmann
49793b25869SJohn Snowwrite_c_skeleton() {
49893b25869SJohn Snow    cat > $TMPC <<EOF
49993b25869SJohn Snowint main(void) { return 0; }
50093b25869SJohn SnowEOF
50193b25869SJohn Snow}
50293b25869SJohn Snow
503bbea4050SPeter Maydellif check_define __linux__ ; then
504ba7c60c2SPaolo Bonzini  targetos=linux
505bbea4050SPeter Maydellelif check_define _WIN32 ; then
506ba7c60c2SPaolo Bonzini  targetos=windows
507bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
508ba7c60c2SPaolo Bonzini  targetos=openbsd
509bbea4050SPeter Maydellelif check_define __sun__ ; then
510ba7c60c2SPaolo Bonzini  targetos=sunos
511bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
512ba7c60c2SPaolo Bonzini  targetos=haiku
513951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
514ba7c60c2SPaolo Bonzini  targetos=freebsd
515951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
516ba7c60c2SPaolo Bonzini  targetos=gnu/kfreebsd
517951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
518ba7c60c2SPaolo Bonzini  targetos=dragonfly
519951fedfcSPeter Maydellelif check_define __NetBSD__; then
520ba7c60c2SPaolo Bonzini  targetos=netbsd
521951fedfcSPeter Maydellelif check_define __APPLE__; then
522ba7c60c2SPaolo Bonzini  targetos=darwin
523bbea4050SPeter Maydellelse
524951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
525951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
526951fedfcSPeter Maydell  # be the result of a missing compiler.
527ba7c60c2SPaolo Bonzini  targetos=bogus
528bbea4050SPeter Maydellfi
529bbea4050SPeter Maydell
53065eff01bSPaolo Bonzini# OS specific
53165eff01bSPaolo Bonzini
53265eff01bSPaolo Bonzinicase $targetos in
53365eff01bSPaolo Bonziniwindows)
53465eff01bSPaolo Bonzini  mingw32="yes"
53565eff01bSPaolo Bonzini  plugins="no"
53665eff01bSPaolo Bonzini  pie="no"
53765eff01bSPaolo Bonzini;;
53865eff01bSPaolo Bonzinignu/kfreebsd)
53965eff01bSPaolo Bonzini  bsd="yes"
54065eff01bSPaolo Bonzini;;
54165eff01bSPaolo Bonzinifreebsd)
54265eff01bSPaolo Bonzini  bsd="yes"
54365eff01bSPaolo Bonzini  bsd_user="yes"
54465eff01bSPaolo Bonzini  make="${MAKE-gmake}"
54565eff01bSPaolo Bonzini  # needed for kinfo_getvmmap(3) in libutil.h
54665eff01bSPaolo Bonzini;;
54765eff01bSPaolo Bonzinidragonfly)
54865eff01bSPaolo Bonzini  bsd="yes"
54965eff01bSPaolo Bonzini  make="${MAKE-gmake}"
55065eff01bSPaolo Bonzini;;
55165eff01bSPaolo Bonzininetbsd)
55265eff01bSPaolo Bonzini  bsd="yes"
55365eff01bSPaolo Bonzini  make="${MAKE-gmake}"
55465eff01bSPaolo Bonzini;;
55565eff01bSPaolo Bonziniopenbsd)
55665eff01bSPaolo Bonzini  bsd="yes"
55765eff01bSPaolo Bonzini  make="${MAKE-gmake}"
55865eff01bSPaolo Bonzini;;
55965eff01bSPaolo Bonzinidarwin)
56065eff01bSPaolo Bonzini  bsd="yes"
56165eff01bSPaolo Bonzini  darwin="yes"
56265eff01bSPaolo Bonzini  # Disable attempts to use ObjectiveC features in os/object.h since they
56365eff01bSPaolo Bonzini  # won't work when we're compiling with gcc as a C compiler.
56465eff01bSPaolo Bonzini  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
56565eff01bSPaolo Bonzini;;
56665eff01bSPaolo Bonzinisunos)
56765eff01bSPaolo Bonzini  solaris="yes"
56865eff01bSPaolo Bonzini  make="${MAKE-gmake}"
56965eff01bSPaolo Bonzini  smbd="${SMBD-/usr/sfw/sbin/smbd}"
57065eff01bSPaolo Bonzini# needed for CMSG_ macros in sys/socket.h
57165eff01bSPaolo Bonzini  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
57265eff01bSPaolo Bonzini# needed for TIOCWIN* defines in termios.h
57365eff01bSPaolo Bonzini  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
57465eff01bSPaolo Bonzini  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
57565eff01bSPaolo Bonzini  # Note that this check is broken for cross-compilation: if you're
576bbea4050SPeter Maydell  # cross-compiling to one of these OSes then you'll need to specify
577bbea4050SPeter Maydell  # the correct CPU with the --cpu option.
578bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
579bbea4050SPeter Maydell    cpu="x86_64"
580bbea4050SPeter Maydell  fi
58165eff01bSPaolo Bonzini;;
58265eff01bSPaolo Bonzinihaiku)
58365eff01bSPaolo Bonzini  pie="no"
58465eff01bSPaolo Bonzini  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
58565eff01bSPaolo Bonzini;;
58665eff01bSPaolo Bonzinilinux)
58765eff01bSPaolo Bonzini  linux="yes"
58865eff01bSPaolo Bonzini  linux_user="yes"
58965eff01bSPaolo Bonzini  vhost_user=${default_feature:-yes}
59065eff01bSPaolo Bonzini;;
591bbea4050SPeter Maydellesac
592bbea4050SPeter Maydell
5932ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
5942ff6b91eSJuan Quintela  # command line argument
5952ff6b91eSJuan Quintela  :
5962ff6b91eSJuan Quintelaelif check_define __i386__ ; then
597ac0df51dSaliguori  cpu="i386"
598ac0df51dSaliguorielif check_define __x86_64__ ; then
599c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
600c72b26ecSRichard Henderson    cpu="x32"
601c72b26ecSRichard Henderson  else
602ac0df51dSaliguori    cpu="x86_64"
603c72b26ecSRichard Henderson  fi
6043aa9bd6cSblueswir1elif check_define __sparc__ ; then
6053aa9bd6cSblueswir1  if check_define __arch64__ ; then
6063aa9bd6cSblueswir1    cpu="sparc64"
6073aa9bd6cSblueswir1  else
6083aa9bd6cSblueswir1    cpu="sparc"
6093aa9bd6cSblueswir1  fi
610fdf7ed96Smalcelif check_define _ARCH_PPC ; then
611fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
612f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
613f8378accSRichard Henderson      cpu="ppc64le"
614f8378accSRichard Henderson    else
615fdf7ed96Smalc      cpu="ppc64"
616f8378accSRichard Henderson    fi
617ac0df51dSaliguori  else
618fdf7ed96Smalc    cpu="ppc"
619fdf7ed96Smalc  fi
620afa05235SAurelien Jarnoelif check_define __mips__ ; then
621afa05235SAurelien Jarno  cpu="mips"
622d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
623d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
624d66ed0eaSAurelien Jarno    cpu="s390x"
625d66ed0eaSAurelien Jarno  else
626d66ed0eaSAurelien Jarno    cpu="s390"
627d66ed0eaSAurelien Jarno  fi
628c4f80543SAlistair Franciselif check_define __riscv ; then
629ba0e7333SRichard Henderson  cpu="riscv"
63021d89f84SPeter Maydellelif check_define __arm__ ; then
63121d89f84SPeter Maydell  cpu="arm"
6321f080313SClaudio Fontanaelif check_define __aarch64__ ; then
6331f080313SClaudio Fontana  cpu="aarch64"
634fdf7ed96Smalcelse
63589138857SStefan Weil  cpu=$(uname -m)
636ac0df51dSaliguorifi
637ac0df51dSaliguori
638823eb013SPaolo Bonzini# Normalise host CPU name, set multilib cflags
639359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
6407d13299dSbellardcase "$cpu" in
641e4da0e39SPaolo Bonzini  armv*b|armv*l|arm)
642e4da0e39SPaolo Bonzini    cpu="arm" ;;
643e4da0e39SPaolo Bonzini
6447d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
64597a847bcSbellard    cpu="i386"
646e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m32" ;;
647e4da0e39SPaolo Bonzini  x32)
6484da270beSPaolo Bonzini    cpu="x86_64"
649e4da0e39SPaolo Bonzini    CPU_CFLAGS="-mx32" ;;
650aaa5fa14Saurel32  x86_64|amd64)
651aaa5fa14Saurel32    cpu="x86_64"
652e4da0e39SPaolo Bonzini    # ??? Only extremely old AMD cpus do not have cmpxchg16b.
653e4da0e39SPaolo Bonzini    # If we truly care, we should simply detect this case at
654e4da0e39SPaolo Bonzini    # runtime and generate the fallback to serial emulation.
655e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m64 -mcx16" ;;
656e4da0e39SPaolo Bonzini
657afa05235SAurelien Jarno  mips*)
658e4da0e39SPaolo Bonzini    cpu="mips" ;;
659e4da0e39SPaolo Bonzini
660e4da0e39SPaolo Bonzini  ppc)
661e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m32" ;;
662e4da0e39SPaolo Bonzini  ppc64)
663d8ff892dSPaolo Bonzini    CPU_CFLAGS="-m64 -mbig" ;;
664e4da0e39SPaolo Bonzini  ppc64le)
665d8ff892dSPaolo Bonzini    cpu="ppc64"
666d8ff892dSPaolo Bonzini    CPU_CFLAGS="-m64 -mlittle" ;;
667e4da0e39SPaolo Bonzini
668e4da0e39SPaolo Bonzini  s390)
669823eb013SPaolo Bonzini    CPU_CFLAGS="-m31" ;;
670e4da0e39SPaolo Bonzini  s390x)
671e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m64" ;;
672e4da0e39SPaolo Bonzini
6733142255cSblueswir1  sparc|sun4[cdmuv])
674ae228531Sbellard    cpu="sparc"
675e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" ;;
676e4da0e39SPaolo Bonzini  sparc64)
677e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;;
6787d13299dSbellardesac
679e2d52ad3SJuan Quintela
6800db4a067SPaolo Bonzini: ${make=${MAKE-make}}
681b6daf4d3SPaolo Bonzini
682faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally
683faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so
684ddf90699SEduardo Habkost# we check that too
685faf44142SDaniel P. Berrangépython=
6860a01d76fSMarc-André Lureauexplicit_python=no
687ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python
688faf44142SDaniel P. Berrangédo
689faf44142SDaniel P. Berrangé    if has "$binary"
690faf44142SDaniel P. Berrangé    then
69195c5f2deSPaolo Bonzini        python=$(command -v "$binary")
692faf44142SDaniel P. Berrangé        break
693faf44142SDaniel P. Berrangé    fi
694faf44142SDaniel P. Berrangédone
695903458c8SMarkus Armbruster
696903458c8SMarkus Armbruster
69739d87c8cSAlex Bennée# Check for ancillary tools used in testing
69839d87c8cSAlex Bennéegenisoimage=
6993df437c7SAlex Bennéefor binary in genisoimage mkisofs
70039d87c8cSAlex Bennéedo
70139d87c8cSAlex Bennée    if has $binary
70239d87c8cSAlex Bennée    then
70339d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
70439d87c8cSAlex Bennée        break
70539d87c8cSAlex Bennée    fi
70639d87c8cSAlex Bennéedone
70739d87c8cSAlex Bennée
7083c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
7093c4a4d0dSPeter Maydellif has clang; then
7103c4a4d0dSPeter Maydell  objcc=clang
7113c4a4d0dSPeter Maydellelse
7123c4a4d0dSPeter Maydell  objcc="$cc"
7133c4a4d0dSPeter Maydellfi
7143c4a4d0dSPeter Maydell
7153457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
7163457a3f8SJuan Quintela  EXESUF=".exe"
71778e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
7185770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
71993b25869SJohn Snow  write_c_skeleton;
720d17f305aSPaolo Bonzini  prefix="/qemu"
72177433a5fSMarc-André Lureau  qemu_suffix=""
722105fad6bSBishara AbuHattoum  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
7233457a3f8SJuan Quintelafi
7243457a3f8SJuan Quintela
725487fefdbSAnthony Liguoriwerror=""
72685aa5189Sbellard
72761d63097SPaolo Bonzini. $source_path/scripts/meson-buildoptions.sh
72861d63097SPaolo Bonzini
72961d63097SPaolo Bonzinimeson_options=
73061d63097SPaolo Bonzinimeson_option_parse() {
73161d63097SPaolo Bonzini  meson_options="$meson_options $(_meson_option_parse "$@")"
73261d63097SPaolo Bonzini  if test $? -eq 1; then
73361d63097SPaolo Bonzini    echo "ERROR: unknown option $1"
73461d63097SPaolo Bonzini    echo "Try '$0 --help' for more information"
73561d63097SPaolo Bonzini    exit 1
73661d63097SPaolo Bonzini  fi
73761d63097SPaolo Bonzini}
73861d63097SPaolo Bonzini
7397d13299dSbellardfor opt do
74089138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
7417d13299dSbellard  case "$opt" in
7422efc3265Sbellard  --help|-h) show_help=yes
7432efc3265Sbellard  ;;
74499123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
74599123e13SMike Frysinger  ;;
746b1a550a0Spbrook  --prefix=*) prefix="$optarg"
7477d13299dSbellard  ;;
748b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
74932ce6337Sbellard  ;;
750ac0df51dSaliguori  --cross-prefix=*)
7517d13299dSbellard  ;;
752ac0df51dSaliguori  --cc=*)
7537d13299dSbellard  ;;
754b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
75583469015Sbellard  ;;
75683f73fceSTomoki Sekiyama  --cxx=*)
75783f73fceSTomoki Sekiyama  ;;
758e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
759e007dbecSMichael S. Tsirkin  ;;
7603c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
7613c4a4d0dSPeter Maydell  ;;
762b1a550a0Spbrook  --make=*) make="$optarg"
7637d13299dSbellard  ;;
764b6daf4d3SPaolo Bonzini  --install=*)
7656a882643Spbrook  ;;
7660a01d76fSMarc-André Lureau  --python=*) python="$optarg" ; explicit_python=yes
767c886edfbSBlue Swirl  ;;
7682eb054c2SPeter Maydell  --sphinx-build=*) sphinx_build="$optarg"
7692eb054c2SPeter Maydell  ;;
770a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
771a5665051SPaolo Bonzini  ;;
772a5665051SPaolo Bonzini  --meson=*) meson="$optarg"
773a5665051SPaolo Bonzini  ;;
77448328880SPaolo Bonzini  --ninja=*) ninja="$optarg"
77548328880SPaolo Bonzini  ;;
776e2d8830eSBrad  --smbd=*) smbd="$optarg"
777e2d8830eSBrad  ;;
778e2a2ed06SJuan Quintela  --extra-cflags=*)
7797d13299dSbellard  ;;
78011cde1c8SBruno Dominguez  --extra-cxxflags=*)
78111cde1c8SBruno Dominguez  ;;
782e2a2ed06SJuan Quintela  --extra-ldflags=*)
7837d13299dSbellard  ;;
7845bc62e01SGerd Hoffmann  --enable-debug-info)
7855bc62e01SGerd Hoffmann  ;;
7865bc62e01SGerd Hoffmann  --disable-debug-info)
7875bc62e01SGerd Hoffmann  ;;
788d75402b5SAlex Bennée  --cross-cc-*)
789d75402b5SAlex Bennée  ;;
79017969268SFam Zheng  --enable-modules)
79117969268SFam Zheng      modules="yes"
79217969268SFam Zheng  ;;
7933aa88b31SStefan Hajnoczi  --disable-modules)
7943aa88b31SStefan Hajnoczi      modules="no"
7953aa88b31SStefan Hajnoczi  ;;
796bd83c861SChristian Ehrhardt  --disable-module-upgrades) module_upgrades="no"
797bd83c861SChristian Ehrhardt  ;;
798bd83c861SChristian Ehrhardt  --enable-module-upgrades) module_upgrades="yes"
799bd83c861SChristian Ehrhardt  ;;
8002ff6b91eSJuan Quintela  --cpu=*)
8017d13299dSbellard  ;;
802b1a550a0Spbrook  --target-list=*) target_list="$optarg"
803447e133fSAlex Bennée                   if test "$target_list_exclude"; then
804447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
805447e133fSAlex Bennée                   fi
806447e133fSAlex Bennée  ;;
807447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
808447e133fSAlex Bennée                   if test "$target_list"; then
809447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
810447e133fSAlex Bennée                   fi
811de83cd02Sbellard  ;;
81274242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
8139410b56cSPrerna Saxena  ;;
8147bc3ca7fSPaolo Bonzini  --with-default-devices) default_devices="true"
815f3494749SPaolo Bonzini  ;;
8167bc3ca7fSPaolo Bonzini  --without-default-devices) default_devices="false"
817f3494749SPaolo Bonzini  ;;
818d1d5e9eeSAlex Bennée  --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
819d1d5e9eeSAlex Bennée  ;;
820d1d5e9eeSAlex Bennée  --with-devices-*) device_arch=${opt#--with-devices-};
821d1d5e9eeSAlex Bennée                    device_arch=${device_arch%%=*}
822d1d5e9eeSAlex Bennée                    cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
823d1d5e9eeSAlex Bennée                    if test -f "$cf"; then
824d1d5e9eeSAlex Bennée                        device_archs="$device_archs $device_arch"
825d1d5e9eeSAlex Bennée                        eval "devices_${device_arch}=\$optarg"
826d1d5e9eeSAlex Bennée                    else
827d1d5e9eeSAlex Bennée                        error_exit "File $cf does not exist"
828d1d5e9eeSAlex Bennée                    fi
829d1d5e9eeSAlex Bennée  ;;
830c87ea116SAlex Bennée  --without-default-features) # processed above
831c87ea116SAlex Bennée  ;;
8327d13299dSbellard  --enable-gprof) gprof="yes"
8337d13299dSbellard  ;;
8341d728c39SBlue Swirl  --enable-gcov) gcov="yes"
8351d728c39SBlue Swirl  ;;
83679427693SLoïc Minier  --static)
83779427693SLoïc Minier    static="yes"
83817884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
83943ce4dfeSbellard  ;;
8400b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
8410b24e75fSPaolo Bonzini  ;;
8420b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
8430b24e75fSPaolo Bonzini  ;;
8443aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
8453aa5d2beSAlon Levy  ;;
8468bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
8478bf188aaSMichael Tokarev  ;;
8480f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
8490f94d6daSAlon Levy  ;;
850528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
8510b24e75fSPaolo Bonzini  ;;
85277433a5fSMarc-André Lureau  --with-suffix=*) qemu_suffix="$optarg"
853023d3d67SEduardo Habkost  ;;
854c6502638SBruce Rogers  --docdir=*) docdir="$optarg"
8550b24e75fSPaolo Bonzini  ;;
856fe0038beSPaolo Bonzini  --localedir=*) localedir="$optarg"
857fe0038beSPaolo Bonzini  ;;
858ca2fb938SAndre Przywara  --sysconfdir=*) sysconfdir="$optarg"
85907381cc1SAnthony Liguori  ;;
860785c23aeSLuiz Capitulino  --localstatedir=*) local_statedir="$optarg"
861785c23aeSLuiz Capitulino  ;;
8623d5eecabSGerd Hoffmann  --firmwarepath=*) firmwarepath="$optarg"
8633d5eecabSGerd Hoffmann  ;;
864181ce1d0SOlaf Hering  --host=*|--build=*|\
865181ce1d0SOlaf Hering  --disable-dependency-tracking|\
866785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
867fe0038beSPaolo Bonzini  --oldincludedir=*|--datarootdir=*|--infodir=*|\
868023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
869023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
870023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
871023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
872023ddd74SMax Filippov    # lots of directory switches by default.
873023ddd74SMax Filippov  ;;
8743556c233SPaolo Bonzini  --disable-qom-cast-debug) qom_cast_debug="no"
8753556c233SPaolo Bonzini  ;;
8763556c233SPaolo Bonzini  --enable-qom-cast-debug) qom_cast_debug="yes"
8773556c233SPaolo Bonzini  ;;
8780c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
8790c58ac1cSmalc  ;;
88089138857SStefan Weil  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
881b64ec4e4SFam Zheng  ;;
88289138857SStefan Weil  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
883eb852011SMarkus Armbruster  ;;
884e5f05f8cSKevin Wolf  --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes"
885e5f05f8cSKevin Wolf  ;;
886e5f05f8cSKevin Wolf  --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no"
887e5f05f8cSKevin Wolf  ;;
888f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
889f8393946Saurel32  ;;
890f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
891f8393946Saurel32  ;;
892f3d08ee6SPaul Brook  --enable-debug)
893f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
894f3d08ee6SPaul Brook      debug_tcg="yes"
8951fcc6d42SPeter Xu      debug_mutex="yes"
896f3d08ee6SPaul Brook      debug="yes"
897f3d08ee6SPaul Brook      strip_opt="no"
898b553a042SJohn Snow      fortify_source="no"
899f3d08ee6SPaul Brook  ;;
900247724cbSMarc-André Lureau  --enable-sanitizers) sanitizers="yes"
901247724cbSMarc-André Lureau  ;;
902247724cbSMarc-André Lureau  --disable-sanitizers) sanitizers="no"
903247724cbSMarc-André Lureau  ;;
9040aebab04SLingfeng Yang  --enable-tsan) tsan="yes"
9050aebab04SLingfeng Yang  ;;
9060aebab04SLingfeng Yang  --disable-tsan) tsan="no"
9070aebab04SLingfeng Yang  ;;
9081625af87Saliguori  --disable-strip) strip_opt="no"
9091625af87Saliguori  ;;
9104d34a86bSPaolo Bonzini  --disable-slirp) slirp="disabled"
911c20709aaSbellard  ;;
912fd6fc214SPaolo Bonzini  --enable-slirp) slirp="enabled"
913fd6fc214SPaolo Bonzini  ;;
9144d34a86bSPaolo Bonzini  --enable-slirp=git) slirp="internal"
9157c57bdd8SMarc-André Lureau  ;;
91603a3c0b3SPaolo Bonzini  --enable-slirp=*) slirp="$optarg"
917675b9b53SMarc-André Lureau  ;;
9181badb709SPaolo Bonzini  --disable-xen) xen="disabled"
919e37630caSaliguori  ;;
9201badb709SPaolo Bonzini  --enable-xen) xen="enabled"
921fc321b4bSJuan Quintela  ;;
9221badb709SPaolo Bonzini  --disable-tcg) tcg="disabled"
923d1a14257SAlex Bennée                 plugins="no"
924b3f6ea7eSPaolo Bonzini  ;;
9251badb709SPaolo Bonzini  --enable-tcg) tcg="enabled"
926b3f6ea7eSPaolo Bonzini  ;;
92705c2a3e7Sbellard  --enable-profiler) profiler="yes"
92805c2a3e7Sbellard  ;;
929cad25d69Spbrook  --disable-system) softmmu="no"
9300a8e90f4Spbrook  ;;
931cad25d69Spbrook  --enable-system) softmmu="yes"
9320a8e90f4Spbrook  ;;
9330953a80fSZachary Amsden  --disable-user)
9340953a80fSZachary Amsden      linux_user="no" ;
9350953a80fSZachary Amsden      bsd_user="no" ;
9360953a80fSZachary Amsden  ;;
9370953a80fSZachary Amsden  --enable-user) ;;
938831b7825Sths  --disable-linux-user) linux_user="no"
9390a8e90f4Spbrook  ;;
940831b7825Sths  --enable-linux-user) linux_user="yes"
941831b7825Sths  ;;
94284778508Sblueswir1  --disable-bsd-user) bsd_user="no"
94384778508Sblueswir1  ;;
94484778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
94584778508Sblueswir1  ;;
94640d6444eSAvi Kivity  --enable-pie) pie="yes"
94734005a00SKirill A. Shutemov  ;;
94840d6444eSAvi Kivity  --disable-pie) pie="no"
94934005a00SKirill A. Shutemov  ;;
95085aa5189Sbellard  --enable-werror) werror="yes"
95185aa5189Sbellard  ;;
95285aa5189Sbellard  --disable-werror) werror="no"
95385aa5189Sbellard  ;;
954cdad781dSDaniele Buono  --enable-lto) lto="true"
955cdad781dSDaniele Buono  ;;
956cdad781dSDaniele Buono  --disable-lto) lto="false"
957cdad781dSDaniele Buono  ;;
95863678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
95963678e17SSteven Noonan  ;;
96063678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
96163678e17SSteven Noonan  ;;
9621e4f6065SDaniele Buono  --enable-safe-stack) safe_stack="yes"
9631e4f6065SDaniele Buono  ;;
9641e4f6065SDaniele Buono  --disable-safe-stack) safe_stack="no"
9651e4f6065SDaniele Buono  ;;
9669e62ba48SDaniele Buono  --enable-cfi)
9679e62ba48SDaniele Buono      cfi="true";
9689e62ba48SDaniele Buono      lto="true";
9699e62ba48SDaniele Buono  ;;
9709e62ba48SDaniele Buono  --disable-cfi) cfi="false"
9719e62ba48SDaniele Buono  ;;
972fbb4121dSPaolo Bonzini  --disable-fdt) fdt="disabled"
9732df87df7SJuan Quintela  ;;
974fbb4121dSPaolo Bonzini  --enable-fdt) fdt="enabled"
975fbb4121dSPaolo Bonzini  ;;
976fbb4121dSPaolo Bonzini  --enable-fdt=git) fdt="internal"
977fbb4121dSPaolo Bonzini  ;;
97803a3c0b3SPaolo Bonzini  --enable-fdt=*) fdt="$optarg"
9792df87df7SJuan Quintela  ;;
980a40161cbSPaolo Bonzini  --disable-membarrier) membarrier="no"
981a40161cbSPaolo Bonzini  ;;
982a40161cbSPaolo Bonzini  --enable-membarrier) membarrier="yes"
983a40161cbSPaolo Bonzini  ;;
9847e563bfbSThomas Huth  --with-pkgversion=*) pkgversion="$optarg"
9854a19f1ecSpbrook  ;;
986519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
987519175a2SAlex Barcelo  ;;
98870c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
98970c60c08SStefan Hajnoczi  ;;
99070c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
99170c60c08SStefan Hajnoczi  ;;
9927d992e4dSPeter Lieven  --enable-debug-stack-usage) debug_stack_usage="yes"
9937d992e4dSPeter Lieven  ;;
994f0d92b56SLongpeng(Mike)  --enable-crypto-afalg) crypto_afalg="yes"
995f0d92b56SLongpeng(Mike)  ;;
996f0d92b56SLongpeng(Mike)  --disable-crypto-afalg) crypto_afalg="no"
997f0d92b56SLongpeng(Mike)  ;;
998d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
999d5970055SMichael S. Tsirkin  ;;
1000d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
1001d5970055SMichael S. Tsirkin  ;;
1002042cea27SGonglei  --disable-vhost-crypto) vhost_crypto="no"
1003042cea27SGonglei  ;;
1004299e6f19SPaolo Bonzini  --enable-vhost-crypto) vhost_crypto="yes"
1005042cea27SGonglei  ;;
10065e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
10075e9be92dSNicholas Bellinger  ;;
10085e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
10095e9be92dSNicholas Bellinger  ;;
1010fc0b9b0eSStefan Hajnoczi  --disable-vhost-vsock) vhost_vsock="no"
1011fc0b9b0eSStefan Hajnoczi  ;;
1012fc0b9b0eSStefan Hajnoczi  --enable-vhost-vsock) vhost_vsock="yes"
1013fc0b9b0eSStefan Hajnoczi  ;;
101498fc1adaSDr. David Alan Gilbert  --disable-vhost-user-fs) vhost_user_fs="no"
101598fc1adaSDr. David Alan Gilbert  ;;
101698fc1adaSDr. David Alan Gilbert  --enable-vhost-user-fs) vhost_user_fs="yes"
101798fc1adaSDr. David Alan Gilbert  ;;
1018da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
101920ff075bSMichael Walle  ;;
1020da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
102120ff075bSMichael Walle  ;;
10228c84cf11SSergei Trofimovich  --disable-xfsctl) xfs="no"
10238c84cf11SSergei Trofimovich  ;;
10248c84cf11SSergei Trofimovich  --enable-xfsctl) xfs="yes"
10258c84cf11SSergei Trofimovich  ;;
10261ffb3bbbSPaolo Bonzini  --disable-zlib-test)
10271ece9905SAlon Levy  ;;
1028d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1029d138cee9SMichael Roth  ;;
1030d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1031d138cee9SMichael Roth  ;;
1032d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1033d9840e25STomoki Sekiyama  ;;
1034d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1035d9840e25STomoki Sekiyama  ;;
1036d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1037d9840e25STomoki Sekiyama  ;;
1038d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1039d9840e25STomoki Sekiyama  ;;
1040d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1041d9840e25STomoki Sekiyama  ;;
1042d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1043d9840e25STomoki Sekiyama  ;;
10444b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
10454b1c11fdSDaniel P. Berrange  ;;
10464b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
10474b1c11fdSDaniel P. Berrange  ;;
104886583a07SLiam Merwick  --disable-avx2) avx2_opt="no"
104986583a07SLiam Merwick  ;;
105086583a07SLiam Merwick  --enable-avx2) avx2_opt="yes"
105186583a07SLiam Merwick  ;;
10526b8cd447SRobert Hoo  --disable-avx512f) avx512f_opt="no"
10536b8cd447SRobert Hoo  ;;
10546b8cd447SRobert Hoo  --enable-avx512f) avx512f_opt="yes"
10556b8cd447SRobert Hoo  ;;
105652b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
105752b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1058583f6e7bSStefan Hajnoczi  ;;
1059cb6414dfSFam Zheng  --enable-vhdx|--disable-vhdx)
1060cb6414dfSFam Zheng      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1061cb6414dfSFam Zheng  ;;
1062315d3184SFam Zheng  --enable-uuid|--disable-uuid)
1063315d3184SFam Zheng      echo "$0: $opt is obsolete, UUID support is always built" >&2
1064315d3184SFam Zheng  ;;
1065a1c5e949SDaniel P. Berrange  --tls-priority=*) tls_priority="$optarg"
1066a1c5e949SDaniel P. Berrange  ;;
10672da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
10682da776dbSMichael R. Hines  ;;
10692da776dbSMichael R. Hines  --disable-rdma) rdma="no"
10702da776dbSMichael R. Hines  ;;
107121ab34c9SMarcel Apfelbaum  --enable-pvrdma) pvrdma="yes"
107221ab34c9SMarcel Apfelbaum  ;;
107321ab34c9SMarcel Apfelbaum  --disable-pvrdma) pvrdma="no"
107421ab34c9SMarcel Apfelbaum  ;;
1075e91c793cSCole Robinson  --disable-tpm) tpm="no"
1076e91c793cSCole Robinson  ;;
1077ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1078ab214c29SStefan Berger  ;;
1079ed1701c6SDr. David Alan Gilbert  --disable-live-block-migration) live_block_migration="no"
1080ed1701c6SDr. David Alan Gilbert  ;;
1081ed1701c6SDr. David Alan Gilbert  --enable-live-block-migration) live_block_migration="yes"
1082ed1701c6SDr. David Alan Gilbert  ;;
1083a99d57bbSWanlong Gao  --disable-numa) numa="no"
1084a99d57bbSWanlong Gao  ;;
1085a99d57bbSWanlong Gao  --enable-numa) numa="yes"
1086a99d57bbSWanlong Gao  ;;
1087a6b1d4c0SChanglong Xie  --disable-replication) replication="no"
1088a6b1d4c0SChanglong Xie  ;;
1089a6b1d4c0SChanglong Xie  --enable-replication) replication="yes"
1090a6b1d4c0SChanglong Xie  ;;
10912f740136SJeff Cody  --disable-bochs) bochs="no"
10922f740136SJeff Cody  ;;
10932f740136SJeff Cody  --enable-bochs) bochs="yes"
10942f740136SJeff Cody  ;;
10952f740136SJeff Cody  --disable-cloop) cloop="no"
10962f740136SJeff Cody  ;;
10972f740136SJeff Cody  --enable-cloop) cloop="yes"
10982f740136SJeff Cody  ;;
10992f740136SJeff Cody  --disable-dmg) dmg="no"
11002f740136SJeff Cody  ;;
11012f740136SJeff Cody  --enable-dmg) dmg="yes"
11022f740136SJeff Cody  ;;
11032f740136SJeff Cody  --disable-qcow1) qcow1="no"
11042f740136SJeff Cody  ;;
11052f740136SJeff Cody  --enable-qcow1) qcow1="yes"
11062f740136SJeff Cody  ;;
11072f740136SJeff Cody  --disable-vdi) vdi="no"
11082f740136SJeff Cody  ;;
11092f740136SJeff Cody  --enable-vdi) vdi="yes"
11102f740136SJeff Cody  ;;
11112f740136SJeff Cody  --disable-vvfat) vvfat="no"
11122f740136SJeff Cody  ;;
11132f740136SJeff Cody  --enable-vvfat) vvfat="yes"
11142f740136SJeff Cody  ;;
11152f740136SJeff Cody  --disable-qed) qed="no"
11162f740136SJeff Cody  ;;
11172f740136SJeff Cody  --enable-qed) qed="yes"
11182f740136SJeff Cody  ;;
11192f740136SJeff Cody  --disable-parallels) parallels="no"
11202f740136SJeff Cody  ;;
11212f740136SJeff Cody  --enable-parallels) parallels="yes"
11222f740136SJeff Cody  ;;
1123e6a74868SMarc-André Lureau  --disable-vhost-user) vhost_user="no"
1124e6a74868SMarc-André Lureau  ;;
1125299e6f19SPaolo Bonzini  --enable-vhost-user) vhost_user="yes"
1126299e6f19SPaolo Bonzini  ;;
1127108a6481SCindy Lu  --disable-vhost-vdpa) vhost_vdpa="no"
1128108a6481SCindy Lu  ;;
1129108a6481SCindy Lu  --enable-vhost-vdpa) vhost_vdpa="yes"
1130108a6481SCindy Lu  ;;
1131299e6f19SPaolo Bonzini  --disable-vhost-kernel) vhost_kernel="no"
1132299e6f19SPaolo Bonzini  ;;
1133299e6f19SPaolo Bonzini  --enable-vhost-kernel) vhost_kernel="yes"
1134e6a74868SMarc-André Lureau  ;;
11358b18cdbfSRichard Henderson  --disable-capstone) capstone="disabled"
11368ca80760SRichard Henderson  ;;
11378b18cdbfSRichard Henderson  --enable-capstone) capstone="enabled"
11388ca80760SRichard Henderson  ;;
11398b18cdbfSRichard Henderson  --enable-capstone=git) capstone="internal"
1140e219c499SRichard Henderson  ;;
114103a3c0b3SPaolo Bonzini  --enable-capstone=*) capstone="$optarg"
1142e219c499SRichard Henderson  ;;
1143cc84d63aSDaniel P. Berrange  --with-git=*) git="$optarg"
1144cc84d63aSDaniel P. Berrange  ;;
11457d7dbf9dSDan Streetman  --with-git-submodules=*)
11467d7dbf9dSDan Streetman      git_submodules_action="$optarg"
1147f62bbee5SDaniel P. Berrange  ;;
1148ba59fb77SPaolo Bonzini  --enable-debug-mutex) debug_mutex=yes
1149ba59fb77SPaolo Bonzini  ;;
1150ba59fb77SPaolo Bonzini  --disable-debug-mutex) debug_mutex=no
1151ba59fb77SPaolo Bonzini  ;;
11529b8e4298SAlex Bennée  --enable-plugins) if test "$mingw32" = "yes"; then
11539b8e4298SAlex Bennée                        error_exit "TCG plugins not currently supported on Windows platforms"
11549b8e4298SAlex Bennée                    else
11559b8e4298SAlex Bennée                        plugins="yes"
11569b8e4298SAlex Bennée                    fi
115740e8c6f4SAlex Bennée  ;;
115840e8c6f4SAlex Bennée  --disable-plugins) plugins="no"
115940e8c6f4SAlex Bennée  ;;
1160afc3a8f9SAlex Bennée  --enable-containers) use_containers="yes"
1161afc3a8f9SAlex Bennée  ;;
1162afc3a8f9SAlex Bennée  --disable-containers) use_containers="no"
1163afc3a8f9SAlex Bennée  ;;
1164f48e590aSAlex Bennée  --gdb=*) gdb_bin="$optarg"
1165f48e590aSAlex Bennée  ;;
1166b767d257SMarek Marczykowski-Górecki  --enable-rng-none) rng_none=yes
1167b767d257SMarek Marczykowski-Górecki  ;;
1168b767d257SMarek Marczykowski-Górecki  --disable-rng-none) rng_none=no
1169b767d257SMarek Marczykowski-Górecki  ;;
117054e7aac0SAlexey Krasikov  --enable-keyring) secret_keyring="yes"
117154e7aac0SAlexey Krasikov  ;;
117254e7aac0SAlexey Krasikov  --disable-keyring) secret_keyring="no"
117354e7aac0SAlexey Krasikov  ;;
117420cf7b8eSDenis Plotnikov  --enable-gio) gio=yes
117520cf7b8eSDenis Plotnikov  ;;
117620cf7b8eSDenis Plotnikov  --disable-gio) gio=no
117720cf7b8eSDenis Plotnikov  ;;
1178b8e0c493SJoelle van Dyne  --enable-slirp-smbd) slirp_smbd=yes
1179b8e0c493SJoelle van Dyne  ;;
1180b8e0c493SJoelle van Dyne  --disable-slirp-smbd) slirp_smbd=no
1181b8e0c493SJoelle van Dyne  ;;
11823b4da132SPaolo Bonzini  # backwards compatibility options
11833b4da132SPaolo Bonzini  --enable-trace-backend=*) meson_option_parse "--enable-trace-backends=$optarg" "$optarg"
11843b4da132SPaolo Bonzini  ;;
11853b4da132SPaolo Bonzini  --disable-blobs) meson_option_parse --disable-install-blobs ""
11863b4da132SPaolo Bonzini  ;;
11873b4da132SPaolo Bonzini  --enable-tcmalloc) meson_option_parse --enable-malloc=tcmalloc tcmalloc
11883b4da132SPaolo Bonzini  ;;
11893b4da132SPaolo Bonzini  --enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc
11903b4da132SPaolo Bonzini  ;;
11913b4da132SPaolo Bonzini  # everything else has the same name in configure and meson
119261d63097SPaolo Bonzini  --enable-* | --disable-*) meson_option_parse "$opt" "$optarg"
119361d63097SPaolo Bonzini  ;;
11942d2ad6d0SFam Zheng  *)
11952d2ad6d0SFam Zheng      echo "ERROR: unknown option $opt"
11962d2ad6d0SFam Zheng      echo "Try '$0 --help' for more information"
11972d2ad6d0SFam Zheng      exit 1
11987f1559c6Sbalrog  ;;
11997d13299dSbellard  esac
12007d13299dSbellarddone
12017d13299dSbellard
1202d1a14257SAlex Bennée# test for any invalid configuration combinations
1203d1a14257SAlex Bennéeif test "$plugins" = "yes" -a "$tcg" = "disabled"; then
1204d1a14257SAlex Bennée    error_exit "Can't enable plugins on non-TCG builds"
1205d1a14257SAlex Bennéefi
1206d1a14257SAlex Bennée
12077d7dbf9dSDan Streetmancase $git_submodules_action in
12087d7dbf9dSDan Streetman    update|validate)
12097d7dbf9dSDan Streetman        if test ! -e "$source_path/.git"; then
12107d7dbf9dSDan Streetman            echo "ERROR: cannot $git_submodules_action git submodules without .git"
12117d7dbf9dSDan Streetman            exit 1
12127d7dbf9dSDan Streetman        fi
12137d7dbf9dSDan Streetman    ;;
12147d7dbf9dSDan Streetman    ignore)
1215b80fd281SPaolo Bonzini        if ! test -f "$source_path/ui/keycodemapdb/README"
1216b80fd281SPaolo Bonzini        then
1217b80fd281SPaolo Bonzini            echo
1218b80fd281SPaolo Bonzini            echo "ERROR: missing GIT submodules"
1219b80fd281SPaolo Bonzini            echo
1220b80fd281SPaolo Bonzini            if test -e "$source_path/.git"; then
1221b80fd281SPaolo Bonzini                echo "--with-git-submodules=ignore specified but submodules were not"
1222b80fd281SPaolo Bonzini                echo "checked out.  Please initialize and update submodules."
1223b80fd281SPaolo Bonzini            else
1224b80fd281SPaolo Bonzini                echo "This is not a GIT checkout but module content appears to"
1225b80fd281SPaolo Bonzini                echo "be missing. Do not use 'git archive' or GitHub download links"
1226b80fd281SPaolo Bonzini                echo "to acquire QEMU source archives. Non-GIT builds are only"
1227b80fd281SPaolo Bonzini                echo "supported with source archives linked from:"
1228b80fd281SPaolo Bonzini                echo
1229b80fd281SPaolo Bonzini                echo "  https://www.qemu.org/download/#source"
1230b80fd281SPaolo Bonzini                echo
1231b80fd281SPaolo Bonzini                echo "Developers working with GIT can use scripts/archive-source.sh"
1232b80fd281SPaolo Bonzini                echo "if they need to create valid source archives."
1233b80fd281SPaolo Bonzini            fi
1234b80fd281SPaolo Bonzini            echo
1235b80fd281SPaolo Bonzini            exit 1
1236b80fd281SPaolo Bonzini        fi
12377d7dbf9dSDan Streetman    ;;
12387d7dbf9dSDan Streetman    *)
12397d7dbf9dSDan Streetman        echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
12407d7dbf9dSDan Streetman        exit 1
12417d7dbf9dSDan Streetman    ;;
12427d7dbf9dSDan Streetmanesac
12437d7dbf9dSDan Streetman
124422a87800SMarc-André Lureaulibdir="${libdir:-$prefix/lib}"
124522a87800SMarc-André Lureaulibexecdir="${libexecdir:-$prefix/libexec}"
124622a87800SMarc-André Lureauincludedir="${includedir:-$prefix/include}"
124722a87800SMarc-André Lureau
124822a87800SMarc-André Lureauif test "$mingw32" = "yes" ; then
124915588a62SJoshua Watt    bindir="${bindir:-$prefix}"
125022a87800SMarc-André Lureauelse
125115588a62SJoshua Watt    bindir="${bindir:-$prefix/bin}"
125215588a62SJoshua Wattfi
125322a87800SMarc-André Lureaumandir="${mandir:-$prefix/share/man}"
125422a87800SMarc-André Lureaudatadir="${datadir:-$prefix/share}"
1255ca8c0909SMarc-André Lureaudocdir="${docdir:-$prefix/share/doc}"
125622a87800SMarc-André Lureausysconfdir="${sysconfdir:-$prefix/etc}"
125722a87800SMarc-André Lureaulocal_statedir="${local_statedir:-$prefix/var}"
125816bf7a33SPaolo Bonzinifirmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
125916bf7a33SPaolo Bonzinilocaledir="${localedir:-$datadir/locale}"
126022a87800SMarc-André Lureau
12619557af9cSAlex Bennéeif eval test -z "\${cross_cc_$cpu}"; then
1262b1aa4de1SAlex Bennée    eval "cross_cc_${cpu}=\$cc"
12632038f8c8SPaolo Bonzini    cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
12649557af9cSAlex Bennéefi
126579f3b12fSPeter Crosthwaite
1266affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly
1267affc88ccSPeter Maydell# support, even if we're using TCI.
1268affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then
1269affc88ccSPeter Maydell  bsd_user="no"
1270affc88ccSPeter Maydell  linux_user="no"
1271affc88ccSPeter Maydellfi
1272affc88ccSPeter Maydell
127360e0df25SPeter Maydelldefault_target_list=""
127443692239SMarkus Armbrusterdeprecated_targets_list=ppc64abi32-linux-user
1275fdb75aefSPaolo Bonzinideprecated_features=""
12766e92f823SPeter Maydellmak_wilds=""
12776e92f823SPeter Maydell
127860e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
1279812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
128060e0df25SPeter Maydellfi
128160e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
1282812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
128360e0df25SPeter Maydellfi
128460e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
1285812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
128660e0df25SPeter Maydellfi
128760e0df25SPeter Maydell
12883a5ae4a9SAlex Bennée# If the user doesn't explicitly specify a deprecated target we will
12893a5ae4a9SAlex Bennée# skip it.
12903a5ae4a9SAlex Bennéeif test -z "$target_list"; then
12913a5ae4a9SAlex Bennée    if test -z "$target_list_exclude"; then
12923a5ae4a9SAlex Bennée        target_list_exclude="$deprecated_targets_list"
12933a5ae4a9SAlex Bennée    else
12943a5ae4a9SAlex Bennée        target_list_exclude="$target_list_exclude,$deprecated_targets_list"
12953a5ae4a9SAlex Bennée    fi
12962d838d9bSAlex Bennéefi
12972d838d9bSAlex Bennée
1298447e133fSAlex Bennéefor config in $mak_wilds; do
1299447e133fSAlex Bennée    target="$(basename "$config" .mak)"
130098db9a06SAlex Bennée    if echo "$target_list_exclude" | grep -vq "$target"; then
1301447e133fSAlex Bennée        default_target_list="${default_target_list} $target"
1302447e133fSAlex Bennée    fi
1303447e133fSAlex Bennéedone
13046e92f823SPeter Maydell
1305af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1306af5db58eSpbrookcat << EOF
1307af5db58eSpbrook
1308af5db58eSpbrookUsage: configure [options]
1309af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1310af5db58eSpbrook
131108fb77edSStefan WeilStandard options:
131208fb77edSStefan Weil  --help                   print this message
131308fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
131408fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
131508fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
13162deca810SAlex Bennée  --target-list=LIST       set target list (default: build all non-deprecated)
131708fb77edSStefan Weil$(echo Available targets: $default_target_list | \
131808fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
13192deca810SAlex Bennée$(echo Deprecated targets: $deprecated_targets_list | \
13202deca810SAlex Bennée  fold -s -w 53 | sed -e 's/^/                           /')
1321447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
132208fb77edSStefan Weil
132308fb77edSStefan WeilAdvanced options (experts only):
13243812c0c4SJoelle van Dyne  --cross-prefix=PREFIX    use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
132508fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
132608fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
132708fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
132808fb77edSStefan Weil                           build time
132908fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
133008fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1331a2866660SPaolo Bonzini  --extra-cflags=CFLAGS    append extra C compiler flags CFLAGS
1332a2866660SPaolo Bonzini  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags CXXFLAGS
133308fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1334d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1335d422b2bcSAlex Bennée  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
133608fb77edSStefan Weil  --make=MAKE              use specified make [$make]
133708fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
13382eb054c2SPeter Maydell  --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1339a5665051SPaolo Bonzini  --meson=MESON            use specified meson [$meson]
134048328880SPaolo Bonzini  --ninja=NINJA            use specified ninja [$ninja]
134108fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1342db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
13437d7dbf9dSDan Streetman  --with-git-submodules=update   update git submodules (default if .git dir exists)
13447d7dbf9dSDan Streetman  --with-git-submodules=validate fail if git submodules are not up to date
13457d7dbf9dSDan Streetman  --with-git-submodules=ignore   do not update or check git submodules (default if no .git dir)
134608fb77edSStefan Weil  --static                 enable static build [$static]
134708fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
134810ff82d1SMarc-André Lureau  --datadir=PATH           install firmware in PATH/$qemu_suffix
1349fe0038beSPaolo Bonzini  --localedir=PATH         install translation in PATH/$qemu_suffix
135010ff82d1SMarc-André Lureau  --docdir=PATH            install documentation in PATH/$qemu_suffix
135108fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
135208fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
1353db1b5f13SThomas Huth  --libexecdir=PATH        install helper binaries in PATH
135410ff82d1SMarc-André Lureau  --sysconfdir=PATH        install config in PATH/$qemu_suffix
135508fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
13563d5eecabSGerd Hoffmann  --firmwarepath=PATH      search PATH for firmware files
135713336606SRobert Foley  --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1358ca8c0909SMarc-André Lureau  --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1359db1b5f13SThomas Huth  --with-pkgversion=VERS   use specified string as sub-version of the package
1360c035c8d6SPaolo Bonzini  --without-default-features default all --enable-* options to "disabled"
1361c035c8d6SPaolo Bonzini  --without-default-devices  do not include any device that is not needed to
1362c035c8d6SPaolo Bonzini                           start the emulator (only use if you are including
1363d1d5e9eeSAlex Bennée                           desired devices in configs/devices/)
1364d1d5e9eeSAlex Bennée  --with-devices-ARCH=NAME override default configs/devices
136508fb77edSStefan Weil  --enable-debug           enable common debug build options
1366247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
13670aebab04SLingfeng Yang  --enable-tsan            enable thread sanitizer
136808fb77edSStefan Weil  --disable-strip          disable stripping binaries
136908fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
137063678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
137116bfbc70SPaolo Bonzini  --audio-drv-list=LIST    set audio drivers to try if -audiodev is not used
137208fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
137308fb77edSStefan Weil  --block-drv-rw-whitelist=L
137408fb77edSStefan Weil                           set block driver read-write whitelist
1375e5f05f8cSKevin Wolf                           (by default affects only QEMU, not tools like qemu-img)
137608fb77edSStefan Weil  --block-drv-ro-whitelist=L
137708fb77edSStefan Weil                           set block driver read-only whitelist
1378e5f05f8cSKevin Wolf                           (by default affects only QEMU, not tools like qemu-img)
1379e5f05f8cSKevin Wolf  --enable-block-drv-whitelist-in-tools
1380e5f05f8cSKevin Wolf                           use block whitelist also in tools instead of only QEMU
138108fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
138208fb77edSStefan Weil                           Default:trace-<pid>
1383c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
138408fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
138533c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
138608fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
1387c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1388c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1389a1c5e949SDaniel P. Berrange  --tls-priority           default TLS protocol/cipher priority string
1390c12d66aaSLin Ma  --enable-gprof           QEMU profiling with gprof
1391c12d66aaSLin Ma  --enable-profiler        profiler support
1392c12d66aaSLin Ma  --enable-debug-stack-usage
1393c12d66aaSLin Ma                           track the maximum stack usage of stacks created by qemu_alloc_stack
139440e8c6f4SAlex Bennée  --enable-plugins
139540e8c6f4SAlex Bennée                           enable plugins via shared library loading
1396afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
1397f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
139861d63097SPaolo BonziniEOF
139961d63097SPaolo Bonzini  meson_options_help
140061d63097SPaolo Bonzinicat << EOF
1401c23f23b9SMichael Tokarev  system          all system emulation targets
1402c23f23b9SMichael Tokarev  user            supported user emulation targets
1403c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1404c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1405c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1406c23f23b9SMichael Tokarev  pie             Position Independent Executables
140721e709aaSMarc-André Lureau  modules         modules support (non-Windows)
1408bd83c861SChristian Ehrhardt  module-upgrades try to load modules from alternate paths for upgrades
1409c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1410c23f23b9SMichael Tokarev  debug-info      debugging information
1411cdad781dSDaniele Buono  lto             Enable Link-Time Optimization.
14121e4f6065SDaniele Buono  safe-stack      SafeStack Stack Smash Protection. Depends on
14131e4f6065SDaniele Buono                  clang/llvm >= 3.7 and requires coroutine backend ucontext.
1414a40161cbSPaolo Bonzini  membarrier      membarrier system call (for Linux 4.14+ or Windows)
141521ab34c9SMarcel Apfelbaum  rdma            Enable RDMA-based migration
141621ab34c9SMarcel Apfelbaum  pvrdma          Enable PVRDMA support
1417299e6f19SPaolo Bonzini  vhost-net       vhost-net kernel acceleration support
1418299e6f19SPaolo Bonzini  vhost-vsock     virtio sockets device support
1419299e6f19SPaolo Bonzini  vhost-scsi      vhost-scsi kernel target support
1420299e6f19SPaolo Bonzini  vhost-crypto    vhost-user-crypto backend support
1421299e6f19SPaolo Bonzini  vhost-kernel    vhost kernel backend support
1422299e6f19SPaolo Bonzini  vhost-user      vhost-user backend support
1423108a6481SCindy Lu  vhost-vdpa      vhost-vdpa kernel backend support
1424ed1701c6SDr. David Alan Gilbert  live-block-migration   Block migration in the main migration stream
1425c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1426c23f23b9SMichael Tokarev  tpm             TPM support
1427c23f23b9SMichael Tokarev  numa            libnuma support
142886583a07SLiam Merwick  avx2            AVX2 optimization support
14296b8cd447SRobert Hoo  avx512f         AVX512F optimization support
1430a6b1d4c0SChanglong Xie  replication     replication support
1431c12d66aaSLin Ma  opengl          opengl support
1432c12d66aaSLin Ma  xfsctl          xfsctl support
1433c12d66aaSLin Ma  qom-cast-debug  cast debugging support
14348de73fa8SCleber Rosa  tools           build qemu-io, qemu-nbd and qemu-img tools
14352f740136SJeff Cody  bochs           bochs image format support
14362f740136SJeff Cody  cloop           cloop image format support
14372f740136SJeff Cody  dmg             dmg image format support
14382f740136SJeff Cody  qcow1           qcow v1 image format support
14392f740136SJeff Cody  vdi             vdi image format support
14402f740136SJeff Cody  vvfat           vvfat image format support
14412f740136SJeff Cody  qed             qed image format support
14422f740136SJeff Cody  parallels       parallels image format support
1443f0d92b56SLongpeng(Mike)  crypto-afalg    Linux AF_ALG crypto backend driver
1444ba59fb77SPaolo Bonzini  debug-mutex     mutex debugging support
1445b767d257SMarek Marczykowski-Górecki  rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
144620cf7b8eSDenis Plotnikov  gio             libgio support
1447b8e0c493SJoelle van Dyne  slirp-smbd      use smbd (at path --smbd=*) in slirp networking
144808fb77edSStefan Weil
144908fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1450af5db58eSpbrookEOF
14512d2ad6d0SFam Zhengexit 0
1452af5db58eSpbrookfi
1453af5db58eSpbrook
14549c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
1455bb768f71SThomas Huthrm -f */config-devices.mak.d
14569c790242SThomas Huth
1457faf44142SDaniel P. Berrangéif test -z "$python"
1458faf44142SDaniel P. Berrangéthen
1459c53eeaf7SStefan Hajnoczi    error_exit "Python not found. Use --python=/path/to/python"
1460c53eeaf7SStefan Hajnoczifi
14618e2c76bdSRoman Bolshakovif ! has "$make"
14628e2c76bdSRoman Bolshakovthen
14638e2c76bdSRoman Bolshakov    error_exit "GNU make ($make) not found"
14648e2c76bdSRoman Bolshakovfi
1465c53eeaf7SStefan Hajnoczi
1466c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit
1467c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value.
14681b11f28dSThomas Huthif ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
14691b11f28dSThomas Huth  error_exit "Cannot use '$python', Python >= 3.6 is required." \
1470c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
1471c53eeaf7SStefan Hajnoczifi
1472c53eeaf7SStefan Hajnoczi
1473755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it
1474406ab2f3SCleber 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)
1475755ee70fSCleber Rosa
1476c53eeaf7SStefan Hajnoczi# Suppress writing compiled files
1477c53eeaf7SStefan Hajnoczipython="$python -B"
1478c53eeaf7SStefan Hajnoczi
14790a01d76fSMarc-André Lureauif test -z "$meson"; then
14806638cae5SPaolo Bonzini    if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.3; then
14810a01d76fSMarc-André Lureau        meson=meson
14827d7dbf9dSDan Streetman    elif test $git_submodules_action != 'ignore' ; then
14830a01d76fSMarc-André Lureau        meson=git
14840a01d76fSMarc-André Lureau    elif test -e "${source_path}/meson/meson.py" ; then
14850a01d76fSMarc-André Lureau        meson=internal
14860a01d76fSMarc-André Lureau    else
14870a01d76fSMarc-André Lureau        if test "$explicit_python" = yes; then
14880a01d76fSMarc-André Lureau            error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
14890a01d76fSMarc-André Lureau        else
1490a5665051SPaolo Bonzini            error_exit "Meson not found.  Use --meson=/path/to/meson"
1491a5665051SPaolo Bonzini        fi
14920a01d76fSMarc-André Lureau    fi
14930a01d76fSMarc-André Lureauelse
14940a01d76fSMarc-André Lureau    # Meson uses its own Python interpreter to invoke other Python scripts,
14950a01d76fSMarc-André Lureau    # but the user wants to use the one they specified with --python.
14960a01d76fSMarc-André Lureau    #
14970a01d76fSMarc-André Lureau    # We do not want to override the distro Python interpreter (and sometimes
14980a01d76fSMarc-André Lureau    # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
14990a01d76fSMarc-André Lureau    # just require --meson=git|internal together with --python.
15000a01d76fSMarc-André Lureau    if test "$explicit_python" = yes; then
15010a01d76fSMarc-André Lureau        case "$meson" in
15020a01d76fSMarc-André Lureau            git | internal) ;;
15030a01d76fSMarc-André Lureau            *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
15040a01d76fSMarc-André Lureau        esac
15050a01d76fSMarc-André Lureau    fi
15060a01d76fSMarc-André Lureaufi
1507a5665051SPaolo Bonzini
15080a01d76fSMarc-André Lureauif test "$meson" = git; then
15090a01d76fSMarc-André Lureau    git_submodules="${git_submodules} meson"
15100a01d76fSMarc-André Lureaufi
15110a01d76fSMarc-André Lureau
15120a01d76fSMarc-André Lureaucase "$meson" in
15130a01d76fSMarc-André Lureau    git | internal)
15140a01d76fSMarc-André Lureau        meson="$python ${source_path}/meson/meson.py"
15150a01d76fSMarc-André Lureau        ;;
151684ec0c24SPaolo Bonzini    *) meson=$(command -v "$meson") ;;
15170a01d76fSMarc-André Lureauesac
15180a01d76fSMarc-André Lureau
151909e93326SPaolo Bonzini# Probe for ninja
152048328880SPaolo Bonzini
152148328880SPaolo Bonziniif test -z "$ninja"; then
152248328880SPaolo Bonzini    for c in ninja ninja-build samu; do
152348328880SPaolo Bonzini        if has $c; then
152448328880SPaolo Bonzini            ninja=$(command -v "$c")
152548328880SPaolo Bonzini            break
152648328880SPaolo Bonzini        fi
152748328880SPaolo Bonzini    done
152809e93326SPaolo Bonzini    if test -z "$ninja"; then
152909e93326SPaolo Bonzini      error_exit "Cannot find Ninja"
153009e93326SPaolo Bonzini    fi
153148328880SPaolo Bonzinifi
1532a5665051SPaolo Bonzini
15339aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
15349aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
15359aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
15369aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
15379aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
15389aae6e54SDaniel Henrique Barbozaif compile_object ; then
15399aae6e54SDaniel Henrique Barboza  : C compiler works ok
15409aae6e54SDaniel Henrique Barbozaelse
15419aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
15429aae6e54SDaniel Henrique Barbozafi
15439aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
15449aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
15459aae6e54SDaniel Henrique Barbozafi
15469aae6e54SDaniel Henrique Barboza
15479c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
15489c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
15499c83ffd8SPeter Maydellif test -z "$werror" ; then
15507d7dbf9dSDan Streetman    if test "$git_submodules_action" != "ignore" && \
1551e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
15529c83ffd8SPeter Maydell        werror="yes"
15539c83ffd8SPeter Maydell    else
15549c83ffd8SPeter Maydell        werror="no"
15559c83ffd8SPeter Maydell    fi
15569c83ffd8SPeter Maydellfi
15579c83ffd8SPeter Maydell
1558975ff037SPaolo Bonziniif test "$targetos" = "bogus"; then
1559fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
1560fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
1561fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
1562fb59dabdSPeter Maydell    # host OS we should stop now.
1563951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1564fb59dabdSPeter Maydellfi
1565fb59dabdSPeter Maydell
1566efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
1567efc6c070SThomas Huthcat > $TMPC << EOF
1568efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
1569efc6c070SThomas Huth# ifdef __apple_build_version__
15702a85a08cSDaniel P. Berrangé#  if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
15712a85a08cSDaniel P. Berrangé#   error You need at least XCode Clang v10.0 to compile QEMU
1572efc6c070SThomas Huth#  endif
1573efc6c070SThomas Huth# else
15742a85a08cSDaniel P. Berrangé#  if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
15752a85a08cSDaniel P. Berrangé#   error You need at least Clang v6.0 to compile QEMU
1576efc6c070SThomas Huth#  endif
1577efc6c070SThomas Huth# endif
1578efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
15793830df5fSnia# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
15803830df5fSnia#  error You need at least GCC v7.4.0 to compile QEMU
1581efc6c070SThomas Huth# endif
1582efc6c070SThomas Huth#else
1583efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
1584efc6c070SThomas Huth#endif
1585efc6c070SThomas Huthint main (void) { return 0; }
1586efc6c070SThomas HuthEOF
1587efc6c070SThomas Huthif ! compile_prog "" "" ; then
15883830df5fSnia    error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)"
1589efc6c070SThomas Huthfi
1590efc6c070SThomas Huth
159100849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately.
159200849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second.
159300849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all
159400849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would
159500849b92SRichard Henderson# just silently disable some features, so it's too error prone.
159600849b92SRichard Henderson
159700849b92SRichard Hendersonwarn_flags=
159800849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration
159900849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition
160000849b92SRichard Hendersonadd_to warn_flags -Wtype-limits
160100849b92SRichard Hendersonadd_to warn_flags -Wformat-security
160200849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k
160300849b92SRichard Hendersonadd_to warn_flags -Winit-self
160400849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers
160500849b92SRichard Hendersonadd_to warn_flags -Wempty-body
160600849b92SRichard Hendersonadd_to warn_flags -Wnested-externs
160700849b92SRichard Hendersonadd_to warn_flags -Wendif-labels
160800849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined
16090a2ebce9SThomas Huthadd_to warn_flags -Wimplicit-fallthrough=2
161000849b92SRichard Henderson
161100849b92SRichard Hendersonnowarn_flags=
161200849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides
161300849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs
161400849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value
161500849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int
161600849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition
1617aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare
1618bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi
161900849b92SRichard Henderson
162000849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags"
162193b25869SJohn Snow
162293b25869SJohn Snowcc_has_warning_flag() {
162393b25869SJohn Snow    write_c_skeleton;
162493b25869SJohn Snow
1625a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
1626a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
1627a1d29d6cSPeter Maydell    # warning options).
162893b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
162993b25869SJohn Snow    compile_prog "-Werror $optflag" ""
163093b25869SJohn Snow}
163193b25869SJohn Snow
163293b25869SJohn Snowfor flag in $gcc_flags; do
163393b25869SJohn Snow    if cc_has_warning_flag $flag ; then
16348d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
16358d05095cSPaolo Bonzini    fi
16368d05095cSPaolo Bonzinidone
16378d05095cSPaolo Bonzini
163863678e17SSteven Noonanif test "$stack_protector" != "no"; then
1639fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
1640fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
1641fccd35a0SRodrigo Rebello{
1642fccd35a0SRodrigo Rebello    char arr[64], *p = arr, *c = argv[0];
1643fccd35a0SRodrigo Rebello    while (*c) {
1644fccd35a0SRodrigo Rebello        *p++ = *c++;
1645fccd35a0SRodrigo Rebello    }
1646fccd35a0SRodrigo Rebello    return 0;
1647fccd35a0SRodrigo Rebello}
1648fccd35a0SRodrigo RebelloEOF
164963678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
16503b463a3fSMiroslav Rezanina  sp_on=0
165163678e17SSteven Noonan  for flag in $gcc_flags; do
1652590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
1653590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
1654086d5f75SPaolo Bonzini    if compile_object "-Werror $flag" &&
1655590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
165663678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1657db5adeaaSPaolo Bonzini      QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
16583b463a3fSMiroslav Rezanina      sp_on=1
165963678e17SSteven Noonan      break
166063678e17SSteven Noonan    fi
166163678e17SSteven Noonan  done
16623b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
16633b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
16643b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
16653b463a3fSMiroslav Rezanina    fi
16663b463a3fSMiroslav Rezanina  fi
166737746c5eSMarc-André Lureaufi
166837746c5eSMarc-André Lureau
166920bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for
167020bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}.
167120bc94a2SPaolo Bonzinicat > $TMPC << EOF
167220bc94a2SPaolo Bonzinistruct {
167320bc94a2SPaolo Bonzini  int a[2];
167420bc94a2SPaolo Bonzini} x = {0};
167520bc94a2SPaolo BonziniEOF
167620bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then
167720bc94a2SPaolo Bonzini  :
167820bc94a2SPaolo Bonzinielse
167920bc94a2SPaolo Bonzini  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
168020bc94a2SPaolo Bonzinifi
168120bc94a2SPaolo Bonzini
168221e709aaSMarc-André Lureau# Our module code doesn't support Windows
168321e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then
168421e709aaSMarc-André Lureau  error_exit "Modules are not available for Windows"
168521e709aaSMarc-André Lureaufi
168621e709aaSMarc-André Lureau
1687bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled
1688bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
1689bd83c861SChristian Ehrhardt  error_exit "Can't enable module-upgrades as Modules are not enabled"
1690bd83c861SChristian Ehrhardtfi
1691bd83c861SChristian Ehrhardt
16925f2453acSAlex Bennée# Static linking is not possible with plugins, modules or PIE
169340d6444eSAvi Kivityif test "$static" = "yes" ; then
1694aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
1695aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
1696aa0d1f44SPaolo Bonzini  fi
16975f2453acSAlex Bennée  if test "$plugins" = "yes"; then
16985f2453acSAlex Bennée    error_exit "static and plugins are mutually incompatible"
1699ba4dd2aaSAlex Bennée  else
1700ba4dd2aaSAlex Bennée    plugins="no"
17015f2453acSAlex Bennée  fi
170240d6444eSAvi Kivityfi
170340d6444eSAvi Kivity
170440d6444eSAvi Kivitycat > $TMPC << EOF
170521d4a791SAvi Kivity
170621d4a791SAvi Kivity#ifdef __linux__
170721d4a791SAvi Kivity#  define THREAD __thread
170821d4a791SAvi Kivity#else
170921d4a791SAvi Kivity#  define THREAD
171021d4a791SAvi Kivity#endif
171121d4a791SAvi Kivitystatic THREAD int tls_var;
171221d4a791SAvi Kivityint main(void) { return tls_var; }
171340d6444eSAvi KivityEOF
1714b2634124SRichard Henderson
1715ffd205efSJessica Clarke# Check we support -fno-pie and -no-pie first; we will need the former for
1716ffd205efSJessica Clarke# building ROMs, and both for everything if --disable-pie is passed.
1717412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then
1718412aeacdSAlex Bennée  CFLAGS_NOPIE="-fno-pie"
1719ffd205efSJessica Clarke  LDFLAGS_NOPIE="-no-pie"
1720412aeacdSAlex Bennéefi
1721412aeacdSAlex Bennée
172212781462SRichard Hendersonif test "$static" = "yes"; then
1723eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
17245770e8afSPaolo Bonzini    CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
172512781462SRichard Henderson    QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
172612781462SRichard Henderson    pie="yes"
172712781462SRichard Henderson  elif test "$pie" = "yes"; then
172812781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
172912781462SRichard Henderson  else
173012781462SRichard Henderson    QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
173112781462SRichard Henderson    pie="no"
173212781462SRichard Henderson  fi
173312781462SRichard Hendersonelif test "$pie" = "no"; then
17345770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
1735ffd205efSJessica Clarke  CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
1736eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
17375770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
17385770e8afSPaolo Bonzini  CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
173940d6444eSAvi Kivity  pie="yes"
17402c674109SRichard Hendersonelif test "$pie" = "yes"; then
174176ad07a4SPeter Maydell  error_exit "PIE not available due to missing toolchain support"
174240d6444eSAvi Kivityelse
174340d6444eSAvi Kivity  echo "Disabling PIE due to missing toolchain support"
174440d6444eSAvi Kivity  pie="no"
174540d6444eSAvi Kivityfi
174640d6444eSAvi Kivity
1747e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
1748e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too.
1749e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1750e6cbd751SRichard Henderson  QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
1751e6cbd751SRichard Hendersonfi
1752e6cbd751SRichard Henderson
175309dada40SPaolo Bonzini##########################################
175409dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
175509dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
175609dada40SPaolo Bonzini# specification is necessary
175709dada40SPaolo Bonzini
175809dada40SPaolo Bonziniif test "$cpu" = "i386"; then
175909dada40SPaolo Bonzini  cat > $TMPC << EOF
176009dada40SPaolo Bonzinistatic int sfaa(int *ptr)
176109dada40SPaolo Bonzini{
176209dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
176309dada40SPaolo Bonzini}
176409dada40SPaolo Bonzini
176509dada40SPaolo Bonziniint main(void)
176609dada40SPaolo Bonzini{
176709dada40SPaolo Bonzini  int val = 42;
17681405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
176909dada40SPaolo Bonzini  sfaa(&val);
177009dada40SPaolo Bonzini  return val;
177109dada40SPaolo Bonzini}
177209dada40SPaolo BonziniEOF
177309dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
177409dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
177509dada40SPaolo Bonzini  fi
177609dada40SPaolo Bonzinifi
177709dada40SPaolo Bonzini
177856267b62SPhilippe Mathieu-Daudéif test "$tcg" = "enabled"; then
177956267b62SPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
178056267b62SPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
178156267b62SPhilippe Mathieu-Daudéfi
178256267b62SPhilippe Mathieu-Daudé
1783afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
1784fdb75aefSPaolo Bonzini    default_targets=yes
1785d880a3baSPaolo Bonzini    for target in $default_target_list; do
1786d880a3baSPaolo Bonzini        target_list="$target_list $target"
1787d880a3baSPaolo Bonzini    done
1788d880a3baSPaolo Bonzini    target_list="${target_list# }"
1789121afa9eSAnthony Liguorielse
1790fdb75aefSPaolo Bonzini    default_targets=no
179189138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1792d880a3baSPaolo Bonzini    for target in $target_list; do
179325b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
179425b48338SPeter Maydell        # friendly error message than if we let it fall through.
179525b48338SPeter Maydell        case " $default_target_list " in
179625b48338SPeter Maydell            *" $target "*)
179725b48338SPeter Maydell                ;;
179825b48338SPeter Maydell            *)
179925b48338SPeter Maydell                error_exit "Unknown target name '$target'"
180025b48338SPeter Maydell                ;;
180125b48338SPeter Maydell        esac
180225b48338SPeter Maydell    done
1803d880a3baSPaolo Bonzinifi
180425b48338SPeter Maydell
1805fdb75aefSPaolo Bonzinifor target in $target_list; do
1806fdb75aefSPaolo Bonzini    # if a deprecated target is enabled we note it here
1807fdb75aefSPaolo Bonzini    if echo "$deprecated_targets_list" | grep -q "$target"; then
1808fdb75aefSPaolo Bonzini        add_to deprecated_features $target
1809fdb75aefSPaolo Bonzini    fi
1810fdb75aefSPaolo Bonzinidone
1811fdb75aefSPaolo Bonzini
1812f55fe278SPaolo Bonzini# see if system emulation was really requested
1813f55fe278SPaolo Bonzinicase " $target_list " in
1814f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
1815f55fe278SPaolo Bonzini  ;;
1816f55fe278SPaolo Bonzini  *) softmmu=no
1817f55fe278SPaolo Bonzini  ;;
1818f55fe278SPaolo Bonziniesac
18195327cf48Sbellard
1820249247c9SJuan Quintelafeature_not_found() {
1821249247c9SJuan Quintela  feature=$1
182221684af0SStewart Smith  remedy=$2
1823249247c9SJuan Quintela
182476ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
182521684af0SStewart Smith      "configure was not able to find it." \
182621684af0SStewart Smith      "$remedy"
1827249247c9SJuan Quintela}
1828249247c9SJuan Quintela
18297d13299dSbellard# ---
18307d13299dSbellard# big/little endian test
18317d13299dSbellardcat > $TMPC << EOF
1832659eb157SThomas Huth#include <stdio.h>
183361cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
183461cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1835659eb157SThomas Huthint main(int argc, char *argv[])
1836659eb157SThomas Huth{
1837659eb157SThomas Huth    return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
18387d13299dSbellard}
18397d13299dSbellardEOF
18407d13299dSbellard
1841659eb157SThomas Huthif compile_prog ; then
1842659eb157SThomas Huth    if strings -a $TMPE | grep -q BiGeNdIaN ; then
184361cc919fSMike Frysinger        bigendian="yes"
1844659eb157SThomas Huth    elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
184561cc919fSMike Frysinger        bigendian="no"
18467d13299dSbellard    else
18477d13299dSbellard        echo big/little test failed
1848659eb157SThomas Huth        exit 1
18497d13299dSbellard    fi
18507d13299dSbellardelse
185161cc919fSMike Frysinger    echo big/little test failed
1852659eb157SThomas Huth    exit 1
18537d13299dSbellardfi
18547d13299dSbellard
1855b0a47e79SJuan Quintela##########################################
1856e10ee3f5SPhilippe Mathieu-Daudé# system tools
1857e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then
1858e10ee3f5SPhilippe Mathieu-Daudé    if test "$softmmu" = "no"; then
1859e10ee3f5SPhilippe Mathieu-Daudé        want_tools=no
1860e10ee3f5SPhilippe Mathieu-Daudé    else
1861e10ee3f5SPhilippe Mathieu-Daudé        want_tools=yes
1862e10ee3f5SPhilippe Mathieu-Daudé    fi
1863e10ee3f5SPhilippe Mathieu-Daudéfi
1864e10ee3f5SPhilippe Mathieu-Daudé
1865299e6f19SPaolo Bonzini#########################################
1866299e6f19SPaolo Bonzini# vhost interdependencies and host support
1867299e6f19SPaolo Bonzini
1868299e6f19SPaolo Bonzini# vhost backends
1869d88618f7SStefan Hajnocziif test "$vhost_user" = "yes" && test "$linux" != "yes"; then
1870d88618f7SStefan Hajnoczi  error_exit "vhost-user is only available on Linux"
1871299e6f19SPaolo Bonzinifi
1872108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux
1873108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
1874108a6481SCindy Lu  error_exit "vhost-vdpa is only available on Linux"
1875108a6481SCindy Lufi
1876299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux
1877299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
1878299e6f19SPaolo Bonzini  error_exit "vhost-kernel is only available on Linux"
1879299e6f19SPaolo Bonzinifi
1880299e6f19SPaolo Bonzini
1881299e6f19SPaolo Bonzini# vhost-kernel devices
1882299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
1883299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
1884299e6f19SPaolo Bonzini  error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
1885299e6f19SPaolo Bonzinifi
1886299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
1887299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
1888299e6f19SPaolo Bonzini  error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
1889299e6f19SPaolo Bonzinifi
1890299e6f19SPaolo Bonzini
1891299e6f19SPaolo Bonzini# vhost-user backends
1892299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user
1893299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
1894299e6f19SPaolo Bonzini  error_exit "--enable-vhost-net-user requires --enable-vhost-user"
1895299e6f19SPaolo Bonzinifi
1896299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user
1897299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
1898299e6f19SPaolo Bonzini  error_exit "--enable-vhost-crypto requires --enable-vhost-user"
1899299e6f19SPaolo Bonzinifi
190098fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
190198fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
190298fc1adaSDr. David Alan Gilbert  error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
190398fc1adaSDr. David Alan Gilbertfi
1904108a6481SCindy Lu#vhost-vdpa backends
1905108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
1906108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
1907108a6481SCindy Lu  error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
1908108a6481SCindy Lufi
1909299e6f19SPaolo Bonzini
191040bc0ca9SLaurent Vivier# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
1911299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then
1912299e6f19SPaolo Bonzini  test "$vhost_net_user" = "yes" && vhost_net=yes
191340bc0ca9SLaurent Vivier  test "$vhost_net_vdpa" = "yes" && vhost_net=yes
1914299e6f19SPaolo Bonzini  test "$vhost_kernel" = "yes" && vhost_net=yes
1915299e6f19SPaolo Bonzinifi
1916299e6f19SPaolo Bonzini
1917015a33bdSGonglei##########################################
1918779ab5e3SStefan Weil# pkg-config probe
1919779ab5e3SStefan Weil
1920779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
192176ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
1922779ab5e3SStefan Weilfi
1923779ab5e3SStefan Weil
1924779ab5e3SStefan Weil##########################################
1925e37630caSaliguori# xen probe
1926e37630caSaliguori
19271badb709SPaolo Bonziniif test "$xen" != "disabled" ; then
1928c1cdd9d5SJuergen Gross  # Check whether Xen library path is specified via --extra-ldflags to avoid
1929c1cdd9d5SJuergen Gross  # overriding this setting with pkg-config output. If not, try pkg-config
1930c1cdd9d5SJuergen Gross  # to obtain all needed flags.
1931c1cdd9d5SJuergen Gross
1932c1cdd9d5SJuergen Gross  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
1933c1cdd9d5SJuergen Gross     $pkg_config --exists xencontrol ; then
1934c1cdd9d5SJuergen Gross    xen_ctrl_version="$(printf '%d%02d%02d' \
1935c1cdd9d5SJuergen Gross      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
19361badb709SPaolo Bonzini    xen=enabled
19375b6a8f43SMichael Tokarev    xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
1938c1cdd9d5SJuergen Gross    xen_pc="$xen_pc xenevtchn xendevicemodel"
193958ea9a7aSAnthony PERARD    if $pkg_config --exists xentoolcore; then
194058ea9a7aSAnthony PERARD      xen_pc="$xen_pc xentoolcore"
194158ea9a7aSAnthony PERARD    fi
1942582ea95fSMarc-André Lureau    xen_cflags="$($pkg_config --cflags $xen_pc)"
1943582ea95fSMarc-André Lureau    xen_libs="$($pkg_config --libs $xen_pc)"
1944c1cdd9d5SJuergen Gross  else
1945c1cdd9d5SJuergen Gross
19465b6a8f43SMichael Tokarev    xen_libs="-lxenstore -lxenctrl"
1947d9506cabSAnthony PERARD    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1948d5b93ddfSAnthony PERARD
194950ced5b3SStefan Weil    # First we test whether Xen headers and libraries are available.
195050ced5b3SStefan Weil    # If no, we are done and there is no Xen support.
195150ced5b3SStefan Weil    # If yes, more tests are run to detect the Xen version.
195250ced5b3SStefan Weil
195350ced5b3SStefan Weil    # Xen (any)
195450ced5b3SStefan Weil    cat > $TMPC <<EOF
195550ced5b3SStefan Weil#include <xenctrl.h>
195650ced5b3SStefan Weilint main(void) {
195750ced5b3SStefan Weil  return 0;
195850ced5b3SStefan Weil}
195950ced5b3SStefan WeilEOF
196050ced5b3SStefan Weil    if ! compile_prog "" "$xen_libs" ; then
196150ced5b3SStefan Weil      # Xen not found
19621badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
196321684af0SStewart Smith        feature_not_found "xen" "Install xen devel"
196450ced5b3SStefan Weil      fi
19651badb709SPaolo Bonzini      xen=disabled
196650ced5b3SStefan Weil
1967d5b93ddfSAnthony PERARD    # Xen unstable
196869deef08SPeter Maydell    elif
196969deef08SPeter Maydell        cat > $TMPC <<EOF &&
19702cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API
19712cbf8903SRoss Lagerwall#define __XEN_TOOLS__
19722cbf8903SRoss Lagerwall#include <xendevicemodel.h>
1973d3c49ebbSPaul Durrant#include <xenforeignmemory.h>
19742cbf8903SRoss Lagerwallint main(void) {
19752cbf8903SRoss Lagerwall  xendevicemodel_handle *xd;
1976d3c49ebbSPaul Durrant  xenforeignmemory_handle *xfmem;
19772cbf8903SRoss Lagerwall
19782cbf8903SRoss Lagerwall  xd = xendevicemodel_open(0, 0);
19792cbf8903SRoss Lagerwall  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
19802cbf8903SRoss Lagerwall
1981d3c49ebbSPaul Durrant  xfmem = xenforeignmemory_open(0, 0);
1982d3c49ebbSPaul Durrant  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
1983d3c49ebbSPaul Durrant
19842cbf8903SRoss Lagerwall  return 0;
19852cbf8903SRoss Lagerwall}
19862cbf8903SRoss LagerwallEOF
19872cbf8903SRoss Lagerwall        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
19882cbf8903SRoss Lagerwall      then
19892cbf8903SRoss Lagerwall      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
19902cbf8903SRoss Lagerwall      xen_ctrl_version=41100
19911badb709SPaolo Bonzini      xen=enabled
19922cbf8903SRoss Lagerwall    elif
19932cbf8903SRoss Lagerwall        cat > $TMPC <<EOF &&
19945ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API
19955ba3d756SIgor Druzhinin#include <xenforeignmemory.h>
199658ea9a7aSAnthony PERARD#include <xentoolcore.h>
19975ba3d756SIgor Druzhininint main(void) {
19985ba3d756SIgor Druzhinin  xenforeignmemory_handle *xfmem;
19995ba3d756SIgor Druzhinin
20005ba3d756SIgor Druzhinin  xfmem = xenforeignmemory_open(0, 0);
20015ba3d756SIgor Druzhinin  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
200258ea9a7aSAnthony PERARD  xentoolcore_restrict_all(0);
20035ba3d756SIgor Druzhinin
20045ba3d756SIgor Druzhinin  return 0;
20055ba3d756SIgor Druzhinin}
20065ba3d756SIgor DruzhininEOF
200758ea9a7aSAnthony PERARD        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
20085ba3d756SIgor Druzhinin      then
200958ea9a7aSAnthony PERARD      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
20105ba3d756SIgor Druzhinin      xen_ctrl_version=41000
20111badb709SPaolo Bonzini      xen=enabled
20125ba3d756SIgor Druzhinin    elif
20135ba3d756SIgor Druzhinin        cat > $TMPC <<EOF &&
2014da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API
2015da8090ccSPaul Durrant#define __XEN_TOOLS__
2016da8090ccSPaul Durrant#include <xendevicemodel.h>
2017da8090ccSPaul Durrantint main(void) {
2018da8090ccSPaul Durrant  xendevicemodel_handle *xd;
2019da8090ccSPaul Durrant
2020da8090ccSPaul Durrant  xd = xendevicemodel_open(0, 0);
2021da8090ccSPaul Durrant  xendevicemodel_close(xd);
2022da8090ccSPaul Durrant
2023da8090ccSPaul Durrant  return 0;
2024da8090ccSPaul Durrant}
2025da8090ccSPaul DurrantEOF
2026da8090ccSPaul Durrant        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2027da8090ccSPaul Durrant      then
2028da8090ccSPaul Durrant      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2029f1167ee6SJuergen Gross      xen_ctrl_version=40900
20301badb709SPaolo Bonzini      xen=enabled
2031da8090ccSPaul Durrant    elif
2032da8090ccSPaul Durrant        cat > $TMPC <<EOF &&
20335eeb39c2SIan Campbell/*
20345eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat
20355eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given.
2036b6eb9b45SPaulina Szubarczyk *
2037b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and
2038b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented.
2039b6eb9b45SPaulina Szubarczyk */
2040b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API
2041b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API
2042b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2043b6eb9b45SPaulina Szubarczyk#include <xenctrl.h>
2044b6eb9b45SPaulina Szubarczyk#include <xenstore.h>
2045b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h>
2046b6eb9b45SPaulina Szubarczyk#include <xengnttab.h>
2047b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h>
2048b6eb9b45SPaulina Szubarczyk#include <stdint.h>
2049b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h>
2050b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS)
2051b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined
2052b6eb9b45SPaulina Szubarczyk#endif
2053b6eb9b45SPaulina Szubarczykint main(void) {
2054b6eb9b45SPaulina Szubarczyk  xc_interface *xc = NULL;
2055b6eb9b45SPaulina Szubarczyk  xenforeignmemory_handle *xfmem;
2056b6eb9b45SPaulina Szubarczyk  xenevtchn_handle *xe;
2057b6eb9b45SPaulina Szubarczyk  xengnttab_handle *xg;
2058b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy_segment_t* seg = NULL;
2059b6eb9b45SPaulina Szubarczyk
2060b6eb9b45SPaulina Szubarczyk  xs_daemon_open();
2061b6eb9b45SPaulina Szubarczyk
2062b6eb9b45SPaulina Szubarczyk  xc = xc_interface_open(0, 0, 0);
2063b6eb9b45SPaulina Szubarczyk  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2064b6eb9b45SPaulina Szubarczyk  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2065b6eb9b45SPaulina Szubarczyk  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2066b6eb9b45SPaulina Szubarczyk  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2067b6eb9b45SPaulina Szubarczyk
2068b6eb9b45SPaulina Szubarczyk  xfmem = xenforeignmemory_open(0, 0);
2069b6eb9b45SPaulina Szubarczyk  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2070b6eb9b45SPaulina Szubarczyk
2071b6eb9b45SPaulina Szubarczyk  xe = xenevtchn_open(0, 0);
2072b6eb9b45SPaulina Szubarczyk  xenevtchn_fd(xe);
2073b6eb9b45SPaulina Szubarczyk
2074b6eb9b45SPaulina Szubarczyk  xg = xengnttab_open(0, 0);
2075b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy(xg, 0, seg);
2076b6eb9b45SPaulina Szubarczyk
2077b6eb9b45SPaulina Szubarczyk  return 0;
2078b6eb9b45SPaulina Szubarczyk}
2079b6eb9b45SPaulina SzubarczykEOF
2080b6eb9b45SPaulina Szubarczyk        compile_prog "" "$xen_libs $xen_stable_libs"
2081b6eb9b45SPaulina Szubarczyk      then
2082f1167ee6SJuergen Gross      xen_ctrl_version=40800
20831badb709SPaolo Bonzini      xen=enabled
2084b6eb9b45SPaulina Szubarczyk    elif
2085b6eb9b45SPaulina Szubarczyk        cat > $TMPC <<EOF &&
2086b6eb9b45SPaulina Szubarczyk/*
2087b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat
2088b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given.
20895eeb39c2SIan Campbell */
20905eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API
20915eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API
20925eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API
20935eeb39c2SIan Campbell#include <xenctrl.h>
20945eeb39c2SIan Campbell#include <xenstore.h>
20955eeb39c2SIan Campbell#include <xenevtchn.h>
20965eeb39c2SIan Campbell#include <xengnttab.h>
20975eeb39c2SIan Campbell#include <xenforeignmemory.h>
20985eeb39c2SIan Campbell#include <stdint.h>
20995eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h>
21005eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS)
21015eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined
21025eeb39c2SIan Campbell#endif
21035eeb39c2SIan Campbellint main(void) {
21045eeb39c2SIan Campbell  xc_interface *xc = NULL;
21055eeb39c2SIan Campbell  xenforeignmemory_handle *xfmem;
21065eeb39c2SIan Campbell  xenevtchn_handle *xe;
21075eeb39c2SIan Campbell  xengnttab_handle *xg;
21085eeb39c2SIan Campbell
21095eeb39c2SIan Campbell  xs_daemon_open();
21105eeb39c2SIan Campbell
21115eeb39c2SIan Campbell  xc = xc_interface_open(0, 0, 0);
21125eeb39c2SIan Campbell  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
21135eeb39c2SIan Campbell  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
21145eeb39c2SIan Campbell  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
21155eeb39c2SIan Campbell  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
21165eeb39c2SIan Campbell
21175eeb39c2SIan Campbell  xfmem = xenforeignmemory_open(0, 0);
21185eeb39c2SIan Campbell  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
21195eeb39c2SIan Campbell
21205eeb39c2SIan Campbell  xe = xenevtchn_open(0, 0);
21215eeb39c2SIan Campbell  xenevtchn_fd(xe);
21225eeb39c2SIan Campbell
21235eeb39c2SIan Campbell  xg = xengnttab_open(0, 0);
21245eeb39c2SIan Campbell  xengnttab_map_grant_ref(xg, 0, 0, 0);
21255eeb39c2SIan Campbell
21265eeb39c2SIan Campbell  return 0;
21275eeb39c2SIan Campbell}
21285eeb39c2SIan CampbellEOF
21295eeb39c2SIan Campbell        compile_prog "" "$xen_libs $xen_stable_libs"
21305eeb39c2SIan Campbell      then
2131f1167ee6SJuergen Gross      xen_ctrl_version=40701
21321badb709SPaolo Bonzini      xen=enabled
2133cdadde39SRoger Pau Monne
2134cdadde39SRoger Pau Monne    # Xen 4.6
2135cdadde39SRoger Pau Monne    elif
2136cdadde39SRoger Pau Monne        cat > $TMPC <<EOF &&
2137cdadde39SRoger Pau Monne#include <xenctrl.h>
2138e108a3c1SAnthony PERARD#include <xenstore.h>
2139d5b93ddfSAnthony PERARD#include <stdint.h>
2140d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
2141d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
2142d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
2143d5b93ddfSAnthony PERARD#endif
2144d5b93ddfSAnthony PERARDint main(void) {
2145d5b93ddfSAnthony PERARD  xc_interface *xc;
2146d5b93ddfSAnthony PERARD  xs_daemon_open();
2147d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
2148d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2149d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
2150b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
21518688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2152d8b441a3SJan Beulich  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
215320a544c7SKonrad Rzeszutek Wilk  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2154d8b441a3SJan Beulich  return 0;
2155d8b441a3SJan Beulich}
2156d8b441a3SJan BeulichEOF
2157d8b441a3SJan Beulich        compile_prog "" "$xen_libs"
2158d8b441a3SJan Beulich      then
2159f1167ee6SJuergen Gross      xen_ctrl_version=40600
21601badb709SPaolo Bonzini      xen=enabled
2161d8b441a3SJan Beulich
2162d8b441a3SJan Beulich    # Xen 4.5
2163d8b441a3SJan Beulich    elif
2164d8b441a3SJan Beulich        cat > $TMPC <<EOF &&
2165d8b441a3SJan Beulich#include <xenctrl.h>
2166d8b441a3SJan Beulich#include <xenstore.h>
2167d8b441a3SJan Beulich#include <stdint.h>
2168d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h>
2169d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS)
2170d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined
2171d8b441a3SJan Beulich#endif
2172d8b441a3SJan Beulichint main(void) {
2173d8b441a3SJan Beulich  xc_interface *xc;
2174d8b441a3SJan Beulich  xs_daemon_open();
2175d8b441a3SJan Beulich  xc = xc_interface_open(0, 0, 0);
2176d8b441a3SJan Beulich  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2177d8b441a3SJan Beulich  xc_gnttab_open(NULL, 0);
2178d8b441a3SJan Beulich  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2179d8b441a3SJan Beulich  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
21803996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
21813996e85cSPaul Durrant  return 0;
21823996e85cSPaul Durrant}
21833996e85cSPaul DurrantEOF
21843996e85cSPaul Durrant        compile_prog "" "$xen_libs"
21853996e85cSPaul Durrant      then
2186f1167ee6SJuergen Gross      xen_ctrl_version=40500
21871badb709SPaolo Bonzini      xen=enabled
21883996e85cSPaul Durrant
21893996e85cSPaul Durrant    elif
21903996e85cSPaul Durrant        cat > $TMPC <<EOF &&
21913996e85cSPaul Durrant#include <xenctrl.h>
21923996e85cSPaul Durrant#include <xenstore.h>
21933996e85cSPaul Durrant#include <stdint.h>
21943996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
21953996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
21963996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
21973996e85cSPaul Durrant#endif
21983996e85cSPaul Durrantint main(void) {
21993996e85cSPaul Durrant  xc_interface *xc;
22003996e85cSPaul Durrant  xs_daemon_open();
22013996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
22023996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
22033996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
22043996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
22053996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
22068688e065SStefano Stabellini  return 0;
22078688e065SStefano Stabellini}
22088688e065SStefano StabelliniEOF
22098688e065SStefano Stabellini        compile_prog "" "$xen_libs"
221069deef08SPeter Maydell      then
2211f1167ee6SJuergen Gross      xen_ctrl_version=40200
22121badb709SPaolo Bonzini      xen=enabled
22138688e065SStefano Stabellini
2214e37630caSaliguori    else
22151badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
2216edfb07edSIan Campbell        feature_not_found "xen (unsupported version)" \
2217edfb07edSIan Campbell                          "Install a supported xen (xen 4.2 or newer)"
2218fc321b4bSJuan Quintela      fi
22191badb709SPaolo Bonzini      xen=disabled
2220e37630caSaliguori    fi
2221d5b93ddfSAnthony PERARD
22221badb709SPaolo Bonzini    if test "$xen" = enabled; then
2223f1167ee6SJuergen Gross      if test $xen_ctrl_version -ge 40701  ; then
2224582ea95fSMarc-André Lureau        xen_libs="$xen_libs $xen_stable_libs "
22255eeb39c2SIan Campbell      fi
2226d5b93ddfSAnthony PERARD    fi
2227e37630caSaliguori  fi
2228c1cdd9d5SJuergen Grossfi
2229e37630caSaliguori
2230d661d9a4SJustin Terry (VM)##########################################
22312da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
22322da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
22332da776dbSMichael R. Hines  cat > $TMPC <<EOF
22342da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
22352da776dbSMichael R. Hinesint main(void) { return 0; }
22362da776dbSMichael R. HinesEOF
2237ef6d4ccdSYuval Shaia  rdma_libs="-lrdmacm -libverbs -libumad"
22382da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
22392da776dbSMichael R. Hines    rdma="yes"
22402da776dbSMichael R. Hines  else
22412da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
22422da776dbSMichael R. Hines        error_exit \
2243ef6d4ccdSYuval Shaia            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
22442da776dbSMichael R. Hines            " Your options:" \
2245ef6d4ccdSYuval Shaia            "  (1) Fast: Install infiniband packages (devel) from your distro." \
22462da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
22472da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
22482da776dbSMichael R. Hines    fi
22492da776dbSMichael R. Hines    rdma="no"
22502da776dbSMichael R. Hines  fi
22512da776dbSMichael R. Hinesfi
22522da776dbSMichael R. Hines
225321ab34c9SMarcel Apfelbaum##########################################
225421ab34c9SMarcel Apfelbaum# PVRDMA detection
225521ab34c9SMarcel Apfelbaum
225621ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF &&
225721ab34c9SMarcel Apfelbaum#include <sys/mman.h>
225821ab34c9SMarcel Apfelbaum
225921ab34c9SMarcel Apfelbaumint
226021ab34c9SMarcel Apfelbaummain(void)
226121ab34c9SMarcel Apfelbaum{
226221ab34c9SMarcel Apfelbaum    char buf = 0;
226321ab34c9SMarcel Apfelbaum    void *addr = &buf;
226421ab34c9SMarcel Apfelbaum    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
226521ab34c9SMarcel Apfelbaum
226621ab34c9SMarcel Apfelbaum    return 0;
226721ab34c9SMarcel Apfelbaum}
226821ab34c9SMarcel ApfelbaumEOF
226921ab34c9SMarcel Apfelbaum
227021ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then
227121ab34c9SMarcel Apfelbaum    case "$pvrdma" in
227221ab34c9SMarcel Apfelbaum    "")
227321ab34c9SMarcel Apfelbaum        if compile_prog "" ""; then
227421ab34c9SMarcel Apfelbaum            pvrdma="yes"
227521ab34c9SMarcel Apfelbaum        else
227621ab34c9SMarcel Apfelbaum            pvrdma="no"
227721ab34c9SMarcel Apfelbaum        fi
227821ab34c9SMarcel Apfelbaum        ;;
227921ab34c9SMarcel Apfelbaum    "yes")
228021ab34c9SMarcel Apfelbaum        if ! compile_prog "" ""; then
228121ab34c9SMarcel Apfelbaum            error_exit "PVRDMA is not supported since mremap is not implemented"
228221ab34c9SMarcel Apfelbaum        fi
228321ab34c9SMarcel Apfelbaum        pvrdma="yes"
228421ab34c9SMarcel Apfelbaum        ;;
228521ab34c9SMarcel Apfelbaum    "no")
228621ab34c9SMarcel Apfelbaum        pvrdma="no"
228721ab34c9SMarcel Apfelbaum        ;;
228821ab34c9SMarcel Apfelbaum    esac
228921ab34c9SMarcel Apfelbaumelse
229021ab34c9SMarcel Apfelbaum    if test "$pvrdma" = "yes" ; then
229121ab34c9SMarcel Apfelbaum        error_exit "PVRDMA requires rdma suppport"
229221ab34c9SMarcel Apfelbaum    fi
229321ab34c9SMarcel Apfelbaum    pvrdma="no"
229421ab34c9SMarcel Apfelbaumfi
229595c6bff3SBenoît Canet
2296ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported
2297ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then
2298ee108585SYuval Shaia
2299ee108585SYuval Shaiacat > $TMPC <<EOF &&
2300ee108585SYuval Shaia#include <infiniband/verbs.h>
2301ee108585SYuval Shaia
2302ee108585SYuval Shaiaint
2303ee108585SYuval Shaiamain(void)
2304ee108585SYuval Shaia{
2305ee108585SYuval Shaia    struct ibv_mr *mr;
2306ee108585SYuval Shaia    struct ibv_pd *pd = NULL;
2307ee108585SYuval Shaia    size_t length = 10;
2308ee108585SYuval Shaia    uint64_t iova = 0;
2309ee108585SYuval Shaia    int access = 0;
2310ee108585SYuval Shaia    void *addr = NULL;
2311ee108585SYuval Shaia
2312ee108585SYuval Shaia    mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2313ee108585SYuval Shaia
2314ee108585SYuval Shaia    ibv_dereg_mr(mr);
2315ee108585SYuval Shaia
2316ee108585SYuval Shaia    return 0;
2317ee108585SYuval Shaia}
2318ee108585SYuval ShaiaEOF
2319ee108585SYuval Shaia    if ! compile_prog "" "-libverbs"; then
2320ee108585SYuval Shaia        QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2321ee108585SYuval Shaia    fi
2322ee108585SYuval Shaiafi
2323ee108585SYuval Shaia
232495c6bff3SBenoît Canet##########################################
2325c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c
2326dce512deSChristoph Hellwigif test "$xfs" != "no" ; then
2327dce512deSChristoph Hellwig  cat > $TMPC << EOF
2328ffc41d10SStefan Weil#include <stddef.h>  /* NULL */
2329dce512deSChristoph Hellwig#include <xfs/xfs.h>
2330dce512deSChristoph Hellwigint main(void)
2331dce512deSChristoph Hellwig{
2332dce512deSChristoph Hellwig    xfsctl(NULL, 0, 0, NULL);
2333dce512deSChristoph Hellwig    return 0;
2334dce512deSChristoph Hellwig}
2335dce512deSChristoph HellwigEOF
2336dce512deSChristoph Hellwig  if compile_prog "" "" ; then
2337dce512deSChristoph Hellwig    xfs="yes"
2338dce512deSChristoph Hellwig  else
2339dce512deSChristoph Hellwig    if test "$xfs" = "yes" ; then
2340e3a6e0daSzhaolichang      feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
2341dce512deSChristoph Hellwig    fi
2342dce512deSChristoph Hellwig    xfs=no
2343dce512deSChristoph Hellwig  fi
2344dce512deSChristoph Hellwigfi
2345dce512deSChristoph Hellwig
2346dce512deSChristoph Hellwig##########################################
2347ba4dd2aaSAlex Bennée# plugin linker support probe
2348ba4dd2aaSAlex Bennée
2349ba4dd2aaSAlex Bennéeif test "$plugins" != "no"; then
2350ba4dd2aaSAlex Bennée
2351ba4dd2aaSAlex Bennée    #########################################
2352ba4dd2aaSAlex Bennée    # See if --dynamic-list is supported by the linker
2353ba4dd2aaSAlex Bennée
2354ba4dd2aaSAlex Bennée    ld_dynamic_list="no"
2355ba4dd2aaSAlex Bennée    cat > $TMPTXT <<EOF
2356ba4dd2aaSAlex Bennée{
2357ba4dd2aaSAlex Bennée  foo;
2358ba4dd2aaSAlex Bennée};
2359ba4dd2aaSAlex BennéeEOF
2360ba4dd2aaSAlex Bennée
2361ba4dd2aaSAlex Bennée        cat > $TMPC <<EOF
2362ba4dd2aaSAlex Bennée#include <stdio.h>
2363ba4dd2aaSAlex Bennéevoid foo(void);
2364ba4dd2aaSAlex Bennée
2365ba4dd2aaSAlex Bennéevoid foo(void)
2366ba4dd2aaSAlex Bennée{
2367ba4dd2aaSAlex Bennée  printf("foo\n");
2368ba4dd2aaSAlex Bennée}
2369ba4dd2aaSAlex Bennée
2370ba4dd2aaSAlex Bennéeint main(void)
2371ba4dd2aaSAlex Bennée{
2372ba4dd2aaSAlex Bennée  foo();
2373ba4dd2aaSAlex Bennée  return 0;
2374ba4dd2aaSAlex Bennée}
2375ba4dd2aaSAlex BennéeEOF
2376ba4dd2aaSAlex Bennée
2377ba4dd2aaSAlex Bennée    if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
2378ba4dd2aaSAlex Bennée        ld_dynamic_list="yes"
2379ba4dd2aaSAlex Bennée    fi
2380ba4dd2aaSAlex Bennée
2381ba4dd2aaSAlex Bennée    #########################################
2382ba4dd2aaSAlex Bennée    # See if -exported_symbols_list is supported by the linker
2383ba4dd2aaSAlex Bennée
2384ba4dd2aaSAlex Bennée    ld_exported_symbols_list="no"
2385ba4dd2aaSAlex Bennée    cat > $TMPTXT <<EOF
2386ba4dd2aaSAlex Bennée  _foo
2387ba4dd2aaSAlex BennéeEOF
2388ba4dd2aaSAlex Bennée
2389ba4dd2aaSAlex Bennée    if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
2390ba4dd2aaSAlex Bennée        ld_exported_symbols_list="yes"
2391ba4dd2aaSAlex Bennée    fi
2392ba4dd2aaSAlex Bennée
2393ba4dd2aaSAlex Bennée    if test "$ld_dynamic_list" = "no" &&
2394ba4dd2aaSAlex Bennée       test "$ld_exported_symbols_list" = "no" ; then
2395ba4dd2aaSAlex Bennée        if test "$plugins" = "yes"; then
2396ba4dd2aaSAlex Bennée            error_exit \
2397ba4dd2aaSAlex Bennée                "Plugin support requires dynamic linking and specifying a set of symbols " \
2398ba4dd2aaSAlex Bennée                "that are exported to plugins. Unfortunately your linker doesn't " \
2399ba4dd2aaSAlex Bennée                "support the flag (--dynamic-list or -exported_symbols_list) used " \
2400ba4dd2aaSAlex Bennée                "for this purpose."
2401ba4dd2aaSAlex Bennée        else
2402ba4dd2aaSAlex Bennée            plugins="no"
2403ba4dd2aaSAlex Bennée        fi
2404ba4dd2aaSAlex Bennée    else
2405ba4dd2aaSAlex Bennée        plugins="yes"
2406ba4dd2aaSAlex Bennée    fi
2407ba4dd2aaSAlex Bennéefi
2408ba4dd2aaSAlex Bennée
2409ba4dd2aaSAlex Bennée##########################################
2410e18df141SAnthony Liguori# glib support probe
2411a52d28afSPaolo Bonzini
2412b4c6036fSDaniel P. Berrangéglib_req_ver=2.56
2413aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
2414aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
2415a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
2416b906acacSPaolo Bonzinielif test "$plugins" = "yes"; then
2417b906acacSPaolo Bonzini    glib_modules="$glib_modules gmodule-no-export-2.0"
241854cb65d8SEmilio G. Cotafi
2419e26110cfSFam Zheng
2420aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
2421e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
242289138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
242389138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
2424e18df141SAnthony Liguori    else
2425e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2426e26110cfSFam Zheng    fi
2427e26110cfSFam Zhengdone
2428e26110cfSFam Zheng
2429215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it
2430215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
2431215b0c2fSPaolo Bonzini
2432215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then
2433215b0c2fSPaolo Bonzini    glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
2434215b0c2fSPaolo Bonzinifi
2435215b0c2fSPaolo Bonzini
243620cf7b8eSDenis Plotnikovif ! test "$gio" = "no"; then
243720cf7b8eSDenis Plotnikov    pass=no
2438f876b765SMarc-André Lureau    if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
2439f876b765SMarc-André Lureau        gio_cflags=$($pkg_config --cflags gio-2.0)
2440f876b765SMarc-André Lureau        gio_libs=$($pkg_config --libs gio-2.0)
244125a97a56SMarc-André Lureau        gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
24425ecfb76cSPaolo Bonzini        if ! has "$gdbus_codegen"; then
24430dba4897SMarc-André Lureau            gdbus_codegen=
24440dba4897SMarc-André Lureau        fi
244576346b62SPeter Maydell        # Check that the libraries actually work -- Ubuntu 18.04 ships
244676346b62SPeter Maydell        # with pkg-config --static --libs data for gio-2.0 that is missing
244776346b62SPeter Maydell        # -lblkid and will give a link error.
244813ceae66SPeter Maydell        cat > $TMPC <<EOF
244913ceae66SPeter Maydell#include <gio/gio.h>
245013ceae66SPeter Maydellint main(void)
245113ceae66SPeter Maydell{
245213ceae66SPeter Maydell    g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
245313ceae66SPeter Maydell    return 0;
245413ceae66SPeter Maydell}
245513ceae66SPeter MaydellEOF
245613ceae66SPeter Maydell        if compile_prog "$gio_cflags" "$gio_libs" ; then
245720cf7b8eSDenis Plotnikov            pass=yes
245876346b62SPeter Maydell        else
245920cf7b8eSDenis Plotnikov            pass=no
2460f876b765SMarc-André Lureau        fi
2461f876b765SMarc-André Lureau
246220cf7b8eSDenis Plotnikov        if test "$pass" = "yes" &&
246320cf7b8eSDenis Plotnikov            $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
246425a97a56SMarc-André Lureau            gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
246525a97a56SMarc-André Lureau            gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
246625a97a56SMarc-André Lureau        fi
246720cf7b8eSDenis Plotnikov    fi
246820cf7b8eSDenis Plotnikov
246920cf7b8eSDenis Plotnikov    if test "$pass" = "no"; then
247020cf7b8eSDenis Plotnikov        if test "$gio" = "yes"; then
247120cf7b8eSDenis Plotnikov            feature_not_found "gio" "Install libgio >= 2.0"
247220cf7b8eSDenis Plotnikov        else
247320cf7b8eSDenis Plotnikov            gio=no
247420cf7b8eSDenis Plotnikov        fi
247520cf7b8eSDenis Plotnikov    else
247620cf7b8eSDenis Plotnikov        gio=yes
247720cf7b8eSDenis Plotnikov    fi
247820cf7b8eSDenis Plotnikovfi
247925a97a56SMarc-André Lureau
2480977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
2481977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
2482977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
2483977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
2484977a82abSDaniel P. Berrangecat > $TMPC <<EOF
2485977a82abSDaniel P. Berrange#include <glib.h>
2486977a82abSDaniel P. Berrange#include <unistd.h>
2487977a82abSDaniel P. Berrange
2488977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
2489977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
2490977a82abSDaniel P. Berrange
2491977a82abSDaniel P. Berrangeint main(void) {
2492977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
2493977a82abSDaniel P. Berrange   return 0;
2494977a82abSDaniel P. Berrange}
2495977a82abSDaniel P. BerrangeEOF
2496977a82abSDaniel P. Berrange
2497215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then
2498977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
2499977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
2500977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
2501977a82abSDaniel P. Berrange	       "build target"
2502977a82abSDaniel P. Berrangefi
2503977a82abSDaniel P. Berrange
25049bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2
25059bda600bSEric Blakecat > $TMPC << EOF
25069bda600bSEric Blake#include <glib.h>
25079bda600bSEric Blaketypedef struct Foo {
25089bda600bSEric Blake    int i;
25099bda600bSEric Blake} Foo;
25109bda600bSEric Blakestatic void foo_free(Foo *f)
25119bda600bSEric Blake{
25129bda600bSEric Blake    g_free(f);
25139bda600bSEric Blake}
25149bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
25159bda600bSEric Blakeint main(void) { return 0; }
25169bda600bSEric BlakeEOF
25179bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
25189bda600bSEric Blake    if cc_has_warning_flag "-Wno-unused-function"; then
25199bda600bSEric Blake        glib_cflags="$glib_cflags -Wno-unused-function"
25205770e8afSPaolo Bonzini        CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
25219bda600bSEric Blake    fi
25229bda600bSEric Blakefi
25239bda600bSEric Blake
2524e26110cfSFam Zheng##########################################
2525e26110cfSFam Zheng# SHA command probe for modules
2526e26110cfSFam Zhengif test "$modules" = yes; then
2527e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
2528e26110cfSFam Zheng    for c in $shacmd_probe; do
25298ccefb91SFam Zheng        if has $c; then
2530e26110cfSFam Zheng            shacmd="$c"
2531e26110cfSFam Zheng            break
2532e26110cfSFam Zheng        fi
2533e26110cfSFam Zheng    done
2534e26110cfSFam Zheng    if test "$shacmd" = ""; then
2535e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2536e26110cfSFam Zheng    fi
2537e18df141SAnthony Liguorifi
2538e18df141SAnthony Liguori
2539e18df141SAnthony Liguori##########################################
25407aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX
25413b8acc11SPaolo Bonzini
25427aaa6a16SPaolo Bonziniif test "$tpm" = ""; then
25437aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes"; then
25447aaa6a16SPaolo Bonzini    tpm=no
25453b8acc11SPaolo Bonzini  else
25467aaa6a16SPaolo Bonzini    tpm=yes
25477aaa6a16SPaolo Bonzini  fi
25487aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then
25497aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes" ; then
25507aaa6a16SPaolo Bonzini    error_exit "TPM emulation only available on POSIX systems"
25517aaa6a16SPaolo Bonzini  fi
25523b8acc11SPaolo Bonzinifi
25533b8acc11SPaolo Bonzini
25543b8acc11SPaolo Bonzini##########################################
2555f652e6afSaurel32# fdt probe
2556e169e1e1SPeter Maydell
2557fbb4121dSPaolo Bonzinicase "$fdt" in
2558fbb4121dSPaolo Bonzini  auto | enabled | internal)
2559fbb4121dSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
2560aef45d51SDaniel P. Berrange    git_submodules="${git_submodules} dtc"
2561fbb4121dSPaolo Bonzini    ;;
2562fbb4121dSPaolo Bonziniesac
2563f652e6afSaurel32
256420ff075bSMichael Walle##########################################
25659d49bcf6SMarkus Armbruster# opengl probe (for sdl2, gtk)
2566b1546f32SGerd Hoffmann
2567da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
2568bc6a3565SAkihiko Odaki  epoxy=no
2569bc6a3565SAkihiko Odaki  if $pkg_config epoxy; then
2570bc6a3565SAkihiko Odaki    cat > $TMPC << EOF
2571bc6a3565SAkihiko Odaki#include <epoxy/egl.h>
2572bc6a3565SAkihiko Odakiint main(void) { return 0; }
2573bc6a3565SAkihiko OdakiEOF
2574bc6a3565SAkihiko Odaki    if compile_prog "" "" ; then
2575bc6a3565SAkihiko Odaki      epoxy=yes
2576bc6a3565SAkihiko Odaki    fi
2577bc6a3565SAkihiko Odaki  fi
2578bc6a3565SAkihiko Odaki
2579bc6a3565SAkihiko Odaki  if test "$epoxy" = "yes" ; then
2580bc6a3565SAkihiko Odaki    opengl_cflags="$($pkg_config --cflags epoxy)"
2581bc6a3565SAkihiko Odaki    opengl_libs="$($pkg_config --libs epoxy)"
2582da076ffeSGerd Hoffmann    opengl=yes
258320ff075bSMichael Walle  else
2584da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
2585bc6a3565SAkihiko Odaki      feature_not_found "opengl" "Please install epoxy with EGL"
258620ff075bSMichael Walle    fi
2587f676c67eSJeremy White    opengl_cflags=""
2588da076ffeSGerd Hoffmann    opengl_libs=""
2589da076ffeSGerd Hoffmann    opengl=no
259020ff075bSMichael Walle  fi
259120ff075bSMichael Wallefi
259220ff075bSMichael Walle
2593dcc38d1cSMarcelo Tosatti##########################################
2594a99d57bbSWanlong Gao# libnuma probe
2595a99d57bbSWanlong Gao
2596a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
2597a99d57bbSWanlong Gao  cat > $TMPC << EOF
2598a99d57bbSWanlong Gao#include <numa.h>
2599a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
2600a99d57bbSWanlong GaoEOF
2601a99d57bbSWanlong Gao
2602a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
2603a99d57bbSWanlong Gao    numa=yes
2604ab318051SMarc-André Lureau    numa_libs="-lnuma"
2605a99d57bbSWanlong Gao  else
2606a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
2607a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
2608a99d57bbSWanlong Gao    fi
2609a99d57bbSWanlong Gao    numa=no
2610a99d57bbSWanlong Gao  fi
2611a99d57bbSWanlong Gaofi
2612a99d57bbSWanlong Gao
2613955727d2SCortland Tölva# check for usbfs
2614955727d2SCortland Tölvahave_usbfs=no
2615955727d2SCortland Tölvaif test "$linux_user" = "yes"; then
261696566d09SThomas Petazzoni  cat > $TMPC << EOF
261796566d09SThomas Petazzoni#include <linux/usbdevice_fs.h>
261896566d09SThomas Petazzoni
261996566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES
262096566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined"
262196566d09SThomas Petazzoni#endif
262296566d09SThomas Petazzoni
262396566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM
262496566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined"
262596566d09SThomas Petazzoni#endif
262696566d09SThomas Petazzoni
262796566d09SThomas Petazzoniint main(void)
262896566d09SThomas Petazzoni{
262996566d09SThomas Petazzoni    return 0;
263096566d09SThomas Petazzoni}
263196566d09SThomas PetazzoniEOF
263296566d09SThomas Petazzoni  if compile_prog "" ""; then
2633955727d2SCortland Tölva    have_usbfs=yes
2634955727d2SCortland Tölva  fi
2635955727d2SCortland Tölvafi
2636751bcc39SMarc-André Lureau
2637de5071c5SBlue Swirl##########################################
2638d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
2639d9840e25STomoki Sekiyama
2640e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
2641e633a5c6SEric Blake        test "$vss_win32_sdk" != "no" ; then
2642d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
2643690604f6SMichael Roth    "")   vss_win32_include="-isystem $source_path" ;;
2644d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
2645d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
2646690604f6SMichael Roth          vss_win32_include="-isystem $source_path/.sdk/vss"
2647d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
2648d9840e25STomoki Sekiyama	  ;;
2649690604f6SMichael Roth    *)    vss_win32_include="-isystem $vss_win32_sdk"
2650d9840e25STomoki Sekiyama  esac
2651d9840e25STomoki Sekiyama  cat > $TMPC << EOF
2652d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
2653d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
2654d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
2655d9840e25STomoki SekiyamaEOF
2656d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
2657d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
2658d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
2659315d3184SFam Zheng    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
2660f33ca81fSMichael Roth    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
2661d9840e25STomoki Sekiyama  else
2662d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
2663d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
2664d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
2665d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
2666d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
2667d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
2668d9840e25STomoki Sekiyama      feature_not_found "VSS support"
2669d9840e25STomoki Sekiyama    fi
2670d9840e25STomoki Sekiyama    guest_agent_with_vss="no"
2671d9840e25STomoki Sekiyama  fi
2672d9840e25STomoki Sekiyamafi
2673d9840e25STomoki Sekiyama
2674d9840e25STomoki Sekiyama##########################################
2675d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
2676d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
2677d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
2678d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
2679d9840e25STomoki Sekiyama
2680e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
2681e633a5c6SEric Blake        test "$guest_agent_with_vss" = "yes" ; then
2682d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
2683d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
2684d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
2685d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
2686d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
2687d9840e25STomoki Sekiyama    else
2688d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
2689d9840e25STomoki Sekiyama    fi
2690d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
2691d9840e25STomoki Sekiyama    win_sdk=""
2692d9840e25STomoki Sekiyama  fi
2693d9840e25STomoki Sekiyamafi
2694d9840e25STomoki Sekiyama
2695d9840e25STomoki Sekiyama##########################################
269650cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h
2697e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
269850cbebb9SMichael Roth  cat > $TMPC << EOF
269950cbebb9SMichael Roth#include <windows.h>
270050cbebb9SMichael Roth#include <ntddscsi.h>
270150cbebb9SMichael Rothint main(void) {
270250cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS)
270350cbebb9SMichael Roth#error Missing required ioctl definitions
270450cbebb9SMichael Roth#endif
270550cbebb9SMichael Roth  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
270650cbebb9SMichael Roth  return addr.Lun;
270750cbebb9SMichael Roth}
270850cbebb9SMichael RothEOF
270950cbebb9SMichael Roth  if compile_prog "" "" ; then
271050cbebb9SMichael Roth    guest_agent_ntddscsi=yes
2711996b9cdcSMatt Hines    libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
271250cbebb9SMichael Roth  fi
271350cbebb9SMichael Rothfi
271450cbebb9SMichael Roth
271550cbebb9SMichael Roth##########################################
27168ca80760SRichard Henderson# capstone
27178ca80760SRichard Henderson
2718e219c499SRichard Hendersoncase "$capstone" in
27198b18cdbfSRichard Henderson  auto | enabled | internal)
27208b18cdbfSRichard Henderson    # Simpler to always update submodule, even if not needed.
2721e219c499SRichard Henderson    git_submodules="${git_submodules} capstone"
2722e219c499SRichard Henderson    ;;
2723e219c499SRichard Hendersonesac
27248ca80760SRichard Henderson
27258ca80760SRichard Henderson##########################################
2726519175a2SAlex Barcelo# check and set a backend for coroutine
2727d0e2fce5SAneesh Kumar K.V
27287c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
272933c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows
273033c53c54SDaniel P. Berrange# specific one.
27317c2acc70SPeter Maydell
27327c2acc70SPeter Maydellucontext_works=no
2733d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
2734d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
2735d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
2736cdf84806SPeter Maydell#ifdef __stub_makecontext
2737cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
2738cdf84806SPeter Maydell#endif
273975cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
2740d0e2fce5SAneesh Kumar K.VEOF
2741d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
27427c2acc70SPeter Maydell    ucontext_works=yes
2743d0e2fce5SAneesh Kumar K.V  fi
2744519175a2SAlex Barcelofi
27457c2acc70SPeter Maydell
27467c2acc70SPeter Maydellif test "$coroutine" = ""; then
27477c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
27487c2acc70SPeter Maydell    coroutine=win32
27497c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
27507c2acc70SPeter Maydell    coroutine=ucontext
2751519175a2SAlex Barcelo  else
27527c2acc70SPeter Maydell    coroutine=sigaltstack
27537c2acc70SPeter Maydell  fi
27547c2acc70SPeter Maydellelse
27557c2acc70SPeter Maydell  case $coroutine in
27567c2acc70SPeter Maydell  windows)
27577c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
27587c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
27597c2acc70SPeter Maydell    fi
27607c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
27617c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
27627c2acc70SPeter Maydell    coroutine=win32
27637c2acc70SPeter Maydell    ;;
27647c2acc70SPeter Maydell  ucontext)
27657c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
27667c2acc70SPeter Maydell      feature_not_found "ucontext"
27677c2acc70SPeter Maydell    fi
27687c2acc70SPeter Maydell    ;;
276933c53c54SDaniel P. Berrange  sigaltstack)
27707c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
27717c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
27727c2acc70SPeter Maydell    fi
27737c2acc70SPeter Maydell    ;;
27747c2acc70SPeter Maydell  *)
277576ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
27767c2acc70SPeter Maydell    ;;
27777c2acc70SPeter Maydell  esac
2778d0e2fce5SAneesh Kumar K.Vfi
2779d0e2fce5SAneesh Kumar K.V
278070c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then
278170c60c08SStefan Hajnoczi  coroutine_pool=yes
278270c60c08SStefan Hajnoczifi
278370c60c08SStefan Hajnoczi
27847d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then
27857d992e4dSPeter Lieven  if test "$coroutine_pool" = "yes"; then
27867d992e4dSPeter Lieven    echo "WARN: disabling coroutine pool for stack usage debugging"
27877d992e4dSPeter Lieven    coroutine_pool=no
27887d992e4dSPeter Lieven  fi
27897d992e4dSPeter Lievenfi
27907d992e4dSPeter Lieven
27911e4f6065SDaniele Buono##################################################
27921e4f6065SDaniele Buono# SafeStack
27931e4f6065SDaniele Buono
27941e4f6065SDaniele Buono
27951e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
27961e4f6065SDaniele Buonocat > $TMPC << EOF
27971e4f6065SDaniele Buonoint main(int argc, char *argv[])
27981e4f6065SDaniele Buono{
27991e4f6065SDaniele Buono#if ! __has_feature(safe_stack)
28001e4f6065SDaniele Buono#error SafeStack Disabled
28011e4f6065SDaniele Buono#endif
28021e4f6065SDaniele Buono    return 0;
28031e4f6065SDaniele Buono}
28041e4f6065SDaniele BuonoEOF
28051e4f6065SDaniele Buono  flag="-fsanitize=safe-stack"
28061e4f6065SDaniele Buono  # Check that safe-stack is supported and enabled.
28071e4f6065SDaniele Buono  if compile_prog "-Werror $flag" "$flag"; then
28081e4f6065SDaniele Buono    # Flag needed both at compilation and at linking
28091e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
28101e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
28111e4f6065SDaniele Buono  else
28121e4f6065SDaniele Buono    error_exit "SafeStack not supported by your compiler"
28131e4f6065SDaniele Buono  fi
28141e4f6065SDaniele Buono  if test "$coroutine" != "ucontext"; then
28151e4f6065SDaniele Buono    error_exit "SafeStack is only supported by the coroutine backend ucontext"
28161e4f6065SDaniele Buono  fi
28171e4f6065SDaniele Buonoelse
28181e4f6065SDaniele Buonocat > $TMPC << EOF
28191e4f6065SDaniele Buonoint main(int argc, char *argv[])
28201e4f6065SDaniele Buono{
28211e4f6065SDaniele Buono#if defined(__has_feature)
28221e4f6065SDaniele Buono#if __has_feature(safe_stack)
28231e4f6065SDaniele Buono#error SafeStack Enabled
28241e4f6065SDaniele Buono#endif
28251e4f6065SDaniele Buono#endif
28261e4f6065SDaniele Buono    return 0;
28271e4f6065SDaniele Buono}
28281e4f6065SDaniele BuonoEOF
28291e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then
28301e4f6065SDaniele Buono  # Make sure that safe-stack is disabled
28311e4f6065SDaniele Buono  if ! compile_prog "-Werror" ""; then
28321e4f6065SDaniele Buono    # SafeStack was already enabled, try to explicitly remove the feature
28331e4f6065SDaniele Buono    flag="-fno-sanitize=safe-stack"
28341e4f6065SDaniele Buono    if ! compile_prog "-Werror $flag" "$flag"; then
28351e4f6065SDaniele Buono      error_exit "Configure cannot disable SafeStack"
28361e4f6065SDaniele Buono    fi
28371e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
28381e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
28391e4f6065SDaniele Buono  fi
28401e4f6065SDaniele Buonoelse # "$safe_stack" = ""
28411e4f6065SDaniele Buono  # Set safe_stack to yes or no based on pre-existing flags
28421e4f6065SDaniele Buono  if compile_prog "-Werror" ""; then
28431e4f6065SDaniele Buono    safe_stack="no"
28441e4f6065SDaniele Buono  else
28451e4f6065SDaniele Buono    safe_stack="yes"
28461e4f6065SDaniele Buono    if test "$coroutine" != "ucontext"; then
28471e4f6065SDaniele Buono      error_exit "SafeStack is only supported by the coroutine backend ucontext"
28481e4f6065SDaniele Buono    fi
28491e4f6065SDaniele Buono  fi
28501e4f6065SDaniele Buonofi
28511e4f6065SDaniele Buonofi
28527d992e4dSPeter Lieven
285376a347e1SRichard Henderson########################################
285476a347e1SRichard Henderson# check if cpuid.h is usable.
285576a347e1SRichard Henderson
285676a347e1SRichard Hendersoncat > $TMPC << EOF
285776a347e1SRichard Henderson#include <cpuid.h>
285876a347e1SRichard Hendersonint main(void) {
2859774d566cSPeter Maydell    unsigned a, b, c, d;
2860774d566cSPeter Maydell    int max = __get_cpuid_max(0, 0);
2861774d566cSPeter Maydell
2862774d566cSPeter Maydell    if (max >= 1) {
2863774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
2864774d566cSPeter Maydell    }
2865774d566cSPeter Maydell
2866774d566cSPeter Maydell    if (max >= 7) {
2867774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
2868774d566cSPeter Maydell    }
2869774d566cSPeter Maydell
287076a347e1SRichard Henderson    return 0;
287176a347e1SRichard Henderson}
287276a347e1SRichard HendersonEOF
287376a347e1SRichard Hendersonif compile_prog "" "" ; then
287476a347e1SRichard Henderson    cpuid_h=yes
287576a347e1SRichard Hendersonfi
287676a347e1SRichard Henderson
28775dd89908SRichard Henderson##########################################
28785dd89908SRichard Henderson# avx2 optimization requirement check
28795dd89908SRichard Henderson#
28805dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable,
28815dd89908SRichard Henderson# since we won't be able to select the new routines.
28825dd89908SRichard Henderson
2883e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
28845dd89908SRichard Henderson  cat > $TMPC << EOF
28855dd89908SRichard Henderson#pragma GCC push_options
28865dd89908SRichard Henderson#pragma GCC target("avx2")
28875dd89908SRichard Henderson#include <cpuid.h>
28885dd89908SRichard Henderson#include <immintrin.h>
28895dd89908SRichard Hendersonstatic int bar(void *a) {
28905dd89908SRichard Henderson    __m256i x = *(__m256i *)a;
28915dd89908SRichard Henderson    return _mm256_testz_si256(x, x);
28925dd89908SRichard Henderson}
28935dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); }
28945dd89908SRichard HendersonEOF
28955b945f23SRichard Henderson  if compile_object "-Werror" ; then
28965dd89908SRichard Henderson    avx2_opt="yes"
289786583a07SLiam Merwick  else
289886583a07SLiam Merwick    avx2_opt="no"
28995dd89908SRichard Henderson  fi
29005dd89908SRichard Hendersonfi
29015dd89908SRichard Henderson
29026b8cd447SRobert Hoo##########################################
29036b8cd447SRobert Hoo# avx512f optimization requirement check
29046b8cd447SRobert Hoo#
29056b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable,
29066b8cd447SRobert Hoo# since we won't be able to select the new routines.
29076b8cd447SRobert Hoo# by default, it is turned off.
29086b8cd447SRobert Hoo# if user explicitly want to enable it, check environment
29096b8cd447SRobert Hoo
29106b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
29116b8cd447SRobert Hoo  cat > $TMPC << EOF
29126b8cd447SRobert Hoo#pragma GCC push_options
29136b8cd447SRobert Hoo#pragma GCC target("avx512f")
29146b8cd447SRobert Hoo#include <cpuid.h>
29156b8cd447SRobert Hoo#include <immintrin.h>
29166b8cd447SRobert Hoostatic int bar(void *a) {
29176b8cd447SRobert Hoo    __m512i x = *(__m512i *)a;
29186b8cd447SRobert Hoo    return _mm512_test_epi64_mask(x, x);
29196b8cd447SRobert Hoo}
29206b8cd447SRobert Hooint main(int argc, char *argv[])
29216b8cd447SRobert Hoo{
29226b8cd447SRobert Hoo	return bar(argv[0]);
29236b8cd447SRobert Hoo}
29246b8cd447SRobert HooEOF
29255b945f23SRichard Henderson  if ! compile_object "-Werror" ; then
29266b8cd447SRobert Hoo    avx512f_opt="no"
29276b8cd447SRobert Hoo  fi
29286b8cd447SRobert Hooelse
29296b8cd447SRobert Hoo  avx512f_opt="no"
29306b8cd447SRobert Hoofi
29316b8cd447SRobert Hoo
2932f540166bSRichard Henderson########################################
2933f540166bSRichard Henderson# check if __[u]int128_t is usable.
2934f540166bSRichard Henderson
2935f540166bSRichard Hendersonint128=no
2936f540166bSRichard Hendersoncat > $TMPC << EOF
2937f540166bSRichard Henderson__int128_t a;
2938f540166bSRichard Henderson__uint128_t b;
2939f540166bSRichard Hendersonint main (void) {
2940f540166bSRichard Henderson  a = a + b;
2941f540166bSRichard Henderson  b = a * b;
2942464e3671SPeter Maydell  a = a * a;
2943f540166bSRichard Henderson  return 0;
2944f540166bSRichard Henderson}
2945f540166bSRichard HendersonEOF
2946f540166bSRichard Hendersonif compile_prog "" "" ; then
2947f540166bSRichard Henderson    int128=yes
2948f540166bSRichard Hendersonfi
294976a347e1SRichard Henderson
29507ebee43eSRichard Henderson#########################################
29517ebee43eSRichard Henderson# See if 128-bit atomic operations are supported.
29527ebee43eSRichard Henderson
29537ebee43eSRichard Hendersonatomic128=no
29547ebee43eSRichard Hendersonif test "$int128" = "yes"; then
29557ebee43eSRichard Henderson  cat > $TMPC << EOF
29567ebee43eSRichard Hendersonint main(void)
29577ebee43eSRichard Henderson{
29587ebee43eSRichard Henderson  unsigned __int128 x = 0, y = 0;
2959bceac547SThomas Huth  y = __atomic_load(&x, 0);
2960bceac547SThomas Huth  __atomic_store(&x, y, 0);
2961bceac547SThomas Huth  __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
29627ebee43eSRichard Henderson  return 0;
29637ebee43eSRichard Henderson}
29647ebee43eSRichard HendersonEOF
29657ebee43eSRichard Henderson  if compile_prog "" "" ; then
29667ebee43eSRichard Henderson    atomic128=yes
29677ebee43eSRichard Henderson  fi
29687ebee43eSRichard Hendersonfi
29697ebee43eSRichard Henderson
2970e6cd4bb5SRichard Hendersoncmpxchg128=no
2971e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then
2972e6cd4bb5SRichard Henderson  cat > $TMPC << EOF
2973e6cd4bb5SRichard Hendersonint main(void)
2974e6cd4bb5SRichard Henderson{
2975e6cd4bb5SRichard Henderson  unsigned __int128 x = 0, y = 0;
2976e6cd4bb5SRichard Henderson  __sync_val_compare_and_swap_16(&x, y, x);
2977e6cd4bb5SRichard Henderson  return 0;
2978e6cd4bb5SRichard Henderson}
2979e6cd4bb5SRichard HendersonEOF
2980e6cd4bb5SRichard Henderson  if compile_prog "" "" ; then
2981e6cd4bb5SRichard Henderson    cmpxchg128=yes
2982e6cd4bb5SRichard Henderson  fi
2983e6cd4bb5SRichard Hendersonfi
2984e6cd4bb5SRichard Henderson
2985fd0e6053SJohn Snow########################################
2986fd0e6053SJohn Snow# check if ccache is interfering with
2987fd0e6053SJohn Snow# semantic analysis of macros
2988fd0e6053SJohn Snow
29895e4dfd3dSJohn Snowunset CCACHE_CPP2
2990fd0e6053SJohn Snowccache_cpp2=no
2991fd0e6053SJohn Snowcat > $TMPC << EOF
2992fd0e6053SJohn Snowstatic const int Z = 1;
2993fd0e6053SJohn Snow#define fn() ({ Z; })
2994fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
2995fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
2996fd0e6053SJohn Snow#define ID(X) (X)
2997fd0e6053SJohn Snowint main(int argc, char *argv[])
2998fd0e6053SJohn Snow{
2999fd0e6053SJohn Snow    int x = 0, y = 0;
3000fd0e6053SJohn Snow    x = ID(x);
3001fd0e6053SJohn Snow    x = fn();
3002fd0e6053SJohn Snow    fn();
3003fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
3004fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
3005fd0e6053SJohn Snow    return 0;
3006fd0e6053SJohn Snow}
3007fd0e6053SJohn SnowEOF
3008fd0e6053SJohn Snow
3009fd0e6053SJohn Snowif ! compile_object "-Werror"; then
3010fd0e6053SJohn Snow    ccache_cpp2=yes
3011fd0e6053SJohn Snowfi
3012fd0e6053SJohn Snow
3013b553a042SJohn Snow#################################################
3014b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
3015b553a042SJohn Snow
3016b553a042SJohn Snowif test "$fortify_source" != "no"; then
3017b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
3018b553a042SJohn Snow    fortify_source="no";
3019e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
3020cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
3021b553a042SJohn Snow    fortify_source="no";
3022b553a042SJohn Snow  else
3023b553a042SJohn Snow    fortify_source="yes"
3024b553a042SJohn Snow  fi
3025b553a042SJohn Snowfi
3026b553a042SJohn Snow
3027d2042378SAneesh Kumar K.V##########################################
3028a40161cbSPaolo Bonzini# check for usable membarrier system call
3029a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then
3030a40161cbSPaolo Bonzini    have_membarrier=no
3031a40161cbSPaolo Bonzini    if test "$mingw32" = "yes" ; then
3032a40161cbSPaolo Bonzini        have_membarrier=yes
3033a40161cbSPaolo Bonzini    elif test "$linux" = "yes" ; then
3034a40161cbSPaolo Bonzini        cat > $TMPC << EOF
3035a40161cbSPaolo Bonzini    #include <linux/membarrier.h>
3036a40161cbSPaolo Bonzini    #include <sys/syscall.h>
3037a40161cbSPaolo Bonzini    #include <unistd.h>
3038a40161cbSPaolo Bonzini    #include <stdlib.h>
3039a40161cbSPaolo Bonzini    int main(void) {
3040a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
3041a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
3042a40161cbSPaolo Bonzini	exit(0);
3043a40161cbSPaolo Bonzini    }
3044a40161cbSPaolo BonziniEOF
3045a40161cbSPaolo Bonzini        if compile_prog "" "" ; then
3046a40161cbSPaolo Bonzini            have_membarrier=yes
3047a40161cbSPaolo Bonzini        fi
3048a40161cbSPaolo Bonzini    fi
3049a40161cbSPaolo Bonzini    if test "$have_membarrier" = "no"; then
3050a40161cbSPaolo Bonzini      feature_not_found "membarrier" "membarrier system call not available"
3051a40161cbSPaolo Bonzini    fi
3052a40161cbSPaolo Bonzinielse
3053a40161cbSPaolo Bonzini    # Do not enable it by default even for Mingw32, because it doesn't
3054a40161cbSPaolo Bonzini    # work on Wine.
3055a40161cbSPaolo Bonzini    membarrier=no
3056a40161cbSPaolo Bonzinifi
3057a40161cbSPaolo Bonzini
3058a40161cbSPaolo Bonzini##########################################
3059f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment
30604f67366eSThomas Huthhave_afalg=no
3061f0d92b56SLongpeng(Mike)cat > $TMPC << EOF
3062f0d92b56SLongpeng(Mike)#include <errno.h>
3063f0d92b56SLongpeng(Mike)#include <sys/types.h>
3064f0d92b56SLongpeng(Mike)#include <sys/socket.h>
3065f0d92b56SLongpeng(Mike)#include <linux/if_alg.h>
3066f0d92b56SLongpeng(Mike)int main(void) {
3067f0d92b56SLongpeng(Mike)    int sock;
3068f0d92b56SLongpeng(Mike)    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
3069f0d92b56SLongpeng(Mike)    return sock;
3070f0d92b56SLongpeng(Mike)}
3071f0d92b56SLongpeng(Mike)EOF
3072f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then
3073f0d92b56SLongpeng(Mike)    have_afalg=yes
3074f0d92b56SLongpeng(Mike)fi
3075f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes"
3076f0d92b56SLongpeng(Mike)then
3077f0d92b56SLongpeng(Mike)    if test "$have_afalg" != "yes"
3078f0d92b56SLongpeng(Mike)    then
3079f0d92b56SLongpeng(Mike)	error_exit "AF_ALG requested but could not be detected"
3080f0d92b56SLongpeng(Mike)    fi
3081f0d92b56SLongpeng(Mike)fi
3082f0d92b56SLongpeng(Mike)
3083f0d92b56SLongpeng(Mike)
3084db1ed1abSRichard Henderson##########################################
3085247724cbSMarc-André Lureau# checks for sanitizers
3086247724cbSMarc-André Lureau
3087247724cbSMarc-André Lureauhave_asan=no
3088247724cbSMarc-André Lureauhave_ubsan=no
3089d83414e1SMarc-André Lureauhave_asan_iface_h=no
3090d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
3091247724cbSMarc-André Lureau
3092247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
3093b9f44da2SMarc-André Lureau  write_c_skeleton
3094247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
3095247724cbSMarc-André Lureau      have_asan=yes
3096247724cbSMarc-André Lureau  fi
3097b9f44da2SMarc-André Lureau
3098b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
3099b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
3100b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
3101b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
3102b9f44da2SMarc-André Lureau#include <stdlib.h>
3103b9f44da2SMarc-André Lureauint main(void) {
3104b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
3105f2dfe54cSLeonid Bloch    if (tmp != NULL) {
3106b9f44da2SMarc-André Lureau        return *(int *)(tmp + 2);
3107b9f44da2SMarc-André Lureau    }
3108d1abf3fcSOlaf Hering    return 1;
3109f2dfe54cSLeonid Bloch}
3110b9f44da2SMarc-André LureauEOF
3111247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
3112247724cbSMarc-André Lureau      have_ubsan=yes
3113247724cbSMarc-André Lureau  fi
3114d83414e1SMarc-André Lureau
3115d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
3116d83414e1SMarc-André Lureau      have_asan_iface_h=yes
3117d83414e1SMarc-André Lureau  fi
3118d83414e1SMarc-André Lureau
3119d83414e1SMarc-André Lureau  cat > $TMPC << EOF
3120d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
3121d83414e1SMarc-André Lureauint main(void) {
3122d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
3123d83414e1SMarc-André Lureau  return 0;
3124d83414e1SMarc-André Lureau}
3125d83414e1SMarc-André LureauEOF
3126d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
3127d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
3128d83414e1SMarc-André Lureau  fi
3129247724cbSMarc-André Lureaufi
3130247724cbSMarc-André Lureau
31310aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers;
31320aebab04SLingfeng Yang# keep it separate until that is not the case.
31330aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
31340aebab04SLingfeng Yang  error_exit "TSAN is not supported with other sanitiziers."
31350aebab04SLingfeng Yangfi
31360aebab04SLingfeng Yanghave_tsan=no
31370aebab04SLingfeng Yanghave_tsan_iface_fiber=no
31380aebab04SLingfeng Yangif test "$tsan" = "yes" ; then
31390aebab04SLingfeng Yang  write_c_skeleton
31400aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
31410aebab04SLingfeng Yang      have_tsan=yes
31420aebab04SLingfeng Yang  fi
31430aebab04SLingfeng Yang  cat > $TMPC << EOF
31440aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h>
31450aebab04SLingfeng Yangint main(void) {
31460aebab04SLingfeng Yang  __tsan_create_fiber(0);
31470aebab04SLingfeng Yang  return 0;
31480aebab04SLingfeng Yang}
31490aebab04SLingfeng YangEOF
31500aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
31510aebab04SLingfeng Yang      have_tsan_iface_fiber=yes
31520aebab04SLingfeng Yang  fi
31530aebab04SLingfeng Yangfi
31540aebab04SLingfeng Yang
3155adc28027SAlexander Bulekov##########################################
3156675b9b53SMarc-André Lureau# check for slirp
3157675b9b53SMarc-André Lureau
3158675b9b53SMarc-André Lureaucase "$slirp" in
31594d34a86bSPaolo Bonzini  auto | enabled | internal)
31604d34a86bSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
31617c57bdd8SMarc-André Lureau    git_submodules="${git_submodules} slirp"
3162675b9b53SMarc-André Lureau    ;;
3163675b9b53SMarc-André Lureauesac
3164675b9b53SMarc-André Lureau
3165b8e0c493SJoelle van Dyne# Check for slirp smbd dupport
3166b8e0c493SJoelle van Dyne: ${smbd=${SMBD-/usr/sbin/smbd}}
3167b8e0c493SJoelle van Dyneif test "$slirp_smbd" != "no" ; then
3168b8e0c493SJoelle van Dyne  if test "$mingw32" = "yes" ; then
3169b8e0c493SJoelle van Dyne    if test "$slirp_smbd" = "yes" ; then
3170b8e0c493SJoelle van Dyne      error_exit "Host smbd not supported on this platform."
3171b8e0c493SJoelle van Dyne    fi
3172b8e0c493SJoelle van Dyne    slirp_smbd=no
3173b8e0c493SJoelle van Dyne  else
3174b8e0c493SJoelle van Dyne    slirp_smbd=yes
3175b8e0c493SJoelle van Dyne  fi
3176b8e0c493SJoelle van Dynefi
3177b8e0c493SJoelle van Dyne
317854e7aac0SAlexey Krasikov##########################################
317954e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall
318054e7aac0SAlexey Krasikov
318154e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then
318254e7aac0SAlexey Krasikov
318354e7aac0SAlexey Krasikov    have_keyring=no
318454e7aac0SAlexey Krasikov    cat > $TMPC << EOF
318554e7aac0SAlexey Krasikov#include <errno.h>
318654e7aac0SAlexey Krasikov#include <asm/unistd.h>
318754e7aac0SAlexey Krasikov#include <linux/keyctl.h>
318854e7aac0SAlexey Krasikov#include <unistd.h>
318954e7aac0SAlexey Krasikovint main(void) {
319054e7aac0SAlexey Krasikov    return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
319154e7aac0SAlexey Krasikov}
319254e7aac0SAlexey KrasikovEOF
319354e7aac0SAlexey Krasikov    if compile_prog "" "" ; then
319454e7aac0SAlexey Krasikov        have_keyring=yes
319554e7aac0SAlexey Krasikov    fi
319654e7aac0SAlexey Krasikovfi
319754e7aac0SAlexey Krasikovif test "$secret_keyring" != "no"
319854e7aac0SAlexey Krasikovthen
3199b418d265SDavid Edmondson    if test "$have_keyring" = "yes"
320054e7aac0SAlexey Krasikov    then
320154e7aac0SAlexey Krasikov	secret_keyring=yes
320254e7aac0SAlexey Krasikov    else
320354e7aac0SAlexey Krasikov	if test "$secret_keyring" = "yes"
320454e7aac0SAlexey Krasikov	then
320554e7aac0SAlexey Krasikov	    error_exit "syscall __NR_keyctl requested, \
320654e7aac0SAlexey Krasikovbut not implemented on your system"
320754e7aac0SAlexey Krasikov	else
320854e7aac0SAlexey Krasikov	    secret_keyring=no
320954e7aac0SAlexey Krasikov	fi
321054e7aac0SAlexey Krasikov    fi
321154e7aac0SAlexey Krasikovfi
321254e7aac0SAlexey Krasikov
321392500362SAlexey Krasikov##########################################
3214e86ecd4bSJuan Quintela# End of CC checks
3215e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
3216e86ecd4bSJuan Quintela
3217d83414e1SMarc-André Lureauwrite_c_skeleton
3218d83414e1SMarc-André Lureau
32191d728c39SBlue Swirlif test "$gcov" = "yes" ; then
3220bf0e56a3SMarc-André Lureau  :
3221b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then
3222086d5f75SPaolo Bonzini  QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
3223086d5f75SPaolo Bonzini  debug=no
3224086d5f75SPaolo Bonzinifi
3225086d5f75SPaolo Bonzini
3226086d5f75SPaolo Bonzinicase "$ARCH" in
3227086d5f75SPaolo Bonzinialpha)
3228086d5f75SPaolo Bonzini  # Ensure there's only a single GP
3229086d5f75SPaolo Bonzini  QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
3230086d5f75SPaolo Bonzini;;
3231086d5f75SPaolo Bonziniesac
3232086d5f75SPaolo Bonzini
3233086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then
3234086d5f75SPaolo Bonzini  QEMU_CFLAGS="-p $QEMU_CFLAGS"
3235086d5f75SPaolo Bonzini  QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
3236086d5f75SPaolo Bonzinifi
3237a316e378SJuan Quintela
3238247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
3239db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
3240db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
3241d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
3242d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
3243d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
3244d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
3245d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
3246d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
3247d83414e1SMarc-André Lureau  fi
3248247724cbSMarc-André Lureaufi
32490aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then
32500aebab04SLingfeng Yang  if test "$have_tsan_iface_fiber" = "yes" ; then
32510aebab04SLingfeng Yang    QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
32520aebab04SLingfeng Yang    QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
32530aebab04SLingfeng Yang  else
32540aebab04SLingfeng Yang    error_exit "Cannot enable TSAN due to missing fiber annotation interface."
32550aebab04SLingfeng Yang  fi
32560aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then
32570aebab04SLingfeng Yang  error_exit "Cannot enable TSAN due to missing sanitize thread interface."
32580aebab04SLingfeng Yangfi
3259247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
3260db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
3261db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
3262247724cbSMarc-André Lureaufi
3263247724cbSMarc-André Lureau
32646542aa9cSPeter Lieven##########################################
32653efac6ebSTomáš Golembiovský
32660aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
32670aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then
3268e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
3269db5adeaaSPaolo Bonzini        QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
3270e86ecd4bSJuan Quintela    fi
3271e86ecd4bSJuan Quintelafi
3272e86ecd4bSJuan Quintela
3273952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
3274952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
3275cb8baa77SMark Cave-Ayland    flags="--no-seh --nxcompat"
3276cb8baa77SMark Cave-Ayland
3277cb8baa77SMark Cave-Ayland    # Disable ASLR for debug builds to allow debugging with gdb
3278cb8baa77SMark Cave-Ayland    if test "$debug" = "no" ; then
3279cb8baa77SMark Cave-Ayland        flags="--dynamicbase $flags"
3280cb8baa77SMark Cave-Ayland    fi
3281cb8baa77SMark Cave-Ayland
3282cb8baa77SMark Cave-Ayland    for flag in $flags; do
3283e9a3591fSChristian Borntraeger        if ld_has $flag ; then
3284db5adeaaSPaolo Bonzini            QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
3285952afb71SBlue Swirl        fi
3286952afb71SBlue Swirl    done
3287952afb71SBlue Swirlfi
3288952afb71SBlue Swirl
32899d6bc27bSMichael Roth# Probe for guest agent support/options
32909d6bc27bSMichael Roth
3291e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
3292a5125905SLaurent Vivier  if [ "$softmmu" = no -a "$want_tools" = no ] ; then
3293a5125905SLaurent Vivier      guest_agent=no
3294a5125905SLaurent Vivier  elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
3295e8ef31a3SMichael Tokarev      guest_agent=yes
3296e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
3297e8ef31a3SMichael Tokarev      guest_agent=no
3298e8ef31a3SMichael Tokarev  else
3299e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
3300ca35f780SPaolo Bonzini  fi
33014b1c11fdSDaniel P. Berrangefi
3302ca35f780SPaolo Bonzini
3303b846ab7cSPaolo Bonzini# Guest agent Windows MSI package
33049d6bc27bSMichael Roth
33059d6bc27bSMichael Rothif test "$QEMU_GA_MANUFACTURER" = ""; then
33069d6bc27bSMichael Roth  QEMU_GA_MANUFACTURER=QEMU
33079d6bc27bSMichael Rothfi
33089d6bc27bSMichael Rothif test "$QEMU_GA_DISTRO" = ""; then
33099d6bc27bSMichael Roth  QEMU_GA_DISTRO=Linux
33109d6bc27bSMichael Rothfi
33119d6bc27bSMichael Rothif test "$QEMU_GA_VERSION" = ""; then
331289138857SStefan Weil    QEMU_GA_VERSION=$(cat $source_path/VERSION)
33139d6bc27bSMichael Rothfi
33149d6bc27bSMichael Roth
3315b846ab7cSPaolo BonziniQEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
33169d6bc27bSMichael Roth
3317ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
3318ca35f780SPaolo Bonziniroms=
3319e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
3320ba7c60c2SPaolo Bonzini        test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
3321ba7c60c2SPaolo Bonzini        test "$targetos" != "haiku" && test "$softmmu" = yes ; then
3322e57218b6SPeter Maydell    # Different host OS linkers have different ideas about the name of the ELF
3323c65d5e4eSBrad Smith    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
3324c65d5e4eSBrad Smith    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
3325c65d5e4eSBrad Smith    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
3326e57218b6SPeter Maydell        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
3327e57218b6SPeter Maydell            ld_i386_emulation="$emu"
3328ca35f780SPaolo Bonzini            roms="optionrom"
3329e57218b6SPeter Maydell            break
3330e57218b6SPeter Maydell        fi
3331e57218b6SPeter Maydell    done
3332ca35f780SPaolo Bonzinifi
3333ca35f780SPaolo Bonzini
33342e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
3335a5b2afd5SThomas Huth# or -march=z10 (which is the lowest architecture level that Clang supports)
33369933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
33372e33c3f8SThomas Huth  write_c_skeleton
3338a5b2afd5SThomas Huth  compile_prog "-march=z900" ""
3339a5b2afd5SThomas Huth  has_z900=$?
33403af448b3SThomas Huth  if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
3341a5b2afd5SThomas Huth    if [ $has_z900 != 0 ]; then
3342a5b2afd5SThomas Huth      echo "WARNING: Your compiler does not support the z900!"
3343a5b2afd5SThomas Huth      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
3344a5b2afd5SThomas Huth    fi
33459933c305SChristian Borntraeger    roms="$roms s390-ccw"
33461ef6bfc2SPhilippe Mathieu-Daudé    # SLOF is required for building the s390-ccw firmware on s390x,
33471ef6bfc2SPhilippe Mathieu-Daudé    # since it is using the libnet code from SLOF for network booting.
33481ef6bfc2SPhilippe Mathieu-Daudé    git_submodules="${git_submodules} roms/SLOF"
33491ef6bfc2SPhilippe Mathieu-Daudé  fi
33509933c305SChristian Borntraegerfi
33519933c305SChristian Borntraeger
335211cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler.
335311cde1c8SBruno 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.
335411cde1c8SBruno Dominguezif has $cxx; then
335511cde1c8SBruno Dominguez    cat > $TMPC <<EOF
335611cde1c8SBruno Dominguezint c_function(void);
335711cde1c8SBruno Dominguezint main(void) { return c_function(); }
335811cde1c8SBruno DominguezEOF
335911cde1c8SBruno Dominguez
336011cde1c8SBruno Dominguez    compile_object
336111cde1c8SBruno Dominguez
336211cde1c8SBruno Dominguez    cat > $TMPCXX <<EOF
336311cde1c8SBruno Dominguezextern "C" {
336411cde1c8SBruno Dominguez   int c_function(void);
336511cde1c8SBruno Dominguez}
336611cde1c8SBruno Dominguezint c_function(void) { return 42; }
336711cde1c8SBruno DominguezEOF
336811cde1c8SBruno Dominguez
336911cde1c8SBruno Dominguez    update_cxxflags
337011cde1c8SBruno Dominguez
3371a2866660SPaolo Bonzini    if do_cxx $CXXFLAGS $EXTRA_CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
337211cde1c8SBruno Dominguez        # C++ compiler $cxx works ok with C compiler $cc
337311cde1c8SBruno Dominguez        :
337411cde1c8SBruno Dominguez    else
337511cde1c8SBruno Dominguez        echo "C++ compiler $cxx does not work with C compiler $cc"
337611cde1c8SBruno Dominguez        echo "Disabling C++ specific optional code"
337711cde1c8SBruno Dominguez        cxx=
337811cde1c8SBruno Dominguez    fi
337911cde1c8SBruno Dominguezelse
338011cde1c8SBruno Dominguez    echo "No C++ compiler available; disabling C++ specific optional code"
338111cde1c8SBruno Dominguez    cxx=
338211cde1c8SBruno Dominguezfi
338311cde1c8SBruno Dominguez
33847d7dbf9dSDan Streetmanif !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
33857d7dbf9dSDan Streetman    exit 1
33865d91a2edSYonggang Luofi
33875d91a2edSYonggang Luo
338898ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
338997a847bcSbellard
339098ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
339198ec69acSJuan Quintelaecho >> $config_host_mak
339298ec69acSJuan Quintela
3393e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
3394cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
3395aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
33967d7dbf9dSDan Streetmanecho "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
3397804edf29SJuan Quintela
3398f8393946Saurel32if test "$debug_tcg" = "yes" ; then
33992358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
3400f8393946Saurel32fi
34011625af87Saliguoriif test "$strip_opt" = "yes" ; then
340252ba784dSHollis Blanchard  echo "STRIP=${strip}" >> $config_host_mak
34031625af87Saliguorifi
340467b915a5Sbellardif test "$mingw32" = "yes" ; then
340598ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
3406d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
3407d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
3408f33ca81fSMichael Roth    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
3409d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
3410d9840e25STomoki Sekiyama  fi
341150cbebb9SMichael Roth  if test "$guest_agent_ntddscsi" = "yes" ; then
341276dc75caSTomáš Golembiovský    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
341350cbebb9SMichael Roth  fi
34149dacf32dSYossi Hindin  echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
34159dacf32dSYossi Hindin  echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
34169dacf32dSYossi Hindin  echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
34179dacf32dSYossi Hindin  echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
3418210fa556Spbrookelse
341935f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
3420210fa556Spbrookfi
3421128ab2ffSblueswir1
3422dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
3423dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
3424dffcb71cSMark McLoughlinfi
3425dffcb71cSMark McLoughlin
342683fb7adfSbellardif test "$darwin" = "yes" ; then
342798ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
342883fb7adfSbellardfi
3429b29fe3edSmalc
3430ec530c81Sbellardif test "$solaris" = "yes" ; then
343198ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
3432ec530c81Sbellardfi
343397a847bcSbellardif test "$static" = "yes" ; then
343498ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
343597a847bcSbellardfi
34361ba16968SStefan Weilif test "$profiler" = "yes" ; then
34372358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
343805c2a3e7Sbellardfi
3439c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then
3440c932ce31SPaolo Bonzini  echo "CONFIG_TOOLS=y" >> $config_host_mak
3441c932ce31SPaolo Bonzinifi
3442f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then
3443f15bff25SPaolo Bonzini  echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
3444f15bff25SPaolo Bonzinifi
3445b8e0c493SJoelle van Dyneif test "$slirp_smbd" = "yes" ; then
3446b8e0c493SJoelle van Dyne  echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
3447e2d8830eSBrad  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
3448b8e0c493SJoelle van Dynefi
34494cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then
34504cc600d2SPaolo Bonzini  echo "CONFIG_GPROF=y" >> $config_host_mak
34514cc600d2SPaolo Bonzinifi
3452b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
3453b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
3454e5f05f8cSKevin Wolfif test "$block_drv_whitelist_tools" = "yes" ; then
3455e5f05f8cSKevin Wolf  echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
3456e5f05f8cSKevin Wolffi
3457dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then
3458dce512deSChristoph Hellwig  echo "CONFIG_XFS=y" >> $config_host_mak
3459dce512deSChristoph Hellwigfi
346089138857SStefan Weilqemu_version=$(head $source_path/VERSION)
34612358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
346298ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
34632b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
346417969268SFam Zhengif test "$modules" = "yes"; then
3465e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
3466e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
346789138857SStefan Weil  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
346817969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
346917969268SFam Zhengfi
3470bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then
3471bd83c861SChristian Ehrhardt  echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
3472bd83c861SChristian Ehrhardtfi
3473955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then
3474955727d2SCortland Tölva  echo "CONFIG_USBFS=y" >> $config_host_mak
3475955727d2SCortland Tölvafi
3476f876b765SMarc-André Lureauif test "$gio" = "yes" ; then
3477f876b765SMarc-André Lureau    echo "CONFIG_GIO=y" >> $config_host_mak
3478f876b765SMarc-André Lureau    echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
3479f876b765SMarc-André Lureau    echo "GIO_LIBS=$gio_libs" >> $config_host_mak
34805ecfb76cSPaolo Bonzinifi
34815ecfb76cSPaolo Bonziniif test "$gdbus_codegen" != "" ; then
348225a97a56SMarc-André Lureau    echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
3483f876b765SMarc-André Lureaufi
3484a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
3485277abf15SJan Vesely
34861badb709SPaolo Bonziniif test "$xen" = "enabled" ; then
34876dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
3488d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
3489582ea95fSMarc-André Lureau  echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
3490582ea95fSMarc-André Lureau  echo "XEN_LIBS=$xen_libs" >> $config_host_mak
3491e37630caSaliguorifi
34925e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
34935e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
34945e9be92dSNicholas Bellingerfi
3495af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then
3496af3bba76SPaolo Bonzini  echo "CONFIG_VHOST_NET=y" >> $config_host_mak
3497af3bba76SPaolo Bonzinifi
3498af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then
349956f41de7SPaolo Bonzini  echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
350003ce5744SNikolay Nikolaevfi
3501108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then
3502108a6481SCindy Lu  echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
3503108a6481SCindy Lufi
3504042cea27SGongleiif test "$vhost_crypto" = "yes" ; then
3505042cea27SGonglei  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
3506042cea27SGongleifi
3507fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then
3508fc0b9b0eSStefan Hajnoczi  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
35095fe97d88SStefano Garzarella  if test "$vhost_user" = "yes" ; then
35105fe97d88SStefano Garzarella    echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
35115fe97d88SStefano Garzarella  fi
3512fc0b9b0eSStefan Hajnoczifi
3513299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then
3514299e6f19SPaolo Bonzini  echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
3515299e6f19SPaolo Bonzinifi
3516e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then
3517e6a74868SMarc-André Lureau  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
3518e6a74868SMarc-André Lureaufi
3519108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then
3520108a6481SCindy Lu  echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
3521108a6481SCindy Lufi
352298fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then
352398fc1adaSDr. David Alan Gilbert  echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
352498fc1adaSDr. David Alan Gilbertfi
3525a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then
3526a40161cbSPaolo Bonzini  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
3527a40161cbSPaolo Bonzinifi
3528e5b46549SRichard Hendersonif test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
3529e5b46549SRichard Henderson  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
3530e5b46549SRichard Hendersonfi
353158d3f3ffSGerd Hoffmann
3532da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
3533da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
3534de2d3005SPaolo Bonzini  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
3535da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
353620ff075bSMichael Wallefi
353720ff075bSMichael Walle
353899f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then
353999f2dbd3SLiang Li  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
354099f2dbd3SLiang Lifi
354199f2dbd3SLiang Li
35426b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then
35436b8cd447SRobert Hoo  echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
35446b8cd447SRobert Hoofi
35456b8cd447SRobert Hoo
354683fb7adfSbellard# XXX: suppress that
35477d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
35482358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
35497d3505c5Sbellardfi
35507d3505c5Sbellard
35513556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
35523556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
35533556c233SPaolo Bonzinifi
355420ff6c80SAnthony Liguori
35557c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
355670c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
355770c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
355870c60c08SStefan Hajnoczielse
355970c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
356070c60c08SStefan Hajnoczifi
3561d0e2fce5SAneesh Kumar K.V
35627d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then
35637d992e4dSPeter Lieven  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
35647d992e4dSPeter Lievenfi
35657d992e4dSPeter Lieven
3566f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then
3567f0d92b56SLongpeng(Mike)  echo "CONFIG_AF_ALG=y" >> $config_host_mak
3568f0d92b56SLongpeng(Mike)fi
3569f0d92b56SLongpeng(Mike)
3570d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
3571d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
3572d83414e1SMarc-André Lureaufi
3573d83414e1SMarc-André Lureau
35740aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
35750aebab04SLingfeng Yang    echo "CONFIG_TSAN=y" >> $config_host_mak
35760aebab04SLingfeng Yangfi
35770aebab04SLingfeng Yang
357876a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
357976a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
358076a347e1SRichard Hendersonfi
358176a347e1SRichard Henderson
3582f540166bSRichard Hendersonif test "$int128" = "yes" ; then
3583f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
3584f540166bSRichard Hendersonfi
3585f540166bSRichard Henderson
35867ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then
35877ebee43eSRichard Henderson  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
35887ebee43eSRichard Hendersonfi
35897ebee43eSRichard Henderson
3590e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then
3591e6cd4bb5SRichard Henderson  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
3592e6cd4bb5SRichard Hendersonfi
3593e6cd4bb5SRichard Henderson
3594ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then
3595ed1701c6SDr. David Alan Gilbert  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
3596ed1701c6SDr. David Alan Gilbertfi
3597ed1701c6SDr. David Alan Gilbert
35983b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
35993cae16dbSPaolo Bonzini  echo 'CONFIG_TPM=y' >> $config_host_mak
36003b8acc11SPaolo Bonzinifi
36013b8acc11SPaolo Bonzini
36022da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
36032da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
3604392fb643SFam Zheng  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
36052da776dbSMichael R. Hinesfi
36062da776dbSMichael R. Hines
360721ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then
360821ab34c9SMarcel Apfelbaum  echo "CONFIG_PVRDMA=y" >> $config_host_mak
360921ab34c9SMarcel Apfelbaumfi
361021ab34c9SMarcel Apfelbaum
3611a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then
3612a6b1d4c0SChanglong Xie  echo "CONFIG_REPLICATION=y" >> $config_host_mak
3613a6b1d4c0SChanglong Xiefi
3614a6b1d4c0SChanglong Xie
3615ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then
3616ba59fb77SPaolo Bonzini  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
3617ba59fb77SPaolo Bonzinifi
3618e0580342SKamil Rytarowski
36192f740136SJeff Codyif test "$bochs" = "yes" ; then
36202f740136SJeff Cody  echo "CONFIG_BOCHS=y" >> $config_host_mak
36212f740136SJeff Codyfi
36222f740136SJeff Codyif test "$cloop" = "yes" ; then
36232f740136SJeff Cody  echo "CONFIG_CLOOP=y" >> $config_host_mak
36242f740136SJeff Codyfi
36252f740136SJeff Codyif test "$dmg" = "yes" ; then
36262f740136SJeff Cody  echo "CONFIG_DMG=y" >> $config_host_mak
36272f740136SJeff Codyfi
36282f740136SJeff Codyif test "$qcow1" = "yes" ; then
36292f740136SJeff Cody  echo "CONFIG_QCOW1=y" >> $config_host_mak
36302f740136SJeff Codyfi
36312f740136SJeff Codyif test "$vdi" = "yes" ; then
36322f740136SJeff Cody  echo "CONFIG_VDI=y" >> $config_host_mak
36332f740136SJeff Codyfi
36342f740136SJeff Codyif test "$vvfat" = "yes" ; then
36352f740136SJeff Cody  echo "CONFIG_VVFAT=y" >> $config_host_mak
36362f740136SJeff Codyfi
36372f740136SJeff Codyif test "$qed" = "yes" ; then
36382f740136SJeff Cody  echo "CONFIG_QED=y" >> $config_host_mak
36392f740136SJeff Codyfi
36402f740136SJeff Codyif test "$parallels" = "yes" ; then
36412f740136SJeff Cody  echo "CONFIG_PARALLELS=y" >> $config_host_mak
36422f740136SJeff Codyfi
36432f740136SJeff Cody
364440e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
364540e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
364626fffe29SEmilio G. Cota    # Copy the export object list to the build dir
364726fffe29SEmilio G. Cota    if test "$ld_dynamic_list" = "yes" ; then
364826fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
364926fffe29SEmilio G. Cota	ld_symbols=qemu-plugins-ld.symbols
365026fffe29SEmilio G. Cota	cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
365126fffe29SEmilio G. Cota    elif test "$ld_exported_symbols_list" = "yes" ; then
365226fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
365326fffe29SEmilio G. Cota	ld64_symbols=qemu-plugins-ld64.symbols
365426fffe29SEmilio G. Cota	echo "# Automatically generated by configure - do not modify" > $ld64_symbols
365526fffe29SEmilio G. Cota	grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
365626fffe29SEmilio G. Cota	    sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
365726fffe29SEmilio G. Cota    else
365826fffe29SEmilio G. Cota	error_exit \
365926fffe29SEmilio G. Cota	    "If \$plugins=yes, either \$ld_dynamic_list or " \
366026fffe29SEmilio G. Cota	    "\$ld_exported_symbols_list should have been set to 'yes'."
366126fffe29SEmilio G. Cota    fi
366240e8c6f4SAlex Bennéefi
366340e8c6f4SAlex Bennée
3664f48e590aSAlex Bennéeif test -n "$gdb_bin"; then
3665b1863cccSAlex Bennée    gdb_version=$($gdb_bin --version | head -n 1)
3666d6a66c81SAlex Bennée    if version_ge ${gdb_version##* } 9.1; then
3667f48e590aSAlex Bennée        echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
3668f48e590aSAlex Bennée    fi
3669b1863cccSAlex Bennéefi
3670f48e590aSAlex Bennée
367154e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then
367254e7aac0SAlexey Krasikov  echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
367354e7aac0SAlexey Krasikovfi
367454e7aac0SAlexey Krasikov
367598ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
3676804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
3677c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
367839d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
3679a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
368009e93326SPaolo Bonziniecho "NINJA=$ninja" >> $config_host_mak
3681804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
3682433de74cSBastian Koppelmannecho "HOST_CC=$host_cc" >> $config_host_mak
3683a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
3684859aef02SPaolo Bonzini  echo "CONFIG_IASL=$iasl" >> $config_host_mak
3685a31a8642SMichael S. Tsirkinfi
3686804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
3687cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak
36885f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak
36893dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
3690804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
3691804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
369246eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
3693a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
369411cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
3695a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
3696a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak
36978a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
3698e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
3699804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
3700f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak
3701804edf29SJuan Quintela
3702b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then
3703b767d257SMarek Marczykowski-Górecki  echo "CONFIG_RNG_NONE=y" >> $config_host_mak
3704b767d257SMarek Marczykowski-Góreckifi
3705b767d257SMarek Marczykowski-Górecki
37066efd7517SPeter Maydell# use included Linux headers
37076efd7517SPeter Maydellif test "$linux" = "yes" ; then
3708a307beb6SAndreas Färber  mkdir -p linux-headers
37096efd7517SPeter Maydell  case "$cpu" in
37104da270beSPaolo Bonzini  i386|x86_64)
371108312a63SPeter Maydell    linux_arch=x86
37126efd7517SPeter Maydell    ;;
3713d8ff892dSPaolo Bonzini  ppc|ppc64)
371408312a63SPeter Maydell    linux_arch=powerpc
37156efd7517SPeter Maydell    ;;
37166efd7517SPeter Maydell  s390x)
371708312a63SPeter Maydell    linux_arch=s390
371808312a63SPeter Maydell    ;;
37191f080313SClaudio Fontana  aarch64)
37201f080313SClaudio Fontana    linux_arch=arm64
37211f080313SClaudio Fontana    ;;
3722222e7d11SSanjay Lal  mips64)
3723222e7d11SSanjay Lal    linux_arch=mips
3724222e7d11SSanjay Lal    ;;
372508312a63SPeter Maydell  *)
372608312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
372708312a63SPeter Maydell    linux_arch="$cpu"
37286efd7517SPeter Maydell    ;;
37296efd7517SPeter Maydell  esac
373008312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
373108312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
373208312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
373308312a63SPeter Maydell    fi
37346efd7517SPeter Maydellfi
37356efd7517SPeter Maydell
373697a847bcSbellardfor target in $target_list; do
373797a847bcSbellard    target_dir="$target"
373857a93f16SPhilippe Mathieu-Daudé    target_name=$(echo $target | cut -d '-' -f 1)$EXESUF
373997a847bcSbellard    mkdir -p $target_dir
3740fdb75aefSPaolo Bonzini    case $target in
3741fdb75aefSPaolo Bonzini        *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
3742fdb75aefSPaolo Bonzini        *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
37432408a527Saurel32    esac
374456aebc89Spbrookdone
37457d13299dSbellard
3746765686d6SPaolo Bonziniecho "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
3747fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then
3748fdb75aefSPaolo Bonzini  echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
3749fdb75aefSPaolo Bonzinifi
3750a540f158SPeter Crosthwaite
3751a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
3752a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
3753ab318051SMarc-André Lureau  echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
3754a99d57bbSWanlong Gaofi
3755a99d57bbSWanlong Gao
3756fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
3757fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
3758fd0e6053SJohn Snowfi
3759fd0e6053SJohn Snow
37601e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
37611e4f6065SDaniele Buono  echo "CONFIG_SAFESTACK=y" >> $config_host_mak
37621e4f6065SDaniele Buonofi
37631e4f6065SDaniele Buono
3764e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now.
3765e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree
3766e29e5c6eSPeter Maydell# (these can be both files and directories).
3767e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This
3768e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is
3769e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun
3770e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and
3771e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own
3772e29e5c6eSPeter Maydell# directory and symlink the directory instead.
377309db9b9dSGerd Hoffmann# UNLINK is used to remove symlinks from older development versions
377409db9b9dSGerd Hoffmann# that might get into the way when doing "git update" without doing
377509db9b9dSGerd Hoffmann# a "make distclean" in between.
37762038f8c8SPaolo BonziniLINKS="Makefile"
37773941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target"
3778ddcf607fSGerd HoffmannLINKS="$LINKS pc-bios/optionrom/Makefile"
3779e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile"
37808db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile"
3781e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp"
3782e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
3783bbbd9b6eSWillian RampazzoLINKS="$LINKS tests/avocado tests/data"
378439950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check"
37858f8fd9edSCleber RosaLINKS="$LINKS python"
3786c17a386bSAlex BennéeLINKS="$LINKS contrib/plugins/Makefile "
378709db9b9dSGerd HoffmannUNLINK="pc-bios/keymaps"
3788753d11f2SRichard Hendersonfor bios_file in \
3789753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
37903a631b8eSBin Meng    $source_path/pc-bios/*.elf \
3791225a9ab8SAlexey Kardashevskiy    $source_path/pc-bios/*.lid \
3792753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
3793753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
3794e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
3795753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
37964e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
3797cd946e5cSJohn Arbuckle    $source_path/pc-bios/palcode-* \
3798cd946e5cSJohn Arbuckle    $source_path/pc-bios/qemu_vga.ndrv
3799cd946e5cSJohn Arbuckle
3800753d11f2SRichard Hendersondo
3801e29e5c6eSPeter Maydell    LINKS="$LINKS pc-bios/$(basename $bios_file)"
38027ea78b74SJan Kiszkadone
3803e29e5c6eSPeter Maydellfor f in $LINKS ; do
38040f4d8894SPaolo Bonzini    if [ -e "$source_path/$f" ]; then
3805*5dce7b8dSPaolo Bonzini        mkdir -p `dirname ./$f`
3806f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
3807f9245e10SPeter Maydell    fi
38087d13299dSbellarddone
380909db9b9dSGerd Hoffmannfor f in $UNLINK ; do
381009db9b9dSGerd Hoffmann    if [ -L "$f" ]; then
381109db9b9dSGerd Hoffmann        rm -f "$f"
381209db9b9dSGerd Hoffmann    fi
381309db9b9dSGerd Hoffmanndone
38141ad2134fSPaul Brook
38152038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do
38162038f8c8SPaolo Bonzini  export $i
38172038f8c8SPaolo Bonzinidone
3818de6d7e6bSAlex Bennéeexport target_list source_path use_containers ARCH
38192038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh)
38202038f8c8SPaolo Bonzini
3821c34ebfdcSAnthony Liguori# temporary config to build submodules
38228db2a4fdSGerd Hoffmannfor rom in seabios; do
3823c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
382437116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
3825c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
3826cdbd727cSRichard Henderson    echo "AS=$as" >> $config_mak
38275f6f0e27SRichard Henderson    echo "CCAS=$ccas" >> $config_mak
3828c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
3829c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
38303dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
3831c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
3832a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
3833c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
38349f81aeb5SAlistair Francis    echo "RANLIB=$ranlib" >> $config_mak
3835c34ebfdcSAnthony Liguoridone
3836c34ebfdcSAnthony Liguori
383798409991SHelge Konetzkaconfig_mak=pc-bios/optionrom/config.mak
383898409991SHelge Konetzkaecho "# Automatically generated by configure - do not modify" > $config_mak
383998409991SHelge Konetzkaecho "TOPSRC_DIR=$source_path" >> $config_mak
384098409991SHelge Konetzka
3841a5665051SPaolo Bonziniif test "$skip_meson" = no; then
3842fc929892SMarc-André Lureau  cross="config-meson.cross.new"
3843fc929892SMarc-André Lureau  meson_quote() {
3844ac7ebcc5SPaolo Bonzini    test $# = 0 && return
384547b30835SPaolo Bonzini    echo "'$(echo $* | sed "s/ /','/g")'"
3846fc929892SMarc-André Lureau  }
3847fc929892SMarc-André Lureau
3848fc929892SMarc-André Lureau  echo "# Automatically generated by configure - do not modify" > $cross
3849fc929892SMarc-André Lureau  echo "[properties]" >> $cross
3850d1d5e9eeSAlex Bennée
3851d1d5e9eeSAlex Bennée  # unroll any custom device configs
3852d1d5e9eeSAlex Bennée  for a in $device_archs; do
3853d1d5e9eeSAlex Bennée      eval "c=\$devices_${a}"
3854d1d5e9eeSAlex Bennée      echo "${a}-softmmu = '$c'" >> $cross
3855d1d5e9eeSAlex Bennée  done
3856d1d5e9eeSAlex Bennée
3857fc929892SMarc-André Lureau  test -z "$cxx" && echo "link_language = 'c'" >> $cross
385847b30835SPaolo Bonzini  echo "[built-in options]" >> $cross
3859a2866660SPaolo Bonzini  echo "c_args = [$(meson_quote $CFLAGS $EXTRA_CFLAGS)]" >> $cross
3860a2866660SPaolo Bonzini  echo "cpp_args = [$(meson_quote $CXXFLAGS $EXTRA_CXXFLAGS)]" >> $cross
3861a2866660SPaolo Bonzini  echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross
3862a2866660SPaolo Bonzini  echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross
3863fc929892SMarc-André Lureau  echo "[binaries]" >> $cross
38644dba2789SPaolo Bonzini  echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
38654dba2789SPaolo Bonzini  test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
38664dba2789SPaolo Bonzini  test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
386747b30835SPaolo Bonzini  echo "ar = [$(meson_quote $ar)]" >> $cross
386847b30835SPaolo Bonzini  echo "nm = [$(meson_quote $nm)]" >> $cross
386947b30835SPaolo Bonzini  echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
387047b30835SPaolo Bonzini  echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
3871e8178514SPaolo Bonzini  if has $sdl2_config; then
387247b30835SPaolo Bonzini    echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
3873e8178514SPaolo Bonzini  fi
387447b30835SPaolo Bonzini  echo "strip = [$(meson_quote $strip)]" >> $cross
387547b30835SPaolo Bonzini  echo "windres = [$(meson_quote $windres)]" >> $cross
38763812c0c4SJoelle van Dyne  if test "$cross_compile" = "yes"; then
3877fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
3878fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
3879ba7c60c2SPaolo Bonzini    echo "system = '$targetos'" >> $cross
3880823eb013SPaolo Bonzini    case "$cpu" in
3881f6bca9dfSJoelle van Dyne        i386)
3882fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
3883fc929892SMarc-André Lureau            ;;
3884fc929892SMarc-André Lureau        *)
3885823eb013SPaolo Bonzini            echo "cpu_family = '$cpu'" >> $cross
3886fc929892SMarc-André Lureau            ;;
3887fc929892SMarc-André Lureau    esac
3888fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
3889fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
3890fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
3891fc929892SMarc-André Lureau    else
3892fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
3893fc929892SMarc-André Lureau    fi
3894fc929892SMarc-André Lureau  else
3895fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
3896fc929892SMarc-André Lureau  fi
3897fc929892SMarc-André Lureau  mv $cross config-meson.cross
3898fc929892SMarc-André Lureau
3899a5665051SPaolo Bonzini  rm -rf meson-private meson-info meson-logs
390061d63097SPaolo Bonzini  run_meson() {
390109e93326SPaolo Bonzini    NINJA=$ninja $meson setup \
3902d17f305aSPaolo Bonzini        --prefix "$prefix" \
3903d17f305aSPaolo Bonzini        --libdir "$libdir" \
3904d17f305aSPaolo Bonzini        --libexecdir "$libexecdir" \
3905d17f305aSPaolo Bonzini        --bindir "$bindir" \
3906d17f305aSPaolo Bonzini        --includedir "$includedir" \
3907d17f305aSPaolo Bonzini        --datadir "$datadir" \
3908d17f305aSPaolo Bonzini        --mandir "$mandir" \
3909d17f305aSPaolo Bonzini        --sysconfdir "$sysconfdir" \
391016bf7a33SPaolo Bonzini        --localedir "$localedir" \
3911d17f305aSPaolo Bonzini        --localstatedir "$local_statedir" \
39123b4da132SPaolo Bonzini        -Daudio_drv_list=$audio_drv_list \
39133b4da132SPaolo Bonzini        -Ddefault_devices=$default_devices \
3914d17f305aSPaolo Bonzini        -Ddocdir="$docdir" \
391516bf7a33SPaolo Bonzini        -Dqemu_firmwarepath="$firmwarepath" \
391673f3aa37SMarc-André Lureau        -Dqemu_suffix="$qemu_suffix" \
39173b4da132SPaolo Bonzini        -Dsphinx_build="$sphinx_build" \
39183b4da132SPaolo Bonzini        -Dtrace_file="$trace_file" \
3919a5665051SPaolo Bonzini        -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
3920a5665051SPaolo Bonzini        -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
3921a5665051SPaolo Bonzini        -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
3922a5665051SPaolo Bonzini        -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
3923da6d48b9SMarc-André Lureau        -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
3924bf0e56a3SMarc-André Lureau        -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
39253b4da132SPaolo Bonzini        -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
39263b4da132SPaolo Bonzini        -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
3927537b7248SPaolo Bonzini        $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
3928332008e0SThomas Huth        $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
392961d63097SPaolo Bonzini        "$@" $cross_arg "$PWD" "$source_path"
393061d63097SPaolo Bonzini  }
393161d63097SPaolo Bonzini  eval run_meson $meson_options
3932a5665051SPaolo Bonzini  if test "$?" -ne 0 ; then
3933a5665051SPaolo Bonzini      error_exit "meson setup failed"
3934a5665051SPaolo Bonzini  fi
3935699d3884SPaolo Bonzinielse
3936699d3884SPaolo Bonzini  if test -f meson-private/cmd_line.txt; then
3937699d3884SPaolo Bonzini    # Adjust old command line options whose type was changed
3938699d3884SPaolo Bonzini    # Avoids having to use "setup --wipe" when Meson is upgraded
3939699d3884SPaolo Bonzini    perl -i -ne '
3940699d3884SPaolo Bonzini      s/^gettext = true$/gettext = auto/;
3941699d3884SPaolo Bonzini      s/^gettext = false$/gettext = disabled/;
3942654d6b04SPaolo Bonzini      /^b_staticpic/ && next;
3943699d3884SPaolo Bonzini      print;' meson-private/cmd_line.txt
3944699d3884SPaolo Bonzini  fi
3945a5665051SPaolo Bonzinifi
3946a5665051SPaolo Bonzini
39472d838d9bSAlex Bennéeif test -n "${deprecated_features}"; then
39482d838d9bSAlex Bennée    echo "Warning, deprecated features enabled."
3949a476b216SMao Zhongyi    echo "Please see docs/about/deprecated.rst"
39502d838d9bSAlex Bennée    echo "  features: ${deprecated_features}"
39512d838d9bSAlex Bennéefi
39522d838d9bSAlex Bennée
3953e0447a83SThomas Huth# Create list of config switches that should be poisoned in common code...
3954e0447a83SThomas Huth# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
395554b0306eSThomas Huthtarget_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
395654b0306eSThomas Huthif test -n "$target_configs_h" ; then
3957e0447a83SThomas Huth    sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
3958e0447a83SThomas Huth        -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
395954b0306eSThomas Huth        $target_configs_h | sort -u > config-poison.h
396054b0306eSThomas Huthelse
396154b0306eSThomas Huth    :> config-poison.h
396254b0306eSThomas Huthfi
3963e0447a83SThomas Huth
3964dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
3965dc655404SMichael S. Tsirkincat <<EOD >config.status
3966dc655404SMichael S. Tsirkin#!/bin/sh
3967dc655404SMichael S. Tsirkin# Generated by configure.
3968dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
3969dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
3970dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
3971dc655404SMichael S. TsirkinEOD
3972e811da7fSDaniel P. Berrangé
3973e811da7fSDaniel P. Berrangépreserve_env() {
3974e811da7fSDaniel P. Berrangé    envname=$1
3975e811da7fSDaniel P. Berrangé
3976e811da7fSDaniel P. Berrangé    eval envval=\$$envname
3977e811da7fSDaniel P. Berrangé
3978e811da7fSDaniel P. Berrangé    if test -n "$envval"
3979e811da7fSDaniel P. Berrangé    then
3980e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
3981e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
3982e811da7fSDaniel P. Berrangé    else
3983e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
3984e811da7fSDaniel P. Berrangé    fi
3985e811da7fSDaniel P. Berrangé}
3986e811da7fSDaniel P. Berrangé
3987e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
3988e811da7fSDaniel P. Berrangé# features/build target configure will detect
3989e811da7fSDaniel P. Berrangépreserve_env AR
3990e811da7fSDaniel P. Berrangépreserve_env AS
3991e811da7fSDaniel P. Berrangépreserve_env CC
3992e811da7fSDaniel P. Berrangépreserve_env CPP
39938009da03SPaolo Bonzinipreserve_env CFLAGS
3994e811da7fSDaniel P. Berrangépreserve_env CXX
39958009da03SPaolo Bonzinipreserve_env CXXFLAGS
3996e811da7fSDaniel P. Berrangépreserve_env INSTALL
3997e811da7fSDaniel P. Berrangépreserve_env LD
39988009da03SPaolo Bonzinipreserve_env LDFLAGS
3999e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
4000e811da7fSDaniel P. Berrangépreserve_env LIBTOOL
4001e811da7fSDaniel P. Berrangépreserve_env MAKE
4002e811da7fSDaniel P. Berrangépreserve_env NM
4003e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
4004e811da7fSDaniel P. Berrangépreserve_env PATH
4005e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
4006e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
4007e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
4008e811da7fSDaniel P. Berrangépreserve_env PYTHON
4009e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
4010e811da7fSDaniel P. Berrangépreserve_env SMBD
4011e811da7fSDaniel P. Berrangépreserve_env STRIP
4012e811da7fSDaniel P. Berrangépreserve_env WINDRES
4013e811da7fSDaniel P. Berrangé
4014dc655404SMichael S. Tsirkinprintf "exec" >>config.status
4015a5665051SPaolo Bonzinifor i in "$0" "$@"; do
4016835af899SPaolo Bonzini  test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
4017a5665051SPaolo Bonzinidone
4018cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
4019dc655404SMichael S. Tsirkinchmod +x config.status
4020dc655404SMichael S. Tsirkin
40218cd05ab6SPeter Maydellrm -r "$TMPDIR1"
4022