xref: /openbmc/qemu/configure (revision ba7c60c2)
17d13299dSbellard#!/bin/sh
27d13299dSbellard#
33ef693a0Sbellard# qemu configure script (c) 2003 Fabrice Bellard
47d13299dSbellard#
58cd05ab6SPeter Maydell
699519e67SCornelia Huck# Unset some variables known to interfere with behavior of common tools,
799519e67SCornelia Huck# just as autoconf does.
899519e67SCornelia HuckCLICOLOR_FORCE= GREP_OPTIONS=
999519e67SCornelia Huckunset CLICOLOR_FORCE GREP_OPTIONS
1099519e67SCornelia Huck
115e4dfd3dSJohn Snow# Don't allow CCACHE, if present, to use cached results of compile tests!
125e4dfd3dSJohn Snowexport CCACHE_RECACHE=yes
135e4dfd3dSJohn Snow
14dedad027SDaniel P. Berrangé# make source path absolute
15dedad027SDaniel P. Berrangésource_path=$(cd "$(dirname -- "$0")"; pwd)
16dedad027SDaniel P. Berrangé
17dedad027SDaniel P. Berrangéif test "$PWD" = "$source_path"
18dedad027SDaniel P. Berrangéthen
19dedad027SDaniel P. Berrangé    echo "Using './build' as the directory for build output"
20dedad027SDaniel P. Berrangé
21dedad027SDaniel P. Berrangé    MARKER=build/auto-created-by-configure
22dedad027SDaniel P. Berrangé
23dedad027SDaniel P. Berrangé    if test -e build
24dedad027SDaniel P. Berrangé    then
25dedad027SDaniel P. Berrangé        if test -f $MARKER
26dedad027SDaniel P. Berrangé        then
27dedad027SDaniel P. Berrangé           rm -rf build
28dedad027SDaniel P. Berrangé        else
29dedad027SDaniel P. Berrangé            echo "ERROR: ./build dir already exists and was not previously created by configure"
30dedad027SDaniel P. Berrangé            exit 1
31dedad027SDaniel P. Berrangé        fi
32dedad027SDaniel P. Berrangé    fi
33dedad027SDaniel P. Berrangé
34dedad027SDaniel P. Berrangé    mkdir build
35dedad027SDaniel P. Berrangé    touch $MARKER
36dedad027SDaniel P. Berrangé
37dedad027SDaniel P. Berrangé    cat > GNUmakefile <<'EOF'
38dedad027SDaniel P. Berrangé# This file is auto-generated by configure to support in-source tree
39dedad027SDaniel P. Berrangé# 'make' command invocation
40dedad027SDaniel P. Berrangé
41dedad027SDaniel P. Berrangéifeq ($(MAKECMDGOALS),)
42dedad027SDaniel P. Berrangérecurse: all
43dedad027SDaniel P. Berrangéendif
44dedad027SDaniel P. Berrangé
45dedad027SDaniel P. Berrangé.NOTPARALLEL: %
46dedad027SDaniel P. Berrangé%: force
47dedad027SDaniel P. Berrangé	@echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48dedad027SDaniel P. Berrangé	@$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49dedad027SDaniel P. Berrangé	@if test "$(MAKECMDGOALS)" = "distclean" && \
50dedad027SDaniel P. Berrangé	    test -e build/auto-created-by-configure ; \
51dedad027SDaniel P. Berrangé	then \
52dedad027SDaniel P. Berrangé	    rm -rf build GNUmakefile ; \
53dedad027SDaniel P. Berrangé	fi
54dedad027SDaniel P. Berrangéforce: ;
55dedad027SDaniel P. Berrangé.PHONY: force
56dedad027SDaniel P. BerrangéGNUmakefile: ;
57dedad027SDaniel P. Berrangé
58dedad027SDaniel P. BerrangéEOF
59dedad027SDaniel P. Berrangé    cd build
60dedad027SDaniel P. Berrangé    exec $source_path/configure "$@"
61dedad027SDaniel P. Berrangéfi
62dedad027SDaniel P. Berrangé
638cd05ab6SPeter Maydell# Temporary directory used for files created while
648cd05ab6SPeter Maydell# configure runs. Since it is in the build directory
658cd05ab6SPeter Maydell# we can safely blow away any previous version of it
668cd05ab6SPeter Maydell# (and we need not jump through hoops to try to delete
678cd05ab6SPeter Maydell# it when configure exits.)
688cd05ab6SPeter MaydellTMPDIR1="config-temp"
698cd05ab6SPeter Maydellrm -rf "${TMPDIR1}"
708cd05ab6SPeter Maydellmkdir -p "${TMPDIR1}"
718cd05ab6SPeter Maydellif [ $? -ne 0 ]; then
728cd05ab6SPeter Maydell    echo "ERROR: failed to create temporary directory"
738cd05ab6SPeter Maydell    exit 1
747d13299dSbellardfi
757d13299dSbellard
768cd05ab6SPeter MaydellTMPB="qemu-conf"
778cd05ab6SPeter MaydellTMPC="${TMPDIR1}/${TMPB}.c"
7866518bf6SDon SlutzTMPO="${TMPDIR1}/${TMPB}.o"
799c83ffd8SPeter MaydellTMPCXX="${TMPDIR1}/${TMPB}.cxx"
808cd05ab6SPeter MaydellTMPE="${TMPDIR1}/${TMPB}.exe"
8126fffe29SEmilio G. CotaTMPTXT="${TMPDIR1}/${TMPB}.txt"
827d13299dSbellard
83da1d85e3SGerd Hoffmannrm -f config.log
849ac81bbbSmalc
85b48e3611SPeter Maydell# Print a helpful header at the top of config.log
86b48e3611SPeter Maydellecho "# QEMU configure log $(date)" >> config.log
87979ae168SPeter Maydellprintf "# Configured with:" >> config.log
88979ae168SPeter Maydellprintf " '%s'" "$0" "$@" >> config.log
89979ae168SPeter Maydellecho >> config.log
90b48e3611SPeter Maydellecho "#" >> config.log
91b48e3611SPeter Maydell
92835af899SPaolo Bonziniquote_sh() {
93835af899SPaolo Bonzini    printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
94835af899SPaolo Bonzini}
95835af899SPaolo Bonzini
96d880a3baSPaolo Bonziniprint_error() {
97d880a3baSPaolo Bonzini    (echo
9876ad07a4SPeter Maydell    echo "ERROR: $1"
9976ad07a4SPeter Maydell    while test -n "$2"; do
10076ad07a4SPeter Maydell        echo "       $2"
10176ad07a4SPeter Maydell        shift
10276ad07a4SPeter Maydell    done
103d880a3baSPaolo Bonzini    echo) >&2
104d880a3baSPaolo Bonzini}
105d880a3baSPaolo Bonzini
106d880a3baSPaolo Bonzinierror_exit() {
107d880a3baSPaolo Bonzini    print_error "$@"
10876ad07a4SPeter Maydell    exit 1
10976ad07a4SPeter Maydell}
11076ad07a4SPeter Maydell
1119c83ffd8SPeter Maydelldo_compiler() {
1129c83ffd8SPeter Maydell    # Run the compiler, capturing its output to the log. First argument
1139c83ffd8SPeter Maydell    # is compiler binary to execute.
114630d86b7SDavid CARLIER    compiler="$1"
1159c83ffd8SPeter Maydell    shift
1168bbe05d7SIan Jackson    if test -n "$BASH_VERSION"; then eval '
1178bbe05d7SIan Jackson        echo >>config.log "
1188bbe05d7SIan Jacksonfuncs: ${FUNCNAME[*]}
1198bbe05d7SIan Jacksonlines: ${BASH_LINENO[*]}"
1208bbe05d7SIan Jackson    '; fi
1219c83ffd8SPeter Maydell    echo $compiler "$@" >> config.log
1229c83ffd8SPeter Maydell    $compiler "$@" >> config.log 2>&1 || return $?
1238dc38a78SPeter Maydell    # Test passed. If this is an --enable-werror build, rerun
1248dc38a78SPeter Maydell    # the test with -Werror and bail out if it fails. This
1258dc38a78SPeter Maydell    # makes warning-generating-errors in configure test code
1268dc38a78SPeter Maydell    # obvious to developers.
1278dc38a78SPeter Maydell    if test "$werror" != "yes"; then
1288dc38a78SPeter Maydell        return 0
1298dc38a78SPeter Maydell    fi
1308dc38a78SPeter Maydell    # Don't bother rerunning the compile if we were already using -Werror
1318dc38a78SPeter Maydell    case "$*" in
1328dc38a78SPeter Maydell        *-Werror*)
1338dc38a78SPeter Maydell           return 0
1348dc38a78SPeter Maydell        ;;
1358dc38a78SPeter Maydell    esac
1369c83ffd8SPeter Maydell    echo $compiler -Werror "$@" >> config.log
1379c83ffd8SPeter Maydell    $compiler -Werror "$@" >> config.log 2>&1 && return $?
13876ad07a4SPeter Maydell    error_exit "configure test passed without -Werror but failed with -Werror." \
13976ad07a4SPeter Maydell        "This is probably a bug in the configure script. The failing command" \
14076ad07a4SPeter Maydell        "will be at the bottom of config.log." \
14176ad07a4SPeter Maydell        "You can run configure with --disable-werror to bypass this check."
1428dc38a78SPeter Maydell}
1438dc38a78SPeter Maydell
1449c83ffd8SPeter Maydelldo_cc() {
1454dba2789SPaolo Bonzini    do_compiler "$cc" $CPU_CFLAGS "$@"
1469c83ffd8SPeter Maydell}
1479c83ffd8SPeter Maydell
1489c83ffd8SPeter Maydelldo_cxx() {
1494dba2789SPaolo Bonzini    do_compiler "$cxx" $CPU_CFLAGS "$@"
1509c83ffd8SPeter Maydell}
1519c83ffd8SPeter Maydell
15200849b92SRichard Henderson# Append $2 to the variable named $1, with space separation
15300849b92SRichard Hendersonadd_to() {
15400849b92SRichard Henderson    eval $1=\${$1:+\"\$$1 \"}\$2
15500849b92SRichard Henderson}
15600849b92SRichard Henderson
1579c83ffd8SPeter Maydellupdate_cxxflags() {
1589c83ffd8SPeter Maydell    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
1599c83ffd8SPeter Maydell    # options which some versions of GCC's C++ compiler complain about
1609c83ffd8SPeter Maydell    # because they only make sense for C programs.
161de38c0ccSPaolo Bonzini    QEMU_CXXFLAGS="-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
1628a9d3d56SRichard Henderson    CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/)
1639c83ffd8SPeter Maydell    for arg in $QEMU_CFLAGS; do
1649c83ffd8SPeter Maydell        case $arg in
1659c83ffd8SPeter Maydell            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
1669c83ffd8SPeter Maydell            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
1679c83ffd8SPeter Maydell                ;;
1689c83ffd8SPeter Maydell            *)
1699c83ffd8SPeter Maydell                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
1709c83ffd8SPeter Maydell                ;;
1719c83ffd8SPeter Maydell        esac
1729c83ffd8SPeter Maydell    done
1739c83ffd8SPeter Maydell}
1749c83ffd8SPeter Maydell
17552166aa0SJuan Quintelacompile_object() {
176fd0e6053SJohn Snow  local_cflags="$1"
177a2866660SPaolo Bonzini  do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
17852166aa0SJuan Quintela}
17952166aa0SJuan Quintela
18052166aa0SJuan Quintelacompile_prog() {
18152166aa0SJuan Quintela  local_cflags="$1"
18252166aa0SJuan Quintela  local_ldflags="$2"
183a2866660SPaolo Bonzini  do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
184a2866660SPaolo Bonzini      $LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
18552166aa0SJuan Quintela}
18652166aa0SJuan Quintela
18711568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
18811568d6dSPaolo Bonzinisymlink() {
18972b8b5a1SStefan Weil  rm -rf "$2"
190ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
19172b8b5a1SStefan Weil  ln -s "$1" "$2"
19211568d6dSPaolo Bonzini}
19311568d6dSPaolo Bonzini
1940dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
1950dba6195SLoïc Minier# executable or a builtin)
1960dba6195SLoïc Minierhas() {
1970dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
1980dba6195SLoïc Minier}
1990dba6195SLoïc Minier
2000a01d76fSMarc-André Lureauversion_ge () {
2012df52b9bSAlex Bennée    local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
2022df52b9bSAlex Bennée    local_ver2=$(echo "$2" | tr . ' ')
2030a01d76fSMarc-André Lureau    while true; do
2040a01d76fSMarc-André Lureau        set x $local_ver1
2050a01d76fSMarc-André Lureau        local_first=${2-0}
206c44a33e2SStefano Garzarella        # 'shift 2' if $2 is set, or 'shift' if $2 is not set
207c44a33e2SStefano Garzarella        shift ${2:+2}
2080a01d76fSMarc-André Lureau        local_ver1=$*
2090a01d76fSMarc-André Lureau        set x $local_ver2
2100a01d76fSMarc-André Lureau        # the second argument finished, the first must be greater or equal
2110a01d76fSMarc-André Lureau        test $# = 1 && return 0
2120a01d76fSMarc-André Lureau        test $local_first -lt $2 && return 1
2130a01d76fSMarc-André Lureau        test $local_first -gt $2 && return 0
214c44a33e2SStefano Garzarella        shift ${2:+2}
2150a01d76fSMarc-André Lureau        local_ver2=$*
2160a01d76fSMarc-André Lureau    done
2170a01d76fSMarc-André Lureau}
2180a01d76fSMarc-André Lureau
2193b6b7550SPaolo Bonziniglob() {
2203b6b7550SPaolo Bonzini    eval test -z '"${1#'"$2"'}"'
2213b6b7550SPaolo Bonzini}
2223b6b7550SPaolo Bonzini
223e9a3591fSChristian Borntraegerld_has() {
224e9a3591fSChristian Borntraeger    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
225e9a3591fSChristian Borntraeger}
226e9a3591fSChristian Borntraeger
2274ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
2284ace32e2SAntonio Ospitethen
2294ace32e2SAntonio Ospite  error_exit "main directory cannot contain spaces nor colons"
2304ace32e2SAntonio Ospitefi
2314ace32e2SAntonio Ospite
23214211825SAntonio Ospite# default parameters
2332ff6b91eSJuan Quintelacpu=""
234a31a8642SMichael S. Tsirkiniasl="iasl"
2351e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M"
23643ce4dfeSbellardstatic="no"
2373812c0c4SJoelle van Dynecross_compile="no"
2387d13299dSbellardcross_prefix=""
23987430d5bSPaolo Bonziniaudio_drv_list="default"
240b64ec4e4SFam Zhengblock_drv_rw_whitelist=""
241b64ec4e4SFam Zhengblock_drv_ro_whitelist=""
242e5f05f8cSKevin Wolfblock_drv_whitelist_tools="no"
243e49d021eSPeter Maydellhost_cc="cc"
244957f1f99SMichael Rothlibs_qga=""
2455bc62e01SGerd Hoffmanndebug_info="yes"
246cdad781dSDaniele Buonolto="false"
24763678e17SSteven Noonanstack_protector=""
2481e4f6065SDaniele Buonosafe_stack=""
249afc3a8f9SAlex Bennéeuse_containers="yes"
250f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
251ac0df51dSaliguori
25292712822SDaniel P. Berrangeif test -e "$source_path/.git"
25392712822SDaniel P. Berrangethen
2547d7dbf9dSDan Streetman    git_submodules_action="update"
25592712822SDaniel P. Berrangeelse
2567d7dbf9dSDan Streetman    git_submodules_action="ignore"
25792712822SDaniel P. Berrangefi
2582d652f24SPaolo Bonzini
2592d652f24SPaolo Bonzinigit_submodules="ui/keycodemapdb"
260cc84d63aSDaniel P. Berrangegit="git"
261ac0df51dSaliguori
262afb63ebdSStefan Weil# Don't accept a target_list environment variable.
263afb63ebdSStefan Weilunset target_list
264447e133fSAlex Bennéeunset target_list_exclude
265377529c0SPaolo Bonzini
266377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
267377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
268377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
269377529c0SPaolo Bonzini#              unless --disable-foo is given
270377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
271377529c0SPaolo Bonzini#              feature will searched for,
272377529c0SPaolo Bonzini#              if not found, configure exits with error
273377529c0SPaolo Bonzini#
274377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
275377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
276377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
277377529c0SPaolo Bonzini
278c87ea116SAlex Bennéedefault_feature=""
279c87ea116SAlex Bennée# parse CC options second
280c87ea116SAlex Bennéefor opt do
281c87ea116SAlex Bennée  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
282c87ea116SAlex Bennée  case "$opt" in
283c87ea116SAlex Bennée      --without-default-features)
284c87ea116SAlex Bennée          default_feature="no"
285c87ea116SAlex Bennée  ;;
286c87ea116SAlex Bennée  esac
287c87ea116SAlex Bennéedone
288c87ea116SAlex Bennée
289a2866660SPaolo BonziniEXTRA_CFLAGS=""
290a2866660SPaolo BonziniEXTRA_CXXFLAGS=""
291a2866660SPaolo BonziniEXTRA_LDFLAGS=""
292a2866660SPaolo Bonzini
293c87ea116SAlex Bennéexen_ctrl_version="$default_feature"
294c87ea116SAlex Bennéexfs="$default_feature"
295c87ea116SAlex Bennéemembarrier="$default_feature"
2960848f8acSThomas Huthvhost_kernel="$default_feature"
297c87ea116SAlex Bennéevhost_net="$default_feature"
298c87ea116SAlex Bennéevhost_crypto="$default_feature"
299c87ea116SAlex Bennéevhost_scsi="$default_feature"
300c87ea116SAlex Bennéevhost_vsock="$default_feature"
301d88618f7SStefan Hajnoczivhost_user="no"
302c87ea116SAlex Bennéevhost_user_fs="$default_feature"
3030848f8acSThomas Huthvhost_vdpa="$default_feature"
304c87ea116SAlex Bennéerdma="$default_feature"
305c87ea116SAlex Bennéepvrdma="$default_feature"
306377529c0SPaolo Bonzinigprof="no"
307377529c0SPaolo Bonzinidebug_tcg="no"
308377529c0SPaolo Bonzinidebug="no"
309247724cbSMarc-André Lureausanitizers="no"
3100aebab04SLingfeng Yangtsan="no"
311c87ea116SAlex Bennéefortify_source="$default_feature"
312377529c0SPaolo Bonzinistrip_opt="yes"
313377529c0SPaolo Bonzinimingw32="no"
3141d728c39SBlue Swirlgcov="no"
315c7328271SMiroslav RezaninaEXESUF=""
31617969268SFam Zhengmodules="no"
317bd83c861SChristian Ehrhardtmodule_upgrades="no"
318377529c0SPaolo Bonziniprefix="/usr/local"
31910ff82d1SMarc-André Lureauqemu_suffix="qemu"
320377529c0SPaolo Bonzinibsd="no"
321377529c0SPaolo Bonzinilinux="no"
322377529c0SPaolo Bonzinisolaris="no"
323377529c0SPaolo Bonziniprofiler="no"
324377529c0SPaolo Bonzinisoftmmu="yes"
325377529c0SPaolo Bonzinilinux_user="no"
326377529c0SPaolo Bonzinibsd_user="no"
327377529c0SPaolo Bonzinipkgversion=""
32840d6444eSAvi Kivitypie=""
3293556c233SPaolo Bonziniqom_cast_debug="yes"
330baf86d6bSPaolo Bonzinitrace_backends="log"
331377529c0SPaolo Bonzinitrace_file="trace"
332c87ea116SAlex Bennéeopengl="$default_feature"
3335dd89908SRichard Hendersoncpuid_h="no"
334c87ea116SAlex Bennéeavx2_opt="$default_feature"
335c87ea116SAlex Bennéeguest_agent="$default_feature"
336d9840e25STomoki Sekiyamaguest_agent_with_vss="no"
33750cbebb9SMichael Rothguest_agent_ntddscsi="no"
338c87ea116SAlex Bennéevss_win32_sdk="$default_feature"
339d9840e25STomoki Sekiyamawin_sdk="no"
340c87ea116SAlex Bennéewant_tools="$default_feature"
341519175a2SAlex Barcelocoroutine=""
342c87ea116SAlex Bennéecoroutine_pool="$default_feature"
3437d992e4dSPeter Lievendebug_stack_usage="no"
344f0d92b56SLongpeng(Mike)crypto_afalg="no"
345a1c5e949SDaniel P. Berrangetls_priority="NORMAL"
346c87ea116SAlex Bennéetpm="$default_feature"
347c87ea116SAlex Bennéelive_block_migration=${default_feature:-yes}
348c87ea116SAlex Bennéenuma="$default_feature"
349c87ea116SAlex Bennéereplication=${default_feature:-yes}
350c87ea116SAlex Bennéebochs=${default_feature:-yes}
351c87ea116SAlex Bennéecloop=${default_feature:-yes}
352c87ea116SAlex Bennéedmg=${default_feature:-yes}
353c87ea116SAlex Bennéeqcow1=${default_feature:-yes}
354c87ea116SAlex Bennéevdi=${default_feature:-yes}
355c87ea116SAlex Bennéevvfat=${default_feature:-yes}
356c87ea116SAlex Bennéeqed=${default_feature:-yes}
357c87ea116SAlex Bennéeparallels=${default_feature:-yes}
358ba59fb77SPaolo Bonzinidebug_mutex="no"
359ba4dd2aaSAlex Bennéeplugins="$default_feature"
360b767d257SMarek Marczykowski-Góreckirng_none="no"
361c87ea116SAlex Bennéesecret_keyring="$default_feature"
362a5665051SPaolo Bonzinimeson=""
3633b4da132SPaolo Bonzinimeson_args=""
36448328880SPaolo Bonzinininja=""
3653b4da132SPaolo Bonzinigio="$default_feature"
366a5665051SPaolo Bonziniskip_meson=no
367b8e0c493SJoelle van Dyneslirp_smbd="$default_feature"
368377529c0SPaolo Bonzini
3693b4da132SPaolo Bonzini# The following Meson options are handled manually (still they
3703b4da132SPaolo Bonzini# are included in the automatically generated help message)
3713b4da132SPaolo Bonzini
3723b4da132SPaolo Bonzini# 1. Track which submodules are needed
3733b4da132SPaolo Bonzinicapstone="auto"
3743b4da132SPaolo Bonzinifdt="auto"
3753b4da132SPaolo Bonzinislirp="auto"
3763b4da132SPaolo Bonzini
3773b4da132SPaolo Bonzini# 2. Support --with/--without option
3783b4da132SPaolo Bonzinidefault_devices="true"
3793b4da132SPaolo Bonzini
3803b4da132SPaolo Bonzini# 3. Automatically enable/disable other options
3813b4da132SPaolo Bonzinitcg="enabled"
3823b4da132SPaolo Bonzinicfi="false"
3833b4da132SPaolo Bonzini
3843b4da132SPaolo Bonzini# 4. Detection partly done in configure
3853b4da132SPaolo Bonzinixen=${default_feature:+disabled}
386898be3e0SPeter Maydell
387c87ea116SAlex Bennée# parse CC options second
388ac0df51dSaliguorifor opt do
38989138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
390ac0df51dSaliguori  case "$opt" in
391ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
3923812c0c4SJoelle van Dyne                    cross_compile="yes"
393ac0df51dSaliguori  ;;
3943d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
395ac0df51dSaliguori  ;;
39683f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
39783f73fceSTomoki Sekiyama  ;;
3982ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
3992ff6b91eSJuan Quintela  ;;
400a2866660SPaolo Bonzini  --extra-cflags=*)
401a2866660SPaolo Bonzini    EXTRA_CFLAGS="$EXTRA_CFLAGS $optarg"
402a2866660SPaolo Bonzini    EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
403e2a2ed06SJuan Quintela    ;;
404a2866660SPaolo Bonzini  --extra-cxxflags=*) EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
40511cde1c8SBruno Dominguez  ;;
406a2866660SPaolo Bonzini  --extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg"
407e2a2ed06SJuan Quintela  ;;
4085bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
4095bc62e01SGerd Hoffmann  ;;
4105bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
4115bc62e01SGerd Hoffmann  ;;
412d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
413d75402b5SAlex Bennée  ;;
414d422b2bcSAlex Bennée  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
415d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
4162038f8c8SPaolo Bonzini                      cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
417d422b2bcSAlex Bennée  ;;
418d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
4192038f8c8SPaolo Bonzini                cc_archs="$cc_archs $cc_arch"
420d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
4212038f8c8SPaolo Bonzini                cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
422d75402b5SAlex Bennée  ;;
423ac0df51dSaliguori  esac
424ac0df51dSaliguoridone
425ac0df51dSaliguori# OS specific
426ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
42793148aa5SStefan Weil# we can eliminate its usage altogether.
428ac0df51dSaliguori
429e49d021eSPeter Maydell# Preferred compiler:
430e49d021eSPeter Maydell#  ${CC} (if set)
431e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
432e49d021eSPeter Maydell#  system compiler
433e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
434e49d021eSPeter Maydell  cc="$host_cc"
435e49d021eSPeter Maydellelse
436b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
437e49d021eSPeter Maydellfi
438e49d021eSPeter Maydell
43983f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
44083f73fceSTomoki Sekiyama  cxx="c++"
44183f73fceSTomoki Sekiyamaelse
44283f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
44383f73fceSTomoki Sekiyamafi
44483f73fceSTomoki Sekiyama
445b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
446cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
4475f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
4483dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
449b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
450b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
4519f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
4524852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
453b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
454b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
45517884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
45617884d7bSSergei Trofimovichquery_pkg_config() {
45717884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
45817884d7bSSergei Trofimovich}
45917884d7bSSergei Trofimovichpkg_config=query_pkg_config
46047c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
461ac0df51dSaliguori
462be17dc90SMichael S. Tsirkin# default flags for all hosts
4632d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
4642d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
4652d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
4662d31515bSPeter Maydell# provides these semantics.)
467de38c0ccSPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv"
468086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
469c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
470be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
4715770e8afSPaolo Bonzini
472de38c0ccSPaolo BonziniQEMU_LDFLAGS=
473de38c0ccSPaolo Bonzini
4745770e8afSPaolo Bonzini# Flags that are needed during configure but later taken care of by Meson
4758a9d3d56SRichard HendersonCONFIGURE_CFLAGS="-std=gnu11 -Wall"
4765770e8afSPaolo BonziniCONFIGURE_LDFLAGS=
477086d5f75SPaolo Bonzini
478be17dc90SMichael S. Tsirkin
479ac0df51dSaliguoricheck_define() {
480ac0df51dSaliguoricat > $TMPC <<EOF
481ac0df51dSaliguori#if !defined($1)
482fd786e1aSPeter Maydell#error $1 not defined
483ac0df51dSaliguori#endif
484ac0df51dSaliguoriint main(void) { return 0; }
485ac0df51dSaliguoriEOF
48652166aa0SJuan Quintela  compile_object
487ac0df51dSaliguori}
488ac0df51dSaliguori
489307119e7SGerd Hoffmanncheck_include() {
490307119e7SGerd Hoffmanncat > $TMPC <<EOF
491307119e7SGerd Hoffmann#include <$1>
492307119e7SGerd Hoffmannint main(void) { return 0; }
493307119e7SGerd HoffmannEOF
494307119e7SGerd Hoffmann  compile_object
495307119e7SGerd Hoffmann}
496307119e7SGerd Hoffmann
49793b25869SJohn Snowwrite_c_skeleton() {
49893b25869SJohn Snow    cat > $TMPC <<EOF
49993b25869SJohn Snowint main(void) { return 0; }
50093b25869SJohn SnowEOF
50193b25869SJohn Snow}
50293b25869SJohn Snow
503bbea4050SPeter Maydellif check_define __linux__ ; then
504*ba7c60c2SPaolo Bonzini  targetos=linux
505bbea4050SPeter Maydellelif check_define _WIN32 ; then
506*ba7c60c2SPaolo Bonzini  targetos=windows
507bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
508*ba7c60c2SPaolo Bonzini  targetos=openbsd
509bbea4050SPeter Maydellelif check_define __sun__ ; then
510*ba7c60c2SPaolo Bonzini  targetos=sunos
511bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
512*ba7c60c2SPaolo Bonzini  targetos=haiku
513951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
514*ba7c60c2SPaolo Bonzini  targetos=freebsd
515951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
516*ba7c60c2SPaolo Bonzini  targetos=gnu/kfreebsd
517951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
518*ba7c60c2SPaolo Bonzini  targetos=dragonfly
519951fedfcSPeter Maydellelif check_define __NetBSD__; then
520*ba7c60c2SPaolo Bonzini  targetos=netbsd
521951fedfcSPeter Maydellelif check_define __APPLE__; then
522*ba7c60c2SPaolo Bonzini  targetos=darwin
523bbea4050SPeter Maydellelse
524951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
525951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
526951fedfcSPeter Maydell  # be the result of a missing compiler.
527*ba7c60c2SPaolo Bonzini  targetos=bogus
528bbea4050SPeter Maydellfi
529bbea4050SPeter Maydell
530bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use.
531bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're
532bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify
533bbea4050SPeter Maydell# the correct CPU with the --cpu option.
534bbea4050SPeter Maydellcase $targetos in
535*ba7c60c2SPaolo Bonzinisunos)
53689138857SStefan Weil  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
537bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
538bbea4050SPeter Maydell    cpu="x86_64"
539bbea4050SPeter Maydell  fi
540bbea4050SPeter Maydellesac
541bbea4050SPeter Maydell
5422ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
5432ff6b91eSJuan Quintela  # command line argument
5442ff6b91eSJuan Quintela  :
5452ff6b91eSJuan Quintelaelif check_define __i386__ ; then
546ac0df51dSaliguori  cpu="i386"
547ac0df51dSaliguorielif check_define __x86_64__ ; then
548c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
549c72b26ecSRichard Henderson    cpu="x32"
550c72b26ecSRichard Henderson  else
551ac0df51dSaliguori    cpu="x86_64"
552c72b26ecSRichard Henderson  fi
5533aa9bd6cSblueswir1elif check_define __sparc__ ; then
5543aa9bd6cSblueswir1  if check_define __arch64__ ; then
5553aa9bd6cSblueswir1    cpu="sparc64"
5563aa9bd6cSblueswir1  else
5573aa9bd6cSblueswir1    cpu="sparc"
5583aa9bd6cSblueswir1  fi
559fdf7ed96Smalcelif check_define _ARCH_PPC ; then
560fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
561f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
562f8378accSRichard Henderson      cpu="ppc64le"
563f8378accSRichard Henderson    else
564fdf7ed96Smalc      cpu="ppc64"
565f8378accSRichard Henderson    fi
566ac0df51dSaliguori  else
567fdf7ed96Smalc    cpu="ppc"
568fdf7ed96Smalc  fi
569afa05235SAurelien Jarnoelif check_define __mips__ ; then
570afa05235SAurelien Jarno  cpu="mips"
571d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
572d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
573d66ed0eaSAurelien Jarno    cpu="s390x"
574d66ed0eaSAurelien Jarno  else
575d66ed0eaSAurelien Jarno    cpu="s390"
576d66ed0eaSAurelien Jarno  fi
577c4f80543SAlistair Franciselif check_define __riscv ; then
578ba0e7333SRichard Henderson  cpu="riscv"
57921d89f84SPeter Maydellelif check_define __arm__ ; then
58021d89f84SPeter Maydell  cpu="arm"
5811f080313SClaudio Fontanaelif check_define __aarch64__ ; then
5821f080313SClaudio Fontana  cpu="aarch64"
583fdf7ed96Smalcelse
58489138857SStefan Weil  cpu=$(uname -m)
585ac0df51dSaliguorifi
586ac0df51dSaliguori
587359bc95dSPeter MaydellARCH=
588359bc95dSPeter Maydell# Normalise host CPU name and set ARCH.
589359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
5907d13299dSbellardcase "$cpu" in
591ba0e7333SRichard Henderson  ppc|ppc64|s390x|sparc64|x32|riscv)
592898be3e0SPeter Maydell  ;;
593f8378accSRichard Henderson  ppc64le)
594f8378accSRichard Henderson    ARCH="ppc64"
595f8378accSRichard Henderson  ;;
5967d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
59797a847bcSbellard    cpu="i386"
5987d13299dSbellard  ;;
599aaa5fa14Saurel32  x86_64|amd64)
600aaa5fa14Saurel32    cpu="x86_64"
601aaa5fa14Saurel32  ;;
60221d89f84SPeter Maydell  armv*b|armv*l|arm)
60321d89f84SPeter Maydell    cpu="arm"
6047d13299dSbellard  ;;
6051f080313SClaudio Fontana  aarch64)
6061f080313SClaudio Fontana    cpu="aarch64"
6071f080313SClaudio Fontana  ;;
608afa05235SAurelien Jarno  mips*)
609afa05235SAurelien Jarno    cpu="mips"
610afa05235SAurelien Jarno  ;;
6113142255cSblueswir1  sparc|sun4[cdmuv])
612ae228531Sbellard    cpu="sparc"
613ae228531Sbellard  ;;
6147d13299dSbellard  *)
615359bc95dSPeter Maydell    # This will result in either an error or falling back to TCI later
616359bc95dSPeter Maydell    ARCH=unknown
6177d13299dSbellard  ;;
6187d13299dSbellardesac
619359bc95dSPeter Maydellif test -z "$ARCH"; then
620359bc95dSPeter Maydell  ARCH="$cpu"
621359bc95dSPeter Maydellfi
622e2d52ad3SJuan Quintela
6237d13299dSbellard# OS specific
6240dbfc675SJuan Quintela
6257d13299dSbellardcase $targetos in
626*ba7c60c2SPaolo Bonziniwindows)
62767b915a5Sbellard  mingw32="yes"
6289b8e4298SAlex Bennée  plugins="no"
629fb648e9cSDaniel P. Berrangé  pie="no"
63067b915a5Sbellard;;
631*ba7c60c2SPaolo Bonzinignu/kfreebsd)
632a167ba50SAurelien Jarno  bsd="yes"
6335c40d2bdSths;;
634*ba7c60c2SPaolo Bonzinifreebsd)
6357d3505c5Sbellard  bsd="yes"
636e2a74729SWarner Losh  bsd_user="yes"
6370db4a067SPaolo Bonzini  make="${MAKE-gmake}"
638f01576f1SJuergen Lock  # needed for kinfo_getvmmap(3) in libutil.h
6397d3505c5Sbellard;;
640*ba7c60c2SPaolo Bonzinidragonfly)
641c5e97233Sblueswir1  bsd="yes"
6420db4a067SPaolo Bonzini  make="${MAKE-gmake}"
643c5e97233Sblueswir1;;
644*ba7c60c2SPaolo Bonzininetbsd)
6457d3505c5Sbellard  bsd="yes"
6460db4a067SPaolo Bonzini  make="${MAKE-gmake}"
6477d3505c5Sbellard;;
648*ba7c60c2SPaolo Bonziniopenbsd)
6497d3505c5Sbellard  bsd="yes"
6500db4a067SPaolo Bonzini  make="${MAKE-gmake}"
6517d3505c5Sbellard;;
652*ba7c60c2SPaolo Bonzinidarwin)
65383fb7adfSbellard  bsd="yes"
65483fb7adfSbellard  darwin="yes"
655a0b7cf6bSPeter Maydell  # Disable attempts to use ObjectiveC features in os/object.h since they
656a0b7cf6bSPeter Maydell  # won't work when we're compiling with gcc as a C compiler.
657a0b7cf6bSPeter Maydell  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
65883fb7adfSbellard;;
659*ba7c60c2SPaolo Bonzinisunos)
660ec530c81Sbellard  solaris="yes"
6610db4a067SPaolo Bonzini  make="${MAKE-gmake}"
662e2d8830eSBrad  smbd="${SMBD-/usr/sfw/sbin/smbd}"
663d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h
664d741429aSBlue Swirl  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
665d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h
666d741429aSBlue Swirl  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
667ec530c81Sbellard;;
668*ba7c60c2SPaolo Bonzinihaiku)
669b8ee198dSRichard Zak  pie="no"
670b8ee198dSRichard Zak  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
671179cf400SAndreas Färber;;
672*ba7c60c2SPaolo Bonzinilinux)
6735327cf48Sbellard  linux="yes"
674831b7825Sths  linux_user="yes"
675c87ea116SAlex Bennée  vhost_user=${default_feature:-yes}
676898be3e0SPeter Maydell;;
6777d13299dSbellardesac
6787d13299dSbellard
6790db4a067SPaolo Bonzini: ${make=${MAKE-make}}
680b6daf4d3SPaolo Bonzini
681faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally
682faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so
683ddf90699SEduardo Habkost# we check that too
684faf44142SDaniel P. Berrangépython=
6850a01d76fSMarc-André Lureauexplicit_python=no
686ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python
687faf44142SDaniel P. Berrangédo
688faf44142SDaniel P. Berrangé    if has "$binary"
689faf44142SDaniel P. Berrangé    then
69095c5f2deSPaolo Bonzini        python=$(command -v "$binary")
691faf44142SDaniel P. Berrangé        break
692faf44142SDaniel P. Berrangé    fi
693faf44142SDaniel P. Berrangédone
694903458c8SMarkus Armbruster
695903458c8SMarkus Armbruster
69639d87c8cSAlex Bennée# Check for ancillary tools used in testing
69739d87c8cSAlex Bennéegenisoimage=
6983df437c7SAlex Bennéefor binary in genisoimage mkisofs
69939d87c8cSAlex Bennéedo
70039d87c8cSAlex Bennée    if has $binary
70139d87c8cSAlex Bennée    then
70239d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
70339d87c8cSAlex Bennée        break
70439d87c8cSAlex Bennée    fi
70539d87c8cSAlex Bennéedone
70639d87c8cSAlex Bennée
7073c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
7083c4a4d0dSPeter Maydellif has clang; then
7093c4a4d0dSPeter Maydell  objcc=clang
7103c4a4d0dSPeter Maydellelse
7113c4a4d0dSPeter Maydell  objcc="$cc"
7123c4a4d0dSPeter Maydellfi
7133c4a4d0dSPeter Maydell
7143457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
7153457a3f8SJuan Quintela  EXESUF=".exe"
71678e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
7175770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
71893b25869SJohn Snow  write_c_skeleton;
719d17f305aSPaolo Bonzini  prefix="/qemu"
72077433a5fSMarc-André Lureau  qemu_suffix=""
721105fad6bSBishara AbuHattoum  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
7223457a3f8SJuan Quintelafi
7233457a3f8SJuan Quintela
724487fefdbSAnthony Liguoriwerror=""
72585aa5189Sbellard
72661d63097SPaolo Bonzini. $source_path/scripts/meson-buildoptions.sh
72761d63097SPaolo Bonzini
72861d63097SPaolo Bonzinimeson_options=
72961d63097SPaolo Bonzinimeson_option_parse() {
73061d63097SPaolo Bonzini  meson_options="$meson_options $(_meson_option_parse "$@")"
73161d63097SPaolo Bonzini  if test $? -eq 1; then
73261d63097SPaolo Bonzini    echo "ERROR: unknown option $1"
73361d63097SPaolo Bonzini    echo "Try '$0 --help' for more information"
73461d63097SPaolo Bonzini    exit 1
73561d63097SPaolo Bonzini  fi
73661d63097SPaolo Bonzini}
73761d63097SPaolo Bonzini
7387d13299dSbellardfor opt do
73989138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
7407d13299dSbellard  case "$opt" in
7412efc3265Sbellard  --help|-h) show_help=yes
7422efc3265Sbellard  ;;
74399123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
74499123e13SMike Frysinger  ;;
745b1a550a0Spbrook  --prefix=*) prefix="$optarg"
7467d13299dSbellard  ;;
747b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
74832ce6337Sbellard  ;;
749ac0df51dSaliguori  --cross-prefix=*)
7507d13299dSbellard  ;;
751ac0df51dSaliguori  --cc=*)
7527d13299dSbellard  ;;
753b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
75483469015Sbellard  ;;
75583f73fceSTomoki Sekiyama  --cxx=*)
75683f73fceSTomoki Sekiyama  ;;
757e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
758e007dbecSMichael S. Tsirkin  ;;
7593c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
7603c4a4d0dSPeter Maydell  ;;
761b1a550a0Spbrook  --make=*) make="$optarg"
7627d13299dSbellard  ;;
763b6daf4d3SPaolo Bonzini  --install=*)
7646a882643Spbrook  ;;
7650a01d76fSMarc-André Lureau  --python=*) python="$optarg" ; explicit_python=yes
766c886edfbSBlue Swirl  ;;
7672eb054c2SPeter Maydell  --sphinx-build=*) sphinx_build="$optarg"
7682eb054c2SPeter Maydell  ;;
769a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
770a5665051SPaolo Bonzini  ;;
771a5665051SPaolo Bonzini  --meson=*) meson="$optarg"
772a5665051SPaolo Bonzini  ;;
77348328880SPaolo Bonzini  --ninja=*) ninja="$optarg"
77448328880SPaolo Bonzini  ;;
775e2d8830eSBrad  --smbd=*) smbd="$optarg"
776e2d8830eSBrad  ;;
777e2a2ed06SJuan Quintela  --extra-cflags=*)
7787d13299dSbellard  ;;
77911cde1c8SBruno Dominguez  --extra-cxxflags=*)
78011cde1c8SBruno Dominguez  ;;
781e2a2ed06SJuan Quintela  --extra-ldflags=*)
7827d13299dSbellard  ;;
7835bc62e01SGerd Hoffmann  --enable-debug-info)
7845bc62e01SGerd Hoffmann  ;;
7855bc62e01SGerd Hoffmann  --disable-debug-info)
7865bc62e01SGerd Hoffmann  ;;
787d75402b5SAlex Bennée  --cross-cc-*)
788d75402b5SAlex Bennée  ;;
78917969268SFam Zheng  --enable-modules)
79017969268SFam Zheng      modules="yes"
79117969268SFam Zheng  ;;
7923aa88b31SStefan Hajnoczi  --disable-modules)
7933aa88b31SStefan Hajnoczi      modules="no"
7943aa88b31SStefan Hajnoczi  ;;
795bd83c861SChristian Ehrhardt  --disable-module-upgrades) module_upgrades="no"
796bd83c861SChristian Ehrhardt  ;;
797bd83c861SChristian Ehrhardt  --enable-module-upgrades) module_upgrades="yes"
798bd83c861SChristian Ehrhardt  ;;
7992ff6b91eSJuan Quintela  --cpu=*)
8007d13299dSbellard  ;;
801b1a550a0Spbrook  --target-list=*) target_list="$optarg"
802447e133fSAlex Bennée                   if test "$target_list_exclude"; then
803447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
804447e133fSAlex Bennée                   fi
805447e133fSAlex Bennée  ;;
806447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
807447e133fSAlex Bennée                   if test "$target_list"; then
808447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
809447e133fSAlex Bennée                   fi
810de83cd02Sbellard  ;;
81174242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
8129410b56cSPrerna Saxena  ;;
8137bc3ca7fSPaolo Bonzini  --with-default-devices) default_devices="true"
814f3494749SPaolo Bonzini  ;;
8157bc3ca7fSPaolo Bonzini  --without-default-devices) default_devices="false"
816f3494749SPaolo Bonzini  ;;
817d1d5e9eeSAlex Bennée  --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
818d1d5e9eeSAlex Bennée  ;;
819d1d5e9eeSAlex Bennée  --with-devices-*) device_arch=${opt#--with-devices-};
820d1d5e9eeSAlex Bennée                    device_arch=${device_arch%%=*}
821d1d5e9eeSAlex Bennée                    cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
822d1d5e9eeSAlex Bennée                    if test -f "$cf"; then
823d1d5e9eeSAlex Bennée                        device_archs="$device_archs $device_arch"
824d1d5e9eeSAlex Bennée                        eval "devices_${device_arch}=\$optarg"
825d1d5e9eeSAlex Bennée                    else
826d1d5e9eeSAlex Bennée                        error_exit "File $cf does not exist"
827d1d5e9eeSAlex Bennée                    fi
828d1d5e9eeSAlex Bennée  ;;
829c87ea116SAlex Bennée  --without-default-features) # processed above
830c87ea116SAlex Bennée  ;;
8317d13299dSbellard  --enable-gprof) gprof="yes"
8327d13299dSbellard  ;;
8331d728c39SBlue Swirl  --enable-gcov) gcov="yes"
8341d728c39SBlue Swirl  ;;
83579427693SLoïc Minier  --static)
83679427693SLoïc Minier    static="yes"
83717884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
83843ce4dfeSbellard  ;;
8390b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
8400b24e75fSPaolo Bonzini  ;;
8410b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
8420b24e75fSPaolo Bonzini  ;;
8433aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
8443aa5d2beSAlon Levy  ;;
8458bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
8468bf188aaSMichael Tokarev  ;;
8470f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
8480f94d6daSAlon Levy  ;;
849528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
8500b24e75fSPaolo Bonzini  ;;
85177433a5fSMarc-André Lureau  --with-suffix=*) qemu_suffix="$optarg"
852023d3d67SEduardo Habkost  ;;
853c6502638SBruce Rogers  --docdir=*) docdir="$optarg"
8540b24e75fSPaolo Bonzini  ;;
855fe0038beSPaolo Bonzini  --localedir=*) localedir="$optarg"
856fe0038beSPaolo Bonzini  ;;
857ca2fb938SAndre Przywara  --sysconfdir=*) sysconfdir="$optarg"
85807381cc1SAnthony Liguori  ;;
859785c23aeSLuiz Capitulino  --localstatedir=*) local_statedir="$optarg"
860785c23aeSLuiz Capitulino  ;;
8613d5eecabSGerd Hoffmann  --firmwarepath=*) firmwarepath="$optarg"
8623d5eecabSGerd Hoffmann  ;;
863181ce1d0SOlaf Hering  --host=*|--build=*|\
864181ce1d0SOlaf Hering  --disable-dependency-tracking|\
865785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
866fe0038beSPaolo Bonzini  --oldincludedir=*|--datarootdir=*|--infodir=*|\
867023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
868023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
869023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
870023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
871023ddd74SMax Filippov    # lots of directory switches by default.
872023ddd74SMax Filippov  ;;
8733556c233SPaolo Bonzini  --disable-qom-cast-debug) qom_cast_debug="no"
8743556c233SPaolo Bonzini  ;;
8753556c233SPaolo Bonzini  --enable-qom-cast-debug) qom_cast_debug="yes"
8763556c233SPaolo Bonzini  ;;
8770c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
8780c58ac1cSmalc  ;;
87989138857SStefan Weil  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
880b64ec4e4SFam Zheng  ;;
88189138857SStefan Weil  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
882eb852011SMarkus Armbruster  ;;
883e5f05f8cSKevin Wolf  --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes"
884e5f05f8cSKevin Wolf  ;;
885e5f05f8cSKevin Wolf  --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no"
886e5f05f8cSKevin Wolf  ;;
887f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
888f8393946Saurel32  ;;
889f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
890f8393946Saurel32  ;;
891f3d08ee6SPaul Brook  --enable-debug)
892f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
893f3d08ee6SPaul Brook      debug_tcg="yes"
8941fcc6d42SPeter Xu      debug_mutex="yes"
895f3d08ee6SPaul Brook      debug="yes"
896f3d08ee6SPaul Brook      strip_opt="no"
897b553a042SJohn Snow      fortify_source="no"
898f3d08ee6SPaul Brook  ;;
899247724cbSMarc-André Lureau  --enable-sanitizers) sanitizers="yes"
900247724cbSMarc-André Lureau  ;;
901247724cbSMarc-André Lureau  --disable-sanitizers) sanitizers="no"
902247724cbSMarc-André Lureau  ;;
9030aebab04SLingfeng Yang  --enable-tsan) tsan="yes"
9040aebab04SLingfeng Yang  ;;
9050aebab04SLingfeng Yang  --disable-tsan) tsan="no"
9060aebab04SLingfeng Yang  ;;
9071625af87Saliguori  --disable-strip) strip_opt="no"
9081625af87Saliguori  ;;
9094d34a86bSPaolo Bonzini  --disable-slirp) slirp="disabled"
910c20709aaSbellard  ;;
911fd6fc214SPaolo Bonzini  --enable-slirp) slirp="enabled"
912fd6fc214SPaolo Bonzini  ;;
9134d34a86bSPaolo Bonzini  --enable-slirp=git) slirp="internal"
9147c57bdd8SMarc-André Lureau  ;;
91503a3c0b3SPaolo Bonzini  --enable-slirp=*) slirp="$optarg"
916675b9b53SMarc-André Lureau  ;;
9171badb709SPaolo Bonzini  --disable-xen) xen="disabled"
918e37630caSaliguori  ;;
9191badb709SPaolo Bonzini  --enable-xen) xen="enabled"
920fc321b4bSJuan Quintela  ;;
9211badb709SPaolo Bonzini  --disable-tcg) tcg="disabled"
922d1a14257SAlex Bennée                 plugins="no"
923b3f6ea7eSPaolo Bonzini  ;;
9241badb709SPaolo Bonzini  --enable-tcg) tcg="enabled"
925b3f6ea7eSPaolo Bonzini  ;;
92605c2a3e7Sbellard  --enable-profiler) profiler="yes"
92705c2a3e7Sbellard  ;;
928cad25d69Spbrook  --disable-system) softmmu="no"
9290a8e90f4Spbrook  ;;
930cad25d69Spbrook  --enable-system) softmmu="yes"
9310a8e90f4Spbrook  ;;
9320953a80fSZachary Amsden  --disable-user)
9330953a80fSZachary Amsden      linux_user="no" ;
9340953a80fSZachary Amsden      bsd_user="no" ;
9350953a80fSZachary Amsden  ;;
9360953a80fSZachary Amsden  --enable-user) ;;
937831b7825Sths  --disable-linux-user) linux_user="no"
9380a8e90f4Spbrook  ;;
939831b7825Sths  --enable-linux-user) linux_user="yes"
940831b7825Sths  ;;
94184778508Sblueswir1  --disable-bsd-user) bsd_user="no"
94284778508Sblueswir1  ;;
94384778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
94484778508Sblueswir1  ;;
94540d6444eSAvi Kivity  --enable-pie) pie="yes"
94634005a00SKirill A. Shutemov  ;;
94740d6444eSAvi Kivity  --disable-pie) pie="no"
94834005a00SKirill A. Shutemov  ;;
94985aa5189Sbellard  --enable-werror) werror="yes"
95085aa5189Sbellard  ;;
95185aa5189Sbellard  --disable-werror) werror="no"
95285aa5189Sbellard  ;;
953cdad781dSDaniele Buono  --enable-lto) lto="true"
954cdad781dSDaniele Buono  ;;
955cdad781dSDaniele Buono  --disable-lto) lto="false"
956cdad781dSDaniele Buono  ;;
95763678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
95863678e17SSteven Noonan  ;;
95963678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
96063678e17SSteven Noonan  ;;
9611e4f6065SDaniele Buono  --enable-safe-stack) safe_stack="yes"
9621e4f6065SDaniele Buono  ;;
9631e4f6065SDaniele Buono  --disable-safe-stack) safe_stack="no"
9641e4f6065SDaniele Buono  ;;
9659e62ba48SDaniele Buono  --enable-cfi)
9669e62ba48SDaniele Buono      cfi="true";
9679e62ba48SDaniele Buono      lto="true";
9689e62ba48SDaniele Buono  ;;
9699e62ba48SDaniele Buono  --disable-cfi) cfi="false"
9709e62ba48SDaniele Buono  ;;
971fbb4121dSPaolo Bonzini  --disable-fdt) fdt="disabled"
9722df87df7SJuan Quintela  ;;
973fbb4121dSPaolo Bonzini  --enable-fdt) fdt="enabled"
974fbb4121dSPaolo Bonzini  ;;
975fbb4121dSPaolo Bonzini  --enable-fdt=git) fdt="internal"
976fbb4121dSPaolo Bonzini  ;;
97703a3c0b3SPaolo Bonzini  --enable-fdt=*) fdt="$optarg"
9782df87df7SJuan Quintela  ;;
979a40161cbSPaolo Bonzini  --disable-membarrier) membarrier="no"
980a40161cbSPaolo Bonzini  ;;
981a40161cbSPaolo Bonzini  --enable-membarrier) membarrier="yes"
982a40161cbSPaolo Bonzini  ;;
9837e563bfbSThomas Huth  --with-pkgversion=*) pkgversion="$optarg"
9844a19f1ecSpbrook  ;;
985519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
986519175a2SAlex Barcelo  ;;
98770c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
98870c60c08SStefan Hajnoczi  ;;
98970c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
99070c60c08SStefan Hajnoczi  ;;
9917d992e4dSPeter Lieven  --enable-debug-stack-usage) debug_stack_usage="yes"
9927d992e4dSPeter Lieven  ;;
993f0d92b56SLongpeng(Mike)  --enable-crypto-afalg) crypto_afalg="yes"
994f0d92b56SLongpeng(Mike)  ;;
995f0d92b56SLongpeng(Mike)  --disable-crypto-afalg) crypto_afalg="no"
996f0d92b56SLongpeng(Mike)  ;;
997d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
998d5970055SMichael S. Tsirkin  ;;
999d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
1000d5970055SMichael S. Tsirkin  ;;
1001042cea27SGonglei  --disable-vhost-crypto) vhost_crypto="no"
1002042cea27SGonglei  ;;
1003299e6f19SPaolo Bonzini  --enable-vhost-crypto) vhost_crypto="yes"
1004042cea27SGonglei  ;;
10055e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
10065e9be92dSNicholas Bellinger  ;;
10075e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
10085e9be92dSNicholas Bellinger  ;;
1009fc0b9b0eSStefan Hajnoczi  --disable-vhost-vsock) vhost_vsock="no"
1010fc0b9b0eSStefan Hajnoczi  ;;
1011fc0b9b0eSStefan Hajnoczi  --enable-vhost-vsock) vhost_vsock="yes"
1012fc0b9b0eSStefan Hajnoczi  ;;
101398fc1adaSDr. David Alan Gilbert  --disable-vhost-user-fs) vhost_user_fs="no"
101498fc1adaSDr. David Alan Gilbert  ;;
101598fc1adaSDr. David Alan Gilbert  --enable-vhost-user-fs) vhost_user_fs="yes"
101698fc1adaSDr. David Alan Gilbert  ;;
1017da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
101820ff075bSMichael Walle  ;;
1019da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
102020ff075bSMichael Walle  ;;
10218c84cf11SSergei Trofimovich  --disable-xfsctl) xfs="no"
10228c84cf11SSergei Trofimovich  ;;
10238c84cf11SSergei Trofimovich  --enable-xfsctl) xfs="yes"
10248c84cf11SSergei Trofimovich  ;;
10251ffb3bbbSPaolo Bonzini  --disable-zlib-test)
10261ece9905SAlon Levy  ;;
1027d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1028d138cee9SMichael Roth  ;;
1029d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1030d138cee9SMichael Roth  ;;
1031d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1032d9840e25STomoki Sekiyama  ;;
1033d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1034d9840e25STomoki Sekiyama  ;;
1035d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1036d9840e25STomoki Sekiyama  ;;
1037d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1038d9840e25STomoki Sekiyama  ;;
1039d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1040d9840e25STomoki Sekiyama  ;;
1041d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1042d9840e25STomoki Sekiyama  ;;
10434b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
10444b1c11fdSDaniel P. Berrange  ;;
10454b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
10464b1c11fdSDaniel P. Berrange  ;;
104786583a07SLiam Merwick  --disable-avx2) avx2_opt="no"
104886583a07SLiam Merwick  ;;
104986583a07SLiam Merwick  --enable-avx2) avx2_opt="yes"
105086583a07SLiam Merwick  ;;
10516b8cd447SRobert Hoo  --disable-avx512f) avx512f_opt="no"
10526b8cd447SRobert Hoo  ;;
10536b8cd447SRobert Hoo  --enable-avx512f) avx512f_opt="yes"
10546b8cd447SRobert Hoo  ;;
105552b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
105652b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1057583f6e7bSStefan Hajnoczi  ;;
1058cb6414dfSFam Zheng  --enable-vhdx|--disable-vhdx)
1059cb6414dfSFam Zheng      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1060cb6414dfSFam Zheng  ;;
1061315d3184SFam Zheng  --enable-uuid|--disable-uuid)
1062315d3184SFam Zheng      echo "$0: $opt is obsolete, UUID support is always built" >&2
1063315d3184SFam Zheng  ;;
1064a1c5e949SDaniel P. Berrange  --tls-priority=*) tls_priority="$optarg"
1065a1c5e949SDaniel P. Berrange  ;;
10662da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
10672da776dbSMichael R. Hines  ;;
10682da776dbSMichael R. Hines  --disable-rdma) rdma="no"
10692da776dbSMichael R. Hines  ;;
107021ab34c9SMarcel Apfelbaum  --enable-pvrdma) pvrdma="yes"
107121ab34c9SMarcel Apfelbaum  ;;
107221ab34c9SMarcel Apfelbaum  --disable-pvrdma) pvrdma="no"
107321ab34c9SMarcel Apfelbaum  ;;
1074e91c793cSCole Robinson  --disable-tpm) tpm="no"
1075e91c793cSCole Robinson  ;;
1076ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1077ab214c29SStefan Berger  ;;
1078ed1701c6SDr. David Alan Gilbert  --disable-live-block-migration) live_block_migration="no"
1079ed1701c6SDr. David Alan Gilbert  ;;
1080ed1701c6SDr. David Alan Gilbert  --enable-live-block-migration) live_block_migration="yes"
1081ed1701c6SDr. David Alan Gilbert  ;;
1082a99d57bbSWanlong Gao  --disable-numa) numa="no"
1083a99d57bbSWanlong Gao  ;;
1084a99d57bbSWanlong Gao  --enable-numa) numa="yes"
1085a99d57bbSWanlong Gao  ;;
1086a6b1d4c0SChanglong Xie  --disable-replication) replication="no"
1087a6b1d4c0SChanglong Xie  ;;
1088a6b1d4c0SChanglong Xie  --enable-replication) replication="yes"
1089a6b1d4c0SChanglong Xie  ;;
10902f740136SJeff Cody  --disable-bochs) bochs="no"
10912f740136SJeff Cody  ;;
10922f740136SJeff Cody  --enable-bochs) bochs="yes"
10932f740136SJeff Cody  ;;
10942f740136SJeff Cody  --disable-cloop) cloop="no"
10952f740136SJeff Cody  ;;
10962f740136SJeff Cody  --enable-cloop) cloop="yes"
10972f740136SJeff Cody  ;;
10982f740136SJeff Cody  --disable-dmg) dmg="no"
10992f740136SJeff Cody  ;;
11002f740136SJeff Cody  --enable-dmg) dmg="yes"
11012f740136SJeff Cody  ;;
11022f740136SJeff Cody  --disable-qcow1) qcow1="no"
11032f740136SJeff Cody  ;;
11042f740136SJeff Cody  --enable-qcow1) qcow1="yes"
11052f740136SJeff Cody  ;;
11062f740136SJeff Cody  --disable-vdi) vdi="no"
11072f740136SJeff Cody  ;;
11082f740136SJeff Cody  --enable-vdi) vdi="yes"
11092f740136SJeff Cody  ;;
11102f740136SJeff Cody  --disable-vvfat) vvfat="no"
11112f740136SJeff Cody  ;;
11122f740136SJeff Cody  --enable-vvfat) vvfat="yes"
11132f740136SJeff Cody  ;;
11142f740136SJeff Cody  --disable-qed) qed="no"
11152f740136SJeff Cody  ;;
11162f740136SJeff Cody  --enable-qed) qed="yes"
11172f740136SJeff Cody  ;;
11182f740136SJeff Cody  --disable-parallels) parallels="no"
11192f740136SJeff Cody  ;;
11202f740136SJeff Cody  --enable-parallels) parallels="yes"
11212f740136SJeff Cody  ;;
1122e6a74868SMarc-André Lureau  --disable-vhost-user) vhost_user="no"
1123e6a74868SMarc-André Lureau  ;;
1124299e6f19SPaolo Bonzini  --enable-vhost-user) vhost_user="yes"
1125299e6f19SPaolo Bonzini  ;;
1126108a6481SCindy Lu  --disable-vhost-vdpa) vhost_vdpa="no"
1127108a6481SCindy Lu  ;;
1128108a6481SCindy Lu  --enable-vhost-vdpa) vhost_vdpa="yes"
1129108a6481SCindy Lu  ;;
1130299e6f19SPaolo Bonzini  --disable-vhost-kernel) vhost_kernel="no"
1131299e6f19SPaolo Bonzini  ;;
1132299e6f19SPaolo Bonzini  --enable-vhost-kernel) vhost_kernel="yes"
1133e6a74868SMarc-André Lureau  ;;
11348b18cdbfSRichard Henderson  --disable-capstone) capstone="disabled"
11358ca80760SRichard Henderson  ;;
11368b18cdbfSRichard Henderson  --enable-capstone) capstone="enabled"
11378ca80760SRichard Henderson  ;;
11388b18cdbfSRichard Henderson  --enable-capstone=git) capstone="internal"
1139e219c499SRichard Henderson  ;;
114003a3c0b3SPaolo Bonzini  --enable-capstone=*) capstone="$optarg"
1141e219c499SRichard Henderson  ;;
1142cc84d63aSDaniel P. Berrange  --with-git=*) git="$optarg"
1143cc84d63aSDaniel P. Berrange  ;;
11447d7dbf9dSDan Streetman  --with-git-submodules=*)
11457d7dbf9dSDan Streetman      git_submodules_action="$optarg"
1146f62bbee5SDaniel P. Berrange  ;;
1147ba59fb77SPaolo Bonzini  --enable-debug-mutex) debug_mutex=yes
1148ba59fb77SPaolo Bonzini  ;;
1149ba59fb77SPaolo Bonzini  --disable-debug-mutex) debug_mutex=no
1150ba59fb77SPaolo Bonzini  ;;
11519b8e4298SAlex Bennée  --enable-plugins) if test "$mingw32" = "yes"; then
11529b8e4298SAlex Bennée                        error_exit "TCG plugins not currently supported on Windows platforms"
11539b8e4298SAlex Bennée                    else
11549b8e4298SAlex Bennée                        plugins="yes"
11559b8e4298SAlex Bennée                    fi
115640e8c6f4SAlex Bennée  ;;
115740e8c6f4SAlex Bennée  --disable-plugins) plugins="no"
115840e8c6f4SAlex Bennée  ;;
1159afc3a8f9SAlex Bennée  --enable-containers) use_containers="yes"
1160afc3a8f9SAlex Bennée  ;;
1161afc3a8f9SAlex Bennée  --disable-containers) use_containers="no"
1162afc3a8f9SAlex Bennée  ;;
1163f48e590aSAlex Bennée  --gdb=*) gdb_bin="$optarg"
1164f48e590aSAlex Bennée  ;;
1165b767d257SMarek Marczykowski-Górecki  --enable-rng-none) rng_none=yes
1166b767d257SMarek Marczykowski-Górecki  ;;
1167b767d257SMarek Marczykowski-Górecki  --disable-rng-none) rng_none=no
1168b767d257SMarek Marczykowski-Górecki  ;;
116954e7aac0SAlexey Krasikov  --enable-keyring) secret_keyring="yes"
117054e7aac0SAlexey Krasikov  ;;
117154e7aac0SAlexey Krasikov  --disable-keyring) secret_keyring="no"
117254e7aac0SAlexey Krasikov  ;;
117320cf7b8eSDenis Plotnikov  --enable-gio) gio=yes
117420cf7b8eSDenis Plotnikov  ;;
117520cf7b8eSDenis Plotnikov  --disable-gio) gio=no
117620cf7b8eSDenis Plotnikov  ;;
1177b8e0c493SJoelle van Dyne  --enable-slirp-smbd) slirp_smbd=yes
1178b8e0c493SJoelle van Dyne  ;;
1179b8e0c493SJoelle van Dyne  --disable-slirp-smbd) slirp_smbd=no
1180b8e0c493SJoelle van Dyne  ;;
11813b4da132SPaolo Bonzini  # backwards compatibility options
11823b4da132SPaolo Bonzini  --enable-trace-backend=*) meson_option_parse "--enable-trace-backends=$optarg" "$optarg"
11833b4da132SPaolo Bonzini  ;;
11843b4da132SPaolo Bonzini  --disable-blobs) meson_option_parse --disable-install-blobs ""
11853b4da132SPaolo Bonzini  ;;
11863b4da132SPaolo Bonzini  --enable-tcmalloc) meson_option_parse --enable-malloc=tcmalloc tcmalloc
11873b4da132SPaolo Bonzini  ;;
11883b4da132SPaolo Bonzini  --enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc
11893b4da132SPaolo Bonzini  ;;
11903b4da132SPaolo Bonzini  # everything else has the same name in configure and meson
119161d63097SPaolo Bonzini  --enable-* | --disable-*) meson_option_parse "$opt" "$optarg"
119261d63097SPaolo Bonzini  ;;
11932d2ad6d0SFam Zheng  *)
11942d2ad6d0SFam Zheng      echo "ERROR: unknown option $opt"
11952d2ad6d0SFam Zheng      echo "Try '$0 --help' for more information"
11962d2ad6d0SFam Zheng      exit 1
11977f1559c6Sbalrog  ;;
11987d13299dSbellard  esac
11997d13299dSbellarddone
12007d13299dSbellard
1201d1a14257SAlex Bennée# test for any invalid configuration combinations
1202d1a14257SAlex Bennéeif test "$plugins" = "yes" -a "$tcg" = "disabled"; then
1203d1a14257SAlex Bennée    error_exit "Can't enable plugins on non-TCG builds"
1204d1a14257SAlex Bennéefi
1205d1a14257SAlex Bennée
12067d7dbf9dSDan Streetmancase $git_submodules_action in
12077d7dbf9dSDan Streetman    update|validate)
12087d7dbf9dSDan Streetman        if test ! -e "$source_path/.git"; then
12097d7dbf9dSDan Streetman            echo "ERROR: cannot $git_submodules_action git submodules without .git"
12107d7dbf9dSDan Streetman            exit 1
12117d7dbf9dSDan Streetman        fi
12127d7dbf9dSDan Streetman    ;;
12137d7dbf9dSDan Streetman    ignore)
1214b80fd281SPaolo Bonzini        if ! test -f "$source_path/ui/keycodemapdb/README"
1215b80fd281SPaolo Bonzini        then
1216b80fd281SPaolo Bonzini            echo
1217b80fd281SPaolo Bonzini            echo "ERROR: missing GIT submodules"
1218b80fd281SPaolo Bonzini            echo
1219b80fd281SPaolo Bonzini            if test -e "$source_path/.git"; then
1220b80fd281SPaolo Bonzini                echo "--with-git-submodules=ignore specified but submodules were not"
1221b80fd281SPaolo Bonzini                echo "checked out.  Please initialize and update submodules."
1222b80fd281SPaolo Bonzini            else
1223b80fd281SPaolo Bonzini                echo "This is not a GIT checkout but module content appears to"
1224b80fd281SPaolo Bonzini                echo "be missing. Do not use 'git archive' or GitHub download links"
1225b80fd281SPaolo Bonzini                echo "to acquire QEMU source archives. Non-GIT builds are only"
1226b80fd281SPaolo Bonzini                echo "supported with source archives linked from:"
1227b80fd281SPaolo Bonzini                echo
1228b80fd281SPaolo Bonzini                echo "  https://www.qemu.org/download/#source"
1229b80fd281SPaolo Bonzini                echo
1230b80fd281SPaolo Bonzini                echo "Developers working with GIT can use scripts/archive-source.sh"
1231b80fd281SPaolo Bonzini                echo "if they need to create valid source archives."
1232b80fd281SPaolo Bonzini            fi
1233b80fd281SPaolo Bonzini            echo
1234b80fd281SPaolo Bonzini            exit 1
1235b80fd281SPaolo Bonzini        fi
12367d7dbf9dSDan Streetman    ;;
12377d7dbf9dSDan Streetman    *)
12387d7dbf9dSDan Streetman        echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
12397d7dbf9dSDan Streetman        exit 1
12407d7dbf9dSDan Streetman    ;;
12417d7dbf9dSDan Streetmanesac
12427d7dbf9dSDan Streetman
124322a87800SMarc-André Lureaulibdir="${libdir:-$prefix/lib}"
124422a87800SMarc-André Lureaulibexecdir="${libexecdir:-$prefix/libexec}"
124522a87800SMarc-André Lureauincludedir="${includedir:-$prefix/include}"
124622a87800SMarc-André Lureau
124722a87800SMarc-André Lureauif test "$mingw32" = "yes" ; then
124815588a62SJoshua Watt    bindir="${bindir:-$prefix}"
124922a87800SMarc-André Lureauelse
125015588a62SJoshua Watt    bindir="${bindir:-$prefix/bin}"
125115588a62SJoshua Wattfi
125222a87800SMarc-André Lureaumandir="${mandir:-$prefix/share/man}"
125322a87800SMarc-André Lureaudatadir="${datadir:-$prefix/share}"
1254ca8c0909SMarc-André Lureaudocdir="${docdir:-$prefix/share/doc}"
125522a87800SMarc-André Lureausysconfdir="${sysconfdir:-$prefix/etc}"
125622a87800SMarc-André Lureaulocal_statedir="${local_statedir:-$prefix/var}"
125716bf7a33SPaolo Bonzinifirmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
125816bf7a33SPaolo Bonzinilocaledir="${localedir:-$datadir/locale}"
125922a87800SMarc-André Lureau
126040293e58Sbellardcase "$cpu" in
1261ff66ee53SPaolo Bonzini    ppc) CPU_CFLAGS="-m32" ;;
1262ff66ee53SPaolo Bonzini    ppc64) CPU_CFLAGS="-m64" ;;
1263ff66ee53SPaolo Bonzini    sparc) CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" ;;
1264ff66ee53SPaolo Bonzini    sparc64) CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;;
1265ff66ee53SPaolo Bonzini    s390) CPU_CFLAGS="-m31" ;;
1266ff66ee53SPaolo Bonzini    s390x) CPU_CFLAGS="-m64" ;;
1267ff66ee53SPaolo Bonzini    i386) CPU_CFLAGS="-m32" ;;
1268ff66ee53SPaolo Bonzini    x32) CPU_CFLAGS="-mx32" ;;
1269ff66ee53SPaolo Bonzini
12707ebee43eSRichard Henderson    # ??? Only extremely old AMD cpus do not have cmpxchg16b.
12717ebee43eSRichard Henderson    # If we truly care, we should simply detect this case at
12727ebee43eSRichard Henderson    # runtime and generate the fallback to serial emulation.
1273ff66ee53SPaolo Bonzini    x86_64) CPU_CFLAGS="-m64 -mcx16" ;;
1274ff66ee53SPaolo Bonzini
127530163d89SPeter Maydell    # No special flags required for other host CPUs
12763142255cSblueswir1esac
12773142255cSblueswir1
12789557af9cSAlex Bennéeif eval test -z "\${cross_cc_$cpu}"; then
1279b1aa4de1SAlex Bennée    eval "cross_cc_${cpu}=\$cc"
12802038f8c8SPaolo Bonzini    cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
12819557af9cSAlex Bennéefi
128279f3b12fSPeter Crosthwaite
1283affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly
1284affc88ccSPeter Maydell# support, even if we're using TCI.
1285affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then
1286affc88ccSPeter Maydell  bsd_user="no"
1287affc88ccSPeter Maydell  linux_user="no"
1288affc88ccSPeter Maydellfi
1289affc88ccSPeter Maydell
129060e0df25SPeter Maydelldefault_target_list=""
129143692239SMarkus Armbrusterdeprecated_targets_list=ppc64abi32-linux-user
1292fdb75aefSPaolo Bonzinideprecated_features=""
12936e92f823SPeter Maydellmak_wilds=""
12946e92f823SPeter Maydell
129560e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
1296812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
129760e0df25SPeter Maydellfi
129860e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
1299812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
130060e0df25SPeter Maydellfi
130160e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
1302812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
130360e0df25SPeter Maydellfi
130460e0df25SPeter Maydell
13053a5ae4a9SAlex Bennée# If the user doesn't explicitly specify a deprecated target we will
13063a5ae4a9SAlex Bennée# skip it.
13073a5ae4a9SAlex Bennéeif test -z "$target_list"; then
13083a5ae4a9SAlex Bennée    if test -z "$target_list_exclude"; then
13093a5ae4a9SAlex Bennée        target_list_exclude="$deprecated_targets_list"
13103a5ae4a9SAlex Bennée    else
13113a5ae4a9SAlex Bennée        target_list_exclude="$target_list_exclude,$deprecated_targets_list"
13123a5ae4a9SAlex Bennée    fi
13132d838d9bSAlex Bennéefi
13142d838d9bSAlex Bennée
1315447e133fSAlex Bennéefor config in $mak_wilds; do
1316447e133fSAlex Bennée    target="$(basename "$config" .mak)"
131798db9a06SAlex Bennée    if echo "$target_list_exclude" | grep -vq "$target"; then
1318447e133fSAlex Bennée        default_target_list="${default_target_list} $target"
1319447e133fSAlex Bennée    fi
1320447e133fSAlex Bennéedone
13216e92f823SPeter Maydell
1322af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1323af5db58eSpbrookcat << EOF
1324af5db58eSpbrook
1325af5db58eSpbrookUsage: configure [options]
1326af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1327af5db58eSpbrook
132808fb77edSStefan WeilStandard options:
132908fb77edSStefan Weil  --help                   print this message
133008fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
133108fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
133208fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
13332deca810SAlex Bennée  --target-list=LIST       set target list (default: build all non-deprecated)
133408fb77edSStefan Weil$(echo Available targets: $default_target_list | \
133508fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
13362deca810SAlex Bennée$(echo Deprecated targets: $deprecated_targets_list | \
13372deca810SAlex Bennée  fold -s -w 53 | sed -e 's/^/                           /')
1338447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
133908fb77edSStefan Weil
134008fb77edSStefan WeilAdvanced options (experts only):
13413812c0c4SJoelle van Dyne  --cross-prefix=PREFIX    use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
134208fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
134308fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
134408fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
134508fb77edSStefan Weil                           build time
134608fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
134708fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1348a2866660SPaolo Bonzini  --extra-cflags=CFLAGS    append extra C compiler flags CFLAGS
1349a2866660SPaolo Bonzini  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags CXXFLAGS
135008fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1351d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1352d422b2bcSAlex Bennée  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
135308fb77edSStefan Weil  --make=MAKE              use specified make [$make]
135408fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
13552eb054c2SPeter Maydell  --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1356a5665051SPaolo Bonzini  --meson=MESON            use specified meson [$meson]
135748328880SPaolo Bonzini  --ninja=NINJA            use specified ninja [$ninja]
135808fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1359db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
13607d7dbf9dSDan Streetman  --with-git-submodules=update   update git submodules (default if .git dir exists)
13617d7dbf9dSDan Streetman  --with-git-submodules=validate fail if git submodules are not up to date
13627d7dbf9dSDan Streetman  --with-git-submodules=ignore   do not update or check git submodules (default if no .git dir)
136308fb77edSStefan Weil  --static                 enable static build [$static]
136408fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
136510ff82d1SMarc-André Lureau  --datadir=PATH           install firmware in PATH/$qemu_suffix
1366fe0038beSPaolo Bonzini  --localedir=PATH         install translation in PATH/$qemu_suffix
136710ff82d1SMarc-André Lureau  --docdir=PATH            install documentation in PATH/$qemu_suffix
136808fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
136908fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
1370db1b5f13SThomas Huth  --libexecdir=PATH        install helper binaries in PATH
137110ff82d1SMarc-André Lureau  --sysconfdir=PATH        install config in PATH/$qemu_suffix
137208fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
13733d5eecabSGerd Hoffmann  --firmwarepath=PATH      search PATH for firmware files
137413336606SRobert Foley  --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1375ca8c0909SMarc-André Lureau  --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1376db1b5f13SThomas Huth  --with-pkgversion=VERS   use specified string as sub-version of the package
1377c035c8d6SPaolo Bonzini  --without-default-features default all --enable-* options to "disabled"
1378c035c8d6SPaolo Bonzini  --without-default-devices  do not include any device that is not needed to
1379c035c8d6SPaolo Bonzini                           start the emulator (only use if you are including
1380d1d5e9eeSAlex Bennée                           desired devices in configs/devices/)
1381d1d5e9eeSAlex Bennée  --with-devices-ARCH=NAME override default configs/devices
138208fb77edSStefan Weil  --enable-debug           enable common debug build options
1383247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
13840aebab04SLingfeng Yang  --enable-tsan            enable thread sanitizer
138508fb77edSStefan Weil  --disable-strip          disable stripping binaries
138608fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
138763678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
138816bfbc70SPaolo Bonzini  --audio-drv-list=LIST    set audio drivers to try if -audiodev is not used
138908fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
139008fb77edSStefan Weil  --block-drv-rw-whitelist=L
139108fb77edSStefan Weil                           set block driver read-write whitelist
1392e5f05f8cSKevin Wolf                           (by default affects only QEMU, not tools like qemu-img)
139308fb77edSStefan Weil  --block-drv-ro-whitelist=L
139408fb77edSStefan Weil                           set block driver read-only whitelist
1395e5f05f8cSKevin Wolf                           (by default affects only QEMU, not tools like qemu-img)
1396e5f05f8cSKevin Wolf  --enable-block-drv-whitelist-in-tools
1397e5f05f8cSKevin Wolf                           use block whitelist also in tools instead of only QEMU
139808fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
139908fb77edSStefan Weil                           Default:trace-<pid>
1400c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
140108fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
140233c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
140308fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
1404c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1405c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1406a1c5e949SDaniel P. Berrange  --tls-priority           default TLS protocol/cipher priority string
1407c12d66aaSLin Ma  --enable-gprof           QEMU profiling with gprof
1408c12d66aaSLin Ma  --enable-profiler        profiler support
1409c12d66aaSLin Ma  --enable-debug-stack-usage
1410c12d66aaSLin Ma                           track the maximum stack usage of stacks created by qemu_alloc_stack
141140e8c6f4SAlex Bennée  --enable-plugins
141240e8c6f4SAlex Bennée                           enable plugins via shared library loading
1413afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
1414f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
141561d63097SPaolo BonziniEOF
141661d63097SPaolo Bonzini  meson_options_help
141761d63097SPaolo Bonzinicat << EOF
1418c23f23b9SMichael Tokarev  system          all system emulation targets
1419c23f23b9SMichael Tokarev  user            supported user emulation targets
1420c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1421c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1422c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1423c23f23b9SMichael Tokarev  pie             Position Independent Executables
142421e709aaSMarc-André Lureau  modules         modules support (non-Windows)
1425bd83c861SChristian Ehrhardt  module-upgrades try to load modules from alternate paths for upgrades
1426c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1427c23f23b9SMichael Tokarev  debug-info      debugging information
1428cdad781dSDaniele Buono  lto             Enable Link-Time Optimization.
14291e4f6065SDaniele Buono  safe-stack      SafeStack Stack Smash Protection. Depends on
14301e4f6065SDaniele Buono                  clang/llvm >= 3.7 and requires coroutine backend ucontext.
1431a40161cbSPaolo Bonzini  membarrier      membarrier system call (for Linux 4.14+ or Windows)
143221ab34c9SMarcel Apfelbaum  rdma            Enable RDMA-based migration
143321ab34c9SMarcel Apfelbaum  pvrdma          Enable PVRDMA support
1434299e6f19SPaolo Bonzini  vhost-net       vhost-net kernel acceleration support
1435299e6f19SPaolo Bonzini  vhost-vsock     virtio sockets device support
1436299e6f19SPaolo Bonzini  vhost-scsi      vhost-scsi kernel target support
1437299e6f19SPaolo Bonzini  vhost-crypto    vhost-user-crypto backend support
1438299e6f19SPaolo Bonzini  vhost-kernel    vhost kernel backend support
1439299e6f19SPaolo Bonzini  vhost-user      vhost-user backend support
1440108a6481SCindy Lu  vhost-vdpa      vhost-vdpa kernel backend support
1441ed1701c6SDr. David Alan Gilbert  live-block-migration   Block migration in the main migration stream
1442c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1443c23f23b9SMichael Tokarev  tpm             TPM support
1444c23f23b9SMichael Tokarev  numa            libnuma support
144586583a07SLiam Merwick  avx2            AVX2 optimization support
14466b8cd447SRobert Hoo  avx512f         AVX512F optimization support
1447a6b1d4c0SChanglong Xie  replication     replication support
1448c12d66aaSLin Ma  opengl          opengl support
1449c12d66aaSLin Ma  xfsctl          xfsctl support
1450c12d66aaSLin Ma  qom-cast-debug  cast debugging support
14518de73fa8SCleber Rosa  tools           build qemu-io, qemu-nbd and qemu-img tools
14522f740136SJeff Cody  bochs           bochs image format support
14532f740136SJeff Cody  cloop           cloop image format support
14542f740136SJeff Cody  dmg             dmg image format support
14552f740136SJeff Cody  qcow1           qcow v1 image format support
14562f740136SJeff Cody  vdi             vdi image format support
14572f740136SJeff Cody  vvfat           vvfat image format support
14582f740136SJeff Cody  qed             qed image format support
14592f740136SJeff Cody  parallels       parallels image format support
1460f0d92b56SLongpeng(Mike)  crypto-afalg    Linux AF_ALG crypto backend driver
1461ba59fb77SPaolo Bonzini  debug-mutex     mutex debugging support
1462b767d257SMarek Marczykowski-Górecki  rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
146320cf7b8eSDenis Plotnikov  gio             libgio support
1464b8e0c493SJoelle van Dyne  slirp-smbd      use smbd (at path --smbd=*) in slirp networking
146508fb77edSStefan Weil
146608fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1467af5db58eSpbrookEOF
14682d2ad6d0SFam Zhengexit 0
1469af5db58eSpbrookfi
1470af5db58eSpbrook
14719c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
1472bb768f71SThomas Huthrm -f */config-devices.mak.d
14739c790242SThomas Huth
1474faf44142SDaniel P. Berrangéif test -z "$python"
1475faf44142SDaniel P. Berrangéthen
1476c53eeaf7SStefan Hajnoczi    error_exit "Python not found. Use --python=/path/to/python"
1477c53eeaf7SStefan Hajnoczifi
14788e2c76bdSRoman Bolshakovif ! has "$make"
14798e2c76bdSRoman Bolshakovthen
14808e2c76bdSRoman Bolshakov    error_exit "GNU make ($make) not found"
14818e2c76bdSRoman Bolshakovfi
1482c53eeaf7SStefan Hajnoczi
1483c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit
1484c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value.
14851b11f28dSThomas Huthif ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
14861b11f28dSThomas Huth  error_exit "Cannot use '$python', Python >= 3.6 is required." \
1487c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
1488c53eeaf7SStefan Hajnoczifi
1489c53eeaf7SStefan Hajnoczi
1490755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it
1491406ab2f3SCleber 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)
1492755ee70fSCleber Rosa
1493c53eeaf7SStefan Hajnoczi# Suppress writing compiled files
1494c53eeaf7SStefan Hajnoczipython="$python -B"
1495c53eeaf7SStefan Hajnoczi
14960a01d76fSMarc-André Lureauif test -z "$meson"; then
14976638cae5SPaolo Bonzini    if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.3; then
14980a01d76fSMarc-André Lureau        meson=meson
14997d7dbf9dSDan Streetman    elif test $git_submodules_action != 'ignore' ; then
15000a01d76fSMarc-André Lureau        meson=git
15010a01d76fSMarc-André Lureau    elif test -e "${source_path}/meson/meson.py" ; then
15020a01d76fSMarc-André Lureau        meson=internal
15030a01d76fSMarc-André Lureau    else
15040a01d76fSMarc-André Lureau        if test "$explicit_python" = yes; then
15050a01d76fSMarc-André Lureau            error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
15060a01d76fSMarc-André Lureau        else
1507a5665051SPaolo Bonzini            error_exit "Meson not found.  Use --meson=/path/to/meson"
1508a5665051SPaolo Bonzini        fi
15090a01d76fSMarc-André Lureau    fi
15100a01d76fSMarc-André Lureauelse
15110a01d76fSMarc-André Lureau    # Meson uses its own Python interpreter to invoke other Python scripts,
15120a01d76fSMarc-André Lureau    # but the user wants to use the one they specified with --python.
15130a01d76fSMarc-André Lureau    #
15140a01d76fSMarc-André Lureau    # We do not want to override the distro Python interpreter (and sometimes
15150a01d76fSMarc-André Lureau    # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
15160a01d76fSMarc-André Lureau    # just require --meson=git|internal together with --python.
15170a01d76fSMarc-André Lureau    if test "$explicit_python" = yes; then
15180a01d76fSMarc-André Lureau        case "$meson" in
15190a01d76fSMarc-André Lureau            git | internal) ;;
15200a01d76fSMarc-André Lureau            *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
15210a01d76fSMarc-André Lureau        esac
15220a01d76fSMarc-André Lureau    fi
15230a01d76fSMarc-André Lureaufi
1524a5665051SPaolo Bonzini
15250a01d76fSMarc-André Lureauif test "$meson" = git; then
15260a01d76fSMarc-André Lureau    git_submodules="${git_submodules} meson"
15270a01d76fSMarc-André Lureaufi
15280a01d76fSMarc-André Lureau
15290a01d76fSMarc-André Lureaucase "$meson" in
15300a01d76fSMarc-André Lureau    git | internal)
15310a01d76fSMarc-André Lureau        meson="$python ${source_path}/meson/meson.py"
15320a01d76fSMarc-André Lureau        ;;
153384ec0c24SPaolo Bonzini    *) meson=$(command -v "$meson") ;;
15340a01d76fSMarc-André Lureauesac
15350a01d76fSMarc-André Lureau
153609e93326SPaolo Bonzini# Probe for ninja
153748328880SPaolo Bonzini
153848328880SPaolo Bonziniif test -z "$ninja"; then
153948328880SPaolo Bonzini    for c in ninja ninja-build samu; do
154048328880SPaolo Bonzini        if has $c; then
154148328880SPaolo Bonzini            ninja=$(command -v "$c")
154248328880SPaolo Bonzini            break
154348328880SPaolo Bonzini        fi
154448328880SPaolo Bonzini    done
154509e93326SPaolo Bonzini    if test -z "$ninja"; then
154609e93326SPaolo Bonzini      error_exit "Cannot find Ninja"
154709e93326SPaolo Bonzini    fi
154848328880SPaolo Bonzinifi
1549a5665051SPaolo Bonzini
15509aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
15519aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
15529aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
15539aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
15549aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
15559aae6e54SDaniel Henrique Barbozaif compile_object ; then
15569aae6e54SDaniel Henrique Barboza  : C compiler works ok
15579aae6e54SDaniel Henrique Barbozaelse
15589aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
15599aae6e54SDaniel Henrique Barbozafi
15609aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
15619aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
15629aae6e54SDaniel Henrique Barbozafi
15639aae6e54SDaniel Henrique Barboza
15649c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
15659c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
15669c83ffd8SPeter Maydellif test -z "$werror" ; then
15677d7dbf9dSDan Streetman    if test "$git_submodules_action" != "ignore" && \
1568e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
15699c83ffd8SPeter Maydell        werror="yes"
15709c83ffd8SPeter Maydell    else
15719c83ffd8SPeter Maydell        werror="no"
15729c83ffd8SPeter Maydell    fi
15739c83ffd8SPeter Maydellfi
15749c83ffd8SPeter Maydell
1575975ff037SPaolo Bonziniif test "$targetos" = "bogus"; then
1576fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
1577fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
1578fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
1579fb59dabdSPeter Maydell    # host OS we should stop now.
1580951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1581fb59dabdSPeter Maydellfi
1582fb59dabdSPeter Maydell
1583efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
1584efc6c070SThomas Huthcat > $TMPC << EOF
1585efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
1586efc6c070SThomas Huth# ifdef __apple_build_version__
15872a85a08cSDaniel P. Berrangé#  if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
15882a85a08cSDaniel P. Berrangé#   error You need at least XCode Clang v10.0 to compile QEMU
1589efc6c070SThomas Huth#  endif
1590efc6c070SThomas Huth# else
15912a85a08cSDaniel P. Berrangé#  if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
15922a85a08cSDaniel P. Berrangé#   error You need at least Clang v6.0 to compile QEMU
1593efc6c070SThomas Huth#  endif
1594efc6c070SThomas Huth# endif
1595efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
15963830df5fSnia# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
15973830df5fSnia#  error You need at least GCC v7.4.0 to compile QEMU
1598efc6c070SThomas Huth# endif
1599efc6c070SThomas Huth#else
1600efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
1601efc6c070SThomas Huth#endif
1602efc6c070SThomas Huthint main (void) { return 0; }
1603efc6c070SThomas HuthEOF
1604efc6c070SThomas Huthif ! compile_prog "" "" ; then
16053830df5fSnia    error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)"
1606efc6c070SThomas Huthfi
1607efc6c070SThomas Huth
160800849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately.
160900849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second.
161000849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all
161100849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would
161200849b92SRichard Henderson# just silently disable some features, so it's too error prone.
161300849b92SRichard Henderson
161400849b92SRichard Hendersonwarn_flags=
161500849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration
161600849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition
161700849b92SRichard Hendersonadd_to warn_flags -Wtype-limits
161800849b92SRichard Hendersonadd_to warn_flags -Wformat-security
161900849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k
162000849b92SRichard Hendersonadd_to warn_flags -Winit-self
162100849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers
162200849b92SRichard Hendersonadd_to warn_flags -Wempty-body
162300849b92SRichard Hendersonadd_to warn_flags -Wnested-externs
162400849b92SRichard Hendersonadd_to warn_flags -Wendif-labels
162500849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined
16260a2ebce9SThomas Huthadd_to warn_flags -Wimplicit-fallthrough=2
162700849b92SRichard Henderson
162800849b92SRichard Hendersonnowarn_flags=
162900849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides
163000849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs
163100849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value
163200849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int
163300849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition
1634aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare
1635bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi
163600849b92SRichard Henderson
163700849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags"
163893b25869SJohn Snow
163993b25869SJohn Snowcc_has_warning_flag() {
164093b25869SJohn Snow    write_c_skeleton;
164193b25869SJohn Snow
1642a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
1643a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
1644a1d29d6cSPeter Maydell    # warning options).
164593b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
164693b25869SJohn Snow    compile_prog "-Werror $optflag" ""
164793b25869SJohn Snow}
164893b25869SJohn Snow
164993b25869SJohn Snowfor flag in $gcc_flags; do
165093b25869SJohn Snow    if cc_has_warning_flag $flag ; then
16518d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
16528d05095cSPaolo Bonzini    fi
16538d05095cSPaolo Bonzinidone
16548d05095cSPaolo Bonzini
165563678e17SSteven Noonanif test "$stack_protector" != "no"; then
1656fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
1657fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
1658fccd35a0SRodrigo Rebello{
1659fccd35a0SRodrigo Rebello    char arr[64], *p = arr, *c = argv[0];
1660fccd35a0SRodrigo Rebello    while (*c) {
1661fccd35a0SRodrigo Rebello        *p++ = *c++;
1662fccd35a0SRodrigo Rebello    }
1663fccd35a0SRodrigo Rebello    return 0;
1664fccd35a0SRodrigo Rebello}
1665fccd35a0SRodrigo RebelloEOF
166663678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
16673b463a3fSMiroslav Rezanina  sp_on=0
166863678e17SSteven Noonan  for flag in $gcc_flags; do
1669590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
1670590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
1671086d5f75SPaolo Bonzini    if compile_object "-Werror $flag" &&
1672590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
167363678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1674db5adeaaSPaolo Bonzini      QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
16753b463a3fSMiroslav Rezanina      sp_on=1
167663678e17SSteven Noonan      break
167763678e17SSteven Noonan    fi
167863678e17SSteven Noonan  done
16793b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
16803b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
16813b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
16823b463a3fSMiroslav Rezanina    fi
16833b463a3fSMiroslav Rezanina  fi
168437746c5eSMarc-André Lureaufi
168537746c5eSMarc-André Lureau
168620bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for
168720bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}.
168820bc94a2SPaolo Bonzinicat > $TMPC << EOF
168920bc94a2SPaolo Bonzinistruct {
169020bc94a2SPaolo Bonzini  int a[2];
169120bc94a2SPaolo Bonzini} x = {0};
169220bc94a2SPaolo BonziniEOF
169320bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then
169420bc94a2SPaolo Bonzini  :
169520bc94a2SPaolo Bonzinielse
169620bc94a2SPaolo Bonzini  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
169720bc94a2SPaolo Bonzinifi
169820bc94a2SPaolo Bonzini
169921e709aaSMarc-André Lureau# Our module code doesn't support Windows
170021e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then
170121e709aaSMarc-André Lureau  error_exit "Modules are not available for Windows"
170221e709aaSMarc-André Lureaufi
170321e709aaSMarc-André Lureau
1704bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled
1705bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
1706bd83c861SChristian Ehrhardt  error_exit "Can't enable module-upgrades as Modules are not enabled"
1707bd83c861SChristian Ehrhardtfi
1708bd83c861SChristian Ehrhardt
17095f2453acSAlex Bennée# Static linking is not possible with plugins, modules or PIE
171040d6444eSAvi Kivityif test "$static" = "yes" ; then
1711aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
1712aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
1713aa0d1f44SPaolo Bonzini  fi
17145f2453acSAlex Bennée  if test "$plugins" = "yes"; then
17155f2453acSAlex Bennée    error_exit "static and plugins are mutually incompatible"
1716ba4dd2aaSAlex Bennée  else
1717ba4dd2aaSAlex Bennée    plugins="no"
17185f2453acSAlex Bennée  fi
171940d6444eSAvi Kivityfi
172040d6444eSAvi Kivity
172140d6444eSAvi Kivitycat > $TMPC << EOF
172221d4a791SAvi Kivity
172321d4a791SAvi Kivity#ifdef __linux__
172421d4a791SAvi Kivity#  define THREAD __thread
172521d4a791SAvi Kivity#else
172621d4a791SAvi Kivity#  define THREAD
172721d4a791SAvi Kivity#endif
172821d4a791SAvi Kivitystatic THREAD int tls_var;
172921d4a791SAvi Kivityint main(void) { return tls_var; }
173040d6444eSAvi KivityEOF
1731b2634124SRichard Henderson
1732ffd205efSJessica Clarke# Check we support -fno-pie and -no-pie first; we will need the former for
1733ffd205efSJessica Clarke# building ROMs, and both for everything if --disable-pie is passed.
1734412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then
1735412aeacdSAlex Bennée  CFLAGS_NOPIE="-fno-pie"
1736ffd205efSJessica Clarke  LDFLAGS_NOPIE="-no-pie"
1737412aeacdSAlex Bennéefi
1738412aeacdSAlex Bennée
173912781462SRichard Hendersonif test "$static" = "yes"; then
1740eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
17415770e8afSPaolo Bonzini    CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
174212781462SRichard Henderson    QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
174312781462SRichard Henderson    pie="yes"
174412781462SRichard Henderson  elif test "$pie" = "yes"; then
174512781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
174612781462SRichard Henderson  else
174712781462SRichard Henderson    QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
174812781462SRichard Henderson    pie="no"
174912781462SRichard Henderson  fi
175012781462SRichard Hendersonelif test "$pie" = "no"; then
17515770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
1752ffd205efSJessica Clarke  CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
1753eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
17545770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
17555770e8afSPaolo Bonzini  CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
175640d6444eSAvi Kivity  pie="yes"
17572c674109SRichard Hendersonelif test "$pie" = "yes"; then
175876ad07a4SPeter Maydell  error_exit "PIE not available due to missing toolchain support"
175940d6444eSAvi Kivityelse
176040d6444eSAvi Kivity  echo "Disabling PIE due to missing toolchain support"
176140d6444eSAvi Kivity  pie="no"
176240d6444eSAvi Kivityfi
176340d6444eSAvi Kivity
1764e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
1765e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too.
1766e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1767e6cbd751SRichard Henderson  QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
1768e6cbd751SRichard Hendersonfi
1769e6cbd751SRichard Henderson
177009dada40SPaolo Bonzini##########################################
177109dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
177209dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
177309dada40SPaolo Bonzini# specification is necessary
177409dada40SPaolo Bonzini
177509dada40SPaolo Bonziniif test "$cpu" = "i386"; then
177609dada40SPaolo Bonzini  cat > $TMPC << EOF
177709dada40SPaolo Bonzinistatic int sfaa(int *ptr)
177809dada40SPaolo Bonzini{
177909dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
178009dada40SPaolo Bonzini}
178109dada40SPaolo Bonzini
178209dada40SPaolo Bonziniint main(void)
178309dada40SPaolo Bonzini{
178409dada40SPaolo Bonzini  int val = 42;
17851405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
178609dada40SPaolo Bonzini  sfaa(&val);
178709dada40SPaolo Bonzini  return val;
178809dada40SPaolo Bonzini}
178909dada40SPaolo BonziniEOF
179009dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
179109dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
179209dada40SPaolo Bonzini  fi
179309dada40SPaolo Bonzinifi
179409dada40SPaolo Bonzini
179556267b62SPhilippe Mathieu-Daudéif test "$tcg" = "enabled"; then
179656267b62SPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
179756267b62SPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
179856267b62SPhilippe Mathieu-Daudéfi
179956267b62SPhilippe Mathieu-Daudé
1800afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
1801fdb75aefSPaolo Bonzini    default_targets=yes
1802d880a3baSPaolo Bonzini    for target in $default_target_list; do
1803d880a3baSPaolo Bonzini        target_list="$target_list $target"
1804d880a3baSPaolo Bonzini    done
1805d880a3baSPaolo Bonzini    target_list="${target_list# }"
1806121afa9eSAnthony Liguorielse
1807fdb75aefSPaolo Bonzini    default_targets=no
180889138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1809d880a3baSPaolo Bonzini    for target in $target_list; do
181025b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
181125b48338SPeter Maydell        # friendly error message than if we let it fall through.
181225b48338SPeter Maydell        case " $default_target_list " in
181325b48338SPeter Maydell            *" $target "*)
181425b48338SPeter Maydell                ;;
181525b48338SPeter Maydell            *)
181625b48338SPeter Maydell                error_exit "Unknown target name '$target'"
181725b48338SPeter Maydell                ;;
181825b48338SPeter Maydell        esac
181925b48338SPeter Maydell    done
1820d880a3baSPaolo Bonzinifi
182125b48338SPeter Maydell
1822fdb75aefSPaolo Bonzinifor target in $target_list; do
1823fdb75aefSPaolo Bonzini    # if a deprecated target is enabled we note it here
1824fdb75aefSPaolo Bonzini    if echo "$deprecated_targets_list" | grep -q "$target"; then
1825fdb75aefSPaolo Bonzini        add_to deprecated_features $target
1826fdb75aefSPaolo Bonzini    fi
1827fdb75aefSPaolo Bonzinidone
1828fdb75aefSPaolo Bonzini
1829f55fe278SPaolo Bonzini# see if system emulation was really requested
1830f55fe278SPaolo Bonzinicase " $target_list " in
1831f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
1832f55fe278SPaolo Bonzini  ;;
1833f55fe278SPaolo Bonzini  *) softmmu=no
1834f55fe278SPaolo Bonzini  ;;
1835f55fe278SPaolo Bonziniesac
18365327cf48Sbellard
1837249247c9SJuan Quintelafeature_not_found() {
1838249247c9SJuan Quintela  feature=$1
183921684af0SStewart Smith  remedy=$2
1840249247c9SJuan Quintela
184176ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
184221684af0SStewart Smith      "configure was not able to find it." \
184321684af0SStewart Smith      "$remedy"
1844249247c9SJuan Quintela}
1845249247c9SJuan Quintela
18467d13299dSbellard# ---
18477d13299dSbellard# big/little endian test
18487d13299dSbellardcat > $TMPC << EOF
1849659eb157SThomas Huth#include <stdio.h>
185061cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
185161cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1852659eb157SThomas Huthint main(int argc, char *argv[])
1853659eb157SThomas Huth{
1854659eb157SThomas Huth    return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
18557d13299dSbellard}
18567d13299dSbellardEOF
18577d13299dSbellard
1858659eb157SThomas Huthif compile_prog ; then
1859659eb157SThomas Huth    if strings -a $TMPE | grep -q BiGeNdIaN ; then
186061cc919fSMike Frysinger        bigendian="yes"
1861659eb157SThomas Huth    elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
186261cc919fSMike Frysinger        bigendian="no"
18637d13299dSbellard    else
18647d13299dSbellard        echo big/little test failed
1865659eb157SThomas Huth        exit 1
18667d13299dSbellard    fi
18677d13299dSbellardelse
186861cc919fSMike Frysinger    echo big/little test failed
1869659eb157SThomas Huth    exit 1
18707d13299dSbellardfi
18717d13299dSbellard
1872b0a47e79SJuan Quintela##########################################
1873e10ee3f5SPhilippe Mathieu-Daudé# system tools
1874e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then
1875e10ee3f5SPhilippe Mathieu-Daudé    if test "$softmmu" = "no"; then
1876e10ee3f5SPhilippe Mathieu-Daudé        want_tools=no
1877e10ee3f5SPhilippe Mathieu-Daudé    else
1878e10ee3f5SPhilippe Mathieu-Daudé        want_tools=yes
1879e10ee3f5SPhilippe Mathieu-Daudé    fi
1880e10ee3f5SPhilippe Mathieu-Daudéfi
1881e10ee3f5SPhilippe Mathieu-Daudé
1882299e6f19SPaolo Bonzini#########################################
1883299e6f19SPaolo Bonzini# vhost interdependencies and host support
1884299e6f19SPaolo Bonzini
1885299e6f19SPaolo Bonzini# vhost backends
1886d88618f7SStefan Hajnocziif test "$vhost_user" = "yes" && test "$linux" != "yes"; then
1887d88618f7SStefan Hajnoczi  error_exit "vhost-user is only available on Linux"
1888299e6f19SPaolo Bonzinifi
1889108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux
1890108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
1891108a6481SCindy Lu  error_exit "vhost-vdpa is only available on Linux"
1892108a6481SCindy Lufi
1893299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux
1894299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
1895299e6f19SPaolo Bonzini  error_exit "vhost-kernel is only available on Linux"
1896299e6f19SPaolo Bonzinifi
1897299e6f19SPaolo Bonzini
1898299e6f19SPaolo Bonzini# vhost-kernel devices
1899299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
1900299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
1901299e6f19SPaolo Bonzini  error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
1902299e6f19SPaolo Bonzinifi
1903299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
1904299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
1905299e6f19SPaolo Bonzini  error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
1906299e6f19SPaolo Bonzinifi
1907299e6f19SPaolo Bonzini
1908299e6f19SPaolo Bonzini# vhost-user backends
1909299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user
1910299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
1911299e6f19SPaolo Bonzini  error_exit "--enable-vhost-net-user requires --enable-vhost-user"
1912299e6f19SPaolo Bonzinifi
1913299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user
1914299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
1915299e6f19SPaolo Bonzini  error_exit "--enable-vhost-crypto requires --enable-vhost-user"
1916299e6f19SPaolo Bonzinifi
191798fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
191898fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
191998fc1adaSDr. David Alan Gilbert  error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
192098fc1adaSDr. David Alan Gilbertfi
1921108a6481SCindy Lu#vhost-vdpa backends
1922108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
1923108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
1924108a6481SCindy Lu  error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
1925108a6481SCindy Lufi
1926299e6f19SPaolo Bonzini
192740bc0ca9SLaurent Vivier# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
1928299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then
1929299e6f19SPaolo Bonzini  test "$vhost_net_user" = "yes" && vhost_net=yes
193040bc0ca9SLaurent Vivier  test "$vhost_net_vdpa" = "yes" && vhost_net=yes
1931299e6f19SPaolo Bonzini  test "$vhost_kernel" = "yes" && vhost_net=yes
1932299e6f19SPaolo Bonzinifi
1933299e6f19SPaolo Bonzini
1934015a33bdSGonglei##########################################
1935779ab5e3SStefan Weil# pkg-config probe
1936779ab5e3SStefan Weil
1937779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
193876ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
1939779ab5e3SStefan Weilfi
1940779ab5e3SStefan Weil
1941779ab5e3SStefan Weil##########################################
1942e37630caSaliguori# xen probe
1943e37630caSaliguori
19441badb709SPaolo Bonziniif test "$xen" != "disabled" ; then
1945c1cdd9d5SJuergen Gross  # Check whether Xen library path is specified via --extra-ldflags to avoid
1946c1cdd9d5SJuergen Gross  # overriding this setting with pkg-config output. If not, try pkg-config
1947c1cdd9d5SJuergen Gross  # to obtain all needed flags.
1948c1cdd9d5SJuergen Gross
1949c1cdd9d5SJuergen Gross  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
1950c1cdd9d5SJuergen Gross     $pkg_config --exists xencontrol ; then
1951c1cdd9d5SJuergen Gross    xen_ctrl_version="$(printf '%d%02d%02d' \
1952c1cdd9d5SJuergen Gross      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
19531badb709SPaolo Bonzini    xen=enabled
19545b6a8f43SMichael Tokarev    xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
1955c1cdd9d5SJuergen Gross    xen_pc="$xen_pc xenevtchn xendevicemodel"
195658ea9a7aSAnthony PERARD    if $pkg_config --exists xentoolcore; then
195758ea9a7aSAnthony PERARD      xen_pc="$xen_pc xentoolcore"
195858ea9a7aSAnthony PERARD    fi
1959582ea95fSMarc-André Lureau    xen_cflags="$($pkg_config --cflags $xen_pc)"
1960582ea95fSMarc-André Lureau    xen_libs="$($pkg_config --libs $xen_pc)"
1961c1cdd9d5SJuergen Gross  else
1962c1cdd9d5SJuergen Gross
19635b6a8f43SMichael Tokarev    xen_libs="-lxenstore -lxenctrl"
1964d9506cabSAnthony PERARD    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1965d5b93ddfSAnthony PERARD
196650ced5b3SStefan Weil    # First we test whether Xen headers and libraries are available.
196750ced5b3SStefan Weil    # If no, we are done and there is no Xen support.
196850ced5b3SStefan Weil    # If yes, more tests are run to detect the Xen version.
196950ced5b3SStefan Weil
197050ced5b3SStefan Weil    # Xen (any)
197150ced5b3SStefan Weil    cat > $TMPC <<EOF
197250ced5b3SStefan Weil#include <xenctrl.h>
197350ced5b3SStefan Weilint main(void) {
197450ced5b3SStefan Weil  return 0;
197550ced5b3SStefan Weil}
197650ced5b3SStefan WeilEOF
197750ced5b3SStefan Weil    if ! compile_prog "" "$xen_libs" ; then
197850ced5b3SStefan Weil      # Xen not found
19791badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
198021684af0SStewart Smith        feature_not_found "xen" "Install xen devel"
198150ced5b3SStefan Weil      fi
19821badb709SPaolo Bonzini      xen=disabled
198350ced5b3SStefan Weil
1984d5b93ddfSAnthony PERARD    # Xen unstable
198569deef08SPeter Maydell    elif
198669deef08SPeter Maydell        cat > $TMPC <<EOF &&
19872cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API
19882cbf8903SRoss Lagerwall#define __XEN_TOOLS__
19892cbf8903SRoss Lagerwall#include <xendevicemodel.h>
1990d3c49ebbSPaul Durrant#include <xenforeignmemory.h>
19912cbf8903SRoss Lagerwallint main(void) {
19922cbf8903SRoss Lagerwall  xendevicemodel_handle *xd;
1993d3c49ebbSPaul Durrant  xenforeignmemory_handle *xfmem;
19942cbf8903SRoss Lagerwall
19952cbf8903SRoss Lagerwall  xd = xendevicemodel_open(0, 0);
19962cbf8903SRoss Lagerwall  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
19972cbf8903SRoss Lagerwall
1998d3c49ebbSPaul Durrant  xfmem = xenforeignmemory_open(0, 0);
1999d3c49ebbSPaul Durrant  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2000d3c49ebbSPaul Durrant
20012cbf8903SRoss Lagerwall  return 0;
20022cbf8903SRoss Lagerwall}
20032cbf8903SRoss LagerwallEOF
20042cbf8903SRoss Lagerwall        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
20052cbf8903SRoss Lagerwall      then
20062cbf8903SRoss Lagerwall      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
20072cbf8903SRoss Lagerwall      xen_ctrl_version=41100
20081badb709SPaolo Bonzini      xen=enabled
20092cbf8903SRoss Lagerwall    elif
20102cbf8903SRoss Lagerwall        cat > $TMPC <<EOF &&
20115ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API
20125ba3d756SIgor Druzhinin#include <xenforeignmemory.h>
201358ea9a7aSAnthony PERARD#include <xentoolcore.h>
20145ba3d756SIgor Druzhininint main(void) {
20155ba3d756SIgor Druzhinin  xenforeignmemory_handle *xfmem;
20165ba3d756SIgor Druzhinin
20175ba3d756SIgor Druzhinin  xfmem = xenforeignmemory_open(0, 0);
20185ba3d756SIgor Druzhinin  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
201958ea9a7aSAnthony PERARD  xentoolcore_restrict_all(0);
20205ba3d756SIgor Druzhinin
20215ba3d756SIgor Druzhinin  return 0;
20225ba3d756SIgor Druzhinin}
20235ba3d756SIgor DruzhininEOF
202458ea9a7aSAnthony PERARD        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
20255ba3d756SIgor Druzhinin      then
202658ea9a7aSAnthony PERARD      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
20275ba3d756SIgor Druzhinin      xen_ctrl_version=41000
20281badb709SPaolo Bonzini      xen=enabled
20295ba3d756SIgor Druzhinin    elif
20305ba3d756SIgor Druzhinin        cat > $TMPC <<EOF &&
2031da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API
2032da8090ccSPaul Durrant#define __XEN_TOOLS__
2033da8090ccSPaul Durrant#include <xendevicemodel.h>
2034da8090ccSPaul Durrantint main(void) {
2035da8090ccSPaul Durrant  xendevicemodel_handle *xd;
2036da8090ccSPaul Durrant
2037da8090ccSPaul Durrant  xd = xendevicemodel_open(0, 0);
2038da8090ccSPaul Durrant  xendevicemodel_close(xd);
2039da8090ccSPaul Durrant
2040da8090ccSPaul Durrant  return 0;
2041da8090ccSPaul Durrant}
2042da8090ccSPaul DurrantEOF
2043da8090ccSPaul Durrant        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2044da8090ccSPaul Durrant      then
2045da8090ccSPaul Durrant      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2046f1167ee6SJuergen Gross      xen_ctrl_version=40900
20471badb709SPaolo Bonzini      xen=enabled
2048da8090ccSPaul Durrant    elif
2049da8090ccSPaul Durrant        cat > $TMPC <<EOF &&
20505eeb39c2SIan Campbell/*
20515eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat
20525eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given.
2053b6eb9b45SPaulina Szubarczyk *
2054b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and
2055b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented.
2056b6eb9b45SPaulina Szubarczyk */
2057b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API
2058b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API
2059b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2060b6eb9b45SPaulina Szubarczyk#include <xenctrl.h>
2061b6eb9b45SPaulina Szubarczyk#include <xenstore.h>
2062b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h>
2063b6eb9b45SPaulina Szubarczyk#include <xengnttab.h>
2064b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h>
2065b6eb9b45SPaulina Szubarczyk#include <stdint.h>
2066b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h>
2067b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS)
2068b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined
2069b6eb9b45SPaulina Szubarczyk#endif
2070b6eb9b45SPaulina Szubarczykint main(void) {
2071b6eb9b45SPaulina Szubarczyk  xc_interface *xc = NULL;
2072b6eb9b45SPaulina Szubarczyk  xenforeignmemory_handle *xfmem;
2073b6eb9b45SPaulina Szubarczyk  xenevtchn_handle *xe;
2074b6eb9b45SPaulina Szubarczyk  xengnttab_handle *xg;
2075b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy_segment_t* seg = NULL;
2076b6eb9b45SPaulina Szubarczyk
2077b6eb9b45SPaulina Szubarczyk  xs_daemon_open();
2078b6eb9b45SPaulina Szubarczyk
2079b6eb9b45SPaulina Szubarczyk  xc = xc_interface_open(0, 0, 0);
2080b6eb9b45SPaulina Szubarczyk  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2081b6eb9b45SPaulina Szubarczyk  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2082b6eb9b45SPaulina Szubarczyk  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2083b6eb9b45SPaulina Szubarczyk  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2084b6eb9b45SPaulina Szubarczyk
2085b6eb9b45SPaulina Szubarczyk  xfmem = xenforeignmemory_open(0, 0);
2086b6eb9b45SPaulina Szubarczyk  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2087b6eb9b45SPaulina Szubarczyk
2088b6eb9b45SPaulina Szubarczyk  xe = xenevtchn_open(0, 0);
2089b6eb9b45SPaulina Szubarczyk  xenevtchn_fd(xe);
2090b6eb9b45SPaulina Szubarczyk
2091b6eb9b45SPaulina Szubarczyk  xg = xengnttab_open(0, 0);
2092b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy(xg, 0, seg);
2093b6eb9b45SPaulina Szubarczyk
2094b6eb9b45SPaulina Szubarczyk  return 0;
2095b6eb9b45SPaulina Szubarczyk}
2096b6eb9b45SPaulina SzubarczykEOF
2097b6eb9b45SPaulina Szubarczyk        compile_prog "" "$xen_libs $xen_stable_libs"
2098b6eb9b45SPaulina Szubarczyk      then
2099f1167ee6SJuergen Gross      xen_ctrl_version=40800
21001badb709SPaolo Bonzini      xen=enabled
2101b6eb9b45SPaulina Szubarczyk    elif
2102b6eb9b45SPaulina Szubarczyk        cat > $TMPC <<EOF &&
2103b6eb9b45SPaulina Szubarczyk/*
2104b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat
2105b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given.
21065eeb39c2SIan Campbell */
21075eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API
21085eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API
21095eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API
21105eeb39c2SIan Campbell#include <xenctrl.h>
21115eeb39c2SIan Campbell#include <xenstore.h>
21125eeb39c2SIan Campbell#include <xenevtchn.h>
21135eeb39c2SIan Campbell#include <xengnttab.h>
21145eeb39c2SIan Campbell#include <xenforeignmemory.h>
21155eeb39c2SIan Campbell#include <stdint.h>
21165eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h>
21175eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS)
21185eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined
21195eeb39c2SIan Campbell#endif
21205eeb39c2SIan Campbellint main(void) {
21215eeb39c2SIan Campbell  xc_interface *xc = NULL;
21225eeb39c2SIan Campbell  xenforeignmemory_handle *xfmem;
21235eeb39c2SIan Campbell  xenevtchn_handle *xe;
21245eeb39c2SIan Campbell  xengnttab_handle *xg;
21255eeb39c2SIan Campbell
21265eeb39c2SIan Campbell  xs_daemon_open();
21275eeb39c2SIan Campbell
21285eeb39c2SIan Campbell  xc = xc_interface_open(0, 0, 0);
21295eeb39c2SIan Campbell  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
21305eeb39c2SIan Campbell  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
21315eeb39c2SIan Campbell  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
21325eeb39c2SIan Campbell  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
21335eeb39c2SIan Campbell
21345eeb39c2SIan Campbell  xfmem = xenforeignmemory_open(0, 0);
21355eeb39c2SIan Campbell  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
21365eeb39c2SIan Campbell
21375eeb39c2SIan Campbell  xe = xenevtchn_open(0, 0);
21385eeb39c2SIan Campbell  xenevtchn_fd(xe);
21395eeb39c2SIan Campbell
21405eeb39c2SIan Campbell  xg = xengnttab_open(0, 0);
21415eeb39c2SIan Campbell  xengnttab_map_grant_ref(xg, 0, 0, 0);
21425eeb39c2SIan Campbell
21435eeb39c2SIan Campbell  return 0;
21445eeb39c2SIan Campbell}
21455eeb39c2SIan CampbellEOF
21465eeb39c2SIan Campbell        compile_prog "" "$xen_libs $xen_stable_libs"
21475eeb39c2SIan Campbell      then
2148f1167ee6SJuergen Gross      xen_ctrl_version=40701
21491badb709SPaolo Bonzini      xen=enabled
2150cdadde39SRoger Pau Monne
2151cdadde39SRoger Pau Monne    # Xen 4.6
2152cdadde39SRoger Pau Monne    elif
2153cdadde39SRoger Pau Monne        cat > $TMPC <<EOF &&
2154cdadde39SRoger Pau Monne#include <xenctrl.h>
2155e108a3c1SAnthony PERARD#include <xenstore.h>
2156d5b93ddfSAnthony PERARD#include <stdint.h>
2157d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
2158d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
2159d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
2160d5b93ddfSAnthony PERARD#endif
2161d5b93ddfSAnthony PERARDint main(void) {
2162d5b93ddfSAnthony PERARD  xc_interface *xc;
2163d5b93ddfSAnthony PERARD  xs_daemon_open();
2164d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
2165d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2166d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
2167b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
21688688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2169d8b441a3SJan Beulich  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
217020a544c7SKonrad Rzeszutek Wilk  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2171d8b441a3SJan Beulich  return 0;
2172d8b441a3SJan Beulich}
2173d8b441a3SJan BeulichEOF
2174d8b441a3SJan Beulich        compile_prog "" "$xen_libs"
2175d8b441a3SJan Beulich      then
2176f1167ee6SJuergen Gross      xen_ctrl_version=40600
21771badb709SPaolo Bonzini      xen=enabled
2178d8b441a3SJan Beulich
2179d8b441a3SJan Beulich    # Xen 4.5
2180d8b441a3SJan Beulich    elif
2181d8b441a3SJan Beulich        cat > $TMPC <<EOF &&
2182d8b441a3SJan Beulich#include <xenctrl.h>
2183d8b441a3SJan Beulich#include <xenstore.h>
2184d8b441a3SJan Beulich#include <stdint.h>
2185d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h>
2186d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS)
2187d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined
2188d8b441a3SJan Beulich#endif
2189d8b441a3SJan Beulichint main(void) {
2190d8b441a3SJan Beulich  xc_interface *xc;
2191d8b441a3SJan Beulich  xs_daemon_open();
2192d8b441a3SJan Beulich  xc = xc_interface_open(0, 0, 0);
2193d8b441a3SJan Beulich  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2194d8b441a3SJan Beulich  xc_gnttab_open(NULL, 0);
2195d8b441a3SJan Beulich  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2196d8b441a3SJan Beulich  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
21973996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
21983996e85cSPaul Durrant  return 0;
21993996e85cSPaul Durrant}
22003996e85cSPaul DurrantEOF
22013996e85cSPaul Durrant        compile_prog "" "$xen_libs"
22023996e85cSPaul Durrant      then
2203f1167ee6SJuergen Gross      xen_ctrl_version=40500
22041badb709SPaolo Bonzini      xen=enabled
22053996e85cSPaul Durrant
22063996e85cSPaul Durrant    elif
22073996e85cSPaul Durrant        cat > $TMPC <<EOF &&
22083996e85cSPaul Durrant#include <xenctrl.h>
22093996e85cSPaul Durrant#include <xenstore.h>
22103996e85cSPaul Durrant#include <stdint.h>
22113996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
22123996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
22133996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
22143996e85cSPaul Durrant#endif
22153996e85cSPaul Durrantint main(void) {
22163996e85cSPaul Durrant  xc_interface *xc;
22173996e85cSPaul Durrant  xs_daemon_open();
22183996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
22193996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
22203996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
22213996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
22223996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
22238688e065SStefano Stabellini  return 0;
22248688e065SStefano Stabellini}
22258688e065SStefano StabelliniEOF
22268688e065SStefano Stabellini        compile_prog "" "$xen_libs"
222769deef08SPeter Maydell      then
2228f1167ee6SJuergen Gross      xen_ctrl_version=40200
22291badb709SPaolo Bonzini      xen=enabled
22308688e065SStefano Stabellini
2231e37630caSaliguori    else
22321badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
2233edfb07edSIan Campbell        feature_not_found "xen (unsupported version)" \
2234edfb07edSIan Campbell                          "Install a supported xen (xen 4.2 or newer)"
2235fc321b4bSJuan Quintela      fi
22361badb709SPaolo Bonzini      xen=disabled
2237e37630caSaliguori    fi
2238d5b93ddfSAnthony PERARD
22391badb709SPaolo Bonzini    if test "$xen" = enabled; then
2240f1167ee6SJuergen Gross      if test $xen_ctrl_version -ge 40701  ; then
2241582ea95fSMarc-André Lureau        xen_libs="$xen_libs $xen_stable_libs "
22425eeb39c2SIan Campbell      fi
2243d5b93ddfSAnthony PERARD    fi
2244e37630caSaliguori  fi
2245c1cdd9d5SJuergen Grossfi
2246e37630caSaliguori
2247d661d9a4SJustin Terry (VM)##########################################
22482da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
22492da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
22502da776dbSMichael R. Hines  cat > $TMPC <<EOF
22512da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
22522da776dbSMichael R. Hinesint main(void) { return 0; }
22532da776dbSMichael R. HinesEOF
2254ef6d4ccdSYuval Shaia  rdma_libs="-lrdmacm -libverbs -libumad"
22552da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
22562da776dbSMichael R. Hines    rdma="yes"
22572da776dbSMichael R. Hines  else
22582da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
22592da776dbSMichael R. Hines        error_exit \
2260ef6d4ccdSYuval Shaia            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
22612da776dbSMichael R. Hines            " Your options:" \
2262ef6d4ccdSYuval Shaia            "  (1) Fast: Install infiniband packages (devel) from your distro." \
22632da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
22642da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
22652da776dbSMichael R. Hines    fi
22662da776dbSMichael R. Hines    rdma="no"
22672da776dbSMichael R. Hines  fi
22682da776dbSMichael R. Hinesfi
22692da776dbSMichael R. Hines
227021ab34c9SMarcel Apfelbaum##########################################
227121ab34c9SMarcel Apfelbaum# PVRDMA detection
227221ab34c9SMarcel Apfelbaum
227321ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF &&
227421ab34c9SMarcel Apfelbaum#include <sys/mman.h>
227521ab34c9SMarcel Apfelbaum
227621ab34c9SMarcel Apfelbaumint
227721ab34c9SMarcel Apfelbaummain(void)
227821ab34c9SMarcel Apfelbaum{
227921ab34c9SMarcel Apfelbaum    char buf = 0;
228021ab34c9SMarcel Apfelbaum    void *addr = &buf;
228121ab34c9SMarcel Apfelbaum    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
228221ab34c9SMarcel Apfelbaum
228321ab34c9SMarcel Apfelbaum    return 0;
228421ab34c9SMarcel Apfelbaum}
228521ab34c9SMarcel ApfelbaumEOF
228621ab34c9SMarcel Apfelbaum
228721ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then
228821ab34c9SMarcel Apfelbaum    case "$pvrdma" in
228921ab34c9SMarcel Apfelbaum    "")
229021ab34c9SMarcel Apfelbaum        if compile_prog "" ""; then
229121ab34c9SMarcel Apfelbaum            pvrdma="yes"
229221ab34c9SMarcel Apfelbaum        else
229321ab34c9SMarcel Apfelbaum            pvrdma="no"
229421ab34c9SMarcel Apfelbaum        fi
229521ab34c9SMarcel Apfelbaum        ;;
229621ab34c9SMarcel Apfelbaum    "yes")
229721ab34c9SMarcel Apfelbaum        if ! compile_prog "" ""; then
229821ab34c9SMarcel Apfelbaum            error_exit "PVRDMA is not supported since mremap is not implemented"
229921ab34c9SMarcel Apfelbaum        fi
230021ab34c9SMarcel Apfelbaum        pvrdma="yes"
230121ab34c9SMarcel Apfelbaum        ;;
230221ab34c9SMarcel Apfelbaum    "no")
230321ab34c9SMarcel Apfelbaum        pvrdma="no"
230421ab34c9SMarcel Apfelbaum        ;;
230521ab34c9SMarcel Apfelbaum    esac
230621ab34c9SMarcel Apfelbaumelse
230721ab34c9SMarcel Apfelbaum    if test "$pvrdma" = "yes" ; then
230821ab34c9SMarcel Apfelbaum        error_exit "PVRDMA requires rdma suppport"
230921ab34c9SMarcel Apfelbaum    fi
231021ab34c9SMarcel Apfelbaum    pvrdma="no"
231121ab34c9SMarcel Apfelbaumfi
231295c6bff3SBenoît Canet
2313ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported
2314ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then
2315ee108585SYuval Shaia
2316ee108585SYuval Shaiacat > $TMPC <<EOF &&
2317ee108585SYuval Shaia#include <infiniband/verbs.h>
2318ee108585SYuval Shaia
2319ee108585SYuval Shaiaint
2320ee108585SYuval Shaiamain(void)
2321ee108585SYuval Shaia{
2322ee108585SYuval Shaia    struct ibv_mr *mr;
2323ee108585SYuval Shaia    struct ibv_pd *pd = NULL;
2324ee108585SYuval Shaia    size_t length = 10;
2325ee108585SYuval Shaia    uint64_t iova = 0;
2326ee108585SYuval Shaia    int access = 0;
2327ee108585SYuval Shaia    void *addr = NULL;
2328ee108585SYuval Shaia
2329ee108585SYuval Shaia    mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2330ee108585SYuval Shaia
2331ee108585SYuval Shaia    ibv_dereg_mr(mr);
2332ee108585SYuval Shaia
2333ee108585SYuval Shaia    return 0;
2334ee108585SYuval Shaia}
2335ee108585SYuval ShaiaEOF
2336ee108585SYuval Shaia    if ! compile_prog "" "-libverbs"; then
2337ee108585SYuval Shaia        QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2338ee108585SYuval Shaia    fi
2339ee108585SYuval Shaiafi
2340ee108585SYuval Shaia
234195c6bff3SBenoît Canet##########################################
2342c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c
2343dce512deSChristoph Hellwigif test "$xfs" != "no" ; then
2344dce512deSChristoph Hellwig  cat > $TMPC << EOF
2345ffc41d10SStefan Weil#include <stddef.h>  /* NULL */
2346dce512deSChristoph Hellwig#include <xfs/xfs.h>
2347dce512deSChristoph Hellwigint main(void)
2348dce512deSChristoph Hellwig{
2349dce512deSChristoph Hellwig    xfsctl(NULL, 0, 0, NULL);
2350dce512deSChristoph Hellwig    return 0;
2351dce512deSChristoph Hellwig}
2352dce512deSChristoph HellwigEOF
2353dce512deSChristoph Hellwig  if compile_prog "" "" ; then
2354dce512deSChristoph Hellwig    xfs="yes"
2355dce512deSChristoph Hellwig  else
2356dce512deSChristoph Hellwig    if test "$xfs" = "yes" ; then
2357e3a6e0daSzhaolichang      feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
2358dce512deSChristoph Hellwig    fi
2359dce512deSChristoph Hellwig    xfs=no
2360dce512deSChristoph Hellwig  fi
2361dce512deSChristoph Hellwigfi
2362dce512deSChristoph Hellwig
2363dce512deSChristoph Hellwig##########################################
2364ba4dd2aaSAlex Bennée# plugin linker support probe
2365ba4dd2aaSAlex Bennée
2366ba4dd2aaSAlex Bennéeif test "$plugins" != "no"; then
2367ba4dd2aaSAlex Bennée
2368ba4dd2aaSAlex Bennée    #########################################
2369ba4dd2aaSAlex Bennée    # See if --dynamic-list is supported by the linker
2370ba4dd2aaSAlex Bennée
2371ba4dd2aaSAlex Bennée    ld_dynamic_list="no"
2372ba4dd2aaSAlex Bennée    cat > $TMPTXT <<EOF
2373ba4dd2aaSAlex Bennée{
2374ba4dd2aaSAlex Bennée  foo;
2375ba4dd2aaSAlex Bennée};
2376ba4dd2aaSAlex BennéeEOF
2377ba4dd2aaSAlex Bennée
2378ba4dd2aaSAlex Bennée        cat > $TMPC <<EOF
2379ba4dd2aaSAlex Bennée#include <stdio.h>
2380ba4dd2aaSAlex Bennéevoid foo(void);
2381ba4dd2aaSAlex Bennée
2382ba4dd2aaSAlex Bennéevoid foo(void)
2383ba4dd2aaSAlex Bennée{
2384ba4dd2aaSAlex Bennée  printf("foo\n");
2385ba4dd2aaSAlex Bennée}
2386ba4dd2aaSAlex Bennée
2387ba4dd2aaSAlex Bennéeint main(void)
2388ba4dd2aaSAlex Bennée{
2389ba4dd2aaSAlex Bennée  foo();
2390ba4dd2aaSAlex Bennée  return 0;
2391ba4dd2aaSAlex Bennée}
2392ba4dd2aaSAlex BennéeEOF
2393ba4dd2aaSAlex Bennée
2394ba4dd2aaSAlex Bennée    if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
2395ba4dd2aaSAlex Bennée        ld_dynamic_list="yes"
2396ba4dd2aaSAlex Bennée    fi
2397ba4dd2aaSAlex Bennée
2398ba4dd2aaSAlex Bennée    #########################################
2399ba4dd2aaSAlex Bennée    # See if -exported_symbols_list is supported by the linker
2400ba4dd2aaSAlex Bennée
2401ba4dd2aaSAlex Bennée    ld_exported_symbols_list="no"
2402ba4dd2aaSAlex Bennée    cat > $TMPTXT <<EOF
2403ba4dd2aaSAlex Bennée  _foo
2404ba4dd2aaSAlex BennéeEOF
2405ba4dd2aaSAlex Bennée
2406ba4dd2aaSAlex Bennée    if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
2407ba4dd2aaSAlex Bennée        ld_exported_symbols_list="yes"
2408ba4dd2aaSAlex Bennée    fi
2409ba4dd2aaSAlex Bennée
2410ba4dd2aaSAlex Bennée    if test "$ld_dynamic_list" = "no" &&
2411ba4dd2aaSAlex Bennée       test "$ld_exported_symbols_list" = "no" ; then
2412ba4dd2aaSAlex Bennée        if test "$plugins" = "yes"; then
2413ba4dd2aaSAlex Bennée            error_exit \
2414ba4dd2aaSAlex Bennée                "Plugin support requires dynamic linking and specifying a set of symbols " \
2415ba4dd2aaSAlex Bennée                "that are exported to plugins. Unfortunately your linker doesn't " \
2416ba4dd2aaSAlex Bennée                "support the flag (--dynamic-list or -exported_symbols_list) used " \
2417ba4dd2aaSAlex Bennée                "for this purpose."
2418ba4dd2aaSAlex Bennée        else
2419ba4dd2aaSAlex Bennée            plugins="no"
2420ba4dd2aaSAlex Bennée        fi
2421ba4dd2aaSAlex Bennée    else
2422ba4dd2aaSAlex Bennée        plugins="yes"
2423ba4dd2aaSAlex Bennée    fi
2424ba4dd2aaSAlex Bennéefi
2425ba4dd2aaSAlex Bennée
2426ba4dd2aaSAlex Bennée##########################################
2427e18df141SAnthony Liguori# glib support probe
2428a52d28afSPaolo Bonzini
2429b4c6036fSDaniel P. Berrangéglib_req_ver=2.56
2430aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
2431aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
2432a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
2433b906acacSPaolo Bonzinielif test "$plugins" = "yes"; then
2434b906acacSPaolo Bonzini    glib_modules="$glib_modules gmodule-no-export-2.0"
243554cb65d8SEmilio G. Cotafi
2436e26110cfSFam Zheng
2437aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
2438e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
243989138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
244089138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
2441e18df141SAnthony Liguori    else
2442e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2443e26110cfSFam Zheng    fi
2444e26110cfSFam Zhengdone
2445e26110cfSFam Zheng
2446215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it
2447215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
2448215b0c2fSPaolo Bonzini
2449215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then
2450215b0c2fSPaolo Bonzini    glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
2451215b0c2fSPaolo Bonzinifi
2452215b0c2fSPaolo Bonzini
245320cf7b8eSDenis Plotnikovif ! test "$gio" = "no"; then
245420cf7b8eSDenis Plotnikov    pass=no
2455f876b765SMarc-André Lureau    if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
2456f876b765SMarc-André Lureau        gio_cflags=$($pkg_config --cflags gio-2.0)
2457f876b765SMarc-André Lureau        gio_libs=$($pkg_config --libs gio-2.0)
245825a97a56SMarc-André Lureau        gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
24595ecfb76cSPaolo Bonzini        if ! has "$gdbus_codegen"; then
24600dba4897SMarc-André Lureau            gdbus_codegen=
24610dba4897SMarc-André Lureau        fi
246276346b62SPeter Maydell        # Check that the libraries actually work -- Ubuntu 18.04 ships
246376346b62SPeter Maydell        # with pkg-config --static --libs data for gio-2.0 that is missing
246476346b62SPeter Maydell        # -lblkid and will give a link error.
246513ceae66SPeter Maydell        cat > $TMPC <<EOF
246613ceae66SPeter Maydell#include <gio/gio.h>
246713ceae66SPeter Maydellint main(void)
246813ceae66SPeter Maydell{
246913ceae66SPeter Maydell    g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
247013ceae66SPeter Maydell    return 0;
247113ceae66SPeter Maydell}
247213ceae66SPeter MaydellEOF
247313ceae66SPeter Maydell        if compile_prog "$gio_cflags" "$gio_libs" ; then
247420cf7b8eSDenis Plotnikov            pass=yes
247576346b62SPeter Maydell        else
247620cf7b8eSDenis Plotnikov            pass=no
2477f876b765SMarc-André Lureau        fi
2478f876b765SMarc-André Lureau
247920cf7b8eSDenis Plotnikov        if test "$pass" = "yes" &&
248020cf7b8eSDenis Plotnikov            $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
248125a97a56SMarc-André Lureau            gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
248225a97a56SMarc-André Lureau            gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
248325a97a56SMarc-André Lureau        fi
248420cf7b8eSDenis Plotnikov    fi
248520cf7b8eSDenis Plotnikov
248620cf7b8eSDenis Plotnikov    if test "$pass" = "no"; then
248720cf7b8eSDenis Plotnikov        if test "$gio" = "yes"; then
248820cf7b8eSDenis Plotnikov            feature_not_found "gio" "Install libgio >= 2.0"
248920cf7b8eSDenis Plotnikov        else
249020cf7b8eSDenis Plotnikov            gio=no
249120cf7b8eSDenis Plotnikov        fi
249220cf7b8eSDenis Plotnikov    else
249320cf7b8eSDenis Plotnikov        gio=yes
249420cf7b8eSDenis Plotnikov    fi
249520cf7b8eSDenis Plotnikovfi
249625a97a56SMarc-André Lureau
2497977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
2498977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
2499977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
2500977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
2501977a82abSDaniel P. Berrangecat > $TMPC <<EOF
2502977a82abSDaniel P. Berrange#include <glib.h>
2503977a82abSDaniel P. Berrange#include <unistd.h>
2504977a82abSDaniel P. Berrange
2505977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
2506977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
2507977a82abSDaniel P. Berrange
2508977a82abSDaniel P. Berrangeint main(void) {
2509977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
2510977a82abSDaniel P. Berrange   return 0;
2511977a82abSDaniel P. Berrange}
2512977a82abSDaniel P. BerrangeEOF
2513977a82abSDaniel P. Berrange
2514215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then
2515977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
2516977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
2517977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
2518977a82abSDaniel P. Berrange	       "build target"
2519977a82abSDaniel P. Berrangefi
2520977a82abSDaniel P. Berrange
25219bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2
25229bda600bSEric Blakecat > $TMPC << EOF
25239bda600bSEric Blake#include <glib.h>
25249bda600bSEric Blaketypedef struct Foo {
25259bda600bSEric Blake    int i;
25269bda600bSEric Blake} Foo;
25279bda600bSEric Blakestatic void foo_free(Foo *f)
25289bda600bSEric Blake{
25299bda600bSEric Blake    g_free(f);
25309bda600bSEric Blake}
25319bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
25329bda600bSEric Blakeint main(void) { return 0; }
25339bda600bSEric BlakeEOF
25349bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
25359bda600bSEric Blake    if cc_has_warning_flag "-Wno-unused-function"; then
25369bda600bSEric Blake        glib_cflags="$glib_cflags -Wno-unused-function"
25375770e8afSPaolo Bonzini        CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
25389bda600bSEric Blake    fi
25399bda600bSEric Blakefi
25409bda600bSEric Blake
2541e26110cfSFam Zheng##########################################
2542e26110cfSFam Zheng# SHA command probe for modules
2543e26110cfSFam Zhengif test "$modules" = yes; then
2544e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
2545e26110cfSFam Zheng    for c in $shacmd_probe; do
25468ccefb91SFam Zheng        if has $c; then
2547e26110cfSFam Zheng            shacmd="$c"
2548e26110cfSFam Zheng            break
2549e26110cfSFam Zheng        fi
2550e26110cfSFam Zheng    done
2551e26110cfSFam Zheng    if test "$shacmd" = ""; then
2552e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2553e26110cfSFam Zheng    fi
2554e18df141SAnthony Liguorifi
2555e18df141SAnthony Liguori
2556e18df141SAnthony Liguori##########################################
25577aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX
25583b8acc11SPaolo Bonzini
25597aaa6a16SPaolo Bonziniif test "$tpm" = ""; then
25607aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes"; then
25617aaa6a16SPaolo Bonzini    tpm=no
25623b8acc11SPaolo Bonzini  else
25637aaa6a16SPaolo Bonzini    tpm=yes
25647aaa6a16SPaolo Bonzini  fi
25657aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then
25667aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes" ; then
25677aaa6a16SPaolo Bonzini    error_exit "TPM emulation only available on POSIX systems"
25687aaa6a16SPaolo Bonzini  fi
25693b8acc11SPaolo Bonzinifi
25703b8acc11SPaolo Bonzini
25713b8acc11SPaolo Bonzini##########################################
2572f652e6afSaurel32# fdt probe
2573e169e1e1SPeter Maydell
2574fbb4121dSPaolo Bonzinicase "$fdt" in
2575fbb4121dSPaolo Bonzini  auto | enabled | internal)
2576fbb4121dSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
2577aef45d51SDaniel P. Berrange    git_submodules="${git_submodules} dtc"
2578fbb4121dSPaolo Bonzini    ;;
2579fbb4121dSPaolo Bonziniesac
2580f652e6afSaurel32
258120ff075bSMichael Walle##########################################
25829d49bcf6SMarkus Armbruster# opengl probe (for sdl2, gtk)
2583b1546f32SGerd Hoffmann
2584da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
2585bc6a3565SAkihiko Odaki  epoxy=no
2586bc6a3565SAkihiko Odaki  if $pkg_config epoxy; then
2587bc6a3565SAkihiko Odaki    cat > $TMPC << EOF
2588bc6a3565SAkihiko Odaki#include <epoxy/egl.h>
2589bc6a3565SAkihiko Odakiint main(void) { return 0; }
2590bc6a3565SAkihiko OdakiEOF
2591bc6a3565SAkihiko Odaki    if compile_prog "" "" ; then
2592bc6a3565SAkihiko Odaki      epoxy=yes
2593bc6a3565SAkihiko Odaki    fi
2594bc6a3565SAkihiko Odaki  fi
2595bc6a3565SAkihiko Odaki
2596bc6a3565SAkihiko Odaki  if test "$epoxy" = "yes" ; then
2597bc6a3565SAkihiko Odaki    opengl_cflags="$($pkg_config --cflags epoxy)"
2598bc6a3565SAkihiko Odaki    opengl_libs="$($pkg_config --libs epoxy)"
2599da076ffeSGerd Hoffmann    opengl=yes
260020ff075bSMichael Walle  else
2601da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
2602bc6a3565SAkihiko Odaki      feature_not_found "opengl" "Please install epoxy with EGL"
260320ff075bSMichael Walle    fi
2604f676c67eSJeremy White    opengl_cflags=""
2605da076ffeSGerd Hoffmann    opengl_libs=""
2606da076ffeSGerd Hoffmann    opengl=no
260720ff075bSMichael Walle  fi
260820ff075bSMichael Wallefi
260920ff075bSMichael Walle
2610dcc38d1cSMarcelo Tosatti##########################################
2611a99d57bbSWanlong Gao# libnuma probe
2612a99d57bbSWanlong Gao
2613a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
2614a99d57bbSWanlong Gao  cat > $TMPC << EOF
2615a99d57bbSWanlong Gao#include <numa.h>
2616a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
2617a99d57bbSWanlong GaoEOF
2618a99d57bbSWanlong Gao
2619a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
2620a99d57bbSWanlong Gao    numa=yes
2621ab318051SMarc-André Lureau    numa_libs="-lnuma"
2622a99d57bbSWanlong Gao  else
2623a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
2624a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
2625a99d57bbSWanlong Gao    fi
2626a99d57bbSWanlong Gao    numa=no
2627a99d57bbSWanlong Gao  fi
2628a99d57bbSWanlong Gaofi
2629a99d57bbSWanlong Gao
2630955727d2SCortland Tölva# check for usbfs
2631955727d2SCortland Tölvahave_usbfs=no
2632955727d2SCortland Tölvaif test "$linux_user" = "yes"; then
263396566d09SThomas Petazzoni  cat > $TMPC << EOF
263496566d09SThomas Petazzoni#include <linux/usbdevice_fs.h>
263596566d09SThomas Petazzoni
263696566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES
263796566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined"
263896566d09SThomas Petazzoni#endif
263996566d09SThomas Petazzoni
264096566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM
264196566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined"
264296566d09SThomas Petazzoni#endif
264396566d09SThomas Petazzoni
264496566d09SThomas Petazzoniint main(void)
264596566d09SThomas Petazzoni{
264696566d09SThomas Petazzoni    return 0;
264796566d09SThomas Petazzoni}
264896566d09SThomas PetazzoniEOF
264996566d09SThomas Petazzoni  if compile_prog "" ""; then
2650955727d2SCortland Tölva    have_usbfs=yes
2651955727d2SCortland Tölva  fi
2652955727d2SCortland Tölvafi
2653751bcc39SMarc-André Lureau
2654de5071c5SBlue Swirl##########################################
2655d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
2656d9840e25STomoki Sekiyama
2657e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
2658e633a5c6SEric Blake        test "$vss_win32_sdk" != "no" ; then
2659d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
2660690604f6SMichael Roth    "")   vss_win32_include="-isystem $source_path" ;;
2661d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
2662d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
2663690604f6SMichael Roth          vss_win32_include="-isystem $source_path/.sdk/vss"
2664d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
2665d9840e25STomoki Sekiyama	  ;;
2666690604f6SMichael Roth    *)    vss_win32_include="-isystem $vss_win32_sdk"
2667d9840e25STomoki Sekiyama  esac
2668d9840e25STomoki Sekiyama  cat > $TMPC << EOF
2669d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
2670d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
2671d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
2672d9840e25STomoki SekiyamaEOF
2673d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
2674d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
2675d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
2676315d3184SFam Zheng    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
2677f33ca81fSMichael Roth    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
2678d9840e25STomoki Sekiyama  else
2679d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
2680d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
2681d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
2682d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
2683d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
2684d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
2685d9840e25STomoki Sekiyama      feature_not_found "VSS support"
2686d9840e25STomoki Sekiyama    fi
2687d9840e25STomoki Sekiyama    guest_agent_with_vss="no"
2688d9840e25STomoki Sekiyama  fi
2689d9840e25STomoki Sekiyamafi
2690d9840e25STomoki Sekiyama
2691d9840e25STomoki Sekiyama##########################################
2692d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
2693d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
2694d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
2695d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
2696d9840e25STomoki Sekiyama
2697e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
2698e633a5c6SEric Blake        test "$guest_agent_with_vss" = "yes" ; then
2699d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
2700d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
2701d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
2702d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
2703d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
2704d9840e25STomoki Sekiyama    else
2705d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
2706d9840e25STomoki Sekiyama    fi
2707d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
2708d9840e25STomoki Sekiyama    win_sdk=""
2709d9840e25STomoki Sekiyama  fi
2710d9840e25STomoki Sekiyamafi
2711d9840e25STomoki Sekiyama
2712d9840e25STomoki Sekiyama##########################################
271350cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h
2714e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
271550cbebb9SMichael Roth  cat > $TMPC << EOF
271650cbebb9SMichael Roth#include <windows.h>
271750cbebb9SMichael Roth#include <ntddscsi.h>
271850cbebb9SMichael Rothint main(void) {
271950cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS)
272050cbebb9SMichael Roth#error Missing required ioctl definitions
272150cbebb9SMichael Roth#endif
272250cbebb9SMichael Roth  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
272350cbebb9SMichael Roth  return addr.Lun;
272450cbebb9SMichael Roth}
272550cbebb9SMichael RothEOF
272650cbebb9SMichael Roth  if compile_prog "" "" ; then
272750cbebb9SMichael Roth    guest_agent_ntddscsi=yes
2728996b9cdcSMatt Hines    libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
272950cbebb9SMichael Roth  fi
273050cbebb9SMichael Rothfi
273150cbebb9SMichael Roth
273250cbebb9SMichael Roth##########################################
27338ca80760SRichard Henderson# capstone
27348ca80760SRichard Henderson
2735e219c499SRichard Hendersoncase "$capstone" in
27368b18cdbfSRichard Henderson  auto | enabled | internal)
27378b18cdbfSRichard Henderson    # Simpler to always update submodule, even if not needed.
2738e219c499SRichard Henderson    git_submodules="${git_submodules} capstone"
2739e219c499SRichard Henderson    ;;
2740e219c499SRichard Hendersonesac
27418ca80760SRichard Henderson
27428ca80760SRichard Henderson##########################################
2743519175a2SAlex Barcelo# check and set a backend for coroutine
2744d0e2fce5SAneesh Kumar K.V
27457c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
274633c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows
274733c53c54SDaniel P. Berrange# specific one.
27487c2acc70SPeter Maydell
27497c2acc70SPeter Maydellucontext_works=no
2750d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
2751d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
2752d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
2753cdf84806SPeter Maydell#ifdef __stub_makecontext
2754cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
2755cdf84806SPeter Maydell#endif
275675cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
2757d0e2fce5SAneesh Kumar K.VEOF
2758d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
27597c2acc70SPeter Maydell    ucontext_works=yes
2760d0e2fce5SAneesh Kumar K.V  fi
2761519175a2SAlex Barcelofi
27627c2acc70SPeter Maydell
27637c2acc70SPeter Maydellif test "$coroutine" = ""; then
27647c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
27657c2acc70SPeter Maydell    coroutine=win32
27667c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
27677c2acc70SPeter Maydell    coroutine=ucontext
2768519175a2SAlex Barcelo  else
27697c2acc70SPeter Maydell    coroutine=sigaltstack
27707c2acc70SPeter Maydell  fi
27717c2acc70SPeter Maydellelse
27727c2acc70SPeter Maydell  case $coroutine in
27737c2acc70SPeter Maydell  windows)
27747c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
27757c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
27767c2acc70SPeter Maydell    fi
27777c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
27787c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
27797c2acc70SPeter Maydell    coroutine=win32
27807c2acc70SPeter Maydell    ;;
27817c2acc70SPeter Maydell  ucontext)
27827c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
27837c2acc70SPeter Maydell      feature_not_found "ucontext"
27847c2acc70SPeter Maydell    fi
27857c2acc70SPeter Maydell    ;;
278633c53c54SDaniel P. Berrange  sigaltstack)
27877c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
27887c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
27897c2acc70SPeter Maydell    fi
27907c2acc70SPeter Maydell    ;;
27917c2acc70SPeter Maydell  *)
279276ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
27937c2acc70SPeter Maydell    ;;
27947c2acc70SPeter Maydell  esac
2795d0e2fce5SAneesh Kumar K.Vfi
2796d0e2fce5SAneesh Kumar K.V
279770c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then
279870c60c08SStefan Hajnoczi  coroutine_pool=yes
279970c60c08SStefan Hajnoczifi
280070c60c08SStefan Hajnoczi
28017d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then
28027d992e4dSPeter Lieven  if test "$coroutine_pool" = "yes"; then
28037d992e4dSPeter Lieven    echo "WARN: disabling coroutine pool for stack usage debugging"
28047d992e4dSPeter Lieven    coroutine_pool=no
28057d992e4dSPeter Lieven  fi
28067d992e4dSPeter Lievenfi
28077d992e4dSPeter Lieven
28081e4f6065SDaniele Buono##################################################
28091e4f6065SDaniele Buono# SafeStack
28101e4f6065SDaniele Buono
28111e4f6065SDaniele Buono
28121e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
28131e4f6065SDaniele Buonocat > $TMPC << EOF
28141e4f6065SDaniele Buonoint main(int argc, char *argv[])
28151e4f6065SDaniele Buono{
28161e4f6065SDaniele Buono#if ! __has_feature(safe_stack)
28171e4f6065SDaniele Buono#error SafeStack Disabled
28181e4f6065SDaniele Buono#endif
28191e4f6065SDaniele Buono    return 0;
28201e4f6065SDaniele Buono}
28211e4f6065SDaniele BuonoEOF
28221e4f6065SDaniele Buono  flag="-fsanitize=safe-stack"
28231e4f6065SDaniele Buono  # Check that safe-stack is supported and enabled.
28241e4f6065SDaniele Buono  if compile_prog "-Werror $flag" "$flag"; then
28251e4f6065SDaniele Buono    # Flag needed both at compilation and at linking
28261e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
28271e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
28281e4f6065SDaniele Buono  else
28291e4f6065SDaniele Buono    error_exit "SafeStack not supported by your compiler"
28301e4f6065SDaniele Buono  fi
28311e4f6065SDaniele Buono  if test "$coroutine" != "ucontext"; then
28321e4f6065SDaniele Buono    error_exit "SafeStack is only supported by the coroutine backend ucontext"
28331e4f6065SDaniele Buono  fi
28341e4f6065SDaniele Buonoelse
28351e4f6065SDaniele Buonocat > $TMPC << EOF
28361e4f6065SDaniele Buonoint main(int argc, char *argv[])
28371e4f6065SDaniele Buono{
28381e4f6065SDaniele Buono#if defined(__has_feature)
28391e4f6065SDaniele Buono#if __has_feature(safe_stack)
28401e4f6065SDaniele Buono#error SafeStack Enabled
28411e4f6065SDaniele Buono#endif
28421e4f6065SDaniele Buono#endif
28431e4f6065SDaniele Buono    return 0;
28441e4f6065SDaniele Buono}
28451e4f6065SDaniele BuonoEOF
28461e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then
28471e4f6065SDaniele Buono  # Make sure that safe-stack is disabled
28481e4f6065SDaniele Buono  if ! compile_prog "-Werror" ""; then
28491e4f6065SDaniele Buono    # SafeStack was already enabled, try to explicitly remove the feature
28501e4f6065SDaniele Buono    flag="-fno-sanitize=safe-stack"
28511e4f6065SDaniele Buono    if ! compile_prog "-Werror $flag" "$flag"; then
28521e4f6065SDaniele Buono      error_exit "Configure cannot disable SafeStack"
28531e4f6065SDaniele Buono    fi
28541e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
28551e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
28561e4f6065SDaniele Buono  fi
28571e4f6065SDaniele Buonoelse # "$safe_stack" = ""
28581e4f6065SDaniele Buono  # Set safe_stack to yes or no based on pre-existing flags
28591e4f6065SDaniele Buono  if compile_prog "-Werror" ""; then
28601e4f6065SDaniele Buono    safe_stack="no"
28611e4f6065SDaniele Buono  else
28621e4f6065SDaniele Buono    safe_stack="yes"
28631e4f6065SDaniele Buono    if test "$coroutine" != "ucontext"; then
28641e4f6065SDaniele Buono      error_exit "SafeStack is only supported by the coroutine backend ucontext"
28651e4f6065SDaniele Buono    fi
28661e4f6065SDaniele Buono  fi
28671e4f6065SDaniele Buonofi
28681e4f6065SDaniele Buonofi
28697d992e4dSPeter Lieven
287076a347e1SRichard Henderson########################################
287176a347e1SRichard Henderson# check if cpuid.h is usable.
287276a347e1SRichard Henderson
287376a347e1SRichard Hendersoncat > $TMPC << EOF
287476a347e1SRichard Henderson#include <cpuid.h>
287576a347e1SRichard Hendersonint main(void) {
2876774d566cSPeter Maydell    unsigned a, b, c, d;
2877774d566cSPeter Maydell    int max = __get_cpuid_max(0, 0);
2878774d566cSPeter Maydell
2879774d566cSPeter Maydell    if (max >= 1) {
2880774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
2881774d566cSPeter Maydell    }
2882774d566cSPeter Maydell
2883774d566cSPeter Maydell    if (max >= 7) {
2884774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
2885774d566cSPeter Maydell    }
2886774d566cSPeter Maydell
288776a347e1SRichard Henderson    return 0;
288876a347e1SRichard Henderson}
288976a347e1SRichard HendersonEOF
289076a347e1SRichard Hendersonif compile_prog "" "" ; then
289176a347e1SRichard Henderson    cpuid_h=yes
289276a347e1SRichard Hendersonfi
289376a347e1SRichard Henderson
28945dd89908SRichard Henderson##########################################
28955dd89908SRichard Henderson# avx2 optimization requirement check
28965dd89908SRichard Henderson#
28975dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable,
28985dd89908SRichard Henderson# since we won't be able to select the new routines.
28995dd89908SRichard Henderson
2900e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
29015dd89908SRichard Henderson  cat > $TMPC << EOF
29025dd89908SRichard Henderson#pragma GCC push_options
29035dd89908SRichard Henderson#pragma GCC target("avx2")
29045dd89908SRichard Henderson#include <cpuid.h>
29055dd89908SRichard Henderson#include <immintrin.h>
29065dd89908SRichard Hendersonstatic int bar(void *a) {
29075dd89908SRichard Henderson    __m256i x = *(__m256i *)a;
29085dd89908SRichard Henderson    return _mm256_testz_si256(x, x);
29095dd89908SRichard Henderson}
29105dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); }
29115dd89908SRichard HendersonEOF
29125b945f23SRichard Henderson  if compile_object "-Werror" ; then
29135dd89908SRichard Henderson    avx2_opt="yes"
291486583a07SLiam Merwick  else
291586583a07SLiam Merwick    avx2_opt="no"
29165dd89908SRichard Henderson  fi
29175dd89908SRichard Hendersonfi
29185dd89908SRichard Henderson
29196b8cd447SRobert Hoo##########################################
29206b8cd447SRobert Hoo# avx512f optimization requirement check
29216b8cd447SRobert Hoo#
29226b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable,
29236b8cd447SRobert Hoo# since we won't be able to select the new routines.
29246b8cd447SRobert Hoo# by default, it is turned off.
29256b8cd447SRobert Hoo# if user explicitly want to enable it, check environment
29266b8cd447SRobert Hoo
29276b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
29286b8cd447SRobert Hoo  cat > $TMPC << EOF
29296b8cd447SRobert Hoo#pragma GCC push_options
29306b8cd447SRobert Hoo#pragma GCC target("avx512f")
29316b8cd447SRobert Hoo#include <cpuid.h>
29326b8cd447SRobert Hoo#include <immintrin.h>
29336b8cd447SRobert Hoostatic int bar(void *a) {
29346b8cd447SRobert Hoo    __m512i x = *(__m512i *)a;
29356b8cd447SRobert Hoo    return _mm512_test_epi64_mask(x, x);
29366b8cd447SRobert Hoo}
29376b8cd447SRobert Hooint main(int argc, char *argv[])
29386b8cd447SRobert Hoo{
29396b8cd447SRobert Hoo	return bar(argv[0]);
29406b8cd447SRobert Hoo}
29416b8cd447SRobert HooEOF
29425b945f23SRichard Henderson  if ! compile_object "-Werror" ; then
29436b8cd447SRobert Hoo    avx512f_opt="no"
29446b8cd447SRobert Hoo  fi
29456b8cd447SRobert Hooelse
29466b8cd447SRobert Hoo  avx512f_opt="no"
29476b8cd447SRobert Hoofi
29486b8cd447SRobert Hoo
2949f540166bSRichard Henderson########################################
2950f540166bSRichard Henderson# check if __[u]int128_t is usable.
2951f540166bSRichard Henderson
2952f540166bSRichard Hendersonint128=no
2953f540166bSRichard Hendersoncat > $TMPC << EOF
2954f540166bSRichard Henderson__int128_t a;
2955f540166bSRichard Henderson__uint128_t b;
2956f540166bSRichard Hendersonint main (void) {
2957f540166bSRichard Henderson  a = a + b;
2958f540166bSRichard Henderson  b = a * b;
2959464e3671SPeter Maydell  a = a * a;
2960f540166bSRichard Henderson  return 0;
2961f540166bSRichard Henderson}
2962f540166bSRichard HendersonEOF
2963f540166bSRichard Hendersonif compile_prog "" "" ; then
2964f540166bSRichard Henderson    int128=yes
2965f540166bSRichard Hendersonfi
296676a347e1SRichard Henderson
29677ebee43eSRichard Henderson#########################################
29687ebee43eSRichard Henderson# See if 128-bit atomic operations are supported.
29697ebee43eSRichard Henderson
29707ebee43eSRichard Hendersonatomic128=no
29717ebee43eSRichard Hendersonif test "$int128" = "yes"; then
29727ebee43eSRichard Henderson  cat > $TMPC << EOF
29737ebee43eSRichard Hendersonint main(void)
29747ebee43eSRichard Henderson{
29757ebee43eSRichard Henderson  unsigned __int128 x = 0, y = 0;
2976bceac547SThomas Huth  y = __atomic_load(&x, 0);
2977bceac547SThomas Huth  __atomic_store(&x, y, 0);
2978bceac547SThomas Huth  __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
29797ebee43eSRichard Henderson  return 0;
29807ebee43eSRichard Henderson}
29817ebee43eSRichard HendersonEOF
29827ebee43eSRichard Henderson  if compile_prog "" "" ; then
29837ebee43eSRichard Henderson    atomic128=yes
29847ebee43eSRichard Henderson  fi
29857ebee43eSRichard Hendersonfi
29867ebee43eSRichard Henderson
2987e6cd4bb5SRichard Hendersoncmpxchg128=no
2988e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then
2989e6cd4bb5SRichard Henderson  cat > $TMPC << EOF
2990e6cd4bb5SRichard Hendersonint main(void)
2991e6cd4bb5SRichard Henderson{
2992e6cd4bb5SRichard Henderson  unsigned __int128 x = 0, y = 0;
2993e6cd4bb5SRichard Henderson  __sync_val_compare_and_swap_16(&x, y, x);
2994e6cd4bb5SRichard Henderson  return 0;
2995e6cd4bb5SRichard Henderson}
2996e6cd4bb5SRichard HendersonEOF
2997e6cd4bb5SRichard Henderson  if compile_prog "" "" ; then
2998e6cd4bb5SRichard Henderson    cmpxchg128=yes
2999e6cd4bb5SRichard Henderson  fi
3000e6cd4bb5SRichard Hendersonfi
3001e6cd4bb5SRichard Henderson
3002fd0e6053SJohn Snow########################################
3003fd0e6053SJohn Snow# check if ccache is interfering with
3004fd0e6053SJohn Snow# semantic analysis of macros
3005fd0e6053SJohn Snow
30065e4dfd3dSJohn Snowunset CCACHE_CPP2
3007fd0e6053SJohn Snowccache_cpp2=no
3008fd0e6053SJohn Snowcat > $TMPC << EOF
3009fd0e6053SJohn Snowstatic const int Z = 1;
3010fd0e6053SJohn Snow#define fn() ({ Z; })
3011fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
3012fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
3013fd0e6053SJohn Snow#define ID(X) (X)
3014fd0e6053SJohn Snowint main(int argc, char *argv[])
3015fd0e6053SJohn Snow{
3016fd0e6053SJohn Snow    int x = 0, y = 0;
3017fd0e6053SJohn Snow    x = ID(x);
3018fd0e6053SJohn Snow    x = fn();
3019fd0e6053SJohn Snow    fn();
3020fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
3021fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
3022fd0e6053SJohn Snow    return 0;
3023fd0e6053SJohn Snow}
3024fd0e6053SJohn SnowEOF
3025fd0e6053SJohn Snow
3026fd0e6053SJohn Snowif ! compile_object "-Werror"; then
3027fd0e6053SJohn Snow    ccache_cpp2=yes
3028fd0e6053SJohn Snowfi
3029fd0e6053SJohn Snow
3030b553a042SJohn Snow#################################################
3031b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
3032b553a042SJohn Snow
3033b553a042SJohn Snowif test "$fortify_source" != "no"; then
3034b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
3035b553a042SJohn Snow    fortify_source="no";
3036e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
3037cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
3038b553a042SJohn Snow    fortify_source="no";
3039b553a042SJohn Snow  else
3040b553a042SJohn Snow    fortify_source="yes"
3041b553a042SJohn Snow  fi
3042b553a042SJohn Snowfi
3043b553a042SJohn Snow
3044d2042378SAneesh Kumar K.V##########################################
3045a40161cbSPaolo Bonzini# check for usable membarrier system call
3046a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then
3047a40161cbSPaolo Bonzini    have_membarrier=no
3048a40161cbSPaolo Bonzini    if test "$mingw32" = "yes" ; then
3049a40161cbSPaolo Bonzini        have_membarrier=yes
3050a40161cbSPaolo Bonzini    elif test "$linux" = "yes" ; then
3051a40161cbSPaolo Bonzini        cat > $TMPC << EOF
3052a40161cbSPaolo Bonzini    #include <linux/membarrier.h>
3053a40161cbSPaolo Bonzini    #include <sys/syscall.h>
3054a40161cbSPaolo Bonzini    #include <unistd.h>
3055a40161cbSPaolo Bonzini    #include <stdlib.h>
3056a40161cbSPaolo Bonzini    int main(void) {
3057a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
3058a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
3059a40161cbSPaolo Bonzini	exit(0);
3060a40161cbSPaolo Bonzini    }
3061a40161cbSPaolo BonziniEOF
3062a40161cbSPaolo Bonzini        if compile_prog "" "" ; then
3063a40161cbSPaolo Bonzini            have_membarrier=yes
3064a40161cbSPaolo Bonzini        fi
3065a40161cbSPaolo Bonzini    fi
3066a40161cbSPaolo Bonzini    if test "$have_membarrier" = "no"; then
3067a40161cbSPaolo Bonzini      feature_not_found "membarrier" "membarrier system call not available"
3068a40161cbSPaolo Bonzini    fi
3069a40161cbSPaolo Bonzinielse
3070a40161cbSPaolo Bonzini    # Do not enable it by default even for Mingw32, because it doesn't
3071a40161cbSPaolo Bonzini    # work on Wine.
3072a40161cbSPaolo Bonzini    membarrier=no
3073a40161cbSPaolo Bonzinifi
3074a40161cbSPaolo Bonzini
3075a40161cbSPaolo Bonzini##########################################
3076f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment
30774f67366eSThomas Huthhave_afalg=no
3078f0d92b56SLongpeng(Mike)cat > $TMPC << EOF
3079f0d92b56SLongpeng(Mike)#include <errno.h>
3080f0d92b56SLongpeng(Mike)#include <sys/types.h>
3081f0d92b56SLongpeng(Mike)#include <sys/socket.h>
3082f0d92b56SLongpeng(Mike)#include <linux/if_alg.h>
3083f0d92b56SLongpeng(Mike)int main(void) {
3084f0d92b56SLongpeng(Mike)    int sock;
3085f0d92b56SLongpeng(Mike)    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
3086f0d92b56SLongpeng(Mike)    return sock;
3087f0d92b56SLongpeng(Mike)}
3088f0d92b56SLongpeng(Mike)EOF
3089f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then
3090f0d92b56SLongpeng(Mike)    have_afalg=yes
3091f0d92b56SLongpeng(Mike)fi
3092f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes"
3093f0d92b56SLongpeng(Mike)then
3094f0d92b56SLongpeng(Mike)    if test "$have_afalg" != "yes"
3095f0d92b56SLongpeng(Mike)    then
3096f0d92b56SLongpeng(Mike)	error_exit "AF_ALG requested but could not be detected"
3097f0d92b56SLongpeng(Mike)    fi
3098f0d92b56SLongpeng(Mike)fi
3099f0d92b56SLongpeng(Mike)
3100f0d92b56SLongpeng(Mike)
3101db1ed1abSRichard Henderson##########################################
3102247724cbSMarc-André Lureau# checks for sanitizers
3103247724cbSMarc-André Lureau
3104247724cbSMarc-André Lureauhave_asan=no
3105247724cbSMarc-André Lureauhave_ubsan=no
3106d83414e1SMarc-André Lureauhave_asan_iface_h=no
3107d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
3108247724cbSMarc-André Lureau
3109247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
3110b9f44da2SMarc-André Lureau  write_c_skeleton
3111247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
3112247724cbSMarc-André Lureau      have_asan=yes
3113247724cbSMarc-André Lureau  fi
3114b9f44da2SMarc-André Lureau
3115b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
3116b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
3117b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
3118b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
3119b9f44da2SMarc-André Lureau#include <stdlib.h>
3120b9f44da2SMarc-André Lureauint main(void) {
3121b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
3122f2dfe54cSLeonid Bloch    if (tmp != NULL) {
3123b9f44da2SMarc-André Lureau        return *(int *)(tmp + 2);
3124b9f44da2SMarc-André Lureau    }
3125d1abf3fcSOlaf Hering    return 1;
3126f2dfe54cSLeonid Bloch}
3127b9f44da2SMarc-André LureauEOF
3128247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
3129247724cbSMarc-André Lureau      have_ubsan=yes
3130247724cbSMarc-André Lureau  fi
3131d83414e1SMarc-André Lureau
3132d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
3133d83414e1SMarc-André Lureau      have_asan_iface_h=yes
3134d83414e1SMarc-André Lureau  fi
3135d83414e1SMarc-André Lureau
3136d83414e1SMarc-André Lureau  cat > $TMPC << EOF
3137d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
3138d83414e1SMarc-André Lureauint main(void) {
3139d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
3140d83414e1SMarc-André Lureau  return 0;
3141d83414e1SMarc-André Lureau}
3142d83414e1SMarc-André LureauEOF
3143d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
3144d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
3145d83414e1SMarc-André Lureau  fi
3146247724cbSMarc-André Lureaufi
3147247724cbSMarc-André Lureau
31480aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers;
31490aebab04SLingfeng Yang# keep it separate until that is not the case.
31500aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
31510aebab04SLingfeng Yang  error_exit "TSAN is not supported with other sanitiziers."
31520aebab04SLingfeng Yangfi
31530aebab04SLingfeng Yanghave_tsan=no
31540aebab04SLingfeng Yanghave_tsan_iface_fiber=no
31550aebab04SLingfeng Yangif test "$tsan" = "yes" ; then
31560aebab04SLingfeng Yang  write_c_skeleton
31570aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
31580aebab04SLingfeng Yang      have_tsan=yes
31590aebab04SLingfeng Yang  fi
31600aebab04SLingfeng Yang  cat > $TMPC << EOF
31610aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h>
31620aebab04SLingfeng Yangint main(void) {
31630aebab04SLingfeng Yang  __tsan_create_fiber(0);
31640aebab04SLingfeng Yang  return 0;
31650aebab04SLingfeng Yang}
31660aebab04SLingfeng YangEOF
31670aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
31680aebab04SLingfeng Yang      have_tsan_iface_fiber=yes
31690aebab04SLingfeng Yang  fi
31700aebab04SLingfeng Yangfi
31710aebab04SLingfeng Yang
3172adc28027SAlexander Bulekov##########################################
3173675b9b53SMarc-André Lureau# check for slirp
3174675b9b53SMarc-André Lureau
3175675b9b53SMarc-André Lureaucase "$slirp" in
31764d34a86bSPaolo Bonzini  auto | enabled | internal)
31774d34a86bSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
31787c57bdd8SMarc-André Lureau    git_submodules="${git_submodules} slirp"
3179675b9b53SMarc-André Lureau    ;;
3180675b9b53SMarc-André Lureauesac
3181675b9b53SMarc-André Lureau
3182b8e0c493SJoelle van Dyne# Check for slirp smbd dupport
3183b8e0c493SJoelle van Dyne: ${smbd=${SMBD-/usr/sbin/smbd}}
3184b8e0c493SJoelle van Dyneif test "$slirp_smbd" != "no" ; then
3185b8e0c493SJoelle van Dyne  if test "$mingw32" = "yes" ; then
3186b8e0c493SJoelle van Dyne    if test "$slirp_smbd" = "yes" ; then
3187b8e0c493SJoelle van Dyne      error_exit "Host smbd not supported on this platform."
3188b8e0c493SJoelle van Dyne    fi
3189b8e0c493SJoelle van Dyne    slirp_smbd=no
3190b8e0c493SJoelle van Dyne  else
3191b8e0c493SJoelle van Dyne    slirp_smbd=yes
3192b8e0c493SJoelle van Dyne  fi
3193b8e0c493SJoelle van Dynefi
3194b8e0c493SJoelle van Dyne
319554e7aac0SAlexey Krasikov##########################################
319654e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall
319754e7aac0SAlexey Krasikov
319854e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then
319954e7aac0SAlexey Krasikov
320054e7aac0SAlexey Krasikov    have_keyring=no
320154e7aac0SAlexey Krasikov    cat > $TMPC << EOF
320254e7aac0SAlexey Krasikov#include <errno.h>
320354e7aac0SAlexey Krasikov#include <asm/unistd.h>
320454e7aac0SAlexey Krasikov#include <linux/keyctl.h>
320554e7aac0SAlexey Krasikov#include <unistd.h>
320654e7aac0SAlexey Krasikovint main(void) {
320754e7aac0SAlexey Krasikov    return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
320854e7aac0SAlexey Krasikov}
320954e7aac0SAlexey KrasikovEOF
321054e7aac0SAlexey Krasikov    if compile_prog "" "" ; then
321154e7aac0SAlexey Krasikov        have_keyring=yes
321254e7aac0SAlexey Krasikov    fi
321354e7aac0SAlexey Krasikovfi
321454e7aac0SAlexey Krasikovif test "$secret_keyring" != "no"
321554e7aac0SAlexey Krasikovthen
3216b418d265SDavid Edmondson    if test "$have_keyring" = "yes"
321754e7aac0SAlexey Krasikov    then
321854e7aac0SAlexey Krasikov	secret_keyring=yes
321954e7aac0SAlexey Krasikov    else
322054e7aac0SAlexey Krasikov	if test "$secret_keyring" = "yes"
322154e7aac0SAlexey Krasikov	then
322254e7aac0SAlexey Krasikov	    error_exit "syscall __NR_keyctl requested, \
322354e7aac0SAlexey Krasikovbut not implemented on your system"
322454e7aac0SAlexey Krasikov	else
322554e7aac0SAlexey Krasikov	    secret_keyring=no
322654e7aac0SAlexey Krasikov	fi
322754e7aac0SAlexey Krasikov    fi
322854e7aac0SAlexey Krasikovfi
322954e7aac0SAlexey Krasikov
323092500362SAlexey Krasikov##########################################
3231e86ecd4bSJuan Quintela# End of CC checks
3232e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
3233e86ecd4bSJuan Quintela
3234d83414e1SMarc-André Lureauwrite_c_skeleton
3235d83414e1SMarc-André Lureau
32361d728c39SBlue Swirlif test "$gcov" = "yes" ; then
3237bf0e56a3SMarc-André Lureau  :
3238b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then
3239086d5f75SPaolo Bonzini  QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
3240086d5f75SPaolo Bonzini  debug=no
3241086d5f75SPaolo Bonzinifi
3242086d5f75SPaolo Bonzini
3243086d5f75SPaolo Bonzinicase "$ARCH" in
3244086d5f75SPaolo Bonzinialpha)
3245086d5f75SPaolo Bonzini  # Ensure there's only a single GP
3246086d5f75SPaolo Bonzini  QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
3247086d5f75SPaolo Bonzini;;
3248086d5f75SPaolo Bonziniesac
3249086d5f75SPaolo Bonzini
3250086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then
3251086d5f75SPaolo Bonzini  QEMU_CFLAGS="-p $QEMU_CFLAGS"
3252086d5f75SPaolo Bonzini  QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
3253086d5f75SPaolo Bonzinifi
3254a316e378SJuan Quintela
3255247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
3256db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
3257db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
3258d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
3259d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
3260d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
3261d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
3262d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
3263d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
3264d83414e1SMarc-André Lureau  fi
3265247724cbSMarc-André Lureaufi
32660aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then
32670aebab04SLingfeng Yang  if test "$have_tsan_iface_fiber" = "yes" ; then
32680aebab04SLingfeng Yang    QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
32690aebab04SLingfeng Yang    QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
32700aebab04SLingfeng Yang  else
32710aebab04SLingfeng Yang    error_exit "Cannot enable TSAN due to missing fiber annotation interface."
32720aebab04SLingfeng Yang  fi
32730aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then
32740aebab04SLingfeng Yang  error_exit "Cannot enable TSAN due to missing sanitize thread interface."
32750aebab04SLingfeng Yangfi
3276247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
3277db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
3278db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
3279247724cbSMarc-André Lureaufi
3280247724cbSMarc-André Lureau
32816542aa9cSPeter Lieven##########################################
32823efac6ebSTomáš Golembiovský
32830aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
32840aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then
3285e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
3286db5adeaaSPaolo Bonzini        QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
3287e86ecd4bSJuan Quintela    fi
3288e86ecd4bSJuan Quintelafi
3289e86ecd4bSJuan Quintela
3290952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
3291952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
3292cb8baa77SMark Cave-Ayland    flags="--no-seh --nxcompat"
3293cb8baa77SMark Cave-Ayland
3294cb8baa77SMark Cave-Ayland    # Disable ASLR for debug builds to allow debugging with gdb
3295cb8baa77SMark Cave-Ayland    if test "$debug" = "no" ; then
3296cb8baa77SMark Cave-Ayland        flags="--dynamicbase $flags"
3297cb8baa77SMark Cave-Ayland    fi
3298cb8baa77SMark Cave-Ayland
3299cb8baa77SMark Cave-Ayland    for flag in $flags; do
3300e9a3591fSChristian Borntraeger        if ld_has $flag ; then
3301db5adeaaSPaolo Bonzini            QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
3302952afb71SBlue Swirl        fi
3303952afb71SBlue Swirl    done
3304952afb71SBlue Swirlfi
3305952afb71SBlue Swirl
33069d6bc27bSMichael Roth# Probe for guest agent support/options
33079d6bc27bSMichael Roth
3308e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
3309a5125905SLaurent Vivier  if [ "$softmmu" = no -a "$want_tools" = no ] ; then
3310a5125905SLaurent Vivier      guest_agent=no
3311a5125905SLaurent Vivier  elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
3312e8ef31a3SMichael Tokarev      guest_agent=yes
3313e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
3314e8ef31a3SMichael Tokarev      guest_agent=no
3315e8ef31a3SMichael Tokarev  else
3316e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
3317ca35f780SPaolo Bonzini  fi
33184b1c11fdSDaniel P. Berrangefi
3319ca35f780SPaolo Bonzini
3320b846ab7cSPaolo Bonzini# Guest agent Windows MSI package
33219d6bc27bSMichael Roth
33229d6bc27bSMichael Rothif test "$QEMU_GA_MANUFACTURER" = ""; then
33239d6bc27bSMichael Roth  QEMU_GA_MANUFACTURER=QEMU
33249d6bc27bSMichael Rothfi
33259d6bc27bSMichael Rothif test "$QEMU_GA_DISTRO" = ""; then
33269d6bc27bSMichael Roth  QEMU_GA_DISTRO=Linux
33279d6bc27bSMichael Rothfi
33289d6bc27bSMichael Rothif test "$QEMU_GA_VERSION" = ""; then
332989138857SStefan Weil    QEMU_GA_VERSION=$(cat $source_path/VERSION)
33309d6bc27bSMichael Rothfi
33319d6bc27bSMichael Roth
3332b846ab7cSPaolo BonziniQEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
33339d6bc27bSMichael Roth
3334ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
3335ca35f780SPaolo Bonziniroms=
3336e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
3337*ba7c60c2SPaolo Bonzini        test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
3338*ba7c60c2SPaolo Bonzini        test "$targetos" != "haiku" && test "$softmmu" = yes ; then
3339e57218b6SPeter Maydell    # Different host OS linkers have different ideas about the name of the ELF
3340c65d5e4eSBrad Smith    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
3341c65d5e4eSBrad Smith    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
3342c65d5e4eSBrad Smith    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
3343e57218b6SPeter Maydell        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
3344e57218b6SPeter Maydell            ld_i386_emulation="$emu"
3345ca35f780SPaolo Bonzini            roms="optionrom"
3346e57218b6SPeter Maydell            break
3347e57218b6SPeter Maydell        fi
3348e57218b6SPeter Maydell    done
3349ca35f780SPaolo Bonzinifi
3350ca35f780SPaolo Bonzini
33512e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
3352a5b2afd5SThomas Huth# or -march=z10 (which is the lowest architecture level that Clang supports)
33539933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
33542e33c3f8SThomas Huth  write_c_skeleton
3355a5b2afd5SThomas Huth  compile_prog "-march=z900" ""
3356a5b2afd5SThomas Huth  has_z900=$?
33573af448b3SThomas Huth  if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
3358a5b2afd5SThomas Huth    if [ $has_z900 != 0 ]; then
3359a5b2afd5SThomas Huth      echo "WARNING: Your compiler does not support the z900!"
3360a5b2afd5SThomas Huth      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
3361a5b2afd5SThomas Huth    fi
33629933c305SChristian Borntraeger    roms="$roms s390-ccw"
33631ef6bfc2SPhilippe Mathieu-Daudé    # SLOF is required for building the s390-ccw firmware on s390x,
33641ef6bfc2SPhilippe Mathieu-Daudé    # since it is using the libnet code from SLOF for network booting.
33651ef6bfc2SPhilippe Mathieu-Daudé    git_submodules="${git_submodules} roms/SLOF"
33661ef6bfc2SPhilippe Mathieu-Daudé  fi
33679933c305SChristian Borntraegerfi
33689933c305SChristian Borntraeger
336911cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler.
337011cde1c8SBruno 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.
337111cde1c8SBruno Dominguezif has $cxx; then
337211cde1c8SBruno Dominguez    cat > $TMPC <<EOF
337311cde1c8SBruno Dominguezint c_function(void);
337411cde1c8SBruno Dominguezint main(void) { return c_function(); }
337511cde1c8SBruno DominguezEOF
337611cde1c8SBruno Dominguez
337711cde1c8SBruno Dominguez    compile_object
337811cde1c8SBruno Dominguez
337911cde1c8SBruno Dominguez    cat > $TMPCXX <<EOF
338011cde1c8SBruno Dominguezextern "C" {
338111cde1c8SBruno Dominguez   int c_function(void);
338211cde1c8SBruno Dominguez}
338311cde1c8SBruno Dominguezint c_function(void) { return 42; }
338411cde1c8SBruno DominguezEOF
338511cde1c8SBruno Dominguez
338611cde1c8SBruno Dominguez    update_cxxflags
338711cde1c8SBruno Dominguez
3388a2866660SPaolo Bonzini    if do_cxx $CXXFLAGS $EXTRA_CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
338911cde1c8SBruno Dominguez        # C++ compiler $cxx works ok with C compiler $cc
339011cde1c8SBruno Dominguez        :
339111cde1c8SBruno Dominguez    else
339211cde1c8SBruno Dominguez        echo "C++ compiler $cxx does not work with C compiler $cc"
339311cde1c8SBruno Dominguez        echo "Disabling C++ specific optional code"
339411cde1c8SBruno Dominguez        cxx=
339511cde1c8SBruno Dominguez    fi
339611cde1c8SBruno Dominguezelse
339711cde1c8SBruno Dominguez    echo "No C++ compiler available; disabling C++ specific optional code"
339811cde1c8SBruno Dominguez    cxx=
339911cde1c8SBruno Dominguezfi
340011cde1c8SBruno Dominguez
34017d7dbf9dSDan Streetmanif !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
34027d7dbf9dSDan Streetman    exit 1
34035d91a2edSYonggang Luofi
34045d91a2edSYonggang Luo
340598ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
340697a847bcSbellard
340798ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
340898ec69acSJuan Quintelaecho >> $config_host_mak
340998ec69acSJuan Quintela
3410e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
3411cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
3412aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
34137d7dbf9dSDan Streetmanecho "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
3414804edf29SJuan Quintela
341598ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak
3416727e5283SPaolo Bonzini
3417f8393946Saurel32if test "$debug_tcg" = "yes" ; then
34182358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
3419f8393946Saurel32fi
34201625af87Saliguoriif test "$strip_opt" = "yes" ; then
342152ba784dSHollis Blanchard  echo "STRIP=${strip}" >> $config_host_mak
34221625af87Saliguorifi
342367b915a5Sbellardif test "$mingw32" = "yes" ; then
342498ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
3425d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
3426d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
3427f33ca81fSMichael Roth    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
3428d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
3429d9840e25STomoki Sekiyama  fi
343050cbebb9SMichael Roth  if test "$guest_agent_ntddscsi" = "yes" ; then
343176dc75caSTomáš Golembiovský    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
343250cbebb9SMichael Roth  fi
34339dacf32dSYossi Hindin  echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
34349dacf32dSYossi Hindin  echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
34359dacf32dSYossi Hindin  echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
34369dacf32dSYossi Hindin  echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
3437210fa556Spbrookelse
343835f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
3439210fa556Spbrookfi
3440128ab2ffSblueswir1
3441dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
3442dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
3443dffcb71cSMark McLoughlinfi
3444dffcb71cSMark McLoughlin
344583fb7adfSbellardif test "$darwin" = "yes" ; then
344698ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
344783fb7adfSbellardfi
3448b29fe3edSmalc
3449ec530c81Sbellardif test "$solaris" = "yes" ; then
345098ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
3451ec530c81Sbellardfi
345297a847bcSbellardif test "$static" = "yes" ; then
345398ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
345497a847bcSbellardfi
34551ba16968SStefan Weilif test "$profiler" = "yes" ; then
34562358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
345705c2a3e7Sbellardfi
3458c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then
3459c932ce31SPaolo Bonzini  echo "CONFIG_TOOLS=y" >> $config_host_mak
3460c932ce31SPaolo Bonzinifi
3461f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then
3462f15bff25SPaolo Bonzini  echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
3463f15bff25SPaolo Bonzinifi
3464b8e0c493SJoelle van Dyneif test "$slirp_smbd" = "yes" ; then
3465b8e0c493SJoelle van Dyne  echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
3466e2d8830eSBrad  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
3467b8e0c493SJoelle van Dynefi
34684cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then
34694cc600d2SPaolo Bonzini  echo "CONFIG_GPROF=y" >> $config_host_mak
34704cc600d2SPaolo Bonzinifi
3471b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
3472b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
3473e5f05f8cSKevin Wolfif test "$block_drv_whitelist_tools" = "yes" ; then
3474e5f05f8cSKevin Wolf  echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
3475e5f05f8cSKevin Wolffi
3476dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then
3477dce512deSChristoph Hellwig  echo "CONFIG_XFS=y" >> $config_host_mak
3478dce512deSChristoph Hellwigfi
347989138857SStefan Weilqemu_version=$(head $source_path/VERSION)
34802358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
348198ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
34822b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
348317969268SFam Zhengif test "$modules" = "yes"; then
3484e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
3485e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
348689138857SStefan Weil  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
348717969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
348817969268SFam Zhengfi
3489bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then
3490bd83c861SChristian Ehrhardt  echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
3491bd83c861SChristian Ehrhardtfi
3492955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then
3493955727d2SCortland Tölva  echo "CONFIG_USBFS=y" >> $config_host_mak
3494955727d2SCortland Tölvafi
3495f876b765SMarc-André Lureauif test "$gio" = "yes" ; then
3496f876b765SMarc-André Lureau    echo "CONFIG_GIO=y" >> $config_host_mak
3497f876b765SMarc-André Lureau    echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
3498f876b765SMarc-André Lureau    echo "GIO_LIBS=$gio_libs" >> $config_host_mak
34995ecfb76cSPaolo Bonzinifi
35005ecfb76cSPaolo Bonziniif test "$gdbus_codegen" != "" ; then
350125a97a56SMarc-André Lureau    echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
3502f876b765SMarc-André Lureaufi
3503a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
3504277abf15SJan Vesely
35051badb709SPaolo Bonziniif test "$xen" = "enabled" ; then
35066dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
3507d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
3508582ea95fSMarc-André Lureau  echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
3509582ea95fSMarc-André Lureau  echo "XEN_LIBS=$xen_libs" >> $config_host_mak
3510e37630caSaliguorifi
35115e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
35125e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
35135e9be92dSNicholas Bellingerfi
3514af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then
3515af3bba76SPaolo Bonzini  echo "CONFIG_VHOST_NET=y" >> $config_host_mak
3516af3bba76SPaolo Bonzinifi
3517af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then
351856f41de7SPaolo Bonzini  echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
351903ce5744SNikolay Nikolaevfi
3520108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then
3521108a6481SCindy Lu  echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
3522108a6481SCindy Lufi
3523042cea27SGongleiif test "$vhost_crypto" = "yes" ; then
3524042cea27SGonglei  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
3525042cea27SGongleifi
3526fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then
3527fc0b9b0eSStefan Hajnoczi  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
35285fe97d88SStefano Garzarella  if test "$vhost_user" = "yes" ; then
35295fe97d88SStefano Garzarella    echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
35305fe97d88SStefano Garzarella  fi
3531fc0b9b0eSStefan Hajnoczifi
3532299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then
3533299e6f19SPaolo Bonzini  echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
3534299e6f19SPaolo Bonzinifi
3535e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then
3536e6a74868SMarc-André Lureau  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
3537e6a74868SMarc-André Lureaufi
3538108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then
3539108a6481SCindy Lu  echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
3540108a6481SCindy Lufi
354198fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then
354298fc1adaSDr. David Alan Gilbert  echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
354398fc1adaSDr. David Alan Gilbertfi
3544a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then
3545a40161cbSPaolo Bonzini  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
3546a40161cbSPaolo Bonzinifi
3547e5b46549SRichard Hendersonif test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
3548e5b46549SRichard Henderson  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
3549e5b46549SRichard Hendersonfi
355058d3f3ffSGerd Hoffmann
3551da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
3552da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
3553de2d3005SPaolo Bonzini  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
3554da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
355520ff075bSMichael Wallefi
355620ff075bSMichael Walle
355799f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then
355899f2dbd3SLiang Li  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
355999f2dbd3SLiang Lifi
356099f2dbd3SLiang Li
35616b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then
35626b8cd447SRobert Hoo  echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
35636b8cd447SRobert Hoofi
35646b8cd447SRobert Hoo
356583fb7adfSbellard# XXX: suppress that
35667d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
35672358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
35687d3505c5Sbellardfi
35697d3505c5Sbellard
35703556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
35713556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
35723556c233SPaolo Bonzinifi
357320ff6c80SAnthony Liguori
35747c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
357570c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
357670c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
357770c60c08SStefan Hajnoczielse
357870c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
357970c60c08SStefan Hajnoczifi
3580d0e2fce5SAneesh Kumar K.V
35817d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then
35827d992e4dSPeter Lieven  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
35837d992e4dSPeter Lievenfi
35847d992e4dSPeter Lieven
3585f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then
3586f0d92b56SLongpeng(Mike)  echo "CONFIG_AF_ALG=y" >> $config_host_mak
3587f0d92b56SLongpeng(Mike)fi
3588f0d92b56SLongpeng(Mike)
3589d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
3590d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
3591d83414e1SMarc-André Lureaufi
3592d83414e1SMarc-André Lureau
35930aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
35940aebab04SLingfeng Yang    echo "CONFIG_TSAN=y" >> $config_host_mak
35950aebab04SLingfeng Yangfi
35960aebab04SLingfeng Yang
359776a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
359876a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
359976a347e1SRichard Hendersonfi
360076a347e1SRichard Henderson
3601f540166bSRichard Hendersonif test "$int128" = "yes" ; then
3602f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
3603f540166bSRichard Hendersonfi
3604f540166bSRichard Henderson
36057ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then
36067ebee43eSRichard Henderson  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
36077ebee43eSRichard Hendersonfi
36087ebee43eSRichard Henderson
3609e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then
3610e6cd4bb5SRichard Henderson  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
3611e6cd4bb5SRichard Hendersonfi
3612e6cd4bb5SRichard Henderson
3613ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then
3614ed1701c6SDr. David Alan Gilbert  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
3615ed1701c6SDr. David Alan Gilbertfi
3616ed1701c6SDr. David Alan Gilbert
36173b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
36183cae16dbSPaolo Bonzini  echo 'CONFIG_TPM=y' >> $config_host_mak
36193b8acc11SPaolo Bonzinifi
36203b8acc11SPaolo Bonzini
36212da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
36222da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
3623392fb643SFam Zheng  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
36242da776dbSMichael R. Hinesfi
36252da776dbSMichael R. Hines
362621ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then
362721ab34c9SMarcel Apfelbaum  echo "CONFIG_PVRDMA=y" >> $config_host_mak
362821ab34c9SMarcel Apfelbaumfi
362921ab34c9SMarcel Apfelbaum
3630a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then
3631a6b1d4c0SChanglong Xie  echo "CONFIG_REPLICATION=y" >> $config_host_mak
3632a6b1d4c0SChanglong Xiefi
3633a6b1d4c0SChanglong Xie
3634ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then
3635ba59fb77SPaolo Bonzini  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
3636ba59fb77SPaolo Bonzinifi
3637e0580342SKamil Rytarowski
36382f740136SJeff Codyif test "$bochs" = "yes" ; then
36392f740136SJeff Cody  echo "CONFIG_BOCHS=y" >> $config_host_mak
36402f740136SJeff Codyfi
36412f740136SJeff Codyif test "$cloop" = "yes" ; then
36422f740136SJeff Cody  echo "CONFIG_CLOOP=y" >> $config_host_mak
36432f740136SJeff Codyfi
36442f740136SJeff Codyif test "$dmg" = "yes" ; then
36452f740136SJeff Cody  echo "CONFIG_DMG=y" >> $config_host_mak
36462f740136SJeff Codyfi
36472f740136SJeff Codyif test "$qcow1" = "yes" ; then
36482f740136SJeff Cody  echo "CONFIG_QCOW1=y" >> $config_host_mak
36492f740136SJeff Codyfi
36502f740136SJeff Codyif test "$vdi" = "yes" ; then
36512f740136SJeff Cody  echo "CONFIG_VDI=y" >> $config_host_mak
36522f740136SJeff Codyfi
36532f740136SJeff Codyif test "$vvfat" = "yes" ; then
36542f740136SJeff Cody  echo "CONFIG_VVFAT=y" >> $config_host_mak
36552f740136SJeff Codyfi
36562f740136SJeff Codyif test "$qed" = "yes" ; then
36572f740136SJeff Cody  echo "CONFIG_QED=y" >> $config_host_mak
36582f740136SJeff Codyfi
36592f740136SJeff Codyif test "$parallels" = "yes" ; then
36602f740136SJeff Cody  echo "CONFIG_PARALLELS=y" >> $config_host_mak
36612f740136SJeff Codyfi
36622f740136SJeff Cody
366340e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
366440e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
366526fffe29SEmilio G. Cota    # Copy the export object list to the build dir
366626fffe29SEmilio G. Cota    if test "$ld_dynamic_list" = "yes" ; then
366726fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
366826fffe29SEmilio G. Cota	ld_symbols=qemu-plugins-ld.symbols
366926fffe29SEmilio G. Cota	cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
367026fffe29SEmilio G. Cota    elif test "$ld_exported_symbols_list" = "yes" ; then
367126fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
367226fffe29SEmilio G. Cota	ld64_symbols=qemu-plugins-ld64.symbols
367326fffe29SEmilio G. Cota	echo "# Automatically generated by configure - do not modify" > $ld64_symbols
367426fffe29SEmilio G. Cota	grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
367526fffe29SEmilio G. Cota	    sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
367626fffe29SEmilio G. Cota    else
367726fffe29SEmilio G. Cota	error_exit \
367826fffe29SEmilio G. Cota	    "If \$plugins=yes, either \$ld_dynamic_list or " \
367926fffe29SEmilio G. Cota	    "\$ld_exported_symbols_list should have been set to 'yes'."
368026fffe29SEmilio G. Cota    fi
368140e8c6f4SAlex Bennéefi
368240e8c6f4SAlex Bennée
3683f48e590aSAlex Bennéeif test -n "$gdb_bin"; then
3684b1863cccSAlex Bennée    gdb_version=$($gdb_bin --version | head -n 1)
3685d6a66c81SAlex Bennée    if version_ge ${gdb_version##* } 9.1; then
3686f48e590aSAlex Bennée        echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
3687f48e590aSAlex Bennée    fi
3688b1863cccSAlex Bennéefi
3689f48e590aSAlex Bennée
369054e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then
369154e7aac0SAlexey Krasikov  echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
369254e7aac0SAlexey Krasikovfi
369354e7aac0SAlexey Krasikov
369498ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
3695804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
3696c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
369739d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
3698a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
369909e93326SPaolo Bonziniecho "NINJA=$ninja" >> $config_host_mak
3700804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
3701433de74cSBastian Koppelmannecho "HOST_CC=$host_cc" >> $config_host_mak
3702a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
3703859aef02SPaolo Bonzini  echo "CONFIG_IASL=$iasl" >> $config_host_mak
3704a31a8642SMichael S. Tsirkinfi
3705804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
3706cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak
37075f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak
37083dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
3709804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
3710804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
371146eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
3712a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
371311cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
3714a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
3715a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak
37168a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
3717e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
3718804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
3719f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak
3720804edf29SJuan Quintela
3721b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then
3722b767d257SMarek Marczykowski-Górecki  echo "CONFIG_RNG_NONE=y" >> $config_host_mak
3723b767d257SMarek Marczykowski-Góreckifi
3724b767d257SMarek Marczykowski-Górecki
37256efd7517SPeter Maydell# use included Linux headers
37266efd7517SPeter Maydellif test "$linux" = "yes" ; then
3727a307beb6SAndreas Färber  mkdir -p linux-headers
37286efd7517SPeter Maydell  case "$cpu" in
3729c72b26ecSRichard Henderson  i386|x86_64|x32)
373008312a63SPeter Maydell    linux_arch=x86
37316efd7517SPeter Maydell    ;;
3732f8378accSRichard Henderson  ppc|ppc64|ppc64le)
373308312a63SPeter Maydell    linux_arch=powerpc
37346efd7517SPeter Maydell    ;;
37356efd7517SPeter Maydell  s390x)
373608312a63SPeter Maydell    linux_arch=s390
373708312a63SPeter Maydell    ;;
37381f080313SClaudio Fontana  aarch64)
37391f080313SClaudio Fontana    linux_arch=arm64
37401f080313SClaudio Fontana    ;;
3741222e7d11SSanjay Lal  mips64)
3742222e7d11SSanjay Lal    linux_arch=mips
3743222e7d11SSanjay Lal    ;;
374408312a63SPeter Maydell  *)
374508312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
374608312a63SPeter Maydell    linux_arch="$cpu"
37476efd7517SPeter Maydell    ;;
37486efd7517SPeter Maydell  esac
374908312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
375008312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
375108312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
375208312a63SPeter Maydell    fi
37536efd7517SPeter Maydellfi
37546efd7517SPeter Maydell
375597a847bcSbellardfor target in $target_list; do
375697a847bcSbellard    target_dir="$target"
375757a93f16SPhilippe Mathieu-Daudé    target_name=$(echo $target | cut -d '-' -f 1)$EXESUF
375897a847bcSbellard    mkdir -p $target_dir
3759fdb75aefSPaolo Bonzini    case $target in
3760fdb75aefSPaolo Bonzini        *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
3761fdb75aefSPaolo Bonzini        *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
37622408a527Saurel32    esac
376356aebc89Spbrookdone
37647d13299dSbellard
3765765686d6SPaolo Bonziniecho "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
3766fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then
3767fdb75aefSPaolo Bonzini  echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
3768fdb75aefSPaolo Bonzinifi
3769a540f158SPeter Crosthwaite
3770a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
3771a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
3772ab318051SMarc-André Lureau  echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
3773a99d57bbSWanlong Gaofi
3774a99d57bbSWanlong Gao
3775fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
3776fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
3777fd0e6053SJohn Snowfi
3778fd0e6053SJohn Snow
37791e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
37801e4f6065SDaniele Buono  echo "CONFIG_SAFESTACK=y" >> $config_host_mak
37811e4f6065SDaniele Buonofi
37821e4f6065SDaniele Buono
3783e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now.
3784e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree;
3785e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree
3786e29e5c6eSPeter Maydell# (these can be both files and directories).
3787e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This
3788e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is
3789e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun
3790e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and
3791e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own
3792e29e5c6eSPeter Maydell# directory and symlink the directory instead.
379309db9b9dSGerd Hoffmann# UNLINK is used to remove symlinks from older development versions
379409db9b9dSGerd Hoffmann# that might get into the way when doing "git update" without doing
379509db9b9dSGerd Hoffmann# a "make distclean" in between.
37969d49bcf6SMarkus ArmbrusterDIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
37971cf4323eSThomas HuthDIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
3798b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi"
3799744a928cSAlexey KardashevskiyDIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
38008db2a4fdSGerd HoffmannDIRS="$DIRS roms/seabios"
3801c17a386bSAlex BennéeDIRS="$DIRS contrib/plugins/"
38022038f8c8SPaolo BonziniLINKS="Makefile"
38033941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target"
3804ddcf607fSGerd HoffmannLINKS="$LINKS pc-bios/optionrom/Makefile"
3805e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile"
38068db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile"
3807e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp"
3808e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
3809bbbd9b6eSWillian RampazzoLINKS="$LINKS tests/avocado tests/data"
381039950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check"
38118f8fd9edSCleber RosaLINKS="$LINKS python"
3812c17a386bSAlex BennéeLINKS="$LINKS contrib/plugins/Makefile "
381309db9b9dSGerd HoffmannUNLINK="pc-bios/keymaps"
3814753d11f2SRichard Hendersonfor bios_file in \
3815753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
38163a631b8eSBin Meng    $source_path/pc-bios/*.elf \
3817225a9ab8SAlexey Kardashevskiy    $source_path/pc-bios/*.lid \
3818753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
3819753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
3820e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
3821753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
38224e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
382326ce90fdSLaszlo Ersek    $source_path/pc-bios/edk2-*.fd.bz2 \
3824cd946e5cSJohn Arbuckle    $source_path/pc-bios/palcode-* \
3825cd946e5cSJohn Arbuckle    $source_path/pc-bios/qemu_vga.ndrv
3826cd946e5cSJohn Arbuckle
3827753d11f2SRichard Hendersondo
3828e29e5c6eSPeter Maydell    LINKS="$LINKS pc-bios/$(basename $bios_file)"
38297ea78b74SJan Kiszkadone
3830d1807a4fSPaolo Bonzinimkdir -p $DIRS
3831e29e5c6eSPeter Maydellfor f in $LINKS ; do
38320f4d8894SPaolo Bonzini    if [ -e "$source_path/$f" ]; then
3833f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
3834f9245e10SPeter Maydell    fi
38357d13299dSbellarddone
383609db9b9dSGerd Hoffmannfor f in $UNLINK ; do
383709db9b9dSGerd Hoffmann    if [ -L "$f" ]; then
383809db9b9dSGerd Hoffmann        rm -f "$f"
383909db9b9dSGerd Hoffmann    fi
384009db9b9dSGerd Hoffmanndone
38411ad2134fSPaul Brook
38422038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do
38432038f8c8SPaolo Bonzini  export $i
38442038f8c8SPaolo Bonzinidone
3845de6d7e6bSAlex Bennéeexport target_list source_path use_containers ARCH
38462038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh)
38472038f8c8SPaolo Bonzini
3848c34ebfdcSAnthony Liguori# temporary config to build submodules
38498db2a4fdSGerd Hoffmannfor rom in seabios; do
3850c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
385137116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
3852c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
3853cdbd727cSRichard Henderson    echo "AS=$as" >> $config_mak
38545f6f0e27SRichard Henderson    echo "CCAS=$ccas" >> $config_mak
3855c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
3856c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
38573dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
3858c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
3859a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
3860c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
38619f81aeb5SAlistair Francis    echo "RANLIB=$ranlib" >> $config_mak
3862c34ebfdcSAnthony Liguoridone
3863c34ebfdcSAnthony Liguori
386498409991SHelge Konetzkaconfig_mak=pc-bios/optionrom/config.mak
386598409991SHelge Konetzkaecho "# Automatically generated by configure - do not modify" > $config_mak
386698409991SHelge Konetzkaecho "TOPSRC_DIR=$source_path" >> $config_mak
386798409991SHelge Konetzka
3868a5665051SPaolo Bonziniif test "$skip_meson" = no; then
3869fc929892SMarc-André Lureau  cross="config-meson.cross.new"
3870fc929892SMarc-André Lureau  meson_quote() {
3871ac7ebcc5SPaolo Bonzini    test $# = 0 && return
387247b30835SPaolo Bonzini    echo "'$(echo $* | sed "s/ /','/g")'"
3873fc929892SMarc-André Lureau  }
3874fc929892SMarc-André Lureau
3875fc929892SMarc-André Lureau  echo "# Automatically generated by configure - do not modify" > $cross
3876fc929892SMarc-André Lureau  echo "[properties]" >> $cross
3877d1d5e9eeSAlex Bennée
3878d1d5e9eeSAlex Bennée  # unroll any custom device configs
3879d1d5e9eeSAlex Bennée  for a in $device_archs; do
3880d1d5e9eeSAlex Bennée      eval "c=\$devices_${a}"
3881d1d5e9eeSAlex Bennée      echo "${a}-softmmu = '$c'" >> $cross
3882d1d5e9eeSAlex Bennée  done
3883d1d5e9eeSAlex Bennée
3884fc929892SMarc-André Lureau  test -z "$cxx" && echo "link_language = 'c'" >> $cross
388547b30835SPaolo Bonzini  echo "[built-in options]" >> $cross
3886a2866660SPaolo Bonzini  echo "c_args = [$(meson_quote $CFLAGS $EXTRA_CFLAGS)]" >> $cross
3887a2866660SPaolo Bonzini  echo "cpp_args = [$(meson_quote $CXXFLAGS $EXTRA_CXXFLAGS)]" >> $cross
3888a2866660SPaolo Bonzini  echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross
3889a2866660SPaolo Bonzini  echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross
3890fc929892SMarc-André Lureau  echo "[binaries]" >> $cross
38914dba2789SPaolo Bonzini  echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
38924dba2789SPaolo Bonzini  test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
38934dba2789SPaolo Bonzini  test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
389447b30835SPaolo Bonzini  echo "ar = [$(meson_quote $ar)]" >> $cross
389547b30835SPaolo Bonzini  echo "nm = [$(meson_quote $nm)]" >> $cross
389647b30835SPaolo Bonzini  echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
389747b30835SPaolo Bonzini  echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
3898e8178514SPaolo Bonzini  if has $sdl2_config; then
389947b30835SPaolo Bonzini    echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
3900e8178514SPaolo Bonzini  fi
390147b30835SPaolo Bonzini  echo "strip = [$(meson_quote $strip)]" >> $cross
390247b30835SPaolo Bonzini  echo "windres = [$(meson_quote $windres)]" >> $cross
39033812c0c4SJoelle van Dyne  if test "$cross_compile" = "yes"; then
3904fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
3905fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
3906*ba7c60c2SPaolo Bonzini    echo "system = '$targetos'" >> $cross
3907fc929892SMarc-André Lureau    case "$ARCH" in
3908f6bca9dfSJoelle van Dyne        i386)
3909fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
3910fc929892SMarc-André Lureau            ;;
3911f8bb7e1cSDavid Michael        x86_64|x32)
3912f6bca9dfSJoelle van Dyne            echo "cpu_family = 'x86_64'" >> $cross
3913f6bca9dfSJoelle van Dyne            ;;
3914fc929892SMarc-André Lureau        ppc64le)
3915fc929892SMarc-André Lureau            echo "cpu_family = 'ppc64'" >> $cross
3916fc929892SMarc-André Lureau            ;;
3917fc929892SMarc-André Lureau        *)
3918fc929892SMarc-André Lureau            echo "cpu_family = '$ARCH'" >> $cross
3919fc929892SMarc-André Lureau            ;;
3920fc929892SMarc-André Lureau    esac
3921fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
3922fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
3923fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
3924fc929892SMarc-André Lureau    else
3925fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
3926fc929892SMarc-André Lureau    fi
3927fc929892SMarc-André Lureau  else
3928fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
3929fc929892SMarc-André Lureau  fi
3930fc929892SMarc-André Lureau  mv $cross config-meson.cross
3931fc929892SMarc-André Lureau
3932a5665051SPaolo Bonzini  rm -rf meson-private meson-info meson-logs
393361d63097SPaolo Bonzini  run_meson() {
393409e93326SPaolo Bonzini    NINJA=$ninja $meson setup \
3935d17f305aSPaolo Bonzini        --prefix "$prefix" \
3936d17f305aSPaolo Bonzini        --libdir "$libdir" \
3937d17f305aSPaolo Bonzini        --libexecdir "$libexecdir" \
3938d17f305aSPaolo Bonzini        --bindir "$bindir" \
3939d17f305aSPaolo Bonzini        --includedir "$includedir" \
3940d17f305aSPaolo Bonzini        --datadir "$datadir" \
3941d17f305aSPaolo Bonzini        --mandir "$mandir" \
3942d17f305aSPaolo Bonzini        --sysconfdir "$sysconfdir" \
394316bf7a33SPaolo Bonzini        --localedir "$localedir" \
3944d17f305aSPaolo Bonzini        --localstatedir "$local_statedir" \
39453b4da132SPaolo Bonzini        -Daudio_drv_list=$audio_drv_list \
39463b4da132SPaolo Bonzini        -Ddefault_devices=$default_devices \
3947d17f305aSPaolo Bonzini        -Ddocdir="$docdir" \
394816bf7a33SPaolo Bonzini        -Dqemu_firmwarepath="$firmwarepath" \
394973f3aa37SMarc-André Lureau        -Dqemu_suffix="$qemu_suffix" \
39503b4da132SPaolo Bonzini        -Dsphinx_build="$sphinx_build" \
39513b4da132SPaolo Bonzini        -Dtrace_file="$trace_file" \
3952a5665051SPaolo Bonzini        -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
3953a5665051SPaolo Bonzini        -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
3954a5665051SPaolo Bonzini        -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
3955a5665051SPaolo Bonzini        -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
3956da6d48b9SMarc-André Lureau        -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
3957bf0e56a3SMarc-André Lureau        -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
39583b4da132SPaolo Bonzini        -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
39593b4da132SPaolo Bonzini        -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
3960537b7248SPaolo Bonzini        $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
3961332008e0SThomas Huth        $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
396261d63097SPaolo Bonzini        "$@" $cross_arg "$PWD" "$source_path"
396361d63097SPaolo Bonzini  }
396461d63097SPaolo Bonzini  eval run_meson $meson_options
3965a5665051SPaolo Bonzini  if test "$?" -ne 0 ; then
3966a5665051SPaolo Bonzini      error_exit "meson setup failed"
3967a5665051SPaolo Bonzini  fi
3968699d3884SPaolo Bonzinielse
3969699d3884SPaolo Bonzini  if test -f meson-private/cmd_line.txt; then
3970699d3884SPaolo Bonzini    # Adjust old command line options whose type was changed
3971699d3884SPaolo Bonzini    # Avoids having to use "setup --wipe" when Meson is upgraded
3972699d3884SPaolo Bonzini    perl -i -ne '
3973699d3884SPaolo Bonzini      s/^gettext = true$/gettext = auto/;
3974699d3884SPaolo Bonzini      s/^gettext = false$/gettext = disabled/;
3975654d6b04SPaolo Bonzini      /^b_staticpic/ && next;
3976699d3884SPaolo Bonzini      print;' meson-private/cmd_line.txt
3977699d3884SPaolo Bonzini  fi
3978a5665051SPaolo Bonzinifi
3979a5665051SPaolo Bonzini
39802d838d9bSAlex Bennéeif test -n "${deprecated_features}"; then
39812d838d9bSAlex Bennée    echo "Warning, deprecated features enabled."
3982a476b216SMao Zhongyi    echo "Please see docs/about/deprecated.rst"
39832d838d9bSAlex Bennée    echo "  features: ${deprecated_features}"
39842d838d9bSAlex Bennéefi
39852d838d9bSAlex Bennée
3986e0447a83SThomas Huth# Create list of config switches that should be poisoned in common code...
3987e0447a83SThomas Huth# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
398854b0306eSThomas Huthtarget_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
398954b0306eSThomas Huthif test -n "$target_configs_h" ; then
3990e0447a83SThomas Huth    sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
3991e0447a83SThomas Huth        -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
399254b0306eSThomas Huth        $target_configs_h | sort -u > config-poison.h
399354b0306eSThomas Huthelse
399454b0306eSThomas Huth    :> config-poison.h
399554b0306eSThomas Huthfi
3996e0447a83SThomas Huth
3997dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
3998dc655404SMichael S. Tsirkincat <<EOD >config.status
3999dc655404SMichael S. Tsirkin#!/bin/sh
4000dc655404SMichael S. Tsirkin# Generated by configure.
4001dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
4002dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
4003dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
4004dc655404SMichael S. TsirkinEOD
4005e811da7fSDaniel P. Berrangé
4006e811da7fSDaniel P. Berrangépreserve_env() {
4007e811da7fSDaniel P. Berrangé    envname=$1
4008e811da7fSDaniel P. Berrangé
4009e811da7fSDaniel P. Berrangé    eval envval=\$$envname
4010e811da7fSDaniel P. Berrangé
4011e811da7fSDaniel P. Berrangé    if test -n "$envval"
4012e811da7fSDaniel P. Berrangé    then
4013e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
4014e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
4015e811da7fSDaniel P. Berrangé    else
4016e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
4017e811da7fSDaniel P. Berrangé    fi
4018e811da7fSDaniel P. Berrangé}
4019e811da7fSDaniel P. Berrangé
4020e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
4021e811da7fSDaniel P. Berrangé# features/build target configure will detect
4022e811da7fSDaniel P. Berrangépreserve_env AR
4023e811da7fSDaniel P. Berrangépreserve_env AS
4024e811da7fSDaniel P. Berrangépreserve_env CC
4025e811da7fSDaniel P. Berrangépreserve_env CPP
40268009da03SPaolo Bonzinipreserve_env CFLAGS
4027e811da7fSDaniel P. Berrangépreserve_env CXX
40288009da03SPaolo Bonzinipreserve_env CXXFLAGS
4029e811da7fSDaniel P. Berrangépreserve_env INSTALL
4030e811da7fSDaniel P. Berrangépreserve_env LD
40318009da03SPaolo Bonzinipreserve_env LDFLAGS
4032e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
4033e811da7fSDaniel P. Berrangépreserve_env LIBTOOL
4034e811da7fSDaniel P. Berrangépreserve_env MAKE
4035e811da7fSDaniel P. Berrangépreserve_env NM
4036e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
4037e811da7fSDaniel P. Berrangépreserve_env PATH
4038e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
4039e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
4040e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
4041e811da7fSDaniel P. Berrangépreserve_env PYTHON
4042e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
4043e811da7fSDaniel P. Berrangépreserve_env SMBD
4044e811da7fSDaniel P. Berrangépreserve_env STRIP
4045e811da7fSDaniel P. Berrangépreserve_env WINDRES
4046e811da7fSDaniel P. Berrangé
4047dc655404SMichael S. Tsirkinprintf "exec" >>config.status
4048a5665051SPaolo Bonzinifor i in "$0" "$@"; do
4049835af899SPaolo Bonzini  test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
4050a5665051SPaolo Bonzinidone
4051cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
4052dc655404SMichael S. Tsirkinchmod +x config.status
4053dc655404SMichael S. Tsirkin
40548cd05ab6SPeter Maydellrm -r "$TMPDIR1"
4055