xref: /openbmc/qemu/configure (revision bbbd9b6e)
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.
16153422040SPaolo Bonzini    QEMU_CXXFLAGS="$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"
1775770e8afSPaolo Bonzini  do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
17852166aa0SJuan Quintela}
17952166aa0SJuan Quintela
18052166aa0SJuan Quintelacompile_prog() {
18152166aa0SJuan Quintela  local_cflags="$1"
18252166aa0SJuan Quintela  local_ldflags="$2"
1835770e8afSPaolo Bonzini  do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
1845770e8afSPaolo Bonzini      $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
18552166aa0SJuan Quintela}
18652166aa0SJuan Quintela
18711568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
18811568d6dSPaolo Bonzinisymlink() {
18972b8b5a1SStefan Weil  rm -rf "$2"
190ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
19172b8b5a1SStefan Weil  ln -s "$1" "$2"
19211568d6dSPaolo Bonzini}
19311568d6dSPaolo Bonzini
1940dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
1950dba6195SLoïc Minier# executable or a builtin)
1960dba6195SLoïc Minierhas() {
1970dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
1980dba6195SLoïc Minier}
1990dba6195SLoïc Minier
2000a01d76fSMarc-André Lureauversion_ge () {
2012df52b9bSAlex Bennée    local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
2022df52b9bSAlex Bennée    local_ver2=$(echo "$2" | tr . ' ')
2030a01d76fSMarc-André Lureau    while true; do
2040a01d76fSMarc-André Lureau        set x $local_ver1
2050a01d76fSMarc-André Lureau        local_first=${2-0}
206c44a33e2SStefano Garzarella        # 'shift 2' if $2 is set, or 'shift' if $2 is not set
207c44a33e2SStefano Garzarella        shift ${2:+2}
2080a01d76fSMarc-André Lureau        local_ver1=$*
2090a01d76fSMarc-André Lureau        set x $local_ver2
2100a01d76fSMarc-André Lureau        # the second argument finished, the first must be greater or equal
2110a01d76fSMarc-André Lureau        test $# = 1 && return 0
2120a01d76fSMarc-André Lureau        test $local_first -lt $2 && return 1
2130a01d76fSMarc-André Lureau        test $local_first -gt $2 && return 0
214c44a33e2SStefano Garzarella        shift ${2:+2}
2150a01d76fSMarc-André Lureau        local_ver2=$*
2160a01d76fSMarc-André Lureau    done
2170a01d76fSMarc-André Lureau}
2180a01d76fSMarc-André Lureau
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
289c87ea116SAlex Bennéexen_ctrl_version="$default_feature"
290c87ea116SAlex Bennéexfs="$default_feature"
291c87ea116SAlex Bennéemembarrier="$default_feature"
2920848f8acSThomas Huthvhost_kernel="$default_feature"
293c87ea116SAlex Bennéevhost_net="$default_feature"
294c87ea116SAlex Bennéevhost_crypto="$default_feature"
295c87ea116SAlex Bennéevhost_scsi="$default_feature"
296c87ea116SAlex Bennéevhost_vsock="$default_feature"
297d88618f7SStefan Hajnoczivhost_user="no"
298c87ea116SAlex Bennéevhost_user_fs="$default_feature"
2990848f8acSThomas Huthvhost_vdpa="$default_feature"
300c87ea116SAlex Bennéerdma="$default_feature"
301c87ea116SAlex Bennéepvrdma="$default_feature"
302377529c0SPaolo Bonzinigprof="no"
303377529c0SPaolo Bonzinidebug_tcg="no"
304377529c0SPaolo Bonzinidebug="no"
305247724cbSMarc-André Lureausanitizers="no"
3060aebab04SLingfeng Yangtsan="no"
307c87ea116SAlex Bennéefortify_source="$default_feature"
308377529c0SPaolo Bonzinistrip_opt="yes"
309377529c0SPaolo Bonzinimingw32="no"
3101d728c39SBlue Swirlgcov="no"
311c7328271SMiroslav RezaninaEXESUF=""
31217969268SFam Zhengmodules="no"
313bd83c861SChristian Ehrhardtmodule_upgrades="no"
314377529c0SPaolo Bonziniprefix="/usr/local"
31510ff82d1SMarc-André Lureauqemu_suffix="qemu"
316377529c0SPaolo Bonzinibsd="no"
317377529c0SPaolo Bonzinilinux="no"
318377529c0SPaolo Bonzinisolaris="no"
319377529c0SPaolo Bonziniprofiler="no"
320377529c0SPaolo Bonzinisoftmmu="yes"
321377529c0SPaolo Bonzinilinux_user="no"
322377529c0SPaolo Bonzinibsd_user="no"
323377529c0SPaolo Bonzinipkgversion=""
32440d6444eSAvi Kivitypie=""
3253556c233SPaolo Bonziniqom_cast_debug="yes"
326baf86d6bSPaolo Bonzinitrace_backends="log"
327377529c0SPaolo Bonzinitrace_file="trace"
328c87ea116SAlex Bennéeopengl="$default_feature"
3295dd89908SRichard Hendersoncpuid_h="no"
330c87ea116SAlex Bennéeavx2_opt="$default_feature"
331c87ea116SAlex Bennéeguest_agent="$default_feature"
332d9840e25STomoki Sekiyamaguest_agent_with_vss="no"
33350cbebb9SMichael Rothguest_agent_ntddscsi="no"
334c87ea116SAlex Bennéevss_win32_sdk="$default_feature"
335d9840e25STomoki Sekiyamawin_sdk="no"
336c87ea116SAlex Bennéewant_tools="$default_feature"
337519175a2SAlex Barcelocoroutine=""
338c87ea116SAlex Bennéecoroutine_pool="$default_feature"
3397d992e4dSPeter Lievendebug_stack_usage="no"
340f0d92b56SLongpeng(Mike)crypto_afalg="no"
341a1c5e949SDaniel P. Berrangetls_priority="NORMAL"
342c87ea116SAlex Bennéetpm="$default_feature"
343c87ea116SAlex Bennéelibssh="$default_feature"
344c87ea116SAlex Bennéelive_block_migration=${default_feature:-yes}
345c87ea116SAlex Bennéenuma="$default_feature"
346c87ea116SAlex Bennéereplication=${default_feature:-yes}
347c87ea116SAlex Bennéebochs=${default_feature:-yes}
348c87ea116SAlex Bennéecloop=${default_feature:-yes}
349c87ea116SAlex Bennéedmg=${default_feature:-yes}
350c87ea116SAlex Bennéeqcow1=${default_feature:-yes}
351c87ea116SAlex Bennéevdi=${default_feature:-yes}
352c87ea116SAlex Bennéevvfat=${default_feature:-yes}
353c87ea116SAlex Bennéeqed=${default_feature:-yes}
354c87ea116SAlex Bennéeparallels=${default_feature:-yes}
355ba59fb77SPaolo Bonzinidebug_mutex="no"
356ba4dd2aaSAlex Bennéeplugins="$default_feature"
357b767d257SMarek Marczykowski-Góreckirng_none="no"
358c87ea116SAlex Bennéesecret_keyring="$default_feature"
359a5665051SPaolo Bonzinimeson=""
3603b4da132SPaolo Bonzinimeson_args=""
36148328880SPaolo Bonzinininja=""
3623b4da132SPaolo Bonzinigio="$default_feature"
363a5665051SPaolo Bonziniskip_meson=no
364b8e0c493SJoelle van Dyneslirp_smbd="$default_feature"
365377529c0SPaolo Bonzini
3663b4da132SPaolo Bonzini# The following Meson options are handled manually (still they
3673b4da132SPaolo Bonzini# are included in the automatically generated help message)
3683b4da132SPaolo Bonzini
3693b4da132SPaolo Bonzini# 1. Track which submodules are needed
3703b4da132SPaolo Bonzinicapstone="auto"
3713b4da132SPaolo Bonzinifdt="auto"
3723b4da132SPaolo Bonzinislirp="auto"
3733b4da132SPaolo Bonzini
3743b4da132SPaolo Bonzini# 2. Support --with/--without option
3753b4da132SPaolo Bonzinidefault_devices="true"
3763b4da132SPaolo Bonzini
3773b4da132SPaolo Bonzini# 3. Automatically enable/disable other options
3783b4da132SPaolo Bonzinitcg="enabled"
3793b4da132SPaolo Bonzinicfi="false"
3803b4da132SPaolo Bonzini
3813b4da132SPaolo Bonzini# 4. Detection partly done in configure
3823b4da132SPaolo Bonzinixen=${default_feature:+disabled}
383898be3e0SPeter Maydell
384c87ea116SAlex Bennée# parse CC options second
385ac0df51dSaliguorifor opt do
38689138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
387ac0df51dSaliguori  case "$opt" in
388ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
3893812c0c4SJoelle van Dyne                    cross_compile="yes"
390ac0df51dSaliguori  ;;
3913d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
392ac0df51dSaliguori  ;;
39383f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
39483f73fceSTomoki Sekiyama  ;;
3952ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
3962ff6b91eSJuan Quintela  ;;
397de385287SAlex Bennée  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
398db5adeaaSPaolo Bonzini                    QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
399e2a2ed06SJuan Quintela  ;;
40011cde1c8SBruno Dominguez  --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
40111cde1c8SBruno Dominguez  ;;
402db5adeaaSPaolo Bonzini  --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
403f9943cd5SGerd Hoffmann                     EXTRA_LDFLAGS="$optarg"
404e2a2ed06SJuan Quintela  ;;
4055bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
4065bc62e01SGerd Hoffmann  ;;
4075bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
4085bc62e01SGerd Hoffmann  ;;
409d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
410d75402b5SAlex Bennée  ;;
411d422b2bcSAlex Bennée  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
412d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
4132038f8c8SPaolo Bonzini                      cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
414d422b2bcSAlex Bennée  ;;
415d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
4162038f8c8SPaolo Bonzini                cc_archs="$cc_archs $cc_arch"
417d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
4182038f8c8SPaolo Bonzini                cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
419d75402b5SAlex Bennée  ;;
420ac0df51dSaliguori  esac
421ac0df51dSaliguoridone
422ac0df51dSaliguori# OS specific
423ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
42493148aa5SStefan Weil# we can eliminate its usage altogether.
425ac0df51dSaliguori
426e49d021eSPeter Maydell# Preferred compiler:
427e49d021eSPeter Maydell#  ${CC} (if set)
428e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
429e49d021eSPeter Maydell#  system compiler
430e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
431e49d021eSPeter Maydell  cc="$host_cc"
432e49d021eSPeter Maydellelse
433b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
434e49d021eSPeter Maydellfi
435e49d021eSPeter Maydell
43683f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
43783f73fceSTomoki Sekiyama  cxx="c++"
43883f73fceSTomoki Sekiyamaelse
43983f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
44083f73fceSTomoki Sekiyamafi
44183f73fceSTomoki Sekiyama
442b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
443cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
4445f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
4453dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
446b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
447b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
4489f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
4494852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
450b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
451b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
45217884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
45317884d7bSSergei Trofimovichquery_pkg_config() {
45417884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
45517884d7bSSergei Trofimovich}
45617884d7bSSergei Trofimovichpkg_config=query_pkg_config
45747c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
458ac0df51dSaliguori
459be17dc90SMichael S. Tsirkin# default flags for all hosts
4602d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
4612d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
4622d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
4632d31515bSPeter Maydell# provides these semantics.)
464086d5f75SPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
465086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
466c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
467be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
4685770e8afSPaolo Bonzini
4695770e8afSPaolo Bonzini# Flags that are needed during configure but later taken care of by Meson
4708a9d3d56SRichard HendersonCONFIGURE_CFLAGS="-std=gnu11 -Wall"
4715770e8afSPaolo BonziniCONFIGURE_LDFLAGS=
472086d5f75SPaolo Bonzini
473be17dc90SMichael S. Tsirkin
474ac0df51dSaliguoricheck_define() {
475ac0df51dSaliguoricat > $TMPC <<EOF
476ac0df51dSaliguori#if !defined($1)
477fd786e1aSPeter Maydell#error $1 not defined
478ac0df51dSaliguori#endif
479ac0df51dSaliguoriint main(void) { return 0; }
480ac0df51dSaliguoriEOF
48152166aa0SJuan Quintela  compile_object
482ac0df51dSaliguori}
483ac0df51dSaliguori
484307119e7SGerd Hoffmanncheck_include() {
485307119e7SGerd Hoffmanncat > $TMPC <<EOF
486307119e7SGerd Hoffmann#include <$1>
487307119e7SGerd Hoffmannint main(void) { return 0; }
488307119e7SGerd HoffmannEOF
489307119e7SGerd Hoffmann  compile_object
490307119e7SGerd Hoffmann}
491307119e7SGerd Hoffmann
49293b25869SJohn Snowwrite_c_skeleton() {
49393b25869SJohn Snow    cat > $TMPC <<EOF
49493b25869SJohn Snowint main(void) { return 0; }
49593b25869SJohn SnowEOF
49693b25869SJohn Snow}
49793b25869SJohn Snow
498bbea4050SPeter Maydellif check_define __linux__ ; then
499bbea4050SPeter Maydell  targetos="Linux"
500bbea4050SPeter Maydellelif check_define _WIN32 ; then
501bbea4050SPeter Maydell  targetos='MINGW32'
502bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
503bbea4050SPeter Maydell  targetos='OpenBSD'
504bbea4050SPeter Maydellelif check_define __sun__ ; then
505bbea4050SPeter Maydell  targetos='SunOS'
506bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
507bbea4050SPeter Maydell  targetos='Haiku'
508951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
509951fedfcSPeter Maydell  targetos='FreeBSD'
510951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
511951fedfcSPeter Maydell  targetos='GNU/kFreeBSD'
512951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
513951fedfcSPeter Maydell  targetos='DragonFly'
514951fedfcSPeter Maydellelif check_define __NetBSD__; then
515951fedfcSPeter Maydell  targetos='NetBSD'
516951fedfcSPeter Maydellelif check_define __APPLE__; then
517951fedfcSPeter Maydell  targetos='Darwin'
518bbea4050SPeter Maydellelse
519951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
520951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
521951fedfcSPeter Maydell  # be the result of a missing compiler.
522951fedfcSPeter Maydell  targetos='bogus'
523bbea4050SPeter Maydellfi
524bbea4050SPeter Maydell
525bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use.
526bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're
527bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify
528bbea4050SPeter Maydell# the correct CPU with the --cpu option.
529bbea4050SPeter Maydellcase $targetos in
530bbea4050SPeter MaydellSunOS)
53189138857SStefan Weil  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
532bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
533bbea4050SPeter Maydell    cpu="x86_64"
534bbea4050SPeter Maydell  fi
535bbea4050SPeter Maydellesac
536bbea4050SPeter Maydell
5372ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
5382ff6b91eSJuan Quintela  # command line argument
5392ff6b91eSJuan Quintela  :
5402ff6b91eSJuan Quintelaelif check_define __i386__ ; then
541ac0df51dSaliguori  cpu="i386"
542ac0df51dSaliguorielif check_define __x86_64__ ; then
543c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
544c72b26ecSRichard Henderson    cpu="x32"
545c72b26ecSRichard Henderson  else
546ac0df51dSaliguori    cpu="x86_64"
547c72b26ecSRichard Henderson  fi
5483aa9bd6cSblueswir1elif check_define __sparc__ ; then
5493aa9bd6cSblueswir1  if check_define __arch64__ ; then
5503aa9bd6cSblueswir1    cpu="sparc64"
5513aa9bd6cSblueswir1  else
5523aa9bd6cSblueswir1    cpu="sparc"
5533aa9bd6cSblueswir1  fi
554fdf7ed96Smalcelif check_define _ARCH_PPC ; then
555fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
556f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
557f8378accSRichard Henderson      cpu="ppc64le"
558f8378accSRichard Henderson    else
559fdf7ed96Smalc      cpu="ppc64"
560f8378accSRichard Henderson    fi
561ac0df51dSaliguori  else
562fdf7ed96Smalc    cpu="ppc"
563fdf7ed96Smalc  fi
564afa05235SAurelien Jarnoelif check_define __mips__ ; then
565afa05235SAurelien Jarno  cpu="mips"
566d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
567d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
568d66ed0eaSAurelien Jarno    cpu="s390x"
569d66ed0eaSAurelien Jarno  else
570d66ed0eaSAurelien Jarno    cpu="s390"
571d66ed0eaSAurelien Jarno  fi
572c4f80543SAlistair Franciselif check_define __riscv ; then
573ba0e7333SRichard Henderson  cpu="riscv"
57421d89f84SPeter Maydellelif check_define __arm__ ; then
57521d89f84SPeter Maydell  cpu="arm"
5761f080313SClaudio Fontanaelif check_define __aarch64__ ; then
5771f080313SClaudio Fontana  cpu="aarch64"
578fdf7ed96Smalcelse
57989138857SStefan Weil  cpu=$(uname -m)
580ac0df51dSaliguorifi
581ac0df51dSaliguori
582359bc95dSPeter MaydellARCH=
583359bc95dSPeter Maydell# Normalise host CPU name and set ARCH.
584359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
5857d13299dSbellardcase "$cpu" in
586ba0e7333SRichard Henderson  ppc|ppc64|s390x|sparc64|x32|riscv)
587898be3e0SPeter Maydell  ;;
588f8378accSRichard Henderson  ppc64le)
589f8378accSRichard Henderson    ARCH="ppc64"
590f8378accSRichard Henderson  ;;
5917d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
59297a847bcSbellard    cpu="i386"
5937d13299dSbellard  ;;
594aaa5fa14Saurel32  x86_64|amd64)
595aaa5fa14Saurel32    cpu="x86_64"
596aaa5fa14Saurel32  ;;
59721d89f84SPeter Maydell  armv*b|armv*l|arm)
59821d89f84SPeter Maydell    cpu="arm"
5997d13299dSbellard  ;;
6001f080313SClaudio Fontana  aarch64)
6011f080313SClaudio Fontana    cpu="aarch64"
6021f080313SClaudio Fontana  ;;
603afa05235SAurelien Jarno  mips*)
604afa05235SAurelien Jarno    cpu="mips"
605afa05235SAurelien Jarno  ;;
6063142255cSblueswir1  sparc|sun4[cdmuv])
607ae228531Sbellard    cpu="sparc"
608ae228531Sbellard  ;;
6097d13299dSbellard  *)
610359bc95dSPeter Maydell    # This will result in either an error or falling back to TCI later
611359bc95dSPeter Maydell    ARCH=unknown
6127d13299dSbellard  ;;
6137d13299dSbellardesac
614359bc95dSPeter Maydellif test -z "$ARCH"; then
615359bc95dSPeter Maydell  ARCH="$cpu"
616359bc95dSPeter Maydellfi
617e2d52ad3SJuan Quintela
6187d13299dSbellard# OS specific
6190dbfc675SJuan Quintela
6207d13299dSbellardcase $targetos in
62167b915a5SbellardMINGW32*)
62267b915a5Sbellard  mingw32="yes"
623898be3e0SPeter Maydell  supported_os="yes"
6249b8e4298SAlex Bennée  plugins="no"
625fb648e9cSDaniel P. Berrangé  pie="no"
62667b915a5Sbellard;;
6275c40d2bdSthsGNU/kFreeBSD)
628a167ba50SAurelien Jarno  bsd="yes"
6295c40d2bdSths;;
6307d3505c5SbellardFreeBSD)
6317d3505c5Sbellard  bsd="yes"
632e2a74729SWarner Losh  bsd_user="yes"
6330db4a067SPaolo Bonzini  make="${MAKE-gmake}"
634f01576f1SJuergen Lock  # needed for kinfo_getvmmap(3) in libutil.h
6357d3505c5Sbellard;;
636c5e97233Sblueswir1DragonFly)
637c5e97233Sblueswir1  bsd="yes"
6380db4a067SPaolo Bonzini  make="${MAKE-gmake}"
639c5e97233Sblueswir1;;
6407d3505c5SbellardNetBSD)
6417d3505c5Sbellard  bsd="yes"
6420db4a067SPaolo Bonzini  make="${MAKE-gmake}"
6437d3505c5Sbellard;;
6447d3505c5SbellardOpenBSD)
6457d3505c5Sbellard  bsd="yes"
6460db4a067SPaolo Bonzini  make="${MAKE-gmake}"
6477d3505c5Sbellard;;
64883fb7adfSbellardDarwin)
64983fb7adfSbellard  bsd="yes"
65083fb7adfSbellard  darwin="yes"
651a0b7cf6bSPeter Maydell  # Disable attempts to use ObjectiveC features in os/object.h since they
652a0b7cf6bSPeter Maydell  # won't work when we're compiling with gcc as a C compiler.
653a0b7cf6bSPeter Maydell  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
65483fb7adfSbellard;;
655ec530c81SbellardSunOS)
656ec530c81Sbellard  solaris="yes"
6570db4a067SPaolo Bonzini  make="${MAKE-gmake}"
658e2d8830eSBrad  smbd="${SMBD-/usr/sfw/sbin/smbd}"
659d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h
660d741429aSBlue Swirl  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
661d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h
662d741429aSBlue Swirl  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
663ec530c81Sbellard;;
664179cf400SAndreas FärberHaiku)
665179cf400SAndreas Färber  haiku="yes"
666b8ee198dSRichard Zak  pie="no"
667b8ee198dSRichard Zak  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
668179cf400SAndreas Färber;;
669898be3e0SPeter MaydellLinux)
6705327cf48Sbellard  linux="yes"
671831b7825Sths  linux_user="yes"
672c87ea116SAlex Bennée  vhost_user=${default_feature:-yes}
673898be3e0SPeter Maydell;;
6747d13299dSbellardesac
6757d13299dSbellard
6760db4a067SPaolo Bonzini: ${make=${MAKE-make}}
677b6daf4d3SPaolo Bonzini
678faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally
679faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so
680ddf90699SEduardo Habkost# we check that too
681faf44142SDaniel P. Berrangépython=
6820a01d76fSMarc-André Lureauexplicit_python=no
683ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python
684faf44142SDaniel P. Berrangédo
685faf44142SDaniel P. Berrangé    if has "$binary"
686faf44142SDaniel P. Berrangé    then
68795c5f2deSPaolo Bonzini        python=$(command -v "$binary")
688faf44142SDaniel P. Berrangé        break
689faf44142SDaniel P. Berrangé    fi
690faf44142SDaniel P. Berrangédone
691903458c8SMarkus Armbruster
692903458c8SMarkus Armbruster
69339d87c8cSAlex Bennée# Check for ancillary tools used in testing
69439d87c8cSAlex Bennéegenisoimage=
6953df437c7SAlex Bennéefor binary in genisoimage mkisofs
69639d87c8cSAlex Bennéedo
69739d87c8cSAlex Bennée    if has $binary
69839d87c8cSAlex Bennée    then
69939d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
70039d87c8cSAlex Bennée        break
70139d87c8cSAlex Bennée    fi
70239d87c8cSAlex Bennéedone
70339d87c8cSAlex Bennée
7043c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
7053c4a4d0dSPeter Maydellif has clang; then
7063c4a4d0dSPeter Maydell  objcc=clang
7073c4a4d0dSPeter Maydellelse
7083c4a4d0dSPeter Maydell  objcc="$cc"
7093c4a4d0dSPeter Maydellfi
7103c4a4d0dSPeter Maydell
7113457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
7123457a3f8SJuan Quintela  EXESUF=".exe"
71378e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
7145770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
71593b25869SJohn Snow  write_c_skeleton;
716d17f305aSPaolo Bonzini  prefix="/qemu"
71777433a5fSMarc-André Lureau  qemu_suffix=""
718105fad6bSBishara AbuHattoum  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
7193457a3f8SJuan Quintelafi
7203457a3f8SJuan Quintela
721487fefdbSAnthony Liguoriwerror=""
72285aa5189Sbellard
72361d63097SPaolo Bonzini. $source_path/scripts/meson-buildoptions.sh
72461d63097SPaolo Bonzini
72561d63097SPaolo Bonzinimeson_options=
72661d63097SPaolo Bonzinimeson_option_parse() {
72761d63097SPaolo Bonzini  meson_options="$meson_options $(_meson_option_parse "$@")"
72861d63097SPaolo Bonzini  if test $? -eq 1; then
72961d63097SPaolo Bonzini    echo "ERROR: unknown option $1"
73061d63097SPaolo Bonzini    echo "Try '$0 --help' for more information"
73161d63097SPaolo Bonzini    exit 1
73261d63097SPaolo Bonzini  fi
73361d63097SPaolo Bonzini}
73461d63097SPaolo Bonzini
7357d13299dSbellardfor opt do
73689138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
7377d13299dSbellard  case "$opt" in
7382efc3265Sbellard  --help|-h) show_help=yes
7392efc3265Sbellard  ;;
74099123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
74199123e13SMike Frysinger  ;;
742b1a550a0Spbrook  --prefix=*) prefix="$optarg"
7437d13299dSbellard  ;;
744b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
74532ce6337Sbellard  ;;
746ac0df51dSaliguori  --cross-prefix=*)
7477d13299dSbellard  ;;
748ac0df51dSaliguori  --cc=*)
7497d13299dSbellard  ;;
750b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
75183469015Sbellard  ;;
75283f73fceSTomoki Sekiyama  --cxx=*)
75383f73fceSTomoki Sekiyama  ;;
754e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
755e007dbecSMichael S. Tsirkin  ;;
7563c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
7573c4a4d0dSPeter Maydell  ;;
758b1a550a0Spbrook  --make=*) make="$optarg"
7597d13299dSbellard  ;;
760b6daf4d3SPaolo Bonzini  --install=*)
7616a882643Spbrook  ;;
7620a01d76fSMarc-André Lureau  --python=*) python="$optarg" ; explicit_python=yes
763c886edfbSBlue Swirl  ;;
7642eb054c2SPeter Maydell  --sphinx-build=*) sphinx_build="$optarg"
7652eb054c2SPeter Maydell  ;;
766a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
767a5665051SPaolo Bonzini  ;;
768a5665051SPaolo Bonzini  --meson=*) meson="$optarg"
769a5665051SPaolo Bonzini  ;;
77048328880SPaolo Bonzini  --ninja=*) ninja="$optarg"
77148328880SPaolo Bonzini  ;;
772e2d8830eSBrad  --smbd=*) smbd="$optarg"
773e2d8830eSBrad  ;;
774e2a2ed06SJuan Quintela  --extra-cflags=*)
7757d13299dSbellard  ;;
77611cde1c8SBruno Dominguez  --extra-cxxflags=*)
77711cde1c8SBruno Dominguez  ;;
778e2a2ed06SJuan Quintela  --extra-ldflags=*)
7797d13299dSbellard  ;;
7805bc62e01SGerd Hoffmann  --enable-debug-info)
7815bc62e01SGerd Hoffmann  ;;
7825bc62e01SGerd Hoffmann  --disable-debug-info)
7835bc62e01SGerd Hoffmann  ;;
784d75402b5SAlex Bennée  --cross-cc-*)
785d75402b5SAlex Bennée  ;;
78617969268SFam Zheng  --enable-modules)
78717969268SFam Zheng      modules="yes"
78817969268SFam Zheng  ;;
7893aa88b31SStefan Hajnoczi  --disable-modules)
7903aa88b31SStefan Hajnoczi      modules="no"
7913aa88b31SStefan Hajnoczi  ;;
792bd83c861SChristian Ehrhardt  --disable-module-upgrades) module_upgrades="no"
793bd83c861SChristian Ehrhardt  ;;
794bd83c861SChristian Ehrhardt  --enable-module-upgrades) module_upgrades="yes"
795bd83c861SChristian Ehrhardt  ;;
7962ff6b91eSJuan Quintela  --cpu=*)
7977d13299dSbellard  ;;
798b1a550a0Spbrook  --target-list=*) target_list="$optarg"
799447e133fSAlex Bennée                   if test "$target_list_exclude"; then
800447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
801447e133fSAlex Bennée                   fi
802447e133fSAlex Bennée  ;;
803447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
804447e133fSAlex Bennée                   if test "$target_list"; then
805447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
806447e133fSAlex Bennée                   fi
807de83cd02Sbellard  ;;
80874242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
8099410b56cSPrerna Saxena  ;;
8107bc3ca7fSPaolo Bonzini  --with-default-devices) default_devices="true"
811f3494749SPaolo Bonzini  ;;
8127bc3ca7fSPaolo Bonzini  --without-default-devices) default_devices="false"
813f3494749SPaolo Bonzini  ;;
814d1d5e9eeSAlex Bennée  --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
815d1d5e9eeSAlex Bennée  ;;
816d1d5e9eeSAlex Bennée  --with-devices-*) device_arch=${opt#--with-devices-};
817d1d5e9eeSAlex Bennée                    device_arch=${device_arch%%=*}
818d1d5e9eeSAlex Bennée                    cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
819d1d5e9eeSAlex Bennée                    if test -f "$cf"; then
820d1d5e9eeSAlex Bennée                        device_archs="$device_archs $device_arch"
821d1d5e9eeSAlex Bennée                        eval "devices_${device_arch}=\$optarg"
822d1d5e9eeSAlex Bennée                    else
823d1d5e9eeSAlex Bennée                        error_exit "File $cf does not exist"
824d1d5e9eeSAlex Bennée                    fi
825d1d5e9eeSAlex Bennée  ;;
826c87ea116SAlex Bennée  --without-default-features) # processed above
827c87ea116SAlex Bennée  ;;
8287d13299dSbellard  --enable-gprof) gprof="yes"
8297d13299dSbellard  ;;
8301d728c39SBlue Swirl  --enable-gcov) gcov="yes"
8311d728c39SBlue Swirl  ;;
83279427693SLoïc Minier  --static)
83379427693SLoïc Minier    static="yes"
83417884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
83543ce4dfeSbellard  ;;
8360b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
8370b24e75fSPaolo Bonzini  ;;
8380b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
8390b24e75fSPaolo Bonzini  ;;
8403aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
8413aa5d2beSAlon Levy  ;;
8428bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
8438bf188aaSMichael Tokarev  ;;
8440f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
8450f94d6daSAlon Levy  ;;
846528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
8470b24e75fSPaolo Bonzini  ;;
84877433a5fSMarc-André Lureau  --with-suffix=*) qemu_suffix="$optarg"
849023d3d67SEduardo Habkost  ;;
850c6502638SBruce Rogers  --docdir=*) docdir="$optarg"
8510b24e75fSPaolo Bonzini  ;;
852fe0038beSPaolo Bonzini  --localedir=*) localedir="$optarg"
853fe0038beSPaolo Bonzini  ;;
854ca2fb938SAndre Przywara  --sysconfdir=*) sysconfdir="$optarg"
85507381cc1SAnthony Liguori  ;;
856785c23aeSLuiz Capitulino  --localstatedir=*) local_statedir="$optarg"
857785c23aeSLuiz Capitulino  ;;
8583d5eecabSGerd Hoffmann  --firmwarepath=*) firmwarepath="$optarg"
8593d5eecabSGerd Hoffmann  ;;
860181ce1d0SOlaf Hering  --host=*|--build=*|\
861181ce1d0SOlaf Hering  --disable-dependency-tracking|\
862785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
863fe0038beSPaolo Bonzini  --oldincludedir=*|--datarootdir=*|--infodir=*|\
864023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
865023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
866023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
867023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
868023ddd74SMax Filippov    # lots of directory switches by default.
869023ddd74SMax Filippov  ;;
8703556c233SPaolo Bonzini  --disable-qom-cast-debug) qom_cast_debug="no"
8713556c233SPaolo Bonzini  ;;
8723556c233SPaolo Bonzini  --enable-qom-cast-debug) qom_cast_debug="yes"
8733556c233SPaolo Bonzini  ;;
8740c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
8750c58ac1cSmalc  ;;
87689138857SStefan Weil  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
877b64ec4e4SFam Zheng  ;;
87889138857SStefan Weil  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
879eb852011SMarkus Armbruster  ;;
880e5f05f8cSKevin Wolf  --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes"
881e5f05f8cSKevin Wolf  ;;
882e5f05f8cSKevin Wolf  --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no"
883e5f05f8cSKevin Wolf  ;;
884f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
885f8393946Saurel32  ;;
886f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
887f8393946Saurel32  ;;
888f3d08ee6SPaul Brook  --enable-debug)
889f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
890f3d08ee6SPaul Brook      debug_tcg="yes"
8911fcc6d42SPeter Xu      debug_mutex="yes"
892f3d08ee6SPaul Brook      debug="yes"
893f3d08ee6SPaul Brook      strip_opt="no"
894b553a042SJohn Snow      fortify_source="no"
895f3d08ee6SPaul Brook  ;;
896247724cbSMarc-André Lureau  --enable-sanitizers) sanitizers="yes"
897247724cbSMarc-André Lureau  ;;
898247724cbSMarc-André Lureau  --disable-sanitizers) sanitizers="no"
899247724cbSMarc-André Lureau  ;;
9000aebab04SLingfeng Yang  --enable-tsan) tsan="yes"
9010aebab04SLingfeng Yang  ;;
9020aebab04SLingfeng Yang  --disable-tsan) tsan="no"
9030aebab04SLingfeng Yang  ;;
9041625af87Saliguori  --disable-strip) strip_opt="no"
9051625af87Saliguori  ;;
9064d34a86bSPaolo Bonzini  --disable-slirp) slirp="disabled"
907c20709aaSbellard  ;;
908fd6fc214SPaolo Bonzini  --enable-slirp) slirp="enabled"
909fd6fc214SPaolo Bonzini  ;;
9104d34a86bSPaolo Bonzini  --enable-slirp=git) slirp="internal"
9117c57bdd8SMarc-André Lureau  ;;
91203a3c0b3SPaolo Bonzini  --enable-slirp=*) slirp="$optarg"
913675b9b53SMarc-André Lureau  ;;
9141badb709SPaolo Bonzini  --disable-xen) xen="disabled"
915e37630caSaliguori  ;;
9161badb709SPaolo Bonzini  --enable-xen) xen="enabled"
917fc321b4bSJuan Quintela  ;;
9181badb709SPaolo Bonzini  --disable-tcg) tcg="disabled"
919d1a14257SAlex Bennée                 plugins="no"
920b3f6ea7eSPaolo Bonzini  ;;
9211badb709SPaolo Bonzini  --enable-tcg) tcg="enabled"
922b3f6ea7eSPaolo Bonzini  ;;
92305c2a3e7Sbellard  --enable-profiler) profiler="yes"
92405c2a3e7Sbellard  ;;
925cad25d69Spbrook  --disable-system) softmmu="no"
9260a8e90f4Spbrook  ;;
927cad25d69Spbrook  --enable-system) softmmu="yes"
9280a8e90f4Spbrook  ;;
9290953a80fSZachary Amsden  --disable-user)
9300953a80fSZachary Amsden      linux_user="no" ;
9310953a80fSZachary Amsden      bsd_user="no" ;
9320953a80fSZachary Amsden  ;;
9330953a80fSZachary Amsden  --enable-user) ;;
934831b7825Sths  --disable-linux-user) linux_user="no"
9350a8e90f4Spbrook  ;;
936831b7825Sths  --enable-linux-user) linux_user="yes"
937831b7825Sths  ;;
93884778508Sblueswir1  --disable-bsd-user) bsd_user="no"
93984778508Sblueswir1  ;;
94084778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
94184778508Sblueswir1  ;;
94240d6444eSAvi Kivity  --enable-pie) pie="yes"
94334005a00SKirill A. Shutemov  ;;
94440d6444eSAvi Kivity  --disable-pie) pie="no"
94534005a00SKirill A. Shutemov  ;;
94685aa5189Sbellard  --enable-werror) werror="yes"
94785aa5189Sbellard  ;;
94885aa5189Sbellard  --disable-werror) werror="no"
94985aa5189Sbellard  ;;
950cdad781dSDaniele Buono  --enable-lto) lto="true"
951cdad781dSDaniele Buono  ;;
952cdad781dSDaniele Buono  --disable-lto) lto="false"
953cdad781dSDaniele Buono  ;;
95463678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
95563678e17SSteven Noonan  ;;
95663678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
95763678e17SSteven Noonan  ;;
9581e4f6065SDaniele Buono  --enable-safe-stack) safe_stack="yes"
9591e4f6065SDaniele Buono  ;;
9601e4f6065SDaniele Buono  --disable-safe-stack) safe_stack="no"
9611e4f6065SDaniele Buono  ;;
9629e62ba48SDaniele Buono  --enable-cfi)
9639e62ba48SDaniele Buono      cfi="true";
9649e62ba48SDaniele Buono      lto="true";
9659e62ba48SDaniele Buono  ;;
9669e62ba48SDaniele Buono  --disable-cfi) cfi="false"
9679e62ba48SDaniele Buono  ;;
968fbb4121dSPaolo Bonzini  --disable-fdt) fdt="disabled"
9692df87df7SJuan Quintela  ;;
970fbb4121dSPaolo Bonzini  --enable-fdt) fdt="enabled"
971fbb4121dSPaolo Bonzini  ;;
972fbb4121dSPaolo Bonzini  --enable-fdt=git) fdt="internal"
973fbb4121dSPaolo Bonzini  ;;
97403a3c0b3SPaolo Bonzini  --enable-fdt=*) fdt="$optarg"
9752df87df7SJuan Quintela  ;;
976a40161cbSPaolo Bonzini  --disable-membarrier) membarrier="no"
977a40161cbSPaolo Bonzini  ;;
978a40161cbSPaolo Bonzini  --enable-membarrier) membarrier="yes"
979a40161cbSPaolo Bonzini  ;;
9807e563bfbSThomas Huth  --with-pkgversion=*) pkgversion="$optarg"
9814a19f1ecSpbrook  ;;
982519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
983519175a2SAlex Barcelo  ;;
98470c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
98570c60c08SStefan Hajnoczi  ;;
98670c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
98770c60c08SStefan Hajnoczi  ;;
9887d992e4dSPeter Lieven  --enable-debug-stack-usage) debug_stack_usage="yes"
9897d992e4dSPeter Lieven  ;;
990f0d92b56SLongpeng(Mike)  --enable-crypto-afalg) crypto_afalg="yes"
991f0d92b56SLongpeng(Mike)  ;;
992f0d92b56SLongpeng(Mike)  --disable-crypto-afalg) crypto_afalg="no"
993f0d92b56SLongpeng(Mike)  ;;
994d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
995d5970055SMichael S. Tsirkin  ;;
996d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
997d5970055SMichael S. Tsirkin  ;;
998042cea27SGonglei  --disable-vhost-crypto) vhost_crypto="no"
999042cea27SGonglei  ;;
1000299e6f19SPaolo Bonzini  --enable-vhost-crypto) vhost_crypto="yes"
1001042cea27SGonglei  ;;
10025e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
10035e9be92dSNicholas Bellinger  ;;
10045e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
10055e9be92dSNicholas Bellinger  ;;
1006fc0b9b0eSStefan Hajnoczi  --disable-vhost-vsock) vhost_vsock="no"
1007fc0b9b0eSStefan Hajnoczi  ;;
1008fc0b9b0eSStefan Hajnoczi  --enable-vhost-vsock) vhost_vsock="yes"
1009fc0b9b0eSStefan Hajnoczi  ;;
101098fc1adaSDr. David Alan Gilbert  --disable-vhost-user-fs) vhost_user_fs="no"
101198fc1adaSDr. David Alan Gilbert  ;;
101298fc1adaSDr. David Alan Gilbert  --enable-vhost-user-fs) vhost_user_fs="yes"
101398fc1adaSDr. David Alan Gilbert  ;;
1014da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
101520ff075bSMichael Walle  ;;
1016da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
101720ff075bSMichael Walle  ;;
10188c84cf11SSergei Trofimovich  --disable-xfsctl) xfs="no"
10198c84cf11SSergei Trofimovich  ;;
10208c84cf11SSergei Trofimovich  --enable-xfsctl) xfs="yes"
10218c84cf11SSergei Trofimovich  ;;
10221ffb3bbbSPaolo Bonzini  --disable-zlib-test)
10231ece9905SAlon Levy  ;;
1024d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1025d138cee9SMichael Roth  ;;
1026d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1027d138cee9SMichael Roth  ;;
1028d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1029d9840e25STomoki Sekiyama  ;;
1030d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1031d9840e25STomoki Sekiyama  ;;
1032d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1033d9840e25STomoki Sekiyama  ;;
1034d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1035d9840e25STomoki Sekiyama  ;;
1036d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1037d9840e25STomoki Sekiyama  ;;
1038d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1039d9840e25STomoki Sekiyama  ;;
10404b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
10414b1c11fdSDaniel P. Berrange  ;;
10424b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
10434b1c11fdSDaniel P. Berrange  ;;
104486583a07SLiam Merwick  --disable-avx2) avx2_opt="no"
104586583a07SLiam Merwick  ;;
104686583a07SLiam Merwick  --enable-avx2) avx2_opt="yes"
104786583a07SLiam Merwick  ;;
10486b8cd447SRobert Hoo  --disable-avx512f) avx512f_opt="no"
10496b8cd447SRobert Hoo  ;;
10506b8cd447SRobert Hoo  --enable-avx512f) avx512f_opt="yes"
10516b8cd447SRobert Hoo  ;;
105252b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
105352b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1054583f6e7bSStefan Hajnoczi  ;;
1055cb6414dfSFam Zheng  --enable-vhdx|--disable-vhdx)
1056cb6414dfSFam Zheng      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1057cb6414dfSFam Zheng  ;;
1058315d3184SFam Zheng  --enable-uuid|--disable-uuid)
1059315d3184SFam Zheng      echo "$0: $opt is obsolete, UUID support is always built" >&2
1060315d3184SFam Zheng  ;;
1061a1c5e949SDaniel P. Berrange  --tls-priority=*) tls_priority="$optarg"
1062a1c5e949SDaniel P. Berrange  ;;
10632da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
10642da776dbSMichael R. Hines  ;;
10652da776dbSMichael R. Hines  --disable-rdma) rdma="no"
10662da776dbSMichael R. Hines  ;;
106721ab34c9SMarcel Apfelbaum  --enable-pvrdma) pvrdma="yes"
106821ab34c9SMarcel Apfelbaum  ;;
106921ab34c9SMarcel Apfelbaum  --disable-pvrdma) pvrdma="no"
107021ab34c9SMarcel Apfelbaum  ;;
1071e91c793cSCole Robinson  --disable-tpm) tpm="no"
1072e91c793cSCole Robinson  ;;
1073ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1074ab214c29SStefan Berger  ;;
1075b10d49d7SPino Toscano  --disable-libssh) libssh="no"
10760a12ec87SRichard W.M. Jones  ;;
1077b10d49d7SPino Toscano  --enable-libssh) libssh="yes"
10780a12ec87SRichard W.M. Jones  ;;
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
126140293e58Sbellardcase "$cpu" in
1262ff66ee53SPaolo Bonzini    ppc) CPU_CFLAGS="-m32" ;;
1263ff66ee53SPaolo Bonzini    ppc64) CPU_CFLAGS="-m64" ;;
1264ff66ee53SPaolo Bonzini    sparc) CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" ;;
1265ff66ee53SPaolo Bonzini    sparc64) CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;;
1266ff66ee53SPaolo Bonzini    s390) CPU_CFLAGS="-m31" ;;
1267ff66ee53SPaolo Bonzini    s390x) CPU_CFLAGS="-m64" ;;
1268ff66ee53SPaolo Bonzini    i386) CPU_CFLAGS="-m32" ;;
1269ff66ee53SPaolo Bonzini    x32) CPU_CFLAGS="-mx32" ;;
1270ff66ee53SPaolo Bonzini
12717ebee43eSRichard Henderson    # ??? Only extremely old AMD cpus do not have cmpxchg16b.
12727ebee43eSRichard Henderson    # If we truly care, we should simply detect this case at
12737ebee43eSRichard Henderson    # runtime and generate the fallback to serial emulation.
1274ff66ee53SPaolo Bonzini    x86_64) CPU_CFLAGS="-m64 -mcx16" ;;
1275ff66ee53SPaolo Bonzini
127630163d89SPeter Maydell    # No special flags required for other host CPUs
12773142255cSblueswir1esac
12783142255cSblueswir1
12799557af9cSAlex Bennéeif eval test -z "\${cross_cc_$cpu}"; then
1280b1aa4de1SAlex Bennée    eval "cross_cc_${cpu}=\$cc"
12812038f8c8SPaolo Bonzini    cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
12829557af9cSAlex Bennéefi
128379f3b12fSPeter Crosthwaite
1284affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly
1285affc88ccSPeter Maydell# support, even if we're using TCI.
1286affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then
1287affc88ccSPeter Maydell  bsd_user="no"
1288affc88ccSPeter Maydell  linux_user="no"
1289affc88ccSPeter Maydellfi
1290affc88ccSPeter Maydell
129160e0df25SPeter Maydelldefault_target_list=""
129243692239SMarkus Armbrusterdeprecated_targets_list=ppc64abi32-linux-user
1293fdb75aefSPaolo Bonzinideprecated_features=""
12946e92f823SPeter Maydellmak_wilds=""
12956e92f823SPeter Maydell
129660e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
1297812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
129860e0df25SPeter Maydellfi
129960e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
1300812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
130160e0df25SPeter Maydellfi
130260e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
1303812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
130460e0df25SPeter Maydellfi
130560e0df25SPeter Maydell
13063a5ae4a9SAlex Bennée# If the user doesn't explicitly specify a deprecated target we will
13073a5ae4a9SAlex Bennée# skip it.
13083a5ae4a9SAlex Bennéeif test -z "$target_list"; then
13093a5ae4a9SAlex Bennée    if test -z "$target_list_exclude"; then
13103a5ae4a9SAlex Bennée        target_list_exclude="$deprecated_targets_list"
13113a5ae4a9SAlex Bennée    else
13123a5ae4a9SAlex Bennée        target_list_exclude="$target_list_exclude,$deprecated_targets_list"
13133a5ae4a9SAlex Bennée    fi
13142d838d9bSAlex Bennéefi
13152d838d9bSAlex Bennée
1316447e133fSAlex Bennéefor config in $mak_wilds; do
1317447e133fSAlex Bennée    target="$(basename "$config" .mak)"
131898db9a06SAlex Bennée    if echo "$target_list_exclude" | grep -vq "$target"; then
1319447e133fSAlex Bennée        default_target_list="${default_target_list} $target"
1320447e133fSAlex Bennée    fi
1321447e133fSAlex Bennéedone
13226e92f823SPeter Maydell
1323af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1324af5db58eSpbrookcat << EOF
1325af5db58eSpbrook
1326af5db58eSpbrookUsage: configure [options]
1327af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1328af5db58eSpbrook
132908fb77edSStefan WeilStandard options:
133008fb77edSStefan Weil  --help                   print this message
133108fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
133208fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
133308fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
13342deca810SAlex Bennée  --target-list=LIST       set target list (default: build all non-deprecated)
133508fb77edSStefan Weil$(echo Available targets: $default_target_list | \
133608fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
13372deca810SAlex Bennée$(echo Deprecated targets: $deprecated_targets_list | \
13382deca810SAlex Bennée  fold -s -w 53 | sed -e 's/^/                           /')
1339447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
134008fb77edSStefan Weil
134108fb77edSStefan WeilAdvanced options (experts only):
13423812c0c4SJoelle van Dyne  --cross-prefix=PREFIX    use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
134308fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
134408fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
134508fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
134608fb77edSStefan Weil                           build time
134708fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
134808fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
134908fb77edSStefan Weil  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
135011cde1c8SBruno Dominguez  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
135108fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1352d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1353d422b2bcSAlex Bennée  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
135408fb77edSStefan Weil  --make=MAKE              use specified make [$make]
135508fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
13562eb054c2SPeter Maydell  --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1357a5665051SPaolo Bonzini  --meson=MESON            use specified meson [$meson]
135848328880SPaolo Bonzini  --ninja=NINJA            use specified ninja [$ninja]
135908fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1360db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
13617d7dbf9dSDan Streetman  --with-git-submodules=update   update git submodules (default if .git dir exists)
13627d7dbf9dSDan Streetman  --with-git-submodules=validate fail if git submodules are not up to date
13637d7dbf9dSDan Streetman  --with-git-submodules=ignore   do not update or check git submodules (default if no .git dir)
136408fb77edSStefan Weil  --static                 enable static build [$static]
136508fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
136610ff82d1SMarc-André Lureau  --datadir=PATH           install firmware in PATH/$qemu_suffix
1367fe0038beSPaolo Bonzini  --localedir=PATH         install translation in PATH/$qemu_suffix
136810ff82d1SMarc-André Lureau  --docdir=PATH            install documentation in PATH/$qemu_suffix
136908fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
137008fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
1371db1b5f13SThomas Huth  --libexecdir=PATH        install helper binaries in PATH
137210ff82d1SMarc-André Lureau  --sysconfdir=PATH        install config in PATH/$qemu_suffix
137308fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
13743d5eecabSGerd Hoffmann  --firmwarepath=PATH      search PATH for firmware files
137513336606SRobert Foley  --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1376ca8c0909SMarc-André Lureau  --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1377db1b5f13SThomas Huth  --with-pkgversion=VERS   use specified string as sub-version of the package
1378c035c8d6SPaolo Bonzini  --without-default-features default all --enable-* options to "disabled"
1379c035c8d6SPaolo Bonzini  --without-default-devices  do not include any device that is not needed to
1380c035c8d6SPaolo Bonzini                           start the emulator (only use if you are including
1381d1d5e9eeSAlex Bennée                           desired devices in configs/devices/)
1382d1d5e9eeSAlex Bennée  --with-devices-ARCH=NAME override default configs/devices
138308fb77edSStefan Weil  --enable-debug           enable common debug build options
1384247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
13850aebab04SLingfeng Yang  --enable-tsan            enable thread sanitizer
138608fb77edSStefan Weil  --disable-strip          disable stripping binaries
138708fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
138863678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
138916bfbc70SPaolo Bonzini  --audio-drv-list=LIST    set audio drivers to try if -audiodev is not used
139008fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
139108fb77edSStefan Weil  --block-drv-rw-whitelist=L
139208fb77edSStefan Weil                           set block driver read-write whitelist
1393e5f05f8cSKevin Wolf                           (by default affects only QEMU, not tools like qemu-img)
139408fb77edSStefan Weil  --block-drv-ro-whitelist=L
139508fb77edSStefan Weil                           set block driver read-only whitelist
1396e5f05f8cSKevin Wolf                           (by default affects only QEMU, not tools like qemu-img)
1397e5f05f8cSKevin Wolf  --enable-block-drv-whitelist-in-tools
1398e5f05f8cSKevin Wolf                           use block whitelist also in tools instead of only QEMU
139908fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
140008fb77edSStefan Weil                           Default:trace-<pid>
1401c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
140208fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
140333c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
140408fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
1405c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1406c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1407a1c5e949SDaniel P. Berrange  --tls-priority           default TLS protocol/cipher priority string
1408c12d66aaSLin Ma  --enable-gprof           QEMU profiling with gprof
1409c12d66aaSLin Ma  --enable-profiler        profiler support
1410c12d66aaSLin Ma  --enable-debug-stack-usage
1411c12d66aaSLin Ma                           track the maximum stack usage of stacks created by qemu_alloc_stack
141240e8c6f4SAlex Bennée  --enable-plugins
141340e8c6f4SAlex Bennée                           enable plugins via shared library loading
1414afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
1415f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
141661d63097SPaolo BonziniEOF
141761d63097SPaolo Bonzini  meson_options_help
141861d63097SPaolo Bonzinicat << EOF
1419c23f23b9SMichael Tokarev  system          all system emulation targets
1420c23f23b9SMichael Tokarev  user            supported user emulation targets
1421c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1422c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1423c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1424c23f23b9SMichael Tokarev  pie             Position Independent Executables
142521e709aaSMarc-André Lureau  modules         modules support (non-Windows)
1426bd83c861SChristian Ehrhardt  module-upgrades try to load modules from alternate paths for upgrades
1427c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1428c23f23b9SMichael Tokarev  debug-info      debugging information
1429cdad781dSDaniele Buono  lto             Enable Link-Time Optimization.
14301e4f6065SDaniele Buono  safe-stack      SafeStack Stack Smash Protection. Depends on
14311e4f6065SDaniele Buono                  clang/llvm >= 3.7 and requires coroutine backend ucontext.
1432a40161cbSPaolo Bonzini  membarrier      membarrier system call (for Linux 4.14+ or Windows)
143321ab34c9SMarcel Apfelbaum  rdma            Enable RDMA-based migration
143421ab34c9SMarcel Apfelbaum  pvrdma          Enable PVRDMA support
1435299e6f19SPaolo Bonzini  vhost-net       vhost-net kernel acceleration support
1436299e6f19SPaolo Bonzini  vhost-vsock     virtio sockets device support
1437299e6f19SPaolo Bonzini  vhost-scsi      vhost-scsi kernel target support
1438299e6f19SPaolo Bonzini  vhost-crypto    vhost-user-crypto backend support
1439299e6f19SPaolo Bonzini  vhost-kernel    vhost kernel backend support
1440299e6f19SPaolo Bonzini  vhost-user      vhost-user backend support
1441108a6481SCindy Lu  vhost-vdpa      vhost-vdpa kernel backend support
1442ed1701c6SDr. David Alan Gilbert  live-block-migration   Block migration in the main migration stream
1443c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1444c23f23b9SMichael Tokarev  tpm             TPM support
1445b10d49d7SPino Toscano  libssh          ssh block device support
1446c23f23b9SMichael Tokarev  numa            libnuma support
144786583a07SLiam Merwick  avx2            AVX2 optimization support
14486b8cd447SRobert Hoo  avx512f         AVX512F optimization support
1449a6b1d4c0SChanglong Xie  replication     replication support
1450c12d66aaSLin Ma  opengl          opengl support
1451c12d66aaSLin Ma  xfsctl          xfsctl support
1452c12d66aaSLin Ma  qom-cast-debug  cast debugging support
14538de73fa8SCleber Rosa  tools           build qemu-io, qemu-nbd and qemu-img tools
14542f740136SJeff Cody  bochs           bochs image format support
14552f740136SJeff Cody  cloop           cloop image format support
14562f740136SJeff Cody  dmg             dmg image format support
14572f740136SJeff Cody  qcow1           qcow v1 image format support
14582f740136SJeff Cody  vdi             vdi image format support
14592f740136SJeff Cody  vvfat           vvfat image format support
14602f740136SJeff Cody  qed             qed image format support
14612f740136SJeff Cody  parallels       parallels image format support
1462f0d92b56SLongpeng(Mike)  crypto-afalg    Linux AF_ALG crypto backend driver
1463ba59fb77SPaolo Bonzini  debug-mutex     mutex debugging support
1464b767d257SMarek Marczykowski-Górecki  rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
146520cf7b8eSDenis Plotnikov  gio             libgio support
1466b8e0c493SJoelle van Dyne  slirp-smbd      use smbd (at path --smbd=*) in slirp networking
146708fb77edSStefan Weil
146808fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1469af5db58eSpbrookEOF
14702d2ad6d0SFam Zhengexit 0
1471af5db58eSpbrookfi
1472af5db58eSpbrook
14739c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
1474bb768f71SThomas Huthrm -f */config-devices.mak.d
14759c790242SThomas Huth
1476faf44142SDaniel P. Berrangéif test -z "$python"
1477faf44142SDaniel P. Berrangéthen
1478c53eeaf7SStefan Hajnoczi    error_exit "Python not found. Use --python=/path/to/python"
1479c53eeaf7SStefan Hajnoczifi
14808e2c76bdSRoman Bolshakovif ! has "$make"
14818e2c76bdSRoman Bolshakovthen
14828e2c76bdSRoman Bolshakov    error_exit "GNU make ($make) not found"
14838e2c76bdSRoman Bolshakovfi
1484c53eeaf7SStefan Hajnoczi
1485c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit
1486c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value.
14871b11f28dSThomas Huthif ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
14881b11f28dSThomas Huth  error_exit "Cannot use '$python', Python >= 3.6 is required." \
1489c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
1490c53eeaf7SStefan Hajnoczifi
1491c53eeaf7SStefan Hajnoczi
1492755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it
1493406ab2f3SCleber 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)
1494755ee70fSCleber Rosa
1495c53eeaf7SStefan Hajnoczi# Suppress writing compiled files
1496c53eeaf7SStefan Hajnoczipython="$python -B"
1497c53eeaf7SStefan Hajnoczi
14980a01d76fSMarc-André Lureauif test -z "$meson"; then
14996638cae5SPaolo Bonzini    if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.3; then
15000a01d76fSMarc-André Lureau        meson=meson
15017d7dbf9dSDan Streetman    elif test $git_submodules_action != 'ignore' ; then
15020a01d76fSMarc-André Lureau        meson=git
15030a01d76fSMarc-André Lureau    elif test -e "${source_path}/meson/meson.py" ; then
15040a01d76fSMarc-André Lureau        meson=internal
15050a01d76fSMarc-André Lureau    else
15060a01d76fSMarc-André Lureau        if test "$explicit_python" = yes; then
15070a01d76fSMarc-André Lureau            error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
15080a01d76fSMarc-André Lureau        else
1509a5665051SPaolo Bonzini            error_exit "Meson not found.  Use --meson=/path/to/meson"
1510a5665051SPaolo Bonzini        fi
15110a01d76fSMarc-André Lureau    fi
15120a01d76fSMarc-André Lureauelse
15130a01d76fSMarc-André Lureau    # Meson uses its own Python interpreter to invoke other Python scripts,
15140a01d76fSMarc-André Lureau    # but the user wants to use the one they specified with --python.
15150a01d76fSMarc-André Lureau    #
15160a01d76fSMarc-André Lureau    # We do not want to override the distro Python interpreter (and sometimes
15170a01d76fSMarc-André Lureau    # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
15180a01d76fSMarc-André Lureau    # just require --meson=git|internal together with --python.
15190a01d76fSMarc-André Lureau    if test "$explicit_python" = yes; then
15200a01d76fSMarc-André Lureau        case "$meson" in
15210a01d76fSMarc-André Lureau            git | internal) ;;
15220a01d76fSMarc-André Lureau            *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
15230a01d76fSMarc-André Lureau        esac
15240a01d76fSMarc-André Lureau    fi
15250a01d76fSMarc-André Lureaufi
1526a5665051SPaolo Bonzini
15270a01d76fSMarc-André Lureauif test "$meson" = git; then
15280a01d76fSMarc-André Lureau    git_submodules="${git_submodules} meson"
15290a01d76fSMarc-André Lureaufi
15300a01d76fSMarc-André Lureau
15310a01d76fSMarc-André Lureaucase "$meson" in
15320a01d76fSMarc-André Lureau    git | internal)
15330a01d76fSMarc-André Lureau        meson="$python ${source_path}/meson/meson.py"
15340a01d76fSMarc-André Lureau        ;;
153584ec0c24SPaolo Bonzini    *) meson=$(command -v "$meson") ;;
15360a01d76fSMarc-André Lureauesac
15370a01d76fSMarc-André Lureau
153809e93326SPaolo Bonzini# Probe for ninja
153948328880SPaolo Bonzini
154048328880SPaolo Bonziniif test -z "$ninja"; then
154148328880SPaolo Bonzini    for c in ninja ninja-build samu; do
154248328880SPaolo Bonzini        if has $c; then
154348328880SPaolo Bonzini            ninja=$(command -v "$c")
154448328880SPaolo Bonzini            break
154548328880SPaolo Bonzini        fi
154648328880SPaolo Bonzini    done
154709e93326SPaolo Bonzini    if test -z "$ninja"; then
154809e93326SPaolo Bonzini      error_exit "Cannot find Ninja"
154909e93326SPaolo Bonzini    fi
155048328880SPaolo Bonzinifi
1551a5665051SPaolo Bonzini
15529aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
15539aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
15549aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
15559aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
15569aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
15579aae6e54SDaniel Henrique Barbozaif compile_object ; then
15589aae6e54SDaniel Henrique Barboza  : C compiler works ok
15599aae6e54SDaniel Henrique Barbozaelse
15609aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
15619aae6e54SDaniel Henrique Barbozafi
15629aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
15639aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
15649aae6e54SDaniel Henrique Barbozafi
15659aae6e54SDaniel Henrique Barboza
15669c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
15679c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
15689c83ffd8SPeter Maydellif test -z "$werror" ; then
15697d7dbf9dSDan Streetman    if test "$git_submodules_action" != "ignore" && \
1570e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
15719c83ffd8SPeter Maydell        werror="yes"
15729c83ffd8SPeter Maydell    else
15739c83ffd8SPeter Maydell        werror="no"
15749c83ffd8SPeter Maydell    fi
15759c83ffd8SPeter Maydellfi
15769c83ffd8SPeter Maydell
1577975ff037SPaolo Bonziniif test "$targetos" = "bogus"; then
1578fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
1579fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
1580fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
1581fb59dabdSPeter Maydell    # host OS we should stop now.
1582951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1583fb59dabdSPeter Maydellfi
1584fb59dabdSPeter Maydell
1585efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
1586efc6c070SThomas Huthcat > $TMPC << EOF
1587efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
1588efc6c070SThomas Huth# ifdef __apple_build_version__
15892a85a08cSDaniel P. Berrangé#  if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
15902a85a08cSDaniel P. Berrangé#   error You need at least XCode Clang v10.0 to compile QEMU
1591efc6c070SThomas Huth#  endif
1592efc6c070SThomas Huth# else
15932a85a08cSDaniel P. Berrangé#  if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
15942a85a08cSDaniel P. Berrangé#   error You need at least Clang v6.0 to compile QEMU
1595efc6c070SThomas Huth#  endif
1596efc6c070SThomas Huth# endif
1597efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
15983830df5fSnia# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
15993830df5fSnia#  error You need at least GCC v7.4.0 to compile QEMU
1600efc6c070SThomas Huth# endif
1601efc6c070SThomas Huth#else
1602efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
1603efc6c070SThomas Huth#endif
1604efc6c070SThomas Huthint main (void) { return 0; }
1605efc6c070SThomas HuthEOF
1606efc6c070SThomas Huthif ! compile_prog "" "" ; then
16073830df5fSnia    error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)"
1608efc6c070SThomas Huthfi
1609efc6c070SThomas Huth
161000849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately.
161100849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second.
161200849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all
161300849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would
161400849b92SRichard Henderson# just silently disable some features, so it's too error prone.
161500849b92SRichard Henderson
161600849b92SRichard Hendersonwarn_flags=
161700849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration
161800849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition
161900849b92SRichard Hendersonadd_to warn_flags -Wtype-limits
162000849b92SRichard Hendersonadd_to warn_flags -Wformat-security
162100849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k
162200849b92SRichard Hendersonadd_to warn_flags -Winit-self
162300849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers
162400849b92SRichard Hendersonadd_to warn_flags -Wempty-body
162500849b92SRichard Hendersonadd_to warn_flags -Wnested-externs
162600849b92SRichard Hendersonadd_to warn_flags -Wendif-labels
162700849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined
16280a2ebce9SThomas Huthadd_to warn_flags -Wimplicit-fallthrough=2
162900849b92SRichard Henderson
163000849b92SRichard Hendersonnowarn_flags=
163100849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides
163200849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs
163300849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value
163400849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int
163500849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition
1636aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare
1637bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi
163800849b92SRichard Henderson
163900849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags"
164093b25869SJohn Snow
164193b25869SJohn Snowcc_has_warning_flag() {
164293b25869SJohn Snow    write_c_skeleton;
164393b25869SJohn Snow
1644a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
1645a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
1646a1d29d6cSPeter Maydell    # warning options).
164793b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
164893b25869SJohn Snow    compile_prog "-Werror $optflag" ""
164993b25869SJohn Snow}
165093b25869SJohn Snow
165193b25869SJohn Snowfor flag in $gcc_flags; do
165293b25869SJohn Snow    if cc_has_warning_flag $flag ; then
16538d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
16548d05095cSPaolo Bonzini    fi
16558d05095cSPaolo Bonzinidone
16568d05095cSPaolo Bonzini
165763678e17SSteven Noonanif test "$stack_protector" != "no"; then
1658fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
1659fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
1660fccd35a0SRodrigo Rebello{
1661fccd35a0SRodrigo Rebello    char arr[64], *p = arr, *c = argv[0];
1662fccd35a0SRodrigo Rebello    while (*c) {
1663fccd35a0SRodrigo Rebello        *p++ = *c++;
1664fccd35a0SRodrigo Rebello    }
1665fccd35a0SRodrigo Rebello    return 0;
1666fccd35a0SRodrigo Rebello}
1667fccd35a0SRodrigo RebelloEOF
166863678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
16693b463a3fSMiroslav Rezanina  sp_on=0
167063678e17SSteven Noonan  for flag in $gcc_flags; do
1671590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
1672590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
1673086d5f75SPaolo Bonzini    if compile_object "-Werror $flag" &&
1674590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
167563678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1676db5adeaaSPaolo Bonzini      QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
16773b463a3fSMiroslav Rezanina      sp_on=1
167863678e17SSteven Noonan      break
167963678e17SSteven Noonan    fi
168063678e17SSteven Noonan  done
16813b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
16823b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
16833b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
16843b463a3fSMiroslav Rezanina    fi
16853b463a3fSMiroslav Rezanina  fi
168637746c5eSMarc-André Lureaufi
168737746c5eSMarc-André Lureau
168820bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for
168920bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}.
169020bc94a2SPaolo Bonzinicat > $TMPC << EOF
169120bc94a2SPaolo Bonzinistruct {
169220bc94a2SPaolo Bonzini  int a[2];
169320bc94a2SPaolo Bonzini} x = {0};
169420bc94a2SPaolo BonziniEOF
169520bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then
169620bc94a2SPaolo Bonzini  :
169720bc94a2SPaolo Bonzinielse
169820bc94a2SPaolo Bonzini  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
169920bc94a2SPaolo Bonzinifi
170020bc94a2SPaolo Bonzini
170121e709aaSMarc-André Lureau# Our module code doesn't support Windows
170221e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then
170321e709aaSMarc-André Lureau  error_exit "Modules are not available for Windows"
170421e709aaSMarc-André Lureaufi
170521e709aaSMarc-André Lureau
1706bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled
1707bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
1708bd83c861SChristian Ehrhardt  error_exit "Can't enable module-upgrades as Modules are not enabled"
1709bd83c861SChristian Ehrhardtfi
1710bd83c861SChristian Ehrhardt
17115f2453acSAlex Bennée# Static linking is not possible with plugins, modules or PIE
171240d6444eSAvi Kivityif test "$static" = "yes" ; then
1713aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
1714aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
1715aa0d1f44SPaolo Bonzini  fi
17165f2453acSAlex Bennée  if test "$plugins" = "yes"; then
17175f2453acSAlex Bennée    error_exit "static and plugins are mutually incompatible"
1718ba4dd2aaSAlex Bennée  else
1719ba4dd2aaSAlex Bennée    plugins="no"
17205f2453acSAlex Bennée  fi
172140d6444eSAvi Kivityfi
172240d6444eSAvi Kivity
172340d6444eSAvi Kivitycat > $TMPC << EOF
172421d4a791SAvi Kivity
172521d4a791SAvi Kivity#ifdef __linux__
172621d4a791SAvi Kivity#  define THREAD __thread
172721d4a791SAvi Kivity#else
172821d4a791SAvi Kivity#  define THREAD
172921d4a791SAvi Kivity#endif
173021d4a791SAvi Kivitystatic THREAD int tls_var;
173121d4a791SAvi Kivityint main(void) { return tls_var; }
173240d6444eSAvi KivityEOF
1733b2634124SRichard Henderson
1734ffd205efSJessica Clarke# Check we support -fno-pie and -no-pie first; we will need the former for
1735ffd205efSJessica Clarke# building ROMs, and both for everything if --disable-pie is passed.
1736412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then
1737412aeacdSAlex Bennée  CFLAGS_NOPIE="-fno-pie"
1738ffd205efSJessica Clarke  LDFLAGS_NOPIE="-no-pie"
1739412aeacdSAlex Bennéefi
1740412aeacdSAlex Bennée
174112781462SRichard Hendersonif test "$static" = "yes"; then
1742eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
17435770e8afSPaolo Bonzini    CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
174412781462SRichard Henderson    QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
174512781462SRichard Henderson    pie="yes"
174612781462SRichard Henderson  elif test "$pie" = "yes"; then
174712781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
174812781462SRichard Henderson  else
174912781462SRichard Henderson    QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
175012781462SRichard Henderson    pie="no"
175112781462SRichard Henderson  fi
175212781462SRichard Hendersonelif test "$pie" = "no"; then
17535770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
1754ffd205efSJessica Clarke  CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
1755eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
17565770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
17575770e8afSPaolo Bonzini  CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
175840d6444eSAvi Kivity  pie="yes"
17592c674109SRichard Hendersonelif test "$pie" = "yes"; then
176076ad07a4SPeter Maydell  error_exit "PIE not available due to missing toolchain support"
176140d6444eSAvi Kivityelse
176240d6444eSAvi Kivity  echo "Disabling PIE due to missing toolchain support"
176340d6444eSAvi Kivity  pie="no"
176440d6444eSAvi Kivityfi
176540d6444eSAvi Kivity
1766e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
1767e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too.
1768e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1769e6cbd751SRichard Henderson  QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
1770e6cbd751SRichard Hendersonfi
1771e6cbd751SRichard Henderson
177209dada40SPaolo Bonzini##########################################
177309dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
177409dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
177509dada40SPaolo Bonzini# specification is necessary
177609dada40SPaolo Bonzini
177709dada40SPaolo Bonziniif test "$cpu" = "i386"; then
177809dada40SPaolo Bonzini  cat > $TMPC << EOF
177909dada40SPaolo Bonzinistatic int sfaa(int *ptr)
178009dada40SPaolo Bonzini{
178109dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
178209dada40SPaolo Bonzini}
178309dada40SPaolo Bonzini
178409dada40SPaolo Bonziniint main(void)
178509dada40SPaolo Bonzini{
178609dada40SPaolo Bonzini  int val = 42;
17871405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
178809dada40SPaolo Bonzini  sfaa(&val);
178909dada40SPaolo Bonzini  return val;
179009dada40SPaolo Bonzini}
179109dada40SPaolo BonziniEOF
179209dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
179309dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
179409dada40SPaolo Bonzini  fi
179509dada40SPaolo Bonzinifi
179609dada40SPaolo Bonzini
179756267b62SPhilippe Mathieu-Daudéif test "$tcg" = "enabled"; then
179856267b62SPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
179956267b62SPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
180056267b62SPhilippe Mathieu-Daudéfi
180156267b62SPhilippe Mathieu-Daudé
1802afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
1803fdb75aefSPaolo Bonzini    default_targets=yes
1804d880a3baSPaolo Bonzini    for target in $default_target_list; do
1805d880a3baSPaolo Bonzini        target_list="$target_list $target"
1806d880a3baSPaolo Bonzini    done
1807d880a3baSPaolo Bonzini    target_list="${target_list# }"
1808121afa9eSAnthony Liguorielse
1809fdb75aefSPaolo Bonzini    default_targets=no
181089138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1811d880a3baSPaolo Bonzini    for target in $target_list; do
181225b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
181325b48338SPeter Maydell        # friendly error message than if we let it fall through.
181425b48338SPeter Maydell        case " $default_target_list " in
181525b48338SPeter Maydell            *" $target "*)
181625b48338SPeter Maydell                ;;
181725b48338SPeter Maydell            *)
181825b48338SPeter Maydell                error_exit "Unknown target name '$target'"
181925b48338SPeter Maydell                ;;
182025b48338SPeter Maydell        esac
182125b48338SPeter Maydell    done
1822d880a3baSPaolo Bonzinifi
182325b48338SPeter Maydell
1824fdb75aefSPaolo Bonzinifor target in $target_list; do
1825fdb75aefSPaolo Bonzini    # if a deprecated target is enabled we note it here
1826fdb75aefSPaolo Bonzini    if echo "$deprecated_targets_list" | grep -q "$target"; then
1827fdb75aefSPaolo Bonzini        add_to deprecated_features $target
1828fdb75aefSPaolo Bonzini    fi
1829fdb75aefSPaolo Bonzinidone
1830fdb75aefSPaolo Bonzini
1831f55fe278SPaolo Bonzini# see if system emulation was really requested
1832f55fe278SPaolo Bonzinicase " $target_list " in
1833f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
1834f55fe278SPaolo Bonzini  ;;
1835f55fe278SPaolo Bonzini  *) softmmu=no
1836f55fe278SPaolo Bonzini  ;;
1837f55fe278SPaolo Bonziniesac
18385327cf48Sbellard
1839249247c9SJuan Quintelafeature_not_found() {
1840249247c9SJuan Quintela  feature=$1
184121684af0SStewart Smith  remedy=$2
1842249247c9SJuan Quintela
184376ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
184421684af0SStewart Smith      "configure was not able to find it." \
184521684af0SStewart Smith      "$remedy"
1846249247c9SJuan Quintela}
1847249247c9SJuan Quintela
18487d13299dSbellard# ---
18497d13299dSbellard# big/little endian test
18507d13299dSbellardcat > $TMPC << EOF
1851659eb157SThomas Huth#include <stdio.h>
185261cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
185361cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1854659eb157SThomas Huthint main(int argc, char *argv[])
1855659eb157SThomas Huth{
1856659eb157SThomas Huth    return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
18577d13299dSbellard}
18587d13299dSbellardEOF
18597d13299dSbellard
1860659eb157SThomas Huthif compile_prog ; then
1861659eb157SThomas Huth    if strings -a $TMPE | grep -q BiGeNdIaN ; then
186261cc919fSMike Frysinger        bigendian="yes"
1863659eb157SThomas Huth    elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
186461cc919fSMike Frysinger        bigendian="no"
18657d13299dSbellard    else
18667d13299dSbellard        echo big/little test failed
1867659eb157SThomas Huth        exit 1
18687d13299dSbellard    fi
18697d13299dSbellardelse
187061cc919fSMike Frysinger    echo big/little test failed
1871659eb157SThomas Huth    exit 1
18727d13299dSbellardfi
18737d13299dSbellard
1874b0a47e79SJuan Quintela##########################################
1875e10ee3f5SPhilippe Mathieu-Daudé# system tools
1876e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then
1877e10ee3f5SPhilippe Mathieu-Daudé    if test "$softmmu" = "no"; then
1878e10ee3f5SPhilippe Mathieu-Daudé        want_tools=no
1879e10ee3f5SPhilippe Mathieu-Daudé    else
1880e10ee3f5SPhilippe Mathieu-Daudé        want_tools=yes
1881e10ee3f5SPhilippe Mathieu-Daudé    fi
1882e10ee3f5SPhilippe Mathieu-Daudéfi
1883e10ee3f5SPhilippe Mathieu-Daudé
1884299e6f19SPaolo Bonzini#########################################
1885299e6f19SPaolo Bonzini# vhost interdependencies and host support
1886299e6f19SPaolo Bonzini
1887299e6f19SPaolo Bonzini# vhost backends
1888d88618f7SStefan Hajnocziif test "$vhost_user" = "yes" && test "$linux" != "yes"; then
1889d88618f7SStefan Hajnoczi  error_exit "vhost-user is only available on Linux"
1890299e6f19SPaolo Bonzinifi
1891108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux
1892108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
1893108a6481SCindy Lu  error_exit "vhost-vdpa is only available on Linux"
1894108a6481SCindy Lufi
1895299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux
1896299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
1897299e6f19SPaolo Bonzini  error_exit "vhost-kernel is only available on Linux"
1898299e6f19SPaolo Bonzinifi
1899299e6f19SPaolo Bonzini
1900299e6f19SPaolo Bonzini# vhost-kernel devices
1901299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
1902299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
1903299e6f19SPaolo Bonzini  error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
1904299e6f19SPaolo Bonzinifi
1905299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
1906299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
1907299e6f19SPaolo Bonzini  error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
1908299e6f19SPaolo Bonzinifi
1909299e6f19SPaolo Bonzini
1910299e6f19SPaolo Bonzini# vhost-user backends
1911299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user
1912299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
1913299e6f19SPaolo Bonzini  error_exit "--enable-vhost-net-user requires --enable-vhost-user"
1914299e6f19SPaolo Bonzinifi
1915299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user
1916299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
1917299e6f19SPaolo Bonzini  error_exit "--enable-vhost-crypto requires --enable-vhost-user"
1918299e6f19SPaolo Bonzinifi
191998fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
192098fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
192198fc1adaSDr. David Alan Gilbert  error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
192298fc1adaSDr. David Alan Gilbertfi
1923108a6481SCindy Lu#vhost-vdpa backends
1924108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
1925108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
1926108a6481SCindy Lu  error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
1927108a6481SCindy Lufi
1928299e6f19SPaolo Bonzini
192940bc0ca9SLaurent Vivier# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
1930299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then
1931299e6f19SPaolo Bonzini  test "$vhost_net_user" = "yes" && vhost_net=yes
193240bc0ca9SLaurent Vivier  test "$vhost_net_vdpa" = "yes" && vhost_net=yes
1933299e6f19SPaolo Bonzini  test "$vhost_kernel" = "yes" && vhost_net=yes
1934299e6f19SPaolo Bonzinifi
1935299e6f19SPaolo Bonzini
1936015a33bdSGonglei##########################################
1937779ab5e3SStefan Weil# pkg-config probe
1938779ab5e3SStefan Weil
1939779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
194076ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
1941779ab5e3SStefan Weilfi
1942779ab5e3SStefan Weil
1943779ab5e3SStefan Weil##########################################
1944e37630caSaliguori# xen probe
1945e37630caSaliguori
19461badb709SPaolo Bonziniif test "$xen" != "disabled" ; then
1947c1cdd9d5SJuergen Gross  # Check whether Xen library path is specified via --extra-ldflags to avoid
1948c1cdd9d5SJuergen Gross  # overriding this setting with pkg-config output. If not, try pkg-config
1949c1cdd9d5SJuergen Gross  # to obtain all needed flags.
1950c1cdd9d5SJuergen Gross
1951c1cdd9d5SJuergen Gross  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
1952c1cdd9d5SJuergen Gross     $pkg_config --exists xencontrol ; then
1953c1cdd9d5SJuergen Gross    xen_ctrl_version="$(printf '%d%02d%02d' \
1954c1cdd9d5SJuergen Gross      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
19551badb709SPaolo Bonzini    xen=enabled
19565b6a8f43SMichael Tokarev    xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
1957c1cdd9d5SJuergen Gross    xen_pc="$xen_pc xenevtchn xendevicemodel"
195858ea9a7aSAnthony PERARD    if $pkg_config --exists xentoolcore; then
195958ea9a7aSAnthony PERARD      xen_pc="$xen_pc xentoolcore"
196058ea9a7aSAnthony PERARD    fi
1961582ea95fSMarc-André Lureau    xen_cflags="$($pkg_config --cflags $xen_pc)"
1962582ea95fSMarc-André Lureau    xen_libs="$($pkg_config --libs $xen_pc)"
1963c1cdd9d5SJuergen Gross  else
1964c1cdd9d5SJuergen Gross
19655b6a8f43SMichael Tokarev    xen_libs="-lxenstore -lxenctrl"
1966d9506cabSAnthony PERARD    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1967d5b93ddfSAnthony PERARD
196850ced5b3SStefan Weil    # First we test whether Xen headers and libraries are available.
196950ced5b3SStefan Weil    # If no, we are done and there is no Xen support.
197050ced5b3SStefan Weil    # If yes, more tests are run to detect the Xen version.
197150ced5b3SStefan Weil
197250ced5b3SStefan Weil    # Xen (any)
197350ced5b3SStefan Weil    cat > $TMPC <<EOF
197450ced5b3SStefan Weil#include <xenctrl.h>
197550ced5b3SStefan Weilint main(void) {
197650ced5b3SStefan Weil  return 0;
197750ced5b3SStefan Weil}
197850ced5b3SStefan WeilEOF
197950ced5b3SStefan Weil    if ! compile_prog "" "$xen_libs" ; then
198050ced5b3SStefan Weil      # Xen not found
19811badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
198221684af0SStewart Smith        feature_not_found "xen" "Install xen devel"
198350ced5b3SStefan Weil      fi
19841badb709SPaolo Bonzini      xen=disabled
198550ced5b3SStefan Weil
1986d5b93ddfSAnthony PERARD    # Xen unstable
198769deef08SPeter Maydell    elif
198869deef08SPeter Maydell        cat > $TMPC <<EOF &&
19892cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API
19902cbf8903SRoss Lagerwall#define __XEN_TOOLS__
19912cbf8903SRoss Lagerwall#include <xendevicemodel.h>
1992d3c49ebbSPaul Durrant#include <xenforeignmemory.h>
19932cbf8903SRoss Lagerwallint main(void) {
19942cbf8903SRoss Lagerwall  xendevicemodel_handle *xd;
1995d3c49ebbSPaul Durrant  xenforeignmemory_handle *xfmem;
19962cbf8903SRoss Lagerwall
19972cbf8903SRoss Lagerwall  xd = xendevicemodel_open(0, 0);
19982cbf8903SRoss Lagerwall  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
19992cbf8903SRoss Lagerwall
2000d3c49ebbSPaul Durrant  xfmem = xenforeignmemory_open(0, 0);
2001d3c49ebbSPaul Durrant  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2002d3c49ebbSPaul Durrant
20032cbf8903SRoss Lagerwall  return 0;
20042cbf8903SRoss Lagerwall}
20052cbf8903SRoss LagerwallEOF
20062cbf8903SRoss Lagerwall        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
20072cbf8903SRoss Lagerwall      then
20082cbf8903SRoss Lagerwall      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
20092cbf8903SRoss Lagerwall      xen_ctrl_version=41100
20101badb709SPaolo Bonzini      xen=enabled
20112cbf8903SRoss Lagerwall    elif
20122cbf8903SRoss Lagerwall        cat > $TMPC <<EOF &&
20135ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API
20145ba3d756SIgor Druzhinin#include <xenforeignmemory.h>
201558ea9a7aSAnthony PERARD#include <xentoolcore.h>
20165ba3d756SIgor Druzhininint main(void) {
20175ba3d756SIgor Druzhinin  xenforeignmemory_handle *xfmem;
20185ba3d756SIgor Druzhinin
20195ba3d756SIgor Druzhinin  xfmem = xenforeignmemory_open(0, 0);
20205ba3d756SIgor Druzhinin  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
202158ea9a7aSAnthony PERARD  xentoolcore_restrict_all(0);
20225ba3d756SIgor Druzhinin
20235ba3d756SIgor Druzhinin  return 0;
20245ba3d756SIgor Druzhinin}
20255ba3d756SIgor DruzhininEOF
202658ea9a7aSAnthony PERARD        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
20275ba3d756SIgor Druzhinin      then
202858ea9a7aSAnthony PERARD      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
20295ba3d756SIgor Druzhinin      xen_ctrl_version=41000
20301badb709SPaolo Bonzini      xen=enabled
20315ba3d756SIgor Druzhinin    elif
20325ba3d756SIgor Druzhinin        cat > $TMPC <<EOF &&
2033da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API
2034da8090ccSPaul Durrant#define __XEN_TOOLS__
2035da8090ccSPaul Durrant#include <xendevicemodel.h>
2036da8090ccSPaul Durrantint main(void) {
2037da8090ccSPaul Durrant  xendevicemodel_handle *xd;
2038da8090ccSPaul Durrant
2039da8090ccSPaul Durrant  xd = xendevicemodel_open(0, 0);
2040da8090ccSPaul Durrant  xendevicemodel_close(xd);
2041da8090ccSPaul Durrant
2042da8090ccSPaul Durrant  return 0;
2043da8090ccSPaul Durrant}
2044da8090ccSPaul DurrantEOF
2045da8090ccSPaul Durrant        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2046da8090ccSPaul Durrant      then
2047da8090ccSPaul Durrant      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2048f1167ee6SJuergen Gross      xen_ctrl_version=40900
20491badb709SPaolo Bonzini      xen=enabled
2050da8090ccSPaul Durrant    elif
2051da8090ccSPaul Durrant        cat > $TMPC <<EOF &&
20525eeb39c2SIan Campbell/*
20535eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat
20545eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given.
2055b6eb9b45SPaulina Szubarczyk *
2056b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and
2057b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented.
2058b6eb9b45SPaulina Szubarczyk */
2059b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API
2060b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API
2061b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2062b6eb9b45SPaulina Szubarczyk#include <xenctrl.h>
2063b6eb9b45SPaulina Szubarczyk#include <xenstore.h>
2064b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h>
2065b6eb9b45SPaulina Szubarczyk#include <xengnttab.h>
2066b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h>
2067b6eb9b45SPaulina Szubarczyk#include <stdint.h>
2068b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h>
2069b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS)
2070b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined
2071b6eb9b45SPaulina Szubarczyk#endif
2072b6eb9b45SPaulina Szubarczykint main(void) {
2073b6eb9b45SPaulina Szubarczyk  xc_interface *xc = NULL;
2074b6eb9b45SPaulina Szubarczyk  xenforeignmemory_handle *xfmem;
2075b6eb9b45SPaulina Szubarczyk  xenevtchn_handle *xe;
2076b6eb9b45SPaulina Szubarczyk  xengnttab_handle *xg;
2077b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy_segment_t* seg = NULL;
2078b6eb9b45SPaulina Szubarczyk
2079b6eb9b45SPaulina Szubarczyk  xs_daemon_open();
2080b6eb9b45SPaulina Szubarczyk
2081b6eb9b45SPaulina Szubarczyk  xc = xc_interface_open(0, 0, 0);
2082b6eb9b45SPaulina Szubarczyk  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2083b6eb9b45SPaulina Szubarczyk  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2084b6eb9b45SPaulina Szubarczyk  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2085b6eb9b45SPaulina Szubarczyk  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2086b6eb9b45SPaulina Szubarczyk
2087b6eb9b45SPaulina Szubarczyk  xfmem = xenforeignmemory_open(0, 0);
2088b6eb9b45SPaulina Szubarczyk  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2089b6eb9b45SPaulina Szubarczyk
2090b6eb9b45SPaulina Szubarczyk  xe = xenevtchn_open(0, 0);
2091b6eb9b45SPaulina Szubarczyk  xenevtchn_fd(xe);
2092b6eb9b45SPaulina Szubarczyk
2093b6eb9b45SPaulina Szubarczyk  xg = xengnttab_open(0, 0);
2094b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy(xg, 0, seg);
2095b6eb9b45SPaulina Szubarczyk
2096b6eb9b45SPaulina Szubarczyk  return 0;
2097b6eb9b45SPaulina Szubarczyk}
2098b6eb9b45SPaulina SzubarczykEOF
2099b6eb9b45SPaulina Szubarczyk        compile_prog "" "$xen_libs $xen_stable_libs"
2100b6eb9b45SPaulina Szubarczyk      then
2101f1167ee6SJuergen Gross      xen_ctrl_version=40800
21021badb709SPaolo Bonzini      xen=enabled
2103b6eb9b45SPaulina Szubarczyk    elif
2104b6eb9b45SPaulina Szubarczyk        cat > $TMPC <<EOF &&
2105b6eb9b45SPaulina Szubarczyk/*
2106b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat
2107b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given.
21085eeb39c2SIan Campbell */
21095eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API
21105eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API
21115eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API
21125eeb39c2SIan Campbell#include <xenctrl.h>
21135eeb39c2SIan Campbell#include <xenstore.h>
21145eeb39c2SIan Campbell#include <xenevtchn.h>
21155eeb39c2SIan Campbell#include <xengnttab.h>
21165eeb39c2SIan Campbell#include <xenforeignmemory.h>
21175eeb39c2SIan Campbell#include <stdint.h>
21185eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h>
21195eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS)
21205eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined
21215eeb39c2SIan Campbell#endif
21225eeb39c2SIan Campbellint main(void) {
21235eeb39c2SIan Campbell  xc_interface *xc = NULL;
21245eeb39c2SIan Campbell  xenforeignmemory_handle *xfmem;
21255eeb39c2SIan Campbell  xenevtchn_handle *xe;
21265eeb39c2SIan Campbell  xengnttab_handle *xg;
21275eeb39c2SIan Campbell
21285eeb39c2SIan Campbell  xs_daemon_open();
21295eeb39c2SIan Campbell
21305eeb39c2SIan Campbell  xc = xc_interface_open(0, 0, 0);
21315eeb39c2SIan Campbell  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
21325eeb39c2SIan Campbell  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
21335eeb39c2SIan Campbell  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
21345eeb39c2SIan Campbell  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
21355eeb39c2SIan Campbell
21365eeb39c2SIan Campbell  xfmem = xenforeignmemory_open(0, 0);
21375eeb39c2SIan Campbell  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
21385eeb39c2SIan Campbell
21395eeb39c2SIan Campbell  xe = xenevtchn_open(0, 0);
21405eeb39c2SIan Campbell  xenevtchn_fd(xe);
21415eeb39c2SIan Campbell
21425eeb39c2SIan Campbell  xg = xengnttab_open(0, 0);
21435eeb39c2SIan Campbell  xengnttab_map_grant_ref(xg, 0, 0, 0);
21445eeb39c2SIan Campbell
21455eeb39c2SIan Campbell  return 0;
21465eeb39c2SIan Campbell}
21475eeb39c2SIan CampbellEOF
21485eeb39c2SIan Campbell        compile_prog "" "$xen_libs $xen_stable_libs"
21495eeb39c2SIan Campbell      then
2150f1167ee6SJuergen Gross      xen_ctrl_version=40701
21511badb709SPaolo Bonzini      xen=enabled
2152cdadde39SRoger Pau Monne
2153cdadde39SRoger Pau Monne    # Xen 4.6
2154cdadde39SRoger Pau Monne    elif
2155cdadde39SRoger Pau Monne        cat > $TMPC <<EOF &&
2156cdadde39SRoger Pau Monne#include <xenctrl.h>
2157e108a3c1SAnthony PERARD#include <xenstore.h>
2158d5b93ddfSAnthony PERARD#include <stdint.h>
2159d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
2160d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
2161d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
2162d5b93ddfSAnthony PERARD#endif
2163d5b93ddfSAnthony PERARDint main(void) {
2164d5b93ddfSAnthony PERARD  xc_interface *xc;
2165d5b93ddfSAnthony PERARD  xs_daemon_open();
2166d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
2167d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2168d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
2169b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
21708688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2171d8b441a3SJan Beulich  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
217220a544c7SKonrad Rzeszutek Wilk  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2173d8b441a3SJan Beulich  return 0;
2174d8b441a3SJan Beulich}
2175d8b441a3SJan BeulichEOF
2176d8b441a3SJan Beulich        compile_prog "" "$xen_libs"
2177d8b441a3SJan Beulich      then
2178f1167ee6SJuergen Gross      xen_ctrl_version=40600
21791badb709SPaolo Bonzini      xen=enabled
2180d8b441a3SJan Beulich
2181d8b441a3SJan Beulich    # Xen 4.5
2182d8b441a3SJan Beulich    elif
2183d8b441a3SJan Beulich        cat > $TMPC <<EOF &&
2184d8b441a3SJan Beulich#include <xenctrl.h>
2185d8b441a3SJan Beulich#include <xenstore.h>
2186d8b441a3SJan Beulich#include <stdint.h>
2187d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h>
2188d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS)
2189d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined
2190d8b441a3SJan Beulich#endif
2191d8b441a3SJan Beulichint main(void) {
2192d8b441a3SJan Beulich  xc_interface *xc;
2193d8b441a3SJan Beulich  xs_daemon_open();
2194d8b441a3SJan Beulich  xc = xc_interface_open(0, 0, 0);
2195d8b441a3SJan Beulich  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2196d8b441a3SJan Beulich  xc_gnttab_open(NULL, 0);
2197d8b441a3SJan Beulich  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2198d8b441a3SJan Beulich  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
21993996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
22003996e85cSPaul Durrant  return 0;
22013996e85cSPaul Durrant}
22023996e85cSPaul DurrantEOF
22033996e85cSPaul Durrant        compile_prog "" "$xen_libs"
22043996e85cSPaul Durrant      then
2205f1167ee6SJuergen Gross      xen_ctrl_version=40500
22061badb709SPaolo Bonzini      xen=enabled
22073996e85cSPaul Durrant
22083996e85cSPaul Durrant    elif
22093996e85cSPaul Durrant        cat > $TMPC <<EOF &&
22103996e85cSPaul Durrant#include <xenctrl.h>
22113996e85cSPaul Durrant#include <xenstore.h>
22123996e85cSPaul Durrant#include <stdint.h>
22133996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
22143996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
22153996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
22163996e85cSPaul Durrant#endif
22173996e85cSPaul Durrantint main(void) {
22183996e85cSPaul Durrant  xc_interface *xc;
22193996e85cSPaul Durrant  xs_daemon_open();
22203996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
22213996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
22223996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
22233996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
22243996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
22258688e065SStefano Stabellini  return 0;
22268688e065SStefano Stabellini}
22278688e065SStefano StabelliniEOF
22288688e065SStefano Stabellini        compile_prog "" "$xen_libs"
222969deef08SPeter Maydell      then
2230f1167ee6SJuergen Gross      xen_ctrl_version=40200
22311badb709SPaolo Bonzini      xen=enabled
22328688e065SStefano Stabellini
2233e37630caSaliguori    else
22341badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
2235edfb07edSIan Campbell        feature_not_found "xen (unsupported version)" \
2236edfb07edSIan Campbell                          "Install a supported xen (xen 4.2 or newer)"
2237fc321b4bSJuan Quintela      fi
22381badb709SPaolo Bonzini      xen=disabled
2239e37630caSaliguori    fi
2240d5b93ddfSAnthony PERARD
22411badb709SPaolo Bonzini    if test "$xen" = enabled; then
2242f1167ee6SJuergen Gross      if test $xen_ctrl_version -ge 40701  ; then
2243582ea95fSMarc-André Lureau        xen_libs="$xen_libs $xen_stable_libs "
22445eeb39c2SIan Campbell      fi
2245d5b93ddfSAnthony PERARD    fi
2246e37630caSaliguori  fi
2247c1cdd9d5SJuergen Grossfi
2248e37630caSaliguori
2249d661d9a4SJustin Terry (VM)##########################################
22502da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
22512da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
22522da776dbSMichael R. Hines  cat > $TMPC <<EOF
22532da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
22542da776dbSMichael R. Hinesint main(void) { return 0; }
22552da776dbSMichael R. HinesEOF
2256ef6d4ccdSYuval Shaia  rdma_libs="-lrdmacm -libverbs -libumad"
22572da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
22582da776dbSMichael R. Hines    rdma="yes"
22592da776dbSMichael R. Hines  else
22602da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
22612da776dbSMichael R. Hines        error_exit \
2262ef6d4ccdSYuval Shaia            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
22632da776dbSMichael R. Hines            " Your options:" \
2264ef6d4ccdSYuval Shaia            "  (1) Fast: Install infiniband packages (devel) from your distro." \
22652da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
22662da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
22672da776dbSMichael R. Hines    fi
22682da776dbSMichael R. Hines    rdma="no"
22692da776dbSMichael R. Hines  fi
22702da776dbSMichael R. Hinesfi
22712da776dbSMichael R. Hines
227221ab34c9SMarcel Apfelbaum##########################################
227321ab34c9SMarcel Apfelbaum# PVRDMA detection
227421ab34c9SMarcel Apfelbaum
227521ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF &&
227621ab34c9SMarcel Apfelbaum#include <sys/mman.h>
227721ab34c9SMarcel Apfelbaum
227821ab34c9SMarcel Apfelbaumint
227921ab34c9SMarcel Apfelbaummain(void)
228021ab34c9SMarcel Apfelbaum{
228121ab34c9SMarcel Apfelbaum    char buf = 0;
228221ab34c9SMarcel Apfelbaum    void *addr = &buf;
228321ab34c9SMarcel Apfelbaum    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
228421ab34c9SMarcel Apfelbaum
228521ab34c9SMarcel Apfelbaum    return 0;
228621ab34c9SMarcel Apfelbaum}
228721ab34c9SMarcel ApfelbaumEOF
228821ab34c9SMarcel Apfelbaum
228921ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then
229021ab34c9SMarcel Apfelbaum    case "$pvrdma" in
229121ab34c9SMarcel Apfelbaum    "")
229221ab34c9SMarcel Apfelbaum        if compile_prog "" ""; then
229321ab34c9SMarcel Apfelbaum            pvrdma="yes"
229421ab34c9SMarcel Apfelbaum        else
229521ab34c9SMarcel Apfelbaum            pvrdma="no"
229621ab34c9SMarcel Apfelbaum        fi
229721ab34c9SMarcel Apfelbaum        ;;
229821ab34c9SMarcel Apfelbaum    "yes")
229921ab34c9SMarcel Apfelbaum        if ! compile_prog "" ""; then
230021ab34c9SMarcel Apfelbaum            error_exit "PVRDMA is not supported since mremap is not implemented"
230121ab34c9SMarcel Apfelbaum        fi
230221ab34c9SMarcel Apfelbaum        pvrdma="yes"
230321ab34c9SMarcel Apfelbaum        ;;
230421ab34c9SMarcel Apfelbaum    "no")
230521ab34c9SMarcel Apfelbaum        pvrdma="no"
230621ab34c9SMarcel Apfelbaum        ;;
230721ab34c9SMarcel Apfelbaum    esac
230821ab34c9SMarcel Apfelbaumelse
230921ab34c9SMarcel Apfelbaum    if test "$pvrdma" = "yes" ; then
231021ab34c9SMarcel Apfelbaum        error_exit "PVRDMA requires rdma suppport"
231121ab34c9SMarcel Apfelbaum    fi
231221ab34c9SMarcel Apfelbaum    pvrdma="no"
231321ab34c9SMarcel Apfelbaumfi
231495c6bff3SBenoît Canet
2315ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported
2316ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then
2317ee108585SYuval Shaia
2318ee108585SYuval Shaiacat > $TMPC <<EOF &&
2319ee108585SYuval Shaia#include <infiniband/verbs.h>
2320ee108585SYuval Shaia
2321ee108585SYuval Shaiaint
2322ee108585SYuval Shaiamain(void)
2323ee108585SYuval Shaia{
2324ee108585SYuval Shaia    struct ibv_mr *mr;
2325ee108585SYuval Shaia    struct ibv_pd *pd = NULL;
2326ee108585SYuval Shaia    size_t length = 10;
2327ee108585SYuval Shaia    uint64_t iova = 0;
2328ee108585SYuval Shaia    int access = 0;
2329ee108585SYuval Shaia    void *addr = NULL;
2330ee108585SYuval Shaia
2331ee108585SYuval Shaia    mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2332ee108585SYuval Shaia
2333ee108585SYuval Shaia    ibv_dereg_mr(mr);
2334ee108585SYuval Shaia
2335ee108585SYuval Shaia    return 0;
2336ee108585SYuval Shaia}
2337ee108585SYuval ShaiaEOF
2338ee108585SYuval Shaia    if ! compile_prog "" "-libverbs"; then
2339ee108585SYuval Shaia        QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2340ee108585SYuval Shaia    fi
2341ee108585SYuval Shaiafi
2342ee108585SYuval Shaia
234395c6bff3SBenoît Canet##########################################
2344c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c
2345dce512deSChristoph Hellwigif test "$xfs" != "no" ; then
2346dce512deSChristoph Hellwig  cat > $TMPC << EOF
2347ffc41d10SStefan Weil#include <stddef.h>  /* NULL */
2348dce512deSChristoph Hellwig#include <xfs/xfs.h>
2349dce512deSChristoph Hellwigint main(void)
2350dce512deSChristoph Hellwig{
2351dce512deSChristoph Hellwig    xfsctl(NULL, 0, 0, NULL);
2352dce512deSChristoph Hellwig    return 0;
2353dce512deSChristoph Hellwig}
2354dce512deSChristoph HellwigEOF
2355dce512deSChristoph Hellwig  if compile_prog "" "" ; then
2356dce512deSChristoph Hellwig    xfs="yes"
2357dce512deSChristoph Hellwig  else
2358dce512deSChristoph Hellwig    if test "$xfs" = "yes" ; then
2359e3a6e0daSzhaolichang      feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
2360dce512deSChristoph Hellwig    fi
2361dce512deSChristoph Hellwig    xfs=no
2362dce512deSChristoph Hellwig  fi
2363dce512deSChristoph Hellwigfi
2364dce512deSChristoph Hellwig
2365dce512deSChristoph Hellwig##########################################
2366ba4dd2aaSAlex Bennée# plugin linker support probe
2367ba4dd2aaSAlex Bennée
2368ba4dd2aaSAlex Bennéeif test "$plugins" != "no"; then
2369ba4dd2aaSAlex Bennée
2370ba4dd2aaSAlex Bennée    #########################################
2371ba4dd2aaSAlex Bennée    # See if --dynamic-list is supported by the linker
2372ba4dd2aaSAlex Bennée
2373ba4dd2aaSAlex Bennée    ld_dynamic_list="no"
2374ba4dd2aaSAlex Bennée    cat > $TMPTXT <<EOF
2375ba4dd2aaSAlex Bennée{
2376ba4dd2aaSAlex Bennée  foo;
2377ba4dd2aaSAlex Bennée};
2378ba4dd2aaSAlex BennéeEOF
2379ba4dd2aaSAlex Bennée
2380ba4dd2aaSAlex Bennée        cat > $TMPC <<EOF
2381ba4dd2aaSAlex Bennée#include <stdio.h>
2382ba4dd2aaSAlex Bennéevoid foo(void);
2383ba4dd2aaSAlex Bennée
2384ba4dd2aaSAlex Bennéevoid foo(void)
2385ba4dd2aaSAlex Bennée{
2386ba4dd2aaSAlex Bennée  printf("foo\n");
2387ba4dd2aaSAlex Bennée}
2388ba4dd2aaSAlex Bennée
2389ba4dd2aaSAlex Bennéeint main(void)
2390ba4dd2aaSAlex Bennée{
2391ba4dd2aaSAlex Bennée  foo();
2392ba4dd2aaSAlex Bennée  return 0;
2393ba4dd2aaSAlex Bennée}
2394ba4dd2aaSAlex BennéeEOF
2395ba4dd2aaSAlex Bennée
2396ba4dd2aaSAlex Bennée    if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
2397ba4dd2aaSAlex Bennée        ld_dynamic_list="yes"
2398ba4dd2aaSAlex Bennée    fi
2399ba4dd2aaSAlex Bennée
2400ba4dd2aaSAlex Bennée    #########################################
2401ba4dd2aaSAlex Bennée    # See if -exported_symbols_list is supported by the linker
2402ba4dd2aaSAlex Bennée
2403ba4dd2aaSAlex Bennée    ld_exported_symbols_list="no"
2404ba4dd2aaSAlex Bennée    cat > $TMPTXT <<EOF
2405ba4dd2aaSAlex Bennée  _foo
2406ba4dd2aaSAlex BennéeEOF
2407ba4dd2aaSAlex Bennée
2408ba4dd2aaSAlex Bennée    if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
2409ba4dd2aaSAlex Bennée        ld_exported_symbols_list="yes"
2410ba4dd2aaSAlex Bennée    fi
2411ba4dd2aaSAlex Bennée
2412ba4dd2aaSAlex Bennée    if test "$ld_dynamic_list" = "no" &&
2413ba4dd2aaSAlex Bennée       test "$ld_exported_symbols_list" = "no" ; then
2414ba4dd2aaSAlex Bennée        if test "$plugins" = "yes"; then
2415ba4dd2aaSAlex Bennée            error_exit \
2416ba4dd2aaSAlex Bennée                "Plugin support requires dynamic linking and specifying a set of symbols " \
2417ba4dd2aaSAlex Bennée                "that are exported to plugins. Unfortunately your linker doesn't " \
2418ba4dd2aaSAlex Bennée                "support the flag (--dynamic-list or -exported_symbols_list) used " \
2419ba4dd2aaSAlex Bennée                "for this purpose."
2420ba4dd2aaSAlex Bennée        else
2421ba4dd2aaSAlex Bennée            plugins="no"
2422ba4dd2aaSAlex Bennée        fi
2423ba4dd2aaSAlex Bennée    else
2424ba4dd2aaSAlex Bennée        plugins="yes"
2425ba4dd2aaSAlex Bennée    fi
2426ba4dd2aaSAlex Bennéefi
2427ba4dd2aaSAlex Bennée
2428ba4dd2aaSAlex Bennée##########################################
2429e18df141SAnthony Liguori# glib support probe
2430a52d28afSPaolo Bonzini
2431b4c6036fSDaniel P. Berrangéglib_req_ver=2.56
2432aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
2433aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
2434a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
2435b906acacSPaolo Bonzinielif test "$plugins" = "yes"; then
2436b906acacSPaolo Bonzini    glib_modules="$glib_modules gmodule-no-export-2.0"
243754cb65d8SEmilio G. Cotafi
2438e26110cfSFam Zheng
2439aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
2440e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
244189138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
244289138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
2443e18df141SAnthony Liguori    else
2444e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2445e26110cfSFam Zheng    fi
2446e26110cfSFam Zhengdone
2447e26110cfSFam Zheng
2448215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it
2449215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
2450215b0c2fSPaolo Bonzini
2451215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then
2452215b0c2fSPaolo Bonzini    glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
2453215b0c2fSPaolo Bonzinifi
2454215b0c2fSPaolo Bonzini
245520cf7b8eSDenis Plotnikovif ! test "$gio" = "no"; then
245620cf7b8eSDenis Plotnikov    pass=no
2457f876b765SMarc-André Lureau    if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
2458f876b765SMarc-André Lureau        gio_cflags=$($pkg_config --cflags gio-2.0)
2459f876b765SMarc-André Lureau        gio_libs=$($pkg_config --libs gio-2.0)
246025a97a56SMarc-André Lureau        gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
24615ecfb76cSPaolo Bonzini        if ! has "$gdbus_codegen"; then
24620dba4897SMarc-André Lureau            gdbus_codegen=
24630dba4897SMarc-André Lureau        fi
246476346b62SPeter Maydell        # Check that the libraries actually work -- Ubuntu 18.04 ships
246576346b62SPeter Maydell        # with pkg-config --static --libs data for gio-2.0 that is missing
246676346b62SPeter Maydell        # -lblkid and will give a link error.
246713ceae66SPeter Maydell        cat > $TMPC <<EOF
246813ceae66SPeter Maydell#include <gio/gio.h>
246913ceae66SPeter Maydellint main(void)
247013ceae66SPeter Maydell{
247113ceae66SPeter Maydell    g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
247213ceae66SPeter Maydell    return 0;
247313ceae66SPeter Maydell}
247413ceae66SPeter MaydellEOF
247513ceae66SPeter Maydell        if compile_prog "$gio_cflags" "$gio_libs" ; then
247620cf7b8eSDenis Plotnikov            pass=yes
247776346b62SPeter Maydell        else
247820cf7b8eSDenis Plotnikov            pass=no
2479f876b765SMarc-André Lureau        fi
2480f876b765SMarc-André Lureau
248120cf7b8eSDenis Plotnikov        if test "$pass" = "yes" &&
248220cf7b8eSDenis Plotnikov            $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
248325a97a56SMarc-André Lureau            gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
248425a97a56SMarc-André Lureau            gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
248525a97a56SMarc-André Lureau        fi
248620cf7b8eSDenis Plotnikov    fi
248720cf7b8eSDenis Plotnikov
248820cf7b8eSDenis Plotnikov    if test "$pass" = "no"; then
248920cf7b8eSDenis Plotnikov        if test "$gio" = "yes"; then
249020cf7b8eSDenis Plotnikov            feature_not_found "gio" "Install libgio >= 2.0"
249120cf7b8eSDenis Plotnikov        else
249220cf7b8eSDenis Plotnikov            gio=no
249320cf7b8eSDenis Plotnikov        fi
249420cf7b8eSDenis Plotnikov    else
249520cf7b8eSDenis Plotnikov        gio=yes
249620cf7b8eSDenis Plotnikov    fi
249720cf7b8eSDenis Plotnikovfi
249825a97a56SMarc-André Lureau
2499977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
2500977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
2501977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
2502977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
2503977a82abSDaniel P. Berrangecat > $TMPC <<EOF
2504977a82abSDaniel P. Berrange#include <glib.h>
2505977a82abSDaniel P. Berrange#include <unistd.h>
2506977a82abSDaniel P. Berrange
2507977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
2508977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
2509977a82abSDaniel P. Berrange
2510977a82abSDaniel P. Berrangeint main(void) {
2511977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
2512977a82abSDaniel P. Berrange   return 0;
2513977a82abSDaniel P. Berrange}
2514977a82abSDaniel P. BerrangeEOF
2515977a82abSDaniel P. Berrange
2516215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then
2517977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
2518977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
2519977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
2520977a82abSDaniel P. Berrange	       "build target"
2521977a82abSDaniel P. Berrangefi
2522977a82abSDaniel P. Berrange
25239bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2
25249bda600bSEric Blakecat > $TMPC << EOF
25259bda600bSEric Blake#include <glib.h>
25269bda600bSEric Blaketypedef struct Foo {
25279bda600bSEric Blake    int i;
25289bda600bSEric Blake} Foo;
25299bda600bSEric Blakestatic void foo_free(Foo *f)
25309bda600bSEric Blake{
25319bda600bSEric Blake    g_free(f);
25329bda600bSEric Blake}
25339bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
25349bda600bSEric Blakeint main(void) { return 0; }
25359bda600bSEric BlakeEOF
25369bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
25379bda600bSEric Blake    if cc_has_warning_flag "-Wno-unused-function"; then
25389bda600bSEric Blake        glib_cflags="$glib_cflags -Wno-unused-function"
25395770e8afSPaolo Bonzini        CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
25409bda600bSEric Blake    fi
25419bda600bSEric Blakefi
25429bda600bSEric Blake
2543e26110cfSFam Zheng##########################################
2544e26110cfSFam Zheng# SHA command probe for modules
2545e26110cfSFam Zhengif test "$modules" = yes; then
2546e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
2547e26110cfSFam Zheng    for c in $shacmd_probe; do
25488ccefb91SFam Zheng        if has $c; then
2549e26110cfSFam Zheng            shacmd="$c"
2550e26110cfSFam Zheng            break
2551e26110cfSFam Zheng        fi
2552e26110cfSFam Zheng    done
2553e26110cfSFam Zheng    if test "$shacmd" = ""; then
2554e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2555e26110cfSFam Zheng    fi
2556e18df141SAnthony Liguorifi
2557e18df141SAnthony Liguori
2558e18df141SAnthony Liguori##########################################
2559b10d49d7SPino Toscano# libssh probe
2560b10d49d7SPino Toscanoif test "$libssh" != "no" ; then
2561b4c10fc6SThomas Huth  if $pkg_config --exists "libssh >= 0.8.7"; then
2562b10d49d7SPino Toscano    libssh_cflags=$($pkg_config libssh --cflags)
2563b10d49d7SPino Toscano    libssh_libs=$($pkg_config libssh --libs)
2564b10d49d7SPino Toscano    libssh=yes
25650a12ec87SRichard W.M. Jones  else
2566b10d49d7SPino Toscano    if test "$libssh" = "yes" ; then
2567b10d49d7SPino Toscano      error_exit "libssh required for --enable-libssh"
25680a12ec87SRichard W.M. Jones    fi
2569b10d49d7SPino Toscano    libssh=no
25700a12ec87SRichard W.M. Jones  fi
25710a12ec87SRichard W.M. Jonesfi
25720a12ec87SRichard W.M. Jones
25730a12ec87SRichard W.M. Jones##########################################
25747aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX
25753b8acc11SPaolo Bonzini
25767aaa6a16SPaolo Bonziniif test "$tpm" = ""; then
25777aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes"; then
25787aaa6a16SPaolo Bonzini    tpm=no
25793b8acc11SPaolo Bonzini  else
25807aaa6a16SPaolo Bonzini    tpm=yes
25817aaa6a16SPaolo Bonzini  fi
25827aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then
25837aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes" ; then
25847aaa6a16SPaolo Bonzini    error_exit "TPM emulation only available on POSIX systems"
25857aaa6a16SPaolo Bonzini  fi
25863b8acc11SPaolo Bonzinifi
25873b8acc11SPaolo Bonzini
25883b8acc11SPaolo Bonzini##########################################
2589f652e6afSaurel32# fdt probe
2590e169e1e1SPeter Maydell
2591fbb4121dSPaolo Bonzinicase "$fdt" in
2592fbb4121dSPaolo Bonzini  auto | enabled | internal)
2593fbb4121dSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
2594aef45d51SDaniel P. Berrange    git_submodules="${git_submodules} dtc"
2595fbb4121dSPaolo Bonzini    ;;
2596fbb4121dSPaolo Bonziniesac
2597f652e6afSaurel32
259820ff075bSMichael Walle##########################################
25999d49bcf6SMarkus Armbruster# opengl probe (for sdl2, gtk)
2600b1546f32SGerd Hoffmann
2601da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
2602bc6a3565SAkihiko Odaki  epoxy=no
2603bc6a3565SAkihiko Odaki  if $pkg_config epoxy; then
2604bc6a3565SAkihiko Odaki    cat > $TMPC << EOF
2605bc6a3565SAkihiko Odaki#include <epoxy/egl.h>
2606bc6a3565SAkihiko Odakiint main(void) { return 0; }
2607bc6a3565SAkihiko OdakiEOF
2608bc6a3565SAkihiko Odaki    if compile_prog "" "" ; then
2609bc6a3565SAkihiko Odaki      epoxy=yes
2610bc6a3565SAkihiko Odaki    fi
2611bc6a3565SAkihiko Odaki  fi
2612bc6a3565SAkihiko Odaki
2613bc6a3565SAkihiko Odaki  if test "$epoxy" = "yes" ; then
2614bc6a3565SAkihiko Odaki    opengl_cflags="$($pkg_config --cflags epoxy)"
2615bc6a3565SAkihiko Odaki    opengl_libs="$($pkg_config --libs epoxy)"
2616da076ffeSGerd Hoffmann    opengl=yes
261720ff075bSMichael Walle  else
2618da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
2619bc6a3565SAkihiko Odaki      feature_not_found "opengl" "Please install epoxy with EGL"
262020ff075bSMichael Walle    fi
2621f676c67eSJeremy White    opengl_cflags=""
2622da076ffeSGerd Hoffmann    opengl_libs=""
2623da076ffeSGerd Hoffmann    opengl=no
262420ff075bSMichael Walle  fi
262520ff075bSMichael Wallefi
262620ff075bSMichael Walle
2627dcc38d1cSMarcelo Tosatti##########################################
2628a99d57bbSWanlong Gao# libnuma probe
2629a99d57bbSWanlong Gao
2630a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
2631a99d57bbSWanlong Gao  cat > $TMPC << EOF
2632a99d57bbSWanlong Gao#include <numa.h>
2633a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
2634a99d57bbSWanlong GaoEOF
2635a99d57bbSWanlong Gao
2636a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
2637a99d57bbSWanlong Gao    numa=yes
2638ab318051SMarc-André Lureau    numa_libs="-lnuma"
2639a99d57bbSWanlong Gao  else
2640a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
2641a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
2642a99d57bbSWanlong Gao    fi
2643a99d57bbSWanlong Gao    numa=no
2644a99d57bbSWanlong Gao  fi
2645a99d57bbSWanlong Gaofi
2646a99d57bbSWanlong Gao
2647955727d2SCortland Tölva# check for usbfs
2648955727d2SCortland Tölvahave_usbfs=no
2649955727d2SCortland Tölvaif test "$linux_user" = "yes"; then
265096566d09SThomas Petazzoni  cat > $TMPC << EOF
265196566d09SThomas Petazzoni#include <linux/usbdevice_fs.h>
265296566d09SThomas Petazzoni
265396566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES
265496566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined"
265596566d09SThomas Petazzoni#endif
265696566d09SThomas Petazzoni
265796566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM
265896566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined"
265996566d09SThomas Petazzoni#endif
266096566d09SThomas Petazzoni
266196566d09SThomas Petazzoniint main(void)
266296566d09SThomas Petazzoni{
266396566d09SThomas Petazzoni    return 0;
266496566d09SThomas Petazzoni}
266596566d09SThomas PetazzoniEOF
266696566d09SThomas Petazzoni  if compile_prog "" ""; then
2667955727d2SCortland Tölva    have_usbfs=yes
2668955727d2SCortland Tölva  fi
2669955727d2SCortland Tölvafi
2670751bcc39SMarc-André Lureau
2671de5071c5SBlue Swirl##########################################
2672d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
2673d9840e25STomoki Sekiyama
2674e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
2675e633a5c6SEric Blake        test "$vss_win32_sdk" != "no" ; then
2676d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
2677690604f6SMichael Roth    "")   vss_win32_include="-isystem $source_path" ;;
2678d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
2679d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
2680690604f6SMichael Roth          vss_win32_include="-isystem $source_path/.sdk/vss"
2681d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
2682d9840e25STomoki Sekiyama	  ;;
2683690604f6SMichael Roth    *)    vss_win32_include="-isystem $vss_win32_sdk"
2684d9840e25STomoki Sekiyama  esac
2685d9840e25STomoki Sekiyama  cat > $TMPC << EOF
2686d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
2687d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
2688d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
2689d9840e25STomoki SekiyamaEOF
2690d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
2691d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
2692d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
2693315d3184SFam Zheng    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
2694f33ca81fSMichael Roth    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
2695d9840e25STomoki Sekiyama  else
2696d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
2697d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
2698d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
2699d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
2700d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
2701d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
2702d9840e25STomoki Sekiyama      feature_not_found "VSS support"
2703d9840e25STomoki Sekiyama    fi
2704d9840e25STomoki Sekiyama    guest_agent_with_vss="no"
2705d9840e25STomoki Sekiyama  fi
2706d9840e25STomoki Sekiyamafi
2707d9840e25STomoki Sekiyama
2708d9840e25STomoki Sekiyama##########################################
2709d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
2710d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
2711d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
2712d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
2713d9840e25STomoki Sekiyama
2714e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
2715e633a5c6SEric Blake        test "$guest_agent_with_vss" = "yes" ; then
2716d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
2717d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
2718d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
2719d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
2720d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
2721d9840e25STomoki Sekiyama    else
2722d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
2723d9840e25STomoki Sekiyama    fi
2724d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
2725d9840e25STomoki Sekiyama    win_sdk=""
2726d9840e25STomoki Sekiyama  fi
2727d9840e25STomoki Sekiyamafi
2728d9840e25STomoki Sekiyama
2729d9840e25STomoki Sekiyama##########################################
273050cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h
2731e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
273250cbebb9SMichael Roth  cat > $TMPC << EOF
273350cbebb9SMichael Roth#include <windows.h>
273450cbebb9SMichael Roth#include <ntddscsi.h>
273550cbebb9SMichael Rothint main(void) {
273650cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS)
273750cbebb9SMichael Roth#error Missing required ioctl definitions
273850cbebb9SMichael Roth#endif
273950cbebb9SMichael Roth  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
274050cbebb9SMichael Roth  return addr.Lun;
274150cbebb9SMichael Roth}
274250cbebb9SMichael RothEOF
274350cbebb9SMichael Roth  if compile_prog "" "" ; then
274450cbebb9SMichael Roth    guest_agent_ntddscsi=yes
2745996b9cdcSMatt Hines    libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
274650cbebb9SMichael Roth  fi
274750cbebb9SMichael Rothfi
274850cbebb9SMichael Roth
274950cbebb9SMichael Roth##########################################
27508ca80760SRichard Henderson# capstone
27518ca80760SRichard Henderson
2752e219c499SRichard Hendersoncase "$capstone" in
27538b18cdbfSRichard Henderson  auto | enabled | internal)
27548b18cdbfSRichard Henderson    # Simpler to always update submodule, even if not needed.
2755e219c499SRichard Henderson    git_submodules="${git_submodules} capstone"
2756e219c499SRichard Henderson    ;;
2757e219c499SRichard Hendersonesac
27588ca80760SRichard Henderson
27598ca80760SRichard Henderson##########################################
2760519175a2SAlex Barcelo# check and set a backend for coroutine
2761d0e2fce5SAneesh Kumar K.V
27627c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
276333c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows
276433c53c54SDaniel P. Berrange# specific one.
27657c2acc70SPeter Maydell
27667c2acc70SPeter Maydellucontext_works=no
2767d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
2768d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
2769d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
2770cdf84806SPeter Maydell#ifdef __stub_makecontext
2771cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
2772cdf84806SPeter Maydell#endif
277375cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
2774d0e2fce5SAneesh Kumar K.VEOF
2775d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
27767c2acc70SPeter Maydell    ucontext_works=yes
2777d0e2fce5SAneesh Kumar K.V  fi
2778519175a2SAlex Barcelofi
27797c2acc70SPeter Maydell
27807c2acc70SPeter Maydellif test "$coroutine" = ""; then
27817c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
27827c2acc70SPeter Maydell    coroutine=win32
27837c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
27847c2acc70SPeter Maydell    coroutine=ucontext
2785519175a2SAlex Barcelo  else
27867c2acc70SPeter Maydell    coroutine=sigaltstack
27877c2acc70SPeter Maydell  fi
27887c2acc70SPeter Maydellelse
27897c2acc70SPeter Maydell  case $coroutine in
27907c2acc70SPeter Maydell  windows)
27917c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
27927c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
27937c2acc70SPeter Maydell    fi
27947c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
27957c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
27967c2acc70SPeter Maydell    coroutine=win32
27977c2acc70SPeter Maydell    ;;
27987c2acc70SPeter Maydell  ucontext)
27997c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
28007c2acc70SPeter Maydell      feature_not_found "ucontext"
28017c2acc70SPeter Maydell    fi
28027c2acc70SPeter Maydell    ;;
280333c53c54SDaniel P. Berrange  sigaltstack)
28047c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
28057c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
28067c2acc70SPeter Maydell    fi
28077c2acc70SPeter Maydell    ;;
28087c2acc70SPeter Maydell  *)
280976ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
28107c2acc70SPeter Maydell    ;;
28117c2acc70SPeter Maydell  esac
2812d0e2fce5SAneesh Kumar K.Vfi
2813d0e2fce5SAneesh Kumar K.V
281470c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then
281570c60c08SStefan Hajnoczi  coroutine_pool=yes
281670c60c08SStefan Hajnoczifi
281770c60c08SStefan Hajnoczi
28187d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then
28197d992e4dSPeter Lieven  if test "$coroutine_pool" = "yes"; then
28207d992e4dSPeter Lieven    echo "WARN: disabling coroutine pool for stack usage debugging"
28217d992e4dSPeter Lieven    coroutine_pool=no
28227d992e4dSPeter Lieven  fi
28237d992e4dSPeter Lievenfi
28247d992e4dSPeter Lieven
28251e4f6065SDaniele Buono##################################################
28261e4f6065SDaniele Buono# SafeStack
28271e4f6065SDaniele Buono
28281e4f6065SDaniele Buono
28291e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
28301e4f6065SDaniele Buonocat > $TMPC << EOF
28311e4f6065SDaniele Buonoint main(int argc, char *argv[])
28321e4f6065SDaniele Buono{
28331e4f6065SDaniele Buono#if ! __has_feature(safe_stack)
28341e4f6065SDaniele Buono#error SafeStack Disabled
28351e4f6065SDaniele Buono#endif
28361e4f6065SDaniele Buono    return 0;
28371e4f6065SDaniele Buono}
28381e4f6065SDaniele BuonoEOF
28391e4f6065SDaniele Buono  flag="-fsanitize=safe-stack"
28401e4f6065SDaniele Buono  # Check that safe-stack is supported and enabled.
28411e4f6065SDaniele Buono  if compile_prog "-Werror $flag" "$flag"; then
28421e4f6065SDaniele Buono    # Flag needed both at compilation and at linking
28431e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
28441e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
28451e4f6065SDaniele Buono  else
28461e4f6065SDaniele Buono    error_exit "SafeStack not supported by your compiler"
28471e4f6065SDaniele Buono  fi
28481e4f6065SDaniele Buono  if test "$coroutine" != "ucontext"; then
28491e4f6065SDaniele Buono    error_exit "SafeStack is only supported by the coroutine backend ucontext"
28501e4f6065SDaniele Buono  fi
28511e4f6065SDaniele Buonoelse
28521e4f6065SDaniele Buonocat > $TMPC << EOF
28531e4f6065SDaniele Buonoint main(int argc, char *argv[])
28541e4f6065SDaniele Buono{
28551e4f6065SDaniele Buono#if defined(__has_feature)
28561e4f6065SDaniele Buono#if __has_feature(safe_stack)
28571e4f6065SDaniele Buono#error SafeStack Enabled
28581e4f6065SDaniele Buono#endif
28591e4f6065SDaniele Buono#endif
28601e4f6065SDaniele Buono    return 0;
28611e4f6065SDaniele Buono}
28621e4f6065SDaniele BuonoEOF
28631e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then
28641e4f6065SDaniele Buono  # Make sure that safe-stack is disabled
28651e4f6065SDaniele Buono  if ! compile_prog "-Werror" ""; then
28661e4f6065SDaniele Buono    # SafeStack was already enabled, try to explicitly remove the feature
28671e4f6065SDaniele Buono    flag="-fno-sanitize=safe-stack"
28681e4f6065SDaniele Buono    if ! compile_prog "-Werror $flag" "$flag"; then
28691e4f6065SDaniele Buono      error_exit "Configure cannot disable SafeStack"
28701e4f6065SDaniele Buono    fi
28711e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
28721e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
28731e4f6065SDaniele Buono  fi
28741e4f6065SDaniele Buonoelse # "$safe_stack" = ""
28751e4f6065SDaniele Buono  # Set safe_stack to yes or no based on pre-existing flags
28761e4f6065SDaniele Buono  if compile_prog "-Werror" ""; then
28771e4f6065SDaniele Buono    safe_stack="no"
28781e4f6065SDaniele Buono  else
28791e4f6065SDaniele Buono    safe_stack="yes"
28801e4f6065SDaniele Buono    if test "$coroutine" != "ucontext"; then
28811e4f6065SDaniele Buono      error_exit "SafeStack is only supported by the coroutine backend ucontext"
28821e4f6065SDaniele Buono    fi
28831e4f6065SDaniele Buono  fi
28841e4f6065SDaniele Buonofi
28851e4f6065SDaniele Buonofi
28867d992e4dSPeter Lieven
288776a347e1SRichard Henderson########################################
288876a347e1SRichard Henderson# check if cpuid.h is usable.
288976a347e1SRichard Henderson
289076a347e1SRichard Hendersoncat > $TMPC << EOF
289176a347e1SRichard Henderson#include <cpuid.h>
289276a347e1SRichard Hendersonint main(void) {
2893774d566cSPeter Maydell    unsigned a, b, c, d;
2894774d566cSPeter Maydell    int max = __get_cpuid_max(0, 0);
2895774d566cSPeter Maydell
2896774d566cSPeter Maydell    if (max >= 1) {
2897774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
2898774d566cSPeter Maydell    }
2899774d566cSPeter Maydell
2900774d566cSPeter Maydell    if (max >= 7) {
2901774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
2902774d566cSPeter Maydell    }
2903774d566cSPeter Maydell
290476a347e1SRichard Henderson    return 0;
290576a347e1SRichard Henderson}
290676a347e1SRichard HendersonEOF
290776a347e1SRichard Hendersonif compile_prog "" "" ; then
290876a347e1SRichard Henderson    cpuid_h=yes
290976a347e1SRichard Hendersonfi
291076a347e1SRichard Henderson
29115dd89908SRichard Henderson##########################################
29125dd89908SRichard Henderson# avx2 optimization requirement check
29135dd89908SRichard Henderson#
29145dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable,
29155dd89908SRichard Henderson# since we won't be able to select the new routines.
29165dd89908SRichard Henderson
2917e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
29185dd89908SRichard Henderson  cat > $TMPC << EOF
29195dd89908SRichard Henderson#pragma GCC push_options
29205dd89908SRichard Henderson#pragma GCC target("avx2")
29215dd89908SRichard Henderson#include <cpuid.h>
29225dd89908SRichard Henderson#include <immintrin.h>
29235dd89908SRichard Hendersonstatic int bar(void *a) {
29245dd89908SRichard Henderson    __m256i x = *(__m256i *)a;
29255dd89908SRichard Henderson    return _mm256_testz_si256(x, x);
29265dd89908SRichard Henderson}
29275dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); }
29285dd89908SRichard HendersonEOF
29295b945f23SRichard Henderson  if compile_object "-Werror" ; then
29305dd89908SRichard Henderson    avx2_opt="yes"
293186583a07SLiam Merwick  else
293286583a07SLiam Merwick    avx2_opt="no"
29335dd89908SRichard Henderson  fi
29345dd89908SRichard Hendersonfi
29355dd89908SRichard Henderson
29366b8cd447SRobert Hoo##########################################
29376b8cd447SRobert Hoo# avx512f optimization requirement check
29386b8cd447SRobert Hoo#
29396b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable,
29406b8cd447SRobert Hoo# since we won't be able to select the new routines.
29416b8cd447SRobert Hoo# by default, it is turned off.
29426b8cd447SRobert Hoo# if user explicitly want to enable it, check environment
29436b8cd447SRobert Hoo
29446b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
29456b8cd447SRobert Hoo  cat > $TMPC << EOF
29466b8cd447SRobert Hoo#pragma GCC push_options
29476b8cd447SRobert Hoo#pragma GCC target("avx512f")
29486b8cd447SRobert Hoo#include <cpuid.h>
29496b8cd447SRobert Hoo#include <immintrin.h>
29506b8cd447SRobert Hoostatic int bar(void *a) {
29516b8cd447SRobert Hoo    __m512i x = *(__m512i *)a;
29526b8cd447SRobert Hoo    return _mm512_test_epi64_mask(x, x);
29536b8cd447SRobert Hoo}
29546b8cd447SRobert Hooint main(int argc, char *argv[])
29556b8cd447SRobert Hoo{
29566b8cd447SRobert Hoo	return bar(argv[0]);
29576b8cd447SRobert Hoo}
29586b8cd447SRobert HooEOF
29595b945f23SRichard Henderson  if ! compile_object "-Werror" ; then
29606b8cd447SRobert Hoo    avx512f_opt="no"
29616b8cd447SRobert Hoo  fi
29626b8cd447SRobert Hooelse
29636b8cd447SRobert Hoo  avx512f_opt="no"
29646b8cd447SRobert Hoofi
29656b8cd447SRobert Hoo
2966f540166bSRichard Henderson########################################
2967f540166bSRichard Henderson# check if __[u]int128_t is usable.
2968f540166bSRichard Henderson
2969f540166bSRichard Hendersonint128=no
2970f540166bSRichard Hendersoncat > $TMPC << EOF
2971f540166bSRichard Henderson__int128_t a;
2972f540166bSRichard Henderson__uint128_t b;
2973f540166bSRichard Hendersonint main (void) {
2974f540166bSRichard Henderson  a = a + b;
2975f540166bSRichard Henderson  b = a * b;
2976464e3671SPeter Maydell  a = a * a;
2977f540166bSRichard Henderson  return 0;
2978f540166bSRichard Henderson}
2979f540166bSRichard HendersonEOF
2980f540166bSRichard Hendersonif compile_prog "" "" ; then
2981f540166bSRichard Henderson    int128=yes
2982f540166bSRichard Hendersonfi
298376a347e1SRichard Henderson
29847ebee43eSRichard Henderson#########################################
29857ebee43eSRichard Henderson# See if 128-bit atomic operations are supported.
29867ebee43eSRichard Henderson
29877ebee43eSRichard Hendersonatomic128=no
29887ebee43eSRichard Hendersonif test "$int128" = "yes"; then
29897ebee43eSRichard Henderson  cat > $TMPC << EOF
29907ebee43eSRichard Hendersonint main(void)
29917ebee43eSRichard Henderson{
29927ebee43eSRichard Henderson  unsigned __int128 x = 0, y = 0;
2993bceac547SThomas Huth  y = __atomic_load(&x, 0);
2994bceac547SThomas Huth  __atomic_store(&x, y, 0);
2995bceac547SThomas Huth  __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
29967ebee43eSRichard Henderson  return 0;
29977ebee43eSRichard Henderson}
29987ebee43eSRichard HendersonEOF
29997ebee43eSRichard Henderson  if compile_prog "" "" ; then
30007ebee43eSRichard Henderson    atomic128=yes
30017ebee43eSRichard Henderson  fi
30027ebee43eSRichard Hendersonfi
30037ebee43eSRichard Henderson
3004e6cd4bb5SRichard Hendersoncmpxchg128=no
3005e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then
3006e6cd4bb5SRichard Henderson  cat > $TMPC << EOF
3007e6cd4bb5SRichard Hendersonint main(void)
3008e6cd4bb5SRichard Henderson{
3009e6cd4bb5SRichard Henderson  unsigned __int128 x = 0, y = 0;
3010e6cd4bb5SRichard Henderson  __sync_val_compare_and_swap_16(&x, y, x);
3011e6cd4bb5SRichard Henderson  return 0;
3012e6cd4bb5SRichard Henderson}
3013e6cd4bb5SRichard HendersonEOF
3014e6cd4bb5SRichard Henderson  if compile_prog "" "" ; then
3015e6cd4bb5SRichard Henderson    cmpxchg128=yes
3016e6cd4bb5SRichard Henderson  fi
3017e6cd4bb5SRichard Hendersonfi
3018e6cd4bb5SRichard Henderson
3019fd0e6053SJohn Snow########################################
3020fd0e6053SJohn Snow# check if ccache is interfering with
3021fd0e6053SJohn Snow# semantic analysis of macros
3022fd0e6053SJohn Snow
30235e4dfd3dSJohn Snowunset CCACHE_CPP2
3024fd0e6053SJohn Snowccache_cpp2=no
3025fd0e6053SJohn Snowcat > $TMPC << EOF
3026fd0e6053SJohn Snowstatic const int Z = 1;
3027fd0e6053SJohn Snow#define fn() ({ Z; })
3028fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
3029fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
3030fd0e6053SJohn Snow#define ID(X) (X)
3031fd0e6053SJohn Snowint main(int argc, char *argv[])
3032fd0e6053SJohn Snow{
3033fd0e6053SJohn Snow    int x = 0, y = 0;
3034fd0e6053SJohn Snow    x = ID(x);
3035fd0e6053SJohn Snow    x = fn();
3036fd0e6053SJohn Snow    fn();
3037fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
3038fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
3039fd0e6053SJohn Snow    return 0;
3040fd0e6053SJohn Snow}
3041fd0e6053SJohn SnowEOF
3042fd0e6053SJohn Snow
3043fd0e6053SJohn Snowif ! compile_object "-Werror"; then
3044fd0e6053SJohn Snow    ccache_cpp2=yes
3045fd0e6053SJohn Snowfi
3046fd0e6053SJohn Snow
3047b553a042SJohn Snow#################################################
3048b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
3049b553a042SJohn Snow
3050b553a042SJohn Snowif test "$fortify_source" != "no"; then
3051b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
3052b553a042SJohn Snow    fortify_source="no";
3053e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
3054cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
3055b553a042SJohn Snow    fortify_source="no";
3056b553a042SJohn Snow  else
3057b553a042SJohn Snow    fortify_source="yes"
3058b553a042SJohn Snow  fi
3059b553a042SJohn Snowfi
3060b553a042SJohn Snow
3061d2042378SAneesh Kumar K.V##########################################
3062a40161cbSPaolo Bonzini# check for usable membarrier system call
3063a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then
3064a40161cbSPaolo Bonzini    have_membarrier=no
3065a40161cbSPaolo Bonzini    if test "$mingw32" = "yes" ; then
3066a40161cbSPaolo Bonzini        have_membarrier=yes
3067a40161cbSPaolo Bonzini    elif test "$linux" = "yes" ; then
3068a40161cbSPaolo Bonzini        cat > $TMPC << EOF
3069a40161cbSPaolo Bonzini    #include <linux/membarrier.h>
3070a40161cbSPaolo Bonzini    #include <sys/syscall.h>
3071a40161cbSPaolo Bonzini    #include <unistd.h>
3072a40161cbSPaolo Bonzini    #include <stdlib.h>
3073a40161cbSPaolo Bonzini    int main(void) {
3074a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
3075a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
3076a40161cbSPaolo Bonzini	exit(0);
3077a40161cbSPaolo Bonzini    }
3078a40161cbSPaolo BonziniEOF
3079a40161cbSPaolo Bonzini        if compile_prog "" "" ; then
3080a40161cbSPaolo Bonzini            have_membarrier=yes
3081a40161cbSPaolo Bonzini        fi
3082a40161cbSPaolo Bonzini    fi
3083a40161cbSPaolo Bonzini    if test "$have_membarrier" = "no"; then
3084a40161cbSPaolo Bonzini      feature_not_found "membarrier" "membarrier system call not available"
3085a40161cbSPaolo Bonzini    fi
3086a40161cbSPaolo Bonzinielse
3087a40161cbSPaolo Bonzini    # Do not enable it by default even for Mingw32, because it doesn't
3088a40161cbSPaolo Bonzini    # work on Wine.
3089a40161cbSPaolo Bonzini    membarrier=no
3090a40161cbSPaolo Bonzinifi
3091a40161cbSPaolo Bonzini
3092a40161cbSPaolo Bonzini##########################################
3093f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment
30944f67366eSThomas Huthhave_afalg=no
3095f0d92b56SLongpeng(Mike)cat > $TMPC << EOF
3096f0d92b56SLongpeng(Mike)#include <errno.h>
3097f0d92b56SLongpeng(Mike)#include <sys/types.h>
3098f0d92b56SLongpeng(Mike)#include <sys/socket.h>
3099f0d92b56SLongpeng(Mike)#include <linux/if_alg.h>
3100f0d92b56SLongpeng(Mike)int main(void) {
3101f0d92b56SLongpeng(Mike)    int sock;
3102f0d92b56SLongpeng(Mike)    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
3103f0d92b56SLongpeng(Mike)    return sock;
3104f0d92b56SLongpeng(Mike)}
3105f0d92b56SLongpeng(Mike)EOF
3106f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then
3107f0d92b56SLongpeng(Mike)    have_afalg=yes
3108f0d92b56SLongpeng(Mike)fi
3109f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes"
3110f0d92b56SLongpeng(Mike)then
3111f0d92b56SLongpeng(Mike)    if test "$have_afalg" != "yes"
3112f0d92b56SLongpeng(Mike)    then
3113f0d92b56SLongpeng(Mike)	error_exit "AF_ALG requested but could not be detected"
3114f0d92b56SLongpeng(Mike)    fi
3115f0d92b56SLongpeng(Mike)fi
3116f0d92b56SLongpeng(Mike)
3117f0d92b56SLongpeng(Mike)
3118db1ed1abSRichard Henderson##########################################
3119247724cbSMarc-André Lureau# checks for sanitizers
3120247724cbSMarc-André Lureau
3121247724cbSMarc-André Lureauhave_asan=no
3122247724cbSMarc-André Lureauhave_ubsan=no
3123d83414e1SMarc-André Lureauhave_asan_iface_h=no
3124d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
3125247724cbSMarc-André Lureau
3126247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
3127b9f44da2SMarc-André Lureau  write_c_skeleton
3128247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
3129247724cbSMarc-André Lureau      have_asan=yes
3130247724cbSMarc-André Lureau  fi
3131b9f44da2SMarc-André Lureau
3132b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
3133b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
3134b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
3135b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
3136b9f44da2SMarc-André Lureau#include <stdlib.h>
3137b9f44da2SMarc-André Lureauint main(void) {
3138b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
3139f2dfe54cSLeonid Bloch    if (tmp != NULL) {
3140b9f44da2SMarc-André Lureau        return *(int *)(tmp + 2);
3141b9f44da2SMarc-André Lureau    }
3142d1abf3fcSOlaf Hering    return 1;
3143f2dfe54cSLeonid Bloch}
3144b9f44da2SMarc-André LureauEOF
3145247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
3146247724cbSMarc-André Lureau      have_ubsan=yes
3147247724cbSMarc-André Lureau  fi
3148d83414e1SMarc-André Lureau
3149d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
3150d83414e1SMarc-André Lureau      have_asan_iface_h=yes
3151d83414e1SMarc-André Lureau  fi
3152d83414e1SMarc-André Lureau
3153d83414e1SMarc-André Lureau  cat > $TMPC << EOF
3154d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
3155d83414e1SMarc-André Lureauint main(void) {
3156d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
3157d83414e1SMarc-André Lureau  return 0;
3158d83414e1SMarc-André Lureau}
3159d83414e1SMarc-André LureauEOF
3160d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
3161d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
3162d83414e1SMarc-André Lureau  fi
3163247724cbSMarc-André Lureaufi
3164247724cbSMarc-André Lureau
31650aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers;
31660aebab04SLingfeng Yang# keep it separate until that is not the case.
31670aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
31680aebab04SLingfeng Yang  error_exit "TSAN is not supported with other sanitiziers."
31690aebab04SLingfeng Yangfi
31700aebab04SLingfeng Yanghave_tsan=no
31710aebab04SLingfeng Yanghave_tsan_iface_fiber=no
31720aebab04SLingfeng Yangif test "$tsan" = "yes" ; then
31730aebab04SLingfeng Yang  write_c_skeleton
31740aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
31750aebab04SLingfeng Yang      have_tsan=yes
31760aebab04SLingfeng Yang  fi
31770aebab04SLingfeng Yang  cat > $TMPC << EOF
31780aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h>
31790aebab04SLingfeng Yangint main(void) {
31800aebab04SLingfeng Yang  __tsan_create_fiber(0);
31810aebab04SLingfeng Yang  return 0;
31820aebab04SLingfeng Yang}
31830aebab04SLingfeng YangEOF
31840aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
31850aebab04SLingfeng Yang      have_tsan_iface_fiber=yes
31860aebab04SLingfeng Yang  fi
31870aebab04SLingfeng Yangfi
31880aebab04SLingfeng Yang
3189adc28027SAlexander Bulekov##########################################
3190675b9b53SMarc-André Lureau# check for slirp
3191675b9b53SMarc-André Lureau
3192675b9b53SMarc-André Lureaucase "$slirp" in
31934d34a86bSPaolo Bonzini  auto | enabled | internal)
31944d34a86bSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
31957c57bdd8SMarc-André Lureau    git_submodules="${git_submodules} slirp"
3196675b9b53SMarc-André Lureau    ;;
3197675b9b53SMarc-André Lureauesac
3198675b9b53SMarc-André Lureau
3199b8e0c493SJoelle van Dyne# Check for slirp smbd dupport
3200b8e0c493SJoelle van Dyne: ${smbd=${SMBD-/usr/sbin/smbd}}
3201b8e0c493SJoelle van Dyneif test "$slirp_smbd" != "no" ; then
3202b8e0c493SJoelle van Dyne  if test "$mingw32" = "yes" ; then
3203b8e0c493SJoelle van Dyne    if test "$slirp_smbd" = "yes" ; then
3204b8e0c493SJoelle van Dyne      error_exit "Host smbd not supported on this platform."
3205b8e0c493SJoelle van Dyne    fi
3206b8e0c493SJoelle van Dyne    slirp_smbd=no
3207b8e0c493SJoelle van Dyne  else
3208b8e0c493SJoelle van Dyne    slirp_smbd=yes
3209b8e0c493SJoelle van Dyne  fi
3210b8e0c493SJoelle van Dynefi
3211b8e0c493SJoelle van Dyne
321254e7aac0SAlexey Krasikov##########################################
321354e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall
321454e7aac0SAlexey Krasikov
321554e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then
321654e7aac0SAlexey Krasikov
321754e7aac0SAlexey Krasikov    have_keyring=no
321854e7aac0SAlexey Krasikov    cat > $TMPC << EOF
321954e7aac0SAlexey Krasikov#include <errno.h>
322054e7aac0SAlexey Krasikov#include <asm/unistd.h>
322154e7aac0SAlexey Krasikov#include <linux/keyctl.h>
322254e7aac0SAlexey Krasikov#include <unistd.h>
322354e7aac0SAlexey Krasikovint main(void) {
322454e7aac0SAlexey Krasikov    return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
322554e7aac0SAlexey Krasikov}
322654e7aac0SAlexey KrasikovEOF
322754e7aac0SAlexey Krasikov    if compile_prog "" "" ; then
322854e7aac0SAlexey Krasikov        have_keyring=yes
322954e7aac0SAlexey Krasikov    fi
323054e7aac0SAlexey Krasikovfi
323154e7aac0SAlexey Krasikovif test "$secret_keyring" != "no"
323254e7aac0SAlexey Krasikovthen
3233b418d265SDavid Edmondson    if test "$have_keyring" = "yes"
323454e7aac0SAlexey Krasikov    then
323554e7aac0SAlexey Krasikov	secret_keyring=yes
323654e7aac0SAlexey Krasikov    else
323754e7aac0SAlexey Krasikov	if test "$secret_keyring" = "yes"
323854e7aac0SAlexey Krasikov	then
323954e7aac0SAlexey Krasikov	    error_exit "syscall __NR_keyctl requested, \
324054e7aac0SAlexey Krasikovbut not implemented on your system"
324154e7aac0SAlexey Krasikov	else
324254e7aac0SAlexey Krasikov	    secret_keyring=no
324354e7aac0SAlexey Krasikov	fi
324454e7aac0SAlexey Krasikov    fi
324554e7aac0SAlexey Krasikovfi
324654e7aac0SAlexey Krasikov
324792500362SAlexey Krasikov##########################################
3248e86ecd4bSJuan Quintela# End of CC checks
3249e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
3250e86ecd4bSJuan Quintela
3251d83414e1SMarc-André Lureauwrite_c_skeleton
3252d83414e1SMarc-André Lureau
32531d728c39SBlue Swirlif test "$gcov" = "yes" ; then
3254bf0e56a3SMarc-André Lureau  :
3255b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then
3256086d5f75SPaolo Bonzini  QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
3257086d5f75SPaolo Bonzini  debug=no
3258086d5f75SPaolo Bonzinifi
3259086d5f75SPaolo Bonzini
3260086d5f75SPaolo Bonzinicase "$ARCH" in
3261086d5f75SPaolo Bonzinialpha)
3262086d5f75SPaolo Bonzini  # Ensure there's only a single GP
3263086d5f75SPaolo Bonzini  QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
3264086d5f75SPaolo Bonzini;;
3265086d5f75SPaolo Bonziniesac
3266086d5f75SPaolo Bonzini
3267086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then
3268086d5f75SPaolo Bonzini  QEMU_CFLAGS="-p $QEMU_CFLAGS"
3269086d5f75SPaolo Bonzini  QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
3270086d5f75SPaolo Bonzinifi
3271a316e378SJuan Quintela
3272247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
3273db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
3274db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
3275d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
3276d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
3277d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
3278d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
3279d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
3280d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
3281d83414e1SMarc-André Lureau  fi
3282247724cbSMarc-André Lureaufi
32830aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then
32840aebab04SLingfeng Yang  if test "$have_tsan_iface_fiber" = "yes" ; then
32850aebab04SLingfeng Yang    QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
32860aebab04SLingfeng Yang    QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
32870aebab04SLingfeng Yang  else
32880aebab04SLingfeng Yang    error_exit "Cannot enable TSAN due to missing fiber annotation interface."
32890aebab04SLingfeng Yang  fi
32900aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then
32910aebab04SLingfeng Yang  error_exit "Cannot enable TSAN due to missing sanitize thread interface."
32920aebab04SLingfeng Yangfi
3293247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
3294db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
3295db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
3296247724cbSMarc-André Lureaufi
3297247724cbSMarc-André Lureau
32986542aa9cSPeter Lieven##########################################
32993efac6ebSTomáš Golembiovský
33000aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
33010aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then
3302e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
3303db5adeaaSPaolo Bonzini        QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
3304e86ecd4bSJuan Quintela    fi
3305e86ecd4bSJuan Quintelafi
3306e86ecd4bSJuan Quintela
3307952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
3308952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
3309cb8baa77SMark Cave-Ayland    flags="--no-seh --nxcompat"
3310cb8baa77SMark Cave-Ayland
3311cb8baa77SMark Cave-Ayland    # Disable ASLR for debug builds to allow debugging with gdb
3312cb8baa77SMark Cave-Ayland    if test "$debug" = "no" ; then
3313cb8baa77SMark Cave-Ayland        flags="--dynamicbase $flags"
3314cb8baa77SMark Cave-Ayland    fi
3315cb8baa77SMark Cave-Ayland
3316cb8baa77SMark Cave-Ayland    for flag in $flags; do
3317e9a3591fSChristian Borntraeger        if ld_has $flag ; then
3318db5adeaaSPaolo Bonzini            QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
3319952afb71SBlue Swirl        fi
3320952afb71SBlue Swirl    done
3321952afb71SBlue Swirlfi
3322952afb71SBlue Swirl
33239d6bc27bSMichael Roth# Probe for guest agent support/options
33249d6bc27bSMichael Roth
3325e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
3326a5125905SLaurent Vivier  if [ "$softmmu" = no -a "$want_tools" = no ] ; then
3327a5125905SLaurent Vivier      guest_agent=no
3328a5125905SLaurent Vivier  elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
3329e8ef31a3SMichael Tokarev      guest_agent=yes
3330e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
3331e8ef31a3SMichael Tokarev      guest_agent=no
3332e8ef31a3SMichael Tokarev  else
3333e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
3334ca35f780SPaolo Bonzini  fi
33354b1c11fdSDaniel P. Berrangefi
3336ca35f780SPaolo Bonzini
3337b846ab7cSPaolo Bonzini# Guest agent Windows MSI package
33389d6bc27bSMichael Roth
33399d6bc27bSMichael Rothif test "$QEMU_GA_MANUFACTURER" = ""; then
33409d6bc27bSMichael Roth  QEMU_GA_MANUFACTURER=QEMU
33419d6bc27bSMichael Rothfi
33429d6bc27bSMichael Rothif test "$QEMU_GA_DISTRO" = ""; then
33439d6bc27bSMichael Roth  QEMU_GA_DISTRO=Linux
33449d6bc27bSMichael Rothfi
33459d6bc27bSMichael Rothif test "$QEMU_GA_VERSION" = ""; then
334689138857SStefan Weil    QEMU_GA_VERSION=$(cat $source_path/VERSION)
33479d6bc27bSMichael Rothfi
33489d6bc27bSMichael Roth
3349b846ab7cSPaolo BonziniQEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
33509d6bc27bSMichael Roth
3351ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
3352ca35f780SPaolo Bonziniroms=
3353e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
3354e633a5c6SEric Blake        test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
33557000a12eSThomas Huth        test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
3356e57218b6SPeter Maydell    # Different host OS linkers have different ideas about the name of the ELF
3357c65d5e4eSBrad Smith    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
3358c65d5e4eSBrad Smith    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
3359c65d5e4eSBrad Smith    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
3360e57218b6SPeter Maydell        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
3361e57218b6SPeter Maydell            ld_i386_emulation="$emu"
3362ca35f780SPaolo Bonzini            roms="optionrom"
3363e57218b6SPeter Maydell            break
3364e57218b6SPeter Maydell        fi
3365e57218b6SPeter Maydell    done
3366ca35f780SPaolo Bonzinifi
3367ca35f780SPaolo Bonzini
33682e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
3369a5b2afd5SThomas Huth# or -march=z10 (which is the lowest architecture level that Clang supports)
33709933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
33712e33c3f8SThomas Huth  write_c_skeleton
3372a5b2afd5SThomas Huth  compile_prog "-march=z900" ""
3373a5b2afd5SThomas Huth  has_z900=$?
33743af448b3SThomas Huth  if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
3375a5b2afd5SThomas Huth    if [ $has_z900 != 0 ]; then
3376a5b2afd5SThomas Huth      echo "WARNING: Your compiler does not support the z900!"
3377a5b2afd5SThomas Huth      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
3378a5b2afd5SThomas Huth    fi
33799933c305SChristian Borntraeger    roms="$roms s390-ccw"
33801ef6bfc2SPhilippe Mathieu-Daudé    # SLOF is required for building the s390-ccw firmware on s390x,
33811ef6bfc2SPhilippe Mathieu-Daudé    # since it is using the libnet code from SLOF for network booting.
33821ef6bfc2SPhilippe Mathieu-Daudé    git_submodules="${git_submodules} roms/SLOF"
33831ef6bfc2SPhilippe Mathieu-Daudé  fi
33849933c305SChristian Borntraegerfi
33859933c305SChristian Borntraeger
338611cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler.
338711cde1c8SBruno 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.
338811cde1c8SBruno Dominguezif has $cxx; then
338911cde1c8SBruno Dominguez    cat > $TMPC <<EOF
339011cde1c8SBruno Dominguezint c_function(void);
339111cde1c8SBruno Dominguezint main(void) { return c_function(); }
339211cde1c8SBruno DominguezEOF
339311cde1c8SBruno Dominguez
339411cde1c8SBruno Dominguez    compile_object
339511cde1c8SBruno Dominguez
339611cde1c8SBruno Dominguez    cat > $TMPCXX <<EOF
339711cde1c8SBruno Dominguezextern "C" {
339811cde1c8SBruno Dominguez   int c_function(void);
339911cde1c8SBruno Dominguez}
340011cde1c8SBruno Dominguezint c_function(void) { return 42; }
340111cde1c8SBruno DominguezEOF
340211cde1c8SBruno Dominguez
340311cde1c8SBruno Dominguez    update_cxxflags
340411cde1c8SBruno Dominguez
34055770e8afSPaolo Bonzini    if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
340611cde1c8SBruno Dominguez        # C++ compiler $cxx works ok with C compiler $cc
340711cde1c8SBruno Dominguez        :
340811cde1c8SBruno Dominguez    else
340911cde1c8SBruno Dominguez        echo "C++ compiler $cxx does not work with C compiler $cc"
341011cde1c8SBruno Dominguez        echo "Disabling C++ specific optional code"
341111cde1c8SBruno Dominguez        cxx=
341211cde1c8SBruno Dominguez    fi
341311cde1c8SBruno Dominguezelse
341411cde1c8SBruno Dominguez    echo "No C++ compiler available; disabling C++ specific optional code"
341511cde1c8SBruno Dominguez    cxx=
341611cde1c8SBruno Dominguezfi
341711cde1c8SBruno Dominguez
34187d7dbf9dSDan Streetmanif !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
34197d7dbf9dSDan Streetman    exit 1
34205d91a2edSYonggang Luofi
34215d91a2edSYonggang Luo
342298ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
342397a847bcSbellard
342498ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
342598ec69acSJuan Quintelaecho >> $config_host_mak
342698ec69acSJuan Quintela
3427e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
3428cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
3429aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
34307d7dbf9dSDan Streetmanecho "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
3431804edf29SJuan Quintela
343298ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak
3433727e5283SPaolo Bonzini
3434f8393946Saurel32if test "$debug_tcg" = "yes" ; then
34352358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
3436f8393946Saurel32fi
34371625af87Saliguoriif test "$strip_opt" = "yes" ; then
343852ba784dSHollis Blanchard  echo "STRIP=${strip}" >> $config_host_mak
34391625af87Saliguorifi
344067b915a5Sbellardif test "$mingw32" = "yes" ; then
344198ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
3442d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
3443d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
3444f33ca81fSMichael Roth    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
3445d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
3446d9840e25STomoki Sekiyama  fi
344750cbebb9SMichael Roth  if test "$guest_agent_ntddscsi" = "yes" ; then
344876dc75caSTomáš Golembiovský    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
344950cbebb9SMichael Roth  fi
34509dacf32dSYossi Hindin  echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
34519dacf32dSYossi Hindin  echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
34529dacf32dSYossi Hindin  echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
34539dacf32dSYossi Hindin  echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
3454210fa556Spbrookelse
345535f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
3456210fa556Spbrookfi
3457128ab2ffSblueswir1
3458dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
3459dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
3460dffcb71cSMark McLoughlinfi
3461dffcb71cSMark McLoughlin
346283fb7adfSbellardif test "$darwin" = "yes" ; then
346398ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
346483fb7adfSbellardfi
3465b29fe3edSmalc
3466ec530c81Sbellardif test "$solaris" = "yes" ; then
346798ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
3468ec530c81Sbellardfi
3469179cf400SAndreas Färberif test "$haiku" = "yes" ; then
3470179cf400SAndreas Färber  echo "CONFIG_HAIKU=y" >> $config_host_mak
3471179cf400SAndreas Färberfi
347297a847bcSbellardif test "$static" = "yes" ; then
347398ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
347497a847bcSbellardfi
34751ba16968SStefan Weilif test "$profiler" = "yes" ; then
34762358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
347705c2a3e7Sbellardfi
3478c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then
3479c932ce31SPaolo Bonzini  echo "CONFIG_TOOLS=y" >> $config_host_mak
3480c932ce31SPaolo Bonzinifi
3481f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then
3482f15bff25SPaolo Bonzini  echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
3483f15bff25SPaolo Bonzinifi
3484b8e0c493SJoelle van Dyneif test "$slirp_smbd" = "yes" ; then
3485b8e0c493SJoelle van Dyne  echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
3486e2d8830eSBrad  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
3487b8e0c493SJoelle van Dynefi
34884cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then
34894cc600d2SPaolo Bonzini  echo "CONFIG_GPROF=y" >> $config_host_mak
34904cc600d2SPaolo Bonzinifi
3491b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
3492b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
3493e5f05f8cSKevin Wolfif test "$block_drv_whitelist_tools" = "yes" ; then
3494e5f05f8cSKevin Wolf  echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
3495e5f05f8cSKevin Wolffi
3496dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then
3497dce512deSChristoph Hellwig  echo "CONFIG_XFS=y" >> $config_host_mak
3498dce512deSChristoph Hellwigfi
349989138857SStefan Weilqemu_version=$(head $source_path/VERSION)
35002358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
350198ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
35022b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
350317969268SFam Zhengif test "$modules" = "yes"; then
3504e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
3505e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
350689138857SStefan Weil  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
350717969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
350817969268SFam Zhengfi
3509bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then
3510bd83c861SChristian Ehrhardt  echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
3511bd83c861SChristian Ehrhardtfi
3512955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then
3513955727d2SCortland Tölva  echo "CONFIG_USBFS=y" >> $config_host_mak
3514955727d2SCortland Tölvafi
3515f876b765SMarc-André Lureauif test "$gio" = "yes" ; then
3516f876b765SMarc-André Lureau    echo "CONFIG_GIO=y" >> $config_host_mak
3517f876b765SMarc-André Lureau    echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
3518f876b765SMarc-André Lureau    echo "GIO_LIBS=$gio_libs" >> $config_host_mak
35195ecfb76cSPaolo Bonzinifi
35205ecfb76cSPaolo Bonziniif test "$gdbus_codegen" != "" ; then
352125a97a56SMarc-André Lureau    echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
3522f876b765SMarc-André Lureaufi
3523a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
3524277abf15SJan Vesely
35251badb709SPaolo Bonziniif test "$xen" = "enabled" ; then
35266dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
3527d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
3528582ea95fSMarc-André Lureau  echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
3529582ea95fSMarc-André Lureau  echo "XEN_LIBS=$xen_libs" >> $config_host_mak
3530e37630caSaliguorifi
35315e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
35325e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
35335e9be92dSNicholas Bellingerfi
3534af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then
3535af3bba76SPaolo Bonzini  echo "CONFIG_VHOST_NET=y" >> $config_host_mak
3536af3bba76SPaolo Bonzinifi
3537af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then
353856f41de7SPaolo Bonzini  echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
353903ce5744SNikolay Nikolaevfi
3540108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then
3541108a6481SCindy Lu  echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
3542108a6481SCindy Lufi
3543042cea27SGongleiif test "$vhost_crypto" = "yes" ; then
3544042cea27SGonglei  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
3545042cea27SGongleifi
3546fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then
3547fc0b9b0eSStefan Hajnoczi  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
35485fe97d88SStefano Garzarella  if test "$vhost_user" = "yes" ; then
35495fe97d88SStefano Garzarella    echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
35505fe97d88SStefano Garzarella  fi
3551fc0b9b0eSStefan Hajnoczifi
3552299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then
3553299e6f19SPaolo Bonzini  echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
3554299e6f19SPaolo Bonzinifi
3555e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then
3556e6a74868SMarc-André Lureau  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
3557e6a74868SMarc-André Lureaufi
3558108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then
3559108a6481SCindy Lu  echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
3560108a6481SCindy Lufi
356198fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then
356298fc1adaSDr. David Alan Gilbert  echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
356398fc1adaSDr. David Alan Gilbertfi
3564a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then
3565a40161cbSPaolo Bonzini  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
3566a40161cbSPaolo Bonzinifi
3567e5b46549SRichard Hendersonif test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
3568e5b46549SRichard Henderson  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
3569e5b46549SRichard Hendersonfi
357058d3f3ffSGerd Hoffmann
3571da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
3572da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
3573de2d3005SPaolo Bonzini  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
3574da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
357520ff075bSMichael Wallefi
357620ff075bSMichael Walle
357799f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then
357899f2dbd3SLiang Li  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
357999f2dbd3SLiang Lifi
358099f2dbd3SLiang Li
35816b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then
35826b8cd447SRobert Hoo  echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
35836b8cd447SRobert Hoofi
35846b8cd447SRobert Hoo
358583fb7adfSbellard# XXX: suppress that
35867d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
35872358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
35887d3505c5Sbellardfi
35897d3505c5Sbellard
35903556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
35913556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
35923556c233SPaolo Bonzinifi
359320ff6c80SAnthony Liguori
35947c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
359570c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
359670c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
359770c60c08SStefan Hajnoczielse
359870c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
359970c60c08SStefan Hajnoczifi
3600d0e2fce5SAneesh Kumar K.V
36017d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then
36027d992e4dSPeter Lieven  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
36037d992e4dSPeter Lievenfi
36047d992e4dSPeter Lieven
3605f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then
3606f0d92b56SLongpeng(Mike)  echo "CONFIG_AF_ALG=y" >> $config_host_mak
3607f0d92b56SLongpeng(Mike)fi
3608f0d92b56SLongpeng(Mike)
3609d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
3610d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
3611d83414e1SMarc-André Lureaufi
3612d83414e1SMarc-André Lureau
36130aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
36140aebab04SLingfeng Yang    echo "CONFIG_TSAN=y" >> $config_host_mak
36150aebab04SLingfeng Yangfi
36160aebab04SLingfeng Yang
361776a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
361876a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
361976a347e1SRichard Hendersonfi
362076a347e1SRichard Henderson
3621f540166bSRichard Hendersonif test "$int128" = "yes" ; then
3622f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
3623f540166bSRichard Hendersonfi
3624f540166bSRichard Henderson
36257ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then
36267ebee43eSRichard Henderson  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
36277ebee43eSRichard Hendersonfi
36287ebee43eSRichard Henderson
3629e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then
3630e6cd4bb5SRichard Henderson  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
3631e6cd4bb5SRichard Hendersonfi
3632e6cd4bb5SRichard Henderson
3633b10d49d7SPino Toscanoif test "$libssh" = "yes" ; then
3634484e2cc7SPaolo Bonzini  echo "CONFIG_LIBSSH=y" >> $config_host_mak
3635b10d49d7SPino Toscano  echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
3636b10d49d7SPino Toscano  echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
36370a12ec87SRichard W.M. Jonesfi
36380a12ec87SRichard W.M. Jones
3639ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then
3640ed1701c6SDr. David Alan Gilbert  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
3641ed1701c6SDr. David Alan Gilbertfi
3642ed1701c6SDr. David Alan Gilbert
36433b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
36443cae16dbSPaolo Bonzini  echo 'CONFIG_TPM=y' >> $config_host_mak
36453b8acc11SPaolo Bonzinifi
36463b8acc11SPaolo Bonzini
36472da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
36482da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
3649392fb643SFam Zheng  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
36502da776dbSMichael R. Hinesfi
36512da776dbSMichael R. Hines
365221ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then
365321ab34c9SMarcel Apfelbaum  echo "CONFIG_PVRDMA=y" >> $config_host_mak
365421ab34c9SMarcel Apfelbaumfi
365521ab34c9SMarcel Apfelbaum
3656a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then
3657a6b1d4c0SChanglong Xie  echo "CONFIG_REPLICATION=y" >> $config_host_mak
3658a6b1d4c0SChanglong Xiefi
3659a6b1d4c0SChanglong Xie
3660ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then
3661ba59fb77SPaolo Bonzini  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
3662ba59fb77SPaolo Bonzinifi
3663e0580342SKamil Rytarowski
36642f740136SJeff Codyif test "$bochs" = "yes" ; then
36652f740136SJeff Cody  echo "CONFIG_BOCHS=y" >> $config_host_mak
36662f740136SJeff Codyfi
36672f740136SJeff Codyif test "$cloop" = "yes" ; then
36682f740136SJeff Cody  echo "CONFIG_CLOOP=y" >> $config_host_mak
36692f740136SJeff Codyfi
36702f740136SJeff Codyif test "$dmg" = "yes" ; then
36712f740136SJeff Cody  echo "CONFIG_DMG=y" >> $config_host_mak
36722f740136SJeff Codyfi
36732f740136SJeff Codyif test "$qcow1" = "yes" ; then
36742f740136SJeff Cody  echo "CONFIG_QCOW1=y" >> $config_host_mak
36752f740136SJeff Codyfi
36762f740136SJeff Codyif test "$vdi" = "yes" ; then
36772f740136SJeff Cody  echo "CONFIG_VDI=y" >> $config_host_mak
36782f740136SJeff Codyfi
36792f740136SJeff Codyif test "$vvfat" = "yes" ; then
36802f740136SJeff Cody  echo "CONFIG_VVFAT=y" >> $config_host_mak
36812f740136SJeff Codyfi
36822f740136SJeff Codyif test "$qed" = "yes" ; then
36832f740136SJeff Cody  echo "CONFIG_QED=y" >> $config_host_mak
36842f740136SJeff Codyfi
36852f740136SJeff Codyif test "$parallels" = "yes" ; then
36862f740136SJeff Cody  echo "CONFIG_PARALLELS=y" >> $config_host_mak
36872f740136SJeff Codyfi
36882f740136SJeff Cody
368940e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
369040e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
369126fffe29SEmilio G. Cota    # Copy the export object list to the build dir
369226fffe29SEmilio G. Cota    if test "$ld_dynamic_list" = "yes" ; then
369326fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
369426fffe29SEmilio G. Cota	ld_symbols=qemu-plugins-ld.symbols
369526fffe29SEmilio G. Cota	cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
369626fffe29SEmilio G. Cota    elif test "$ld_exported_symbols_list" = "yes" ; then
369726fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
369826fffe29SEmilio G. Cota	ld64_symbols=qemu-plugins-ld64.symbols
369926fffe29SEmilio G. Cota	echo "# Automatically generated by configure - do not modify" > $ld64_symbols
370026fffe29SEmilio G. Cota	grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
370126fffe29SEmilio G. Cota	    sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
370226fffe29SEmilio G. Cota    else
370326fffe29SEmilio G. Cota	error_exit \
370426fffe29SEmilio G. Cota	    "If \$plugins=yes, either \$ld_dynamic_list or " \
370526fffe29SEmilio G. Cota	    "\$ld_exported_symbols_list should have been set to 'yes'."
370626fffe29SEmilio G. Cota    fi
370740e8c6f4SAlex Bennéefi
370840e8c6f4SAlex Bennée
3709f48e590aSAlex Bennéeif test -n "$gdb_bin"; then
3710b1863cccSAlex Bennée    gdb_version=$($gdb_bin --version | head -n 1)
3711d6a66c81SAlex Bennée    if version_ge ${gdb_version##* } 9.1; then
3712f48e590aSAlex Bennée        echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
3713f48e590aSAlex Bennée    fi
3714b1863cccSAlex Bennéefi
3715f48e590aSAlex Bennée
371654e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then
371754e7aac0SAlexey Krasikov  echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
371854e7aac0SAlexey Krasikovfi
371954e7aac0SAlexey Krasikov
372098ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
3721804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
3722c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
372339d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
3724a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
372509e93326SPaolo Bonziniecho "NINJA=$ninja" >> $config_host_mak
3726804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
3727433de74cSBastian Koppelmannecho "HOST_CC=$host_cc" >> $config_host_mak
3728a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
3729859aef02SPaolo Bonzini  echo "CONFIG_IASL=$iasl" >> $config_host_mak
3730a31a8642SMichael S. Tsirkinfi
3731804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
3732cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak
37335f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak
37343dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
3735804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
3736804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
373746eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
3738a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
373911cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
3740a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
3741a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak
37428a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
3743e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
3744804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
3745f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak
3746804edf29SJuan Quintela
3747b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then
3748b767d257SMarek Marczykowski-Górecki  echo "CONFIG_RNG_NONE=y" >> $config_host_mak
3749b767d257SMarek Marczykowski-Góreckifi
3750b767d257SMarek Marczykowski-Górecki
37516efd7517SPeter Maydell# use included Linux headers
37526efd7517SPeter Maydellif test "$linux" = "yes" ; then
3753a307beb6SAndreas Färber  mkdir -p linux-headers
37546efd7517SPeter Maydell  case "$cpu" in
3755c72b26ecSRichard Henderson  i386|x86_64|x32)
375608312a63SPeter Maydell    linux_arch=x86
37576efd7517SPeter Maydell    ;;
3758f8378accSRichard Henderson  ppc|ppc64|ppc64le)
375908312a63SPeter Maydell    linux_arch=powerpc
37606efd7517SPeter Maydell    ;;
37616efd7517SPeter Maydell  s390x)
376208312a63SPeter Maydell    linux_arch=s390
376308312a63SPeter Maydell    ;;
37641f080313SClaudio Fontana  aarch64)
37651f080313SClaudio Fontana    linux_arch=arm64
37661f080313SClaudio Fontana    ;;
3767222e7d11SSanjay Lal  mips64)
3768222e7d11SSanjay Lal    linux_arch=mips
3769222e7d11SSanjay Lal    ;;
377008312a63SPeter Maydell  *)
377108312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
377208312a63SPeter Maydell    linux_arch="$cpu"
37736efd7517SPeter Maydell    ;;
37746efd7517SPeter Maydell  esac
377508312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
377608312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
377708312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
377808312a63SPeter Maydell    fi
37796efd7517SPeter Maydellfi
37806efd7517SPeter Maydell
378197a847bcSbellardfor target in $target_list; do
378297a847bcSbellard    target_dir="$target"
378389138857SStefan Weil    target_name=$(echo $target | cut -d '-' -f 1)
378497a847bcSbellard    mkdir -p $target_dir
3785fdb75aefSPaolo Bonzini    case $target in
3786fdb75aefSPaolo Bonzini        *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
3787fdb75aefSPaolo Bonzini        *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
37882408a527Saurel32    esac
378956aebc89Spbrookdone
37907d13299dSbellard
3791765686d6SPaolo Bonziniecho "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
3792fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then
3793fdb75aefSPaolo Bonzini  echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
3794fdb75aefSPaolo Bonzinifi
3795a540f158SPeter Crosthwaite
3796a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
3797a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
3798ab318051SMarc-André Lureau  echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
3799a99d57bbSWanlong Gaofi
3800a99d57bbSWanlong Gao
3801fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
3802fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
3803fd0e6053SJohn Snowfi
3804fd0e6053SJohn Snow
38051e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
38061e4f6065SDaniele Buono  echo "CONFIG_SAFESTACK=y" >> $config_host_mak
38071e4f6065SDaniele Buonofi
38081e4f6065SDaniele Buono
3809e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now.
3810e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree;
3811e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree
3812e29e5c6eSPeter Maydell# (these can be both files and directories).
3813e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This
3814e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is
3815e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun
3816e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and
3817e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own
3818e29e5c6eSPeter Maydell# directory and symlink the directory instead.
381909db9b9dSGerd Hoffmann# UNLINK is used to remove symlinks from older development versions
382009db9b9dSGerd Hoffmann# that might get into the way when doing "git update" without doing
382109db9b9dSGerd Hoffmann# a "make distclean" in between.
38229d49bcf6SMarkus ArmbrusterDIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
38231cf4323eSThomas HuthDIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
3824b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi"
3825744a928cSAlexey KardashevskiyDIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
38268db2a4fdSGerd HoffmannDIRS="$DIRS roms/seabios"
3827c17a386bSAlex BennéeDIRS="$DIRS contrib/plugins/"
38282038f8c8SPaolo BonziniLINKS="Makefile"
38293941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target"
3830ddcf607fSGerd HoffmannLINKS="$LINKS pc-bios/optionrom/Makefile"
3831e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile"
38328db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile"
3833e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp"
3834e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
3835*bbbd9b6eSWillian RampazzoLINKS="$LINKS tests/avocado tests/data"
383639950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check"
38378f8fd9edSCleber RosaLINKS="$LINKS python"
3838c17a386bSAlex BennéeLINKS="$LINKS contrib/plugins/Makefile "
383909db9b9dSGerd HoffmannUNLINK="pc-bios/keymaps"
3840753d11f2SRichard Hendersonfor bios_file in \
3841753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
38423a631b8eSBin Meng    $source_path/pc-bios/*.elf \
3843225a9ab8SAlexey Kardashevskiy    $source_path/pc-bios/*.lid \
3844753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
3845753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
3846e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
3847753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
38484e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
384926ce90fdSLaszlo Ersek    $source_path/pc-bios/edk2-*.fd.bz2 \
3850cd946e5cSJohn Arbuckle    $source_path/pc-bios/palcode-* \
3851cd946e5cSJohn Arbuckle    $source_path/pc-bios/qemu_vga.ndrv
3852cd946e5cSJohn Arbuckle
3853753d11f2SRichard Hendersondo
3854e29e5c6eSPeter Maydell    LINKS="$LINKS pc-bios/$(basename $bios_file)"
38557ea78b74SJan Kiszkadone
3856d1807a4fSPaolo Bonzinimkdir -p $DIRS
3857e29e5c6eSPeter Maydellfor f in $LINKS ; do
38580f4d8894SPaolo Bonzini    if [ -e "$source_path/$f" ]; then
3859f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
3860f9245e10SPeter Maydell    fi
38617d13299dSbellarddone
386209db9b9dSGerd Hoffmannfor f in $UNLINK ; do
386309db9b9dSGerd Hoffmann    if [ -L "$f" ]; then
386409db9b9dSGerd Hoffmann        rm -f "$f"
386509db9b9dSGerd Hoffmann    fi
386609db9b9dSGerd Hoffmanndone
38671ad2134fSPaul Brook
38682038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do
38692038f8c8SPaolo Bonzini  export $i
38702038f8c8SPaolo Bonzinidone
3871de6d7e6bSAlex Bennéeexport target_list source_path use_containers ARCH
38722038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh)
38732038f8c8SPaolo Bonzini
3874c34ebfdcSAnthony Liguori# temporary config to build submodules
38758db2a4fdSGerd Hoffmannfor rom in seabios; do
3876c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
387737116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
3878c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
3879cdbd727cSRichard Henderson    echo "AS=$as" >> $config_mak
38805f6f0e27SRichard Henderson    echo "CCAS=$ccas" >> $config_mak
3881c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
3882c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
38833dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
3884c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
3885a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
3886c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
38879f81aeb5SAlistair Francis    echo "RANLIB=$ranlib" >> $config_mak
3888c34ebfdcSAnthony Liguoridone
3889c34ebfdcSAnthony Liguori
389098409991SHelge Konetzkaconfig_mak=pc-bios/optionrom/config.mak
389198409991SHelge Konetzkaecho "# Automatically generated by configure - do not modify" > $config_mak
389298409991SHelge Konetzkaecho "TOPSRC_DIR=$source_path" >> $config_mak
389398409991SHelge Konetzka
3894a5665051SPaolo Bonziniif test "$skip_meson" = no; then
3895fc929892SMarc-André Lureau  cross="config-meson.cross.new"
3896fc929892SMarc-André Lureau  meson_quote() {
389747b30835SPaolo Bonzini    echo "'$(echo $* | sed "s/ /','/g")'"
3898fc929892SMarc-André Lureau  }
3899fc929892SMarc-André Lureau
3900fc929892SMarc-André Lureau  echo "# Automatically generated by configure - do not modify" > $cross
3901fc929892SMarc-André Lureau  echo "[properties]" >> $cross
3902d1d5e9eeSAlex Bennée
3903d1d5e9eeSAlex Bennée  # unroll any custom device configs
3904d1d5e9eeSAlex Bennée  for a in $device_archs; do
3905d1d5e9eeSAlex Bennée      eval "c=\$devices_${a}"
3906d1d5e9eeSAlex Bennée      echo "${a}-softmmu = '$c'" >> $cross
3907d1d5e9eeSAlex Bennée  done
3908d1d5e9eeSAlex Bennée
3909fc929892SMarc-André Lureau  test -z "$cxx" && echo "link_language = 'c'" >> $cross
391047b30835SPaolo Bonzini  echo "[built-in options]" >> $cross
391147b30835SPaolo Bonzini  echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
391247b30835SPaolo Bonzini  echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
391347b30835SPaolo Bonzini  echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
391447b30835SPaolo Bonzini  echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
3915fc929892SMarc-André Lureau  echo "[binaries]" >> $cross
39164dba2789SPaolo Bonzini  echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
39174dba2789SPaolo Bonzini  test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
39184dba2789SPaolo Bonzini  test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
391947b30835SPaolo Bonzini  echo "ar = [$(meson_quote $ar)]" >> $cross
392047b30835SPaolo Bonzini  echo "nm = [$(meson_quote $nm)]" >> $cross
392147b30835SPaolo Bonzini  echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
392247b30835SPaolo Bonzini  echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
3923e8178514SPaolo Bonzini  if has $sdl2_config; then
392447b30835SPaolo Bonzini    echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
3925e8178514SPaolo Bonzini  fi
392647b30835SPaolo Bonzini  echo "strip = [$(meson_quote $strip)]" >> $cross
392747b30835SPaolo Bonzini  echo "windres = [$(meson_quote $windres)]" >> $cross
39283812c0c4SJoelle van Dyne  if test "$cross_compile" = "yes"; then
3929fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
3930fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
3931fc929892SMarc-André Lureau    if test "$mingw32" = "yes" ; then
3932fc929892SMarc-André Lureau        echo "system = 'windows'" >> $cross
3933fc929892SMarc-André Lureau    fi
3934853b4bafSThomas Huth    if test "$linux" = "yes" ; then
3935853b4bafSThomas Huth        echo "system = 'linux'" >> $cross
3936853b4bafSThomas Huth    fi
39370ca321eaSJoelle van Dyne    if test "$darwin" = "yes" ; then
39380ca321eaSJoelle van Dyne        echo "system = 'darwin'" >> $cross
39390ca321eaSJoelle van Dyne    fi
3940fc929892SMarc-André Lureau    case "$ARCH" in
3941f6bca9dfSJoelle van Dyne        i386)
3942fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
3943fc929892SMarc-André Lureau            ;;
3944f8bb7e1cSDavid Michael        x86_64|x32)
3945f6bca9dfSJoelle van Dyne            echo "cpu_family = 'x86_64'" >> $cross
3946f6bca9dfSJoelle van Dyne            ;;
3947fc929892SMarc-André Lureau        ppc64le)
3948fc929892SMarc-André Lureau            echo "cpu_family = 'ppc64'" >> $cross
3949fc929892SMarc-André Lureau            ;;
3950fc929892SMarc-André Lureau        *)
3951fc929892SMarc-André Lureau            echo "cpu_family = '$ARCH'" >> $cross
3952fc929892SMarc-André Lureau            ;;
3953fc929892SMarc-André Lureau    esac
3954fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
3955fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
3956fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
3957fc929892SMarc-André Lureau    else
3958fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
3959fc929892SMarc-André Lureau    fi
3960fc929892SMarc-André Lureau  else
3961fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
3962fc929892SMarc-André Lureau  fi
3963fc929892SMarc-André Lureau  mv $cross config-meson.cross
3964fc929892SMarc-André Lureau
3965a5665051SPaolo Bonzini  rm -rf meson-private meson-info meson-logs
396661d63097SPaolo Bonzini  run_meson() {
396709e93326SPaolo Bonzini    NINJA=$ninja $meson setup \
3968d17f305aSPaolo Bonzini        --prefix "$prefix" \
3969d17f305aSPaolo Bonzini        --libdir "$libdir" \
3970d17f305aSPaolo Bonzini        --libexecdir "$libexecdir" \
3971d17f305aSPaolo Bonzini        --bindir "$bindir" \
3972d17f305aSPaolo Bonzini        --includedir "$includedir" \
3973d17f305aSPaolo Bonzini        --datadir "$datadir" \
3974d17f305aSPaolo Bonzini        --mandir "$mandir" \
3975d17f305aSPaolo Bonzini        --sysconfdir "$sysconfdir" \
397616bf7a33SPaolo Bonzini        --localedir "$localedir" \
3977d17f305aSPaolo Bonzini        --localstatedir "$local_statedir" \
39783b4da132SPaolo Bonzini        -Daudio_drv_list=$audio_drv_list \
39793b4da132SPaolo Bonzini        -Ddefault_devices=$default_devices \
3980d17f305aSPaolo Bonzini        -Ddocdir="$docdir" \
398116bf7a33SPaolo Bonzini        -Dqemu_firmwarepath="$firmwarepath" \
398273f3aa37SMarc-André Lureau        -Dqemu_suffix="$qemu_suffix" \
39833b4da132SPaolo Bonzini        -Dsphinx_build="$sphinx_build" \
39843b4da132SPaolo Bonzini        -Dtrace_file="$trace_file" \
3985a5665051SPaolo Bonzini        -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
3986a5665051SPaolo Bonzini        -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
3987a5665051SPaolo Bonzini        -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
3988a5665051SPaolo Bonzini        -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
3989da6d48b9SMarc-André Lureau        -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
3990bf0e56a3SMarc-André Lureau        -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
39913b4da132SPaolo Bonzini        -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
39923b4da132SPaolo Bonzini        -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
3993537b7248SPaolo Bonzini        $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
3994332008e0SThomas Huth        $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
399561d63097SPaolo Bonzini        "$@" $cross_arg "$PWD" "$source_path"
399661d63097SPaolo Bonzini  }
399761d63097SPaolo Bonzini  eval run_meson $meson_options
3998a5665051SPaolo Bonzini  if test "$?" -ne 0 ; then
3999a5665051SPaolo Bonzini      error_exit "meson setup failed"
4000a5665051SPaolo Bonzini  fi
4001699d3884SPaolo Bonzinielse
4002699d3884SPaolo Bonzini  if test -f meson-private/cmd_line.txt; then
4003699d3884SPaolo Bonzini    # Adjust old command line options whose type was changed
4004699d3884SPaolo Bonzini    # Avoids having to use "setup --wipe" when Meson is upgraded
4005699d3884SPaolo Bonzini    perl -i -ne '
4006699d3884SPaolo Bonzini      s/^gettext = true$/gettext = auto/;
4007699d3884SPaolo Bonzini      s/^gettext = false$/gettext = disabled/;
4008654d6b04SPaolo Bonzini      /^b_staticpic/ && next;
4009699d3884SPaolo Bonzini      print;' meson-private/cmd_line.txt
4010699d3884SPaolo Bonzini  fi
4011a5665051SPaolo Bonzinifi
4012a5665051SPaolo Bonzini
40132d838d9bSAlex Bennéeif test -n "${deprecated_features}"; then
40142d838d9bSAlex Bennée    echo "Warning, deprecated features enabled."
4015a476b216SMao Zhongyi    echo "Please see docs/about/deprecated.rst"
40162d838d9bSAlex Bennée    echo "  features: ${deprecated_features}"
40172d838d9bSAlex Bennéefi
40182d838d9bSAlex Bennée
4019e0447a83SThomas Huth# Create list of config switches that should be poisoned in common code...
4020e0447a83SThomas Huth# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
402154b0306eSThomas Huthtarget_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
402254b0306eSThomas Huthif test -n "$target_configs_h" ; then
4023e0447a83SThomas Huth    sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
4024e0447a83SThomas Huth        -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
402554b0306eSThomas Huth        $target_configs_h | sort -u > config-poison.h
402654b0306eSThomas Huthelse
402754b0306eSThomas Huth    :> config-poison.h
402854b0306eSThomas Huthfi
4029e0447a83SThomas Huth
4030dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
4031dc655404SMichael S. Tsirkincat <<EOD >config.status
4032dc655404SMichael S. Tsirkin#!/bin/sh
4033dc655404SMichael S. Tsirkin# Generated by configure.
4034dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
4035dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
4036dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
4037dc655404SMichael S. TsirkinEOD
4038e811da7fSDaniel P. Berrangé
4039e811da7fSDaniel P. Berrangépreserve_env() {
4040e811da7fSDaniel P. Berrangé    envname=$1
4041e811da7fSDaniel P. Berrangé
4042e811da7fSDaniel P. Berrangé    eval envval=\$$envname
4043e811da7fSDaniel P. Berrangé
4044e811da7fSDaniel P. Berrangé    if test -n "$envval"
4045e811da7fSDaniel P. Berrangé    then
4046e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
4047e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
4048e811da7fSDaniel P. Berrangé    else
4049e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
4050e811da7fSDaniel P. Berrangé    fi
4051e811da7fSDaniel P. Berrangé}
4052e811da7fSDaniel P. Berrangé
4053e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
4054e811da7fSDaniel P. Berrangé# features/build target configure will detect
4055e811da7fSDaniel P. Berrangépreserve_env AR
4056e811da7fSDaniel P. Berrangépreserve_env AS
4057e811da7fSDaniel P. Berrangépreserve_env CC
4058e811da7fSDaniel P. Berrangépreserve_env CPP
4059e811da7fSDaniel P. Berrangépreserve_env CXX
4060e811da7fSDaniel P. Berrangépreserve_env INSTALL
4061e811da7fSDaniel P. Berrangépreserve_env LD
4062e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
4063e811da7fSDaniel P. Berrangépreserve_env LIBTOOL
4064e811da7fSDaniel P. Berrangépreserve_env MAKE
4065e811da7fSDaniel P. Berrangépreserve_env NM
4066e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
4067e811da7fSDaniel P. Berrangépreserve_env PATH
4068e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
4069e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
4070e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
4071e811da7fSDaniel P. Berrangépreserve_env PYTHON
4072e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
4073e811da7fSDaniel P. Berrangépreserve_env SMBD
4074e811da7fSDaniel P. Berrangépreserve_env STRIP
4075e811da7fSDaniel P. Berrangépreserve_env WINDRES
4076e811da7fSDaniel P. Berrangé
4077dc655404SMichael S. Tsirkinprintf "exec" >>config.status
4078a5665051SPaolo Bonzinifor i in "$0" "$@"; do
4079835af899SPaolo Bonzini  test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
4080a5665051SPaolo Bonzinidone
4081cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
4082dc655404SMichael S. Tsirkinchmod +x config.status
4083dc655404SMichael S. Tsirkin
40848cd05ab6SPeter Maydellrm -r "$TMPDIR1"
4085